# HG changeset patch # User Dan # Date 1194310841 18000 # Node ID c26308d8188276accb639b153a08c28d6c57949a # Parent 07cf7b0c175f44c883fa042b51c7314fa08b75ba Fix installation with MySQL root option diff -r 07cf7b0c175f -r c26308d81882 install.php --- a/install.php Mon Nov 05 19:50:40 2007 -0500 +++ b/install.php Mon Nov 05 20:00:41 2007 -0500 @@ -145,6 +145,7 @@ ob_end_flush(); close_install_table(); $post_data = ''; + $mysql_error = mysql_error(); foreach ( $_POST as $key => $value ) { $value = htmlspecialchars($value); @@ -156,6 +157,7 @@
' . $failure_explanation . '
+ ' . ( !empty($mysql_error) ? "The error returned from MySQL was: $mysql_error
" : '' ) . 'When you have corrected the error, click the button below to attempt to continue the installation.
'; @@ -198,24 +200,32 @@ return false; } // Create the user account - $q = @mysql_query("GRANT ALL PRIVILEGES ON test.* TO '{$db_user}'@'localhost' IDENTIFIED BY '$db_pass' WITH GRANT OPTION;", $conn); + $q = @mysql_query("GRANT ALL PRIVILEGES ON test.* TO '{$db_user}'@'localhost' IDENTIFIED BY '$db_pass' WITH GRANT OPTION;", $conn_root); if ( !$q ) + { return false; + } // Revoke privileges from test, we don't need them - $q = @mysql_query("REVOKE ALL PRIVILEGES ON test.* FROM '{$db_user}'@'localhost';", $conn); + $q = @mysql_query("REVOKE ALL PRIVILEGES ON test.* FROM '{$db_user}'@'localhost';", $conn_root); if ( !$q ) + { return false; + } if ( $_POST['db_host'] != 'localhost' && $_POST['db_host'] != '127.0.0.1' && $_POST['db_host'] != '::1' ) { // If not connecting to a server running on localhost, allow from any host // this is safer than trying to detect the hostname of the webserver, but less secure - $q = @mysql_query("GRANT ALL PRIVILEGES ON test.* TO '{$db_user}'@'%' IDENTIFIED BY '$db_pass' WITH GRANT OPTION;", $conn); + $q = @mysql_query("GRANT ALL PRIVILEGES ON test.* TO '{$db_user}'@'%' IDENTIFIED BY '$db_pass' WITH GRANT OPTION;", $conn_root); if ( !$q ) + { return false; + } // Revoke privileges from test, we don't need them - $q = @mysql_query("REVOKE ALL PRIVILEGES ON test.* FROM '{$db_user}'@'%';", $conn); + $q = @mysql_query("REVOKE ALL PRIVILEGES ON test.* FROM '{$db_user}'@'%';", $conn_root); if ( !$q ) + { return false; + } } } } @@ -232,19 +242,25 @@ return false; } // create the database, if it doesn't exist - $q = @mysql_query("CREATE DATABASE $db_name;", $conn); + $q = @mysql_query("CREATE DATABASE IF NOT EXISTS $db_name;", $conn_root); if ( !$q ) + { // this really should never fail, so don't give any tolerance to it return false; + } // we're in with root rights; grant access to the database - $q = @mysql_query("GRANT ALL PRIVILEGES ON $db_name.* TO '{$db_user}'@'localhost';", $conn); + $q = @mysql_query("GRANT ALL PRIVILEGES ON $db_name.* TO '{$db_user}'@'localhost';", $conn_root); if ( !$q ) + { return false; + } if ( $_POST['db_host'] != 'localhost' && $_POST['db_host'] != '127.0.0.1' && $_POST['db_host'] != '::1' ) { - $q = @mysql_query("GRANT ALL PRIVILEGES ON $db_name.* TO '{$db_user}'@'%';", $conn); + $q = @mysql_query("GRANT ALL PRIVILEGES ON $db_name.* TO '{$db_user}'@'%';", $conn_root); if ( !$q ) + { return false; + } } } else @@ -252,10 +268,12 @@ return false; } // try again - $q = @mysql_query("USE '$db_name';", $conn); + $q = @mysql_query("USE $db_name;", $conn); if ( !$q ) + { // really failed this time; bail out return false; + } } // connected and database exists return true; @@ -1504,7 +1522,7 @@ start_install_table(); // The stages connect, decrypt, genkey, and parse are preprocessing and don't do any actual data modification. // Thus, they need to be run on each retry, e.g. never skipped. - run_installer_stage('connect', 'Connect to MySQL', 'stg_mysql_connect', 'MySQL denied our attempt to connect to the database. This is most likely because your login information was incorrect. You will most likely need to restart the installation.