diff --git a/ChangeLog b/ChangeLog index 617f24837..86041d764 100755 --- a/ChangeLog +++ b/ChangeLog @@ -10,6 +10,8 @@ $Source$ - feature request #503015 - No "xxxtext" button on vertical mode; - extended the "relation" feature to PHP3. * Documentation.html, line 557: extended the "relation" feature to PHP3. + * libraries/common.lib.php3: tried to fix bug #520282 - mysql + safe_show_database=on support. Must be fully tested now. 2002-03-01 Olivier Müller * created the phpmyadmin-cvs mailing list, following the instructions diff --git a/libraries/common.lib.php3 b/libraries/common.lib.php3 index bc6d72e8e..a2cf9f88f 100644 --- a/libraries/common.lib.php3 +++ b/libraries/common.lib.php3 @@ -526,16 +526,35 @@ if (!defined('PMA_COMMON_LIB_INCLUDED')){ unset($true_dblist); } // end if - // 'only_db' is empty for the current user -> checks for available - // databases in the "mysql" db + // 'only_db' is empty for the current user... else { - $auth_query = 'SELECT User, Select_priv ' - . 'FROM mysql.user ' - . 'WHERE User = \'' . PMA_sqlAddslashes($cfgServer['user']) . '\''; - $rs = mysql_query($auth_query, $dbh); // Debug: or PMA_mysqlDie('', $auth_query, FALSE); - } // end if + // ... first checks whether the "safe_show_database" is on or not + $local_query = 'SHOW VARIABLES LIKE \'safe_show_database\''; + $rs = mysql_query($local_query, $dbh); // Debug: or PMA_mysqlDie('', $local_query, FALSE); + $is_safe_show_dbs = mysql_result($rs, 0, 'Value'); - // Access to "mysql" db allowed -> gets the usable db list + // ... and if on, try get the available dbs list,.... + if ($is_safe_show_dbs && strtoupper($is_safe_show_dbs) != 'OFF') { + $uva_alldbs = mysql_list_dbs($userlink); + while ($uva_row = mysql_fetch_array($uva_alldbs)) { + $dblist[] = $uva_row[0]; + } // end while + $dblist_cnt = count($dblist); + unset($uva_alldbs); + mysql_free_result($rs); + } // end if ($is_safe_show_dbs) + + // ... else checks for available databases in the "mysql" db + if (!$dblist_cnt) { + $auth_query = 'SELECT User, Select_priv ' + . 'FROM mysql.user ' + . 'WHERE User = \'' . PMA_sqlAddslashes($cfgServer['user']) . '\''; + $rs = mysql_query($auth_query, $dbh); // Debug: or PMA_mysqlDie('', $auth_query, FALSE); + } // end + } // end if (!$dblist_cnt) + + // Access to "mysql" db allowed and dblist still empty -> gets the + // usable db list if (!$dblist_cnt && @mysql_numrows($rs)) { $row = mysql_fetch_array($rs); mysql_free_result($rs);