mirror of
https://github.com/pfsense/pfsense.git
synced 2025-10-26 11:38:35 +00:00
Reinitialize the captive portal database for a zone if it is corrupt/unreadable. Fixes #4904
This commit is contained in:
parent
f688185c9f
commit
79e46ebda9
@ -1404,16 +1404,30 @@ function radius($username, $password, $clientip, $clientmac, $type, $radiusctx =
|
||||
function captiveportal_opendb() {
|
||||
global $g, $cpzone;
|
||||
|
||||
$DB = new SQLite3("{$g['vardb_path']}/captiveportal{$cpzone}.db");
|
||||
if (! $DB->exec("CREATE TABLE IF NOT EXISTS captiveportal (" .
|
||||
"allow_time INTEGER, pipeno INTEGER, ip TEXT, mac TEXT, username TEXT, " .
|
||||
"sessionid TEXT, bpassword TEXT, session_timeout INTEGER, idle_timeout INTEGER, " .
|
||||
"session_terminate_time INTEGER, interim_interval INTEGER, radiusctx TEXT); " .
|
||||
"CREATE UNIQUE INDEX IF NOT EXISTS idx_active ON captiveportal (sessionid, username); " .
|
||||
"CREATE INDEX IF NOT EXISTS user ON captiveportal (username); " .
|
||||
"CREATE INDEX IF NOT EXISTS ip ON captiveportal (ip); " .
|
||||
"CREATE INDEX IF NOT EXISTS starttime ON captiveportal (allow_time)")) {
|
||||
captiveportal_syslog("Error during table {$cpzone} creation. Error message: {$DB->lastErrorMsg()}");
|
||||
$db_path = "{$g['vardb_path']}/captiveportal{$cpzone}.db";
|
||||
$createquery = "CREATE TABLE IF NOT EXISTS captiveportal (" .
|
||||
"allow_time INTEGER, pipeno INTEGER, ip TEXT, mac TEXT, username TEXT, " .
|
||||
"sessionid TEXT, bpassword TEXT, session_timeout INTEGER, idle_timeout INTEGER, " .
|
||||
"session_terminate_time INTEGER, interim_interval INTEGER, radiusctx TEXT); " .
|
||||
"CREATE UNIQUE INDEX IF NOT EXISTS idx_active ON captiveportal (sessionid, username); " .
|
||||
"CREATE INDEX IF NOT EXISTS user ON captiveportal (username); " .
|
||||
"CREATE INDEX IF NOT EXISTS ip ON captiveportal (ip); " .
|
||||
"CREATE INDEX IF NOT EXISTS starttime ON captiveportal (allow_time)";
|
||||
|
||||
$DB = new SQLite3($db_path);
|
||||
if (! $DB->exec($createquery)) {
|
||||
captiveportal_syslog("Error during table {$cpzone} creation. Error message: {$DB->lastErrorMsg()}. Resetting and trying again.");
|
||||
|
||||
/* If unable to initialize the database, reset and try again. */
|
||||
$DB->close();
|
||||
unset($DB);
|
||||
unlink_if_exists($db_path);
|
||||
$DB = new SQLite3($db_path);
|
||||
if ($DB->exec($createquery)) {
|
||||
captiveportal_syslog("Successfully reinitialized tables for {$cpzone} -- database has been reset.");
|
||||
} else {
|
||||
captiveportal_syslog("Still unable to create tables for {$cpzone}. Error message: {$DB->lastErrorMsg()}. Remove the database file manually and try again.");
|
||||
}
|
||||
}
|
||||
|
||||
return $DB;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user