From 77192d84b1ec16660feafd3b73f9fe0704bdbc09 Mon Sep 17 00:00:00 2001 From: Mark Schouten Date: Wed, 19 Oct 2016 17:28:16 +0200 Subject: [PATCH] Don't close the database connection and make it global. Also, honour the account that is set in pdns, unless its empty --- includes/misc.inc.php | 17 +++++++---------- zones.php | 7 +++---- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/includes/misc.inc.php b/includes/misc.inc.php index a818cb2..e56b55d 100644 --- a/includes/misc.inc.php +++ b/includes/misc.inc.php @@ -85,10 +85,12 @@ function string_ends_with($string, $suffix) } function get_db() { - global $authdb; + global $authdb, $db; - $db = new SQLite3($authdb, SQLITE3_OPEN_READWRITE); - $db->exec('PRAGMA foreign_keys = 1'); + if (!isset($db)) { + $db = new SQLite3($authdb, SQLITE3_OPEN_READWRITE); + $db->exec('PRAGMA foreign_keys = 1'); + } return $db; } @@ -110,7 +112,6 @@ function get_user_info($u) { $q->bindValue(1, $u); $result = $q->execute(); $userinfo = $result->fetchArray(SQLITE3_ASSOC); - $db->close(); return $userinfo; } @@ -125,7 +126,6 @@ function do_db_auth($u, $p) { $q->bindValue(1, $u); $result = $q->execute(); $userinfo = $result->fetchArray(SQLITE3_ASSOC); - $db->close(); if ($userinfo and $userinfo['password'] and (crypt($p, $userinfo['password']) === $userinfo['password'])) { return TRUE; @@ -149,7 +149,6 @@ function add_user($username, $isadmin = FALSE, $password = '') { $q->bindValue(2, $password, SQLITE3_TEXT); $q->bindValue(3, (int)(bool) $isadmin, SQLITE3_INTEGER); $ret = $q->execute(); - $db->close(); if ($isadmin) { writelog("Added user $username as admin."); @@ -187,7 +186,6 @@ function update_user($id, $isadmin, $password) { writelog("Updating settings for $username. Admin: ".(int)(bool)$isadmin); } $ret = $q->execute(); - $db->close(); return $ret; } @@ -205,7 +203,6 @@ function delete_user($id) { $q = $db->prepare('DELETE FROM users WHERE id = ?'); $q->bindValue(1, $id, SQLITE3_INTEGER); $ret = $q->execute(); - $db->close(); writelog("Deleted user " . $userinfo['emailaddress'] . "."); return $ret; @@ -241,6 +238,8 @@ function jtable_respond($records, $method = 'multiple', $msg = 'Undefined errorm $jTableResult['RecordCount'] = count($records); } + $db = get_db(); + $db->close(); header('Content-Type: application/json'); print json_encode($jTableResult); exit(0); @@ -290,7 +289,6 @@ function clearlogs() { $db = get_db(); $q = $db->query('DELETE FROM logs;'); - $db->close(); writelog("Logtable truncated."); } @@ -368,7 +366,6 @@ function writelog($line, $user=False) { $q->bindValue(':user', $user, SQLITE3_TEXT); $q->bindValue(':log', $line, SQLITE3_TEXT); $q->execute(); - $db->close(); } catch (Exception $e) { return jtable_respond(null, 'error', $e->getMessage()); } diff --git a/zones.php b/zones.php index 161ac18..50e255e 100644 --- a/zones.php +++ b/zones.php @@ -112,7 +112,6 @@ function add_db_zone($zonename, $accountname) { $q->bindValue(1, $zonename, SQLITE3_TEXT); $q->bindValue(2, $accountname, SQLITE3_TEXT); $q->execute(); - $db->close(); } function delete_db_zone($zonename) { @@ -123,7 +122,6 @@ function delete_db_zone($zonename) { $q = $db->prepare("DELETE FROM zones WHERE zone = ?"); $q->bindValue(1, $zonename, SQLITE3_TEXT); $q->execute(); - $db->close(); } function get_zone_account($zonename, $default) { @@ -135,7 +133,6 @@ function get_zone_account($zonename, $default) { $q->bindValue(1, $zonename, SQLITE3_TEXT); $result = $q->execute(); $zoneinfo = $result->fetchArray(SQLITE3_ASSOC); - $db->close(); if (isset($zoneinfo['emailaddress']) && $zoneinfo['emailaddress'] != null ) { return $zoneinfo['emailaddress']; } @@ -165,7 +162,9 @@ case "listslaves": foreach ($api->listzones($q) as $sresult) { $zone = new Zone(); $zone->parse($sresult); - $zone->setAccount(get_zone_account($zone->name, 'admin')); + if ($zone->account == '') { + $zone->setAccount(get_zone_account($zone->name, 'admin')); + } if (!check_account($zone)) continue;