00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009 $is_create_priv = FALSE;
00010 $is_process_priv = TRUE;
00011 $is_reload_priv = FALSE;
00012 $db_to_create = '';
00013
00014
00015
00016
00017 $is_superuser = PMA_DBI_try_query('SELECT COUNT(*) FROM mysql.user', $userlink, PMA_DBI_QUERY_STORE);
00018
00019 function PMA_analyseShowGrant($rs_usr, &$is_create_priv, &$db_to_create, &$is_reload_priv) {
00020
00021 $re0 = '(^|(\\\\\\\\)+|[^\])';
00022 $re1 = '(^|[^\])(\\\)+';
00023 while ($row = PMA_DBI_fetch_row($rs_usr)) {
00024 $show_grants_dbname = substr($row[0], strpos($row[0], ' ON ') + 4,(strpos($row[0], '.', strpos($row[0], ' ON ')) - strpos($row[0], ' ON ') - 4));
00025 $show_grants_dbname = ereg_replace('^`(.*)`','\\1', $show_grants_dbname);
00026 $show_grants_str = substr($row[0],6,(strpos($row[0],' ON ')-6));
00027 if (($show_grants_str == 'ALL') || ($show_grants_str == 'ALL PRIVILEGES') || ($show_grants_str == 'CREATE') || strpos($show_grants_str, 'CREATE')) {
00028 if ($show_grants_dbname == '*') {
00029 $is_create_priv = TRUE;
00030 $is_reload_priv = TRUE;
00031 $db_to_create = '';
00032 break;
00033 }
00034 else if ( (ereg($re0 . '%|_', $show_grants_dbname)
00035 && !ereg('\\\\%|\\\\_', $show_grants_dbname))
00036 || (!PMA_DBI_try_query('USE ' . ereg_replace($re1 .'(%|_)', '\\1\\3', $show_grants_dbname)) && substr(PMA_DBI_getError(), 1, 4) != 1044)
00037 ) {
00038 $db_to_create = ereg_replace($re0 . '%', '\\1...', ereg_replace($re0 . '_', '\\1?', $show_grants_dbname));
00039 $db_to_create = ereg_replace($re1 . '(%|_)', '\\1\\3', $db_to_create);
00040 $is_create_priv = TRUE;
00041 break;
00042 }
00043 }
00044 }
00045 }
00046
00047
00048
00049
00050
00051
00052
00053 if (PMA_MYSQL_INT_VERSION >= 40102) {
00054 $rs_usr = PMA_DBI_try_query('SHOW GRANTS', $userlink, PMA_DBI_QUERY_STORE);
00055 if ($rs_usr) {
00056 PMA_analyseShowGrant($rs_usr,$is_create_priv, $db_to_create, $is_reload_priv);
00057 PMA_DBI_free_result($rs_usr);
00058 unset($rs_usr);
00059 }
00060 } else {
00061
00062
00063
00064
00065
00066 if (!$is_create_priv) {
00067 $res = PMA_DBI_query('SELECT USER();');
00068 list($mysql_cur_user_and_host) = PMA_DBI_fetch_row($res);
00069 $mysql_cur_user = substr($mysql_cur_user_and_host, 0, strrpos($mysql_cur_user_and_host, '@'));
00070
00071 $local_query = 'SELECT Create_priv, Reload_priv FROM mysql.user WHERE ' . PMA_convert_using('User') . ' = ' . PMA_convert_using(PMA_sqlAddslashes($mysql_cur_user), 'quoted') . ' OR ' . PMA_convert_using('User') . ' = ' . PMA_convert_using('', 'quoted') . ';';
00072 $rs_usr = PMA_DBI_try_query($local_query, $dbh);
00073 if ($rs_usr) {
00074 while ($result_usr = PMA_DBI_fetch_assoc($rs_usr)) {
00075 if (!$is_create_priv) {
00076 $is_create_priv = ($result_usr['Create_priv'] == 'Y');
00077 }
00078 if (!$is_reload_priv) {
00079 $is_reload_priv = ($result_usr['Reload_priv'] == 'Y');
00080 }
00081 }
00082 PMA_DBI_free_result($rs_usr);
00083 unset($rs_usr, $result_usr);
00084 }
00085 }
00086
00087
00088
00089
00090 if (!$is_create_priv) {
00091 $local_query = 'SELECT DISTINCT Db FROM mysql.db WHERE ' . PMA_convert_using('Create_priv') . ' = ' . PMA_convert_using('Y', 'quoted') . ' AND (' . PMA_convert_using('User') . ' = ' .PMA_convert_using(PMA_sqlAddslashes($mysql_cur_user), 'quoted') . ' OR ' . PMA_convert_using('User') . ' = ' . PMA_convert_using('', 'quoted') . ');';
00092 $rs_usr = PMA_DBI_try_query($local_query, $dbh, PMA_DBI_QUERY_STORE);
00093 if ($rs_usr) {
00094 $re0 = '(^|(\\\\\\\\)+|[^\])';
00095 $re1 = '(^|[^\])(\\\)+';
00096 while ($row = PMA_DBI_fetch_assoc($rs_usr)) {
00097 if (ereg($re0 . '(%|_)', $row['Db'])
00098 || (!PMA_DBI_try_query('USE ' . ereg_replace($re1 . '(%|_)', '\\1\\3', $row['Db'])) && substr(PMA_DBI_getError(), 1, 4) != 1044)) {
00099 $db_to_create = ereg_replace($re0 . '%', '\\1...', ereg_replace($re0 . '_', '\\1?', $row['Db']));
00100 $db_to_create = ereg_replace($re1 . '(%|_)', '\\1\\3', $db_to_create);
00101 $is_create_priv = TRUE;
00102 break;
00103 }
00104 }
00105 PMA_DBI_free_result($rs_usr);
00106 unset($rs_usr, $row, $re0, $re1);
00107 }
00108 else {
00109
00110
00111
00112 $rs_usr = PMA_DBI_try_query('SHOW GRANTS FOR ' . $mysql_cur_user_and_host . ';', $dbh, PMA_DBI_QUERY_STORE);
00113 if (!$rs_usr) {
00114
00115
00116 $rs_usr = PMA_DBI_try_query('SHOW GRANTS FOR ' . $mysql_cur_user . ';', $dbh, PMA_DBI_QUERY_STORE);
00117 }
00118 unset($local_query);
00119 if ($rs_usr) {
00120 PMA_analyseShowGrant($rs_usr,$is_create_priv, $db_to_create, $is_reload_priv);
00121 PMA_DBI_free_result($rs_usr);
00122 unset($rs_usr);
00123 }
00124 }
00125 }
00126 }
00127
00128
00129 if (!$cfg['SuggestDBName']) {
00130 $db_to_create = '';
00131 }
00132
00133 ?>
00134