From 798e827562e43143b183c14b917d9eab1fc044ee Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Tue, 24 Jan 2023 18:09:55 +0100 Subject: [PATCH] Services: Captive Portal - enforce a database repair if an sqlite3.DatabaseError is triggered during normal operation. --- .../scripts/OPNsense/CaptivePortal/cp-background-process.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/opnsense/scripts/OPNsense/CaptivePortal/cp-background-process.py b/src/opnsense/scripts/OPNsense/CaptivePortal/cp-background-process.py index daf9a400b..bf58b199d 100755 --- a/src/opnsense/scripts/OPNsense/CaptivePortal/cp-background-process.py +++ b/src/opnsense/scripts/OPNsense/CaptivePortal/cp-background-process.py @@ -33,6 +33,7 @@ import time import syslog import traceback import subprocess +import sqlite3 sys.path.insert(0, "/usr/local/opnsense/site-python") from lib import Config from lib.db import DB @@ -236,6 +237,11 @@ def main(): break except SystemExit: break + except sqlite3.DatabaseError: + # try to repair a broken sqlite database if it apears to be broken after using a table + syslog.syslog(syslog.LOG_ERR, "Forcefully repair database (%s)" % traceback.format_exc().replace("\n", " ")) + check_and_repair('/var/captiveportal/captiveportal.sqlite', force_repair=True) + time.sleep(60) except: syslog.syslog(syslog.LOG_ERR, traceback.format_exc()) print(traceback.format_exc())