]> git.joonet.de Git - adminer.git/commitdiff
Remove definer from routine and event
authorJakub Vrana <jakub@vrana.cz>
Thu, 9 Aug 2012 16:39:12 +0000 (09:39 -0700)
committerJakub Vrana <jakub@vrana.cz>
Thu, 9 Aug 2012 16:39:12 +0000 (09:39 -0700)
adminer/dump.inc.php
adminer/include/adminer.inc.php
adminer/include/editing.inc.php

index 0b86b4cce6a00430a2507c67b056f05b80a10f25..5f10bb8f3e6cd64d210aed209fbf2905a5875784 100644 (file)
@@ -48,14 +48,14 @@ SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
                                        foreach (array("FUNCTION", "PROCEDURE") as $routine) {
                                                foreach (get_rows("SHOW $routine STATUS WHERE Db = " . q($db), null, "-- ") as $row) {
                                                        $out .= ($style != 'DROP+CREATE' ? "DROP $routine IF EXISTS " . idf_escape($row["Name"]) . ";;\n" : "")
-                                                       . $connection->result("SHOW CREATE $routine " . idf_escape($row["Name"]), 2) . ";;\n\n";
+                                                       . remove_definer($connection->result("SHOW CREATE $routine " . idf_escape($row["Name"]), 2)) . ";;\n\n";
                                                }
                                        }
                                }
                                if ($_POST["events"]) {
                                        foreach (get_rows("SHOW EVENTS", null, "-- ") as $row) {
                                                $out .= ($style != 'DROP+CREATE' ? "DROP EVENT IF EXISTS " . idf_escape($row["Name"]) . ";;\n" : "")
-                                               . $connection->result("SHOW CREATE EVENT " . idf_escape($row["Name"]), 3) . ";;\n\n";
+                                               . remove_definer($connection->result("SHOW CREATE EVENT " . idf_escape($row["Name"]), 3)) . ";;\n\n";
                                        }
                                }
                                if ($out) {
index edfdeeee95870c7513084f235feebd6a53594ca3..93cd7a35be240ee48126da55e487bfd4603d0a45 100644 (file)
@@ -574,7 +574,7 @@ username.form['auth[driver]'].onchange();
                                }
                                if ($is_view) {
                                        // remove DEFINER with current user
-                                       $create = preg_replace('~^([A-Z =]+) DEFINER=`' . preg_replace('~@(.*)~', '`@`(%|\\1)', logged_user()) . '`~', '\\1', $create); //! proper escaping of user
+                                       $create = remove_definer($create);
                                }
                                echo ($style != "CREATE+ALTER" ? $create : ($is_view ? substr_replace($create, " OR REPLACE", 6, 0) : substr_replace($create, " IF NOT EXISTS", 12, 0))) . ";\n\n";
                        }
index 600cd354e49bdb9cce29b7f6a0b869cdcc5edfc0..a9337568031c1007ee841327f65d7f68fd6616e1 100644 (file)
@@ -357,6 +357,14 @@ function drop_create($drop, $create, $location, $message_drop, $message_alter, $
        return $dropped;
 }
 
+/** Remove current user definer from SQL command
+ * @param string
+ * @return string
+ */
+function remove_definer($query) {
+       return preg_replace('~^([A-Z =]+) DEFINER=`' . preg_replace('~@(.*)~', '`@`(%|\\1)', logged_user()) . '`~', '\\1', $query); //! proper escaping of user
+}
+
 /** Get string to add a file in TAR
 * @param string
 * @param string