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