diff --git a/adminer/include/adminer.inc.php b/adminer/include/adminer.inc.php index 7a795457..aa8d3b4f 100644 --- a/adminer/include/adminer.inc.php +++ b/adminer/include/adminer.inc.php @@ -801,7 +801,10 @@ DROP PROCEDURE adminer_alter; echo "

\n"; $first = false; } - echo "($drivers[$driver]) " . h($username . ($server != "" ? "@$server" : "")) . "
\n"; + $dbs = $_SESSION["db"][$driver][$server][$username]; + foreach (($dbs ? array_keys($dbs) : array("")) as $db) { + echo "($drivers[$driver]) " . h($username . ($server != "" ? "@$server" : "") . ($db != "" ? " - $db" : "")) . "
\n"; + } } } } diff --git a/adminer/include/auth.inc.php b/adminer/include/auth.inc.php index 6a07e26e..43a55dff 100644 --- a/adminer/include/auth.inc.php +++ b/adminer/include/auth.inc.php @@ -18,8 +18,9 @@ $auth = $_POST["auth"]; if ($auth) { session_regenerate_id(); // defense against session fixation $_SESSION["pwds"][$auth["driver"]][$auth["server"]][$auth["username"]] = $auth["password"]; + $_SESSION["db"][$auth["driver"]][$auth["server"]][$auth["username"]][$auth["db"]] = true; if ($auth["permanent"]) { - $key = base64_encode($auth["driver"]) . "-" . base64_encode($auth["server"]) . "-" . base64_encode($auth["username"]); + $key = base64_encode($auth["driver"]) . "-" . base64_encode($auth["server"]) . "-" . base64_encode($auth["username"]) . "-" . base64_encode($auth["db"]); $private = $adminer->permanentLogin(); $permanent[$key] = "$key:" . base64_encode($private ? encrypt_string($auth["password"], $private) : ""); cookie("adminer_permanent", implode(" ", $permanent)); @@ -38,7 +39,7 @@ if ($auth) { page_footer("db"); exit; } else { - foreach (array("pwds", "dbs", "queries") as $key) { + foreach (array("pwds", "db", "dbs", "queries") as $key) { set_session($key, null); } unset_permanent(); @@ -49,18 +50,21 @@ if ($auth) { $private = $adminer->permanentLogin(); // try to decode even if not set foreach ($permanent as $key => $val) { list(, $cipher) = explode(":", $val); - list($driver, $server, $username) = array_map('base64_decode', explode("-", $key)); + list($driver, $server, $username, $db) = array_map('base64_decode', explode("-", $key)); $_SESSION["pwds"][$driver][$server][$username] = decrypt_string(base64_decode($cipher), $private); + $_SESSION["db"][$driver][$server][$username][$db] = true; } } function unset_permanent() { global $permanent; - $key = base64_encode(DRIVER) . "-" . base64_encode(SERVER) . "-" . base64_encode($_GET["username"]); - if ($permanent[$key]) { - unset($permanent[$key]); - cookie("adminer_permanent", implode(" ", $permanent)); + foreach ($permanent as $key => $val) { + list($driver, $server, $username) = array_map('base64_decode', explode("-", $key)); + if ($driver == DRIVER && $server == SERVER && $db == $_GET["username"]) { + unset($permanent[$key]); + } } + cookie("adminer_permanent", implode(" ", $permanent)); } function auth_error($exception = null) { diff --git a/changes.txt b/changes.txt index f8e1a61d..1e43d8de 100644 --- a/changes.txt +++ b/changes.txt @@ -4,6 +4,7 @@ Edit strings with \n in textarea Time out long running database list and select count Use VALUES() in INSERT+UPDATE export Style logout button as link +Store selected database to permanent login Ctrl+click and Shift+click on button opens form to a blank window Switch language by POST Compress translations