# 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 @@

Enano installation failed.

' . $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.

Error message returned by MySQL: ' . mysql_error(), false); + 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.', false); if ( isset($_POST['drop_tables']) ) { // Are we supposed to drop any existing tables? If so, do it now