]> git.joonet.de Git - adminer.git/commitdiff
Store database to permanent login
authorJakub Vrana <jakub@vrana.cz>
Sun, 9 Sep 2012 04:29:16 +0000 (21:29 -0700)
committerJakub Vrana <jakub@vrana.cz>
Sun, 9 Sep 2012 04:30:30 +0000 (21:30 -0700)
adminer/include/adminer.inc.php
adminer/include/auth.inc.php
changes.txt

index 7a7954573bfb6d88015bda78d4ac89b1301405f7..aa8d3b4f40b69b17b0e8c3771f4a02f509264a73 100644 (file)
@@ -801,7 +801,10 @@ DROP PROCEDURE adminer_alter;
                                                                echo "<p id='logins' onmouseover='menuOver(this, event);' onmouseout='menuOut(this);'>\n";
                                                                $first = false;
                                                        }
-                                                       echo "<a href='" . h(auth_url($driver, $server, $username)) . "'>($drivers[$driver]) " . h($username . ($server != "" ? "@$server" : "")) . "</a><br>\n";
+                                                       $dbs = $_SESSION["db"][$driver][$server][$username];
+                                                       foreach (($dbs ? array_keys($dbs) : array("")) as $db) {
+                                                               echo "<a href='" . h(auth_url($driver, $server, $username, $db)) . "'>($drivers[$driver]) " . h($username . ($server != "" ? "@$server" : "") . ($db != "" ? " - $db" : "")) . "</a><br>\n";
+                                                       }
                                                }
                                        }
                                }
index 6a07e26ed4c3853560533eb3e45be9e86949d556..43a55dff2a4b9f4c25860eaa38e02acd93174678 100644 (file)
@@ -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) {
index f8e1a61d1e06f987d4942317e98e0a9316ebabdb..1e43d8de5a9c0c27c458ae59a3fb247edc35e16f 100644 (file)
@@ -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