From bd3661d1d440c3a3622ee5f3d7ba01845900c1b6 Mon Sep 17 00:00:00 2001 From: madmuffin1 Date: Thu, 7 Mar 2013 10:31:34 +0100 Subject: [PATCH] * Log customer deletion of database (#1163) * Enable deletion and correct revoking of database for customer (#1108) --- customer_mysql.php | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/customer_mysql.php b/customer_mysql.php index 15cc14f1..b008d4d3 100644 --- a/customer_mysql.php +++ b/customer_mysql.php @@ -102,11 +102,17 @@ elseif($page == 'mysqls') // Begin root-session $db_root = new db($sql_root[$result['dbserver']]['host'], $sql_root[$result['dbserver']]['user'], $sql_root[$result['dbserver']]['password'], ''); - foreach(array_map('trim', array_unique(explode(',', $settings['system']['mysql_access_host']))) as $mysql_access_host) + $log->logAction(USR_ACTION, LOG_INFO, "deleted database '" . $result['databasename'] . "'"); + if(mysql_get_server_info() < '5.0.2') { + // Revoke privileges (only required for MySQL 4.1.2 - 5.0.1) + $db_root->query('REVOKE ALL PRIVILEGES, GRANT OPTION FROM \'' . $db_root->escape($result['databasename']) .'\'',false,true); + } + + $host_res = $db_root->query("SELECT `Host` FROM `mysql`.`user` WHERE `User`='" . $db_root->escape($result['databasename']) . "'"); + while($host = $db_root->fetch_array($host_res)) { - $db_root->query('REVOKE ALL PRIVILEGES ON * . * FROM `' . $db_root->escape($result['databasename']) . '`@`' . $db_root->escape($mysql_access_host) . '`'); - $db_root->query('REVOKE ALL PRIVILEGES ON `' . str_replace('_', '\_', $db_root->escape($result['databasename'])) . '` . * FROM `' . $db_root->escape($result['databasename']) . '`@`' . $db_root->escape($mysql_access_host) . '`'); - $db_root->query('DELETE FROM `mysql`.`user` WHERE `User` = "' . $db_root->escape($result['databasename']) . '" AND `Host` = "' . $db_root->escape($mysql_access_host) . '"'); + // as of MySQL 5.0.2 this also revokes privileges. (requires MySQL 4.1.2+) + $db_root->query('DROP USER \'' . $db_root->escape($result['databasename']). '\'@\'' . $db_root->escape($host['Host']) . '\'', false, true); } $db_root->query('DROP DATABASE IF EXISTS `' . $db_root->escape($result['databasename']) . '`');