From 5b8608657ff887288c7cbaf33a0659a8faecea70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Mon, 20 Jun 2016 18:20:57 +0200 Subject: [PATCH 1/3] Simplify finding largest table MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We really do not need intermediate array for that. Signed-off-by: Michal Čihař --- libraries/DbQbe.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/libraries/DbQbe.php b/libraries/DbQbe.php index 6aeeee76ea..fdd785fd8a 100644 --- a/libraries/DbQbe.php +++ b/libraries/DbQbe.php @@ -1470,17 +1470,21 @@ class DbQbe // Of course we only want to check each table once $checked_tables = $candidate_columns; $tsize = array(); - $csize = array(); + $maxsize = -1; + $result = ''; foreach ($candidate_columns as $table) { if ($checked_tables[$table] != 1) { $_table = new Table($table, $this->_db); $tsize[$table] = $_table->countRecords(); $checked_tables[$table] = 1; } - $csize[$table] = $tsize[$table]; + if ($tsize[$table] > $maxsize) { + $maxsize = $tsize[$table]; + $result = $table; + } } // Return largest table - return array_search(max($csize), $csize); + return $result; } /** From e50e37b51db956bcb34258491548bd7d04423711 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Wed, 22 Jun 2016 11:35:04 +0200 Subject: [PATCH 2/3] Properly escape database name when listing privileges MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michal Čihař --- libraries/server_privileges.lib.php | 4 ++-- test/libraries/PMA_server_privileges_test.php | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/libraries/server_privileges.lib.php b/libraries/server_privileges.lib.php index 2ea6a84185..eda53bdb34 100644 --- a/libraries/server_privileges.lib.php +++ b/libraries/server_privileges.lib.php @@ -498,14 +498,14 @@ function PMA_getSqlQueryForDisplayPrivTable($db, $table, $username, $hostname) return "SELECT * FROM `mysql`.`db`" . " WHERE `User` = '" . Util::sqlAddSlashes($username) . "'" . " AND `Host` = '" . Util::sqlAddSlashes($hostname) . "'" - . " AND '" . Util::unescapeMysqlWildcards($db) . "'" + . " AND '" . Util::sqlAddSlashes(Util::unescapeMysqlWildcards($db)) . "'" . " LIKE `Db`;"; } return "SELECT `Table_priv`" . " FROM `mysql`.`tables_priv`" . " WHERE `User` = '" . Util::sqlAddSlashes($username) . "'" . " AND `Host` = '" . Util::sqlAddSlashes($hostname) . "'" - . " AND `Db` = '" . Util::unescapeMysqlWildcards($db) . "'" + . " AND `Db` = '" . Util::sqlAddSlashes(Util::unescapeMysqlWildcards($db)) . "'" . " AND `Table_name` = '" . Util::sqlAddSlashes($table) . "';"; } diff --git a/test/libraries/PMA_server_privileges_test.php b/test/libraries/PMA_server_privileges_test.php index 9b1254cf41..62c9030cd1 100644 --- a/test/libraries/PMA_server_privileges_test.php +++ b/test/libraries/PMA_server_privileges_test.php @@ -546,6 +546,20 @@ class PMA_ServerPrivileges_Test extends PHPUnit_Framework_TestCase $sql, $ret ); + + // SQL escaping + $db = "db' AND"; + $table = "pma_table"; + $ret = PMA_getSqlQueryForDisplayPrivTable( + $db, $table, $username, $hostname + ); + $this->assertEquals( + "SELECT `Table_priv` FROM `mysql`.`tables_priv` " + . "WHERE `User` = 'pma_username' AND " + . "`Host` = 'pma_hostname' AND `Db` = 'db\' AND' AND " + . "`Table_name` = 'pma_table';", + $ret + ); } /** From 301e1b0f7d2506b16a9e828360db21c27f051509 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Wed, 22 Jun 2016 11:58:05 +0200 Subject: [PATCH 3/3] Fix adjusting privileges for tables/databases with quote in name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michal Čihař --- libraries/operations.lib.php | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/libraries/operations.lib.php b/libraries/operations.lib.php index 597bdd466b..662c15260e 100644 --- a/libraries/operations.lib.php +++ b/libraries/operations.lib.php @@ -585,26 +585,26 @@ function PMA_AdjustPrivileges_moveDB($oldDb, $newname) // For Db specific privileges $query_db_specific = 'UPDATE ' . Util::backquote('db') - . 'SET Db = "' . $newname - . '" where Db = "' . $oldDb . '";'; + . 'SET Db = \'' . Util::sqlAddSlashes($newname) + . '\' where Db = \'' . Util::sqlAddSlashes($oldDb) . '\';'; $GLOBALS['dbi']->query($query_db_specific); // For table specific privileges $query_table_specific = 'UPDATE ' . Util::backquote('tables_priv') - . 'SET Db = "' . $newname - . '" where Db = "' . $oldDb . '";'; + . 'SET Db = \'' . Util::sqlAddSlashes($newname) + . '\' where Db = \'' . Util::sqlAddSlashes($oldDb) . '\';'; $GLOBALS['dbi']->query($query_table_specific); // For column specific privileges $query_col_specific = 'UPDATE ' . Util::backquote('columns_priv') - . 'SET Db = "' . $newname - . '" where Db = "' . $oldDb . '";'; + . 'SET Db = \'' . Util::sqlAddSlashes($newname) + . '\' where Db = \'' . Util::sqlAddSlashes($oldDb) . '\';'; $GLOBALS['dbi']->query($query_col_specific); // For procedures specific privileges $query_proc_specific = 'UPDATE ' . Util::backquote('procs_priv') - . 'SET Db = "' . $newname - . '" where Db = "' . $oldDb . '";'; + . 'SET Db = \'' . Util::sqlAddSlashes($newname) + . '\' where Db = \'' . Util::sqlAddSlashes($oldDb) . '\';'; $GLOBALS['dbi']->query($query_proc_specific); // Finally FLUSH the new privileges @@ -1941,16 +1941,16 @@ function PMA_AdjustPrivileges_renameOrMoveTable($oldDb, $oldTable, $newDb, $newT // For table specific privileges $query_table_specific = 'UPDATE ' . Util::backquote('tables_priv') - . 'SET Db = "' . $newDb . '", Table_name = "' . $newTable - . '" where Db = "' . $oldDb . '" AND Table_name = "' . $oldTable - . '";'; + . 'SET Db = \'' . Util::sqlAddSlashes($newDb) . '\', Table_name = \'' . Util::sqlAddSlashes($newTable) + . '\' where Db = \'' . Util::sqlAddSlashes($oldDb) . '\' AND Table_name = \'' . Util::sqlAddSlashes($oldTable) + . '\';'; $GLOBALS['dbi']->query($query_table_specific); // For column specific privileges $query_col_specific = 'UPDATE ' . Util::backquote('columns_priv') - . 'SET Db = "' . $newDb . '", Table_name = "' . $newTable - . '" where Db = "' . $oldDb . '" AND Table_name = "' . $oldTable - . '";'; + . 'SET Db = \'' . Util::sqlAddSlashes($newDb) . '\', Table_name = \'' . Util::sqlAddSlashes($newTable) + . '\' where Db = \'' . Util::sqlAddSlashes($oldDb) . '\' AND Table_name = \'' . Util::sqlAddSlashes($oldTable) + . '\';'; $GLOBALS['dbi']->query($query_col_specific); // Finally FLUSH the new privileges