Merge remote-tracking branch 'origin/master'

This commit is contained in:
Weblate 2015-10-31 11:48:21 +01:00
commit 7f3c53b7f8

View File

@ -31,39 +31,39 @@ function PMA_checkRequiredPrivilegesForFlushing()
$GLOBALS['flush_priv'] = $res;
}
/**
* Check if user has privileges on mysql.db
*
* @return boolean
*/
function PMA_hasMysqlDbPrivileges()
/**
* Check if user has the required privileges according to some
* verification queries
*
* @param array $queries
*
* @return boolean
*/
function PMA_hasRequiredPrivileges($queries)
{
$privs_available = true;
// FOR DB PRIVS
$select_privs_available = $GLOBALS['dbi']->tryQuery(
'SELECT * FROM `mysql`.`db` LIMIT 1'
$queries['0select']
);
$privs_available = $select_privs_available && $privs_available;
if ($privs_available) {
$delete_privs_available = $GLOBALS['dbi']->tryQuery(
'DELETE FROM `mysql`.`db` WHERE `host` = "" AND '
. '`Db` = "" AND `User` = "" LIMIT 1'
$queries['1delete']
);
$privs_available = $delete_privs_available && $privs_available;
}
if ($privs_available) {
$insert_privs_available = $GLOBALS['dbi']->tryQuery(
'INSERT INTO `mysql`.`db`(`host`, `Db`, `User`) VALUES("pma_test_host", '
. '"mysql", "pma_test_user")'
$queries['2insert']
);
// If successful test insert, delete the test row
if ($insert_privs_available) {
$GLOBALS['dbi']->tryQuery(
'DELETE FROM `mysql`.`db` WHERE host = "pma_test_host" AND '
. 'Db = "mysql" AND User = "pma_test_user" LIMIT 1'
$queries['3delete']
);
}
$privs_available = $insert_privs_available && $privs_available;
@ -71,8 +71,7 @@ function PMA_hasMysqlDbPrivileges()
if ($privs_available) {
$update_privs_available = $GLOBALS['dbi']->tryQuery(
'UPDATE `mysql`.`db` SET `host` = "" WHERE `host` = "" AND '
. '`Db` = "" AND `User` = "" LIMIT 1'
$queries['4update']
);
$privs_available = $update_privs_available && $privs_available;
}
@ -80,6 +79,29 @@ function PMA_hasMysqlDbPrivileges()
return $privs_available;
}
/**
* Check if user has privileges on mysql.db
*
* @return boolean
*/
function PMA_hasMysqlDbPrivileges()
{
return PMA_hasRequiredPrivileges(
array(
'0select' => 'SELECT * FROM `mysql`.`db` LIMIT 1',
'1delete' => 'DELETE FROM `mysql`.`db` WHERE `host` = "" AND '
. '`Db` = "" AND `User` = "" LIMIT 1',
'2insert' => 'INSERT INTO `mysql`.`db`(`host`, `Db`, `User`) '
. 'VALUES("pma_test_host", "mysql", "pma_test_user")',
'3delete' => 'DELETE FROM `mysql`.`db` WHERE host = '
. '"pma_test_host" AND Db = "mysql" AND User = '
. '"pma_test_user" LIMIT 1',
'4update' => 'UPDATE `mysql`.`db` SET `host` = "" WHERE '
. '`host` = "" AND `Db` = "" AND `User` = "" LIMIT 1'
)
);
}
/**
* Check if user has privileges on mysql.columns_priv
*
@ -87,50 +109,22 @@ function PMA_hasMysqlDbPrivileges()
*/
function PMA_hasMysqlColumnsPrivileges()
{
$privs_available = true;
// FOR COLUMNS_PRIV
$select_privs_available = $GLOBALS['dbi']->tryQuery(
'SELECT * FROM `mysql`.`columns_priv` LIMIT 1'
return PMA_hasRequiredPrivileges(
array(
'0select' => 'SELECT * FROM `mysql`.`columns_priv` LIMIT 1',
'1delete' => 'DELETE FROM `mysql`.`columns_priv` '
. 'WHERE `host` = "" AND `Db` = "" AND `User` = "" LIMIT 1',
'2insert' => 'INSERT INTO `mysql`.`columns_priv`(`host`, `Db`, '
. '`User`, `Table_name`, `Column_name`) '
. 'VALUES("pma_test_host", "mysql", "pma_test_user", "", "")',
'3delete' => 'DELETE FROM `mysql`.`columns_priv` WHERE host = '
. '"pma_test_host" AND Db = "mysql" AND User = '
. '"pma_test_user" AND Table_name = "" AND Column_name = "" LIMIT 1',
'4update' => 'UPDATE `mysql`.`columns_priv` SET `host` = "" '
. 'WHERE `host` = "" AND `Db` = "" AND `User` = "" '
. 'AND Column_name = "" AND Table_name = "" LIMIT 1'
)
);
$privs_available = $select_privs_available && $privs_available;
if ($privs_available) {
$delete_privs_available = $GLOBALS['dbi']->tryQuery(
'DELETE FROM `mysql`.`columns_priv` WHERE `host` = "" AND '
. '`Db` = "" AND `User` = "" LIMIT 1'
);
$privs_available = $delete_privs_available && $privs_available;
}
if ($privs_available) {
$insert_privs_available = $GLOBALS['dbi']->tryQuery(
'INSERT INTO `mysql`.`columns_priv`(`host`, `Db`, `User`, `Table_name`,'
. ' `Column_name`) VALUES("pma_test_host", '
. '"mysql", "pma_test_user", "", "")'
);
// If successful test insert, delete the test row
if ($insert_privs_available) {
$GLOBALS['dbi']->tryQuery(
'DELETE FROM `mysql`.`columns_priv` WHERE host = "pma_test_host" AND '
. 'Db = "mysql" AND User = "pma_test_user" AND Table_name = ""'
. ' AND Column_name = "" LIMIT 1'
);
}
$privs_available = $insert_privs_available && $privs_available;
}
if ($privs_available) {
$update_privs_available = $GLOBALS['dbi']->tryQuery(
'UPDATE `mysql`.`columns_priv` SET `host` = "" WHERE `host` = "" AND '
. '`Db` = "" AND `User` = "" AND Column_name = "" AND Table_name = "" LIMIT 1'
);
$privs_available = $update_privs_available && $privs_available;
}
return $privs_available;
}
/**
@ -140,49 +134,22 @@ function PMA_hasMysqlColumnsPrivileges()
*/
function PMA_hasMysqlTablesPrivileges()
{
$privs_available = true;
// FOR TABLES_PRIV
$select_privs_available = $GLOBALS['dbi']->tryQuery(
'SELECT * FROM `mysql`.`tables_priv` LIMIT 1'
return PMA_hasRequiredPrivileges(
array(
'0select' => 'SELECT * FROM `mysql`.`tables_priv` LIMIT 1',
'1delete' => 'DELETE FROM `mysql`.`tables_priv` WHERE `host` '
. '= "" AND `Db` = "" AND `User` = "" AND Table_name = "" LIMIT 1',
'2insert' => 'INSERT INTO `mysql`.`tables_priv`(`host`, `Db`, '
. '`User`, `Table_name`) VALUES("pma_test_host", "mysql", '
. '"pma_test_user", "")',
'3delete' => 'DELETE FROM `mysql`.`tables_priv` WHERE host = '
. '"pma_test_host" AND Db = "mysql" AND User = '
. '"pma_test_user" AND Table_name = "" LIMIT 1',
'4update' => 'UPDATE `mysql`.`tables_priv` SET `host` = "" '
. 'WHERE `host` = "" AND `Db` = "" AND `User` = "" '
. 'AND Table_name = "" LIMIT 1'
)
);
$privs_available = $select_privs_available && $privs_available;
if ($privs_available) {
$delete_privs_available = $GLOBALS['dbi']->tryQuery(
'DELETE FROM `mysql`.`tables_priv` WHERE `host` = "" AND '
. '`Db` = "" AND `User` = "" AND Table_name = "" LIMIT 1'
);
$privs_available = $delete_privs_available && $privs_available;
}
if ($privs_available) {
$insert_privs_available = $GLOBALS['dbi']->tryQuery(
'INSERT INTO `mysql`.`tables_priv`(`host`, `Db`, `User`, `Table_name`'
. ') VALUES("pma_test_host", '
. '"mysql", "pma_test_user", "")'
);
// If successful test insert, delete the test row
if ($insert_privs_available) {
$GLOBALS['dbi']->tryQuery(
'DELETE FROM `mysql`.`tables_priv` WHERE host = "pma_test_host" AND '
. 'Db = "mysql" AND User = "pma_test_user" AND Table_name = "" LIMIT 1'
);
}
$privs_available = $insert_privs_available && $privs_available;
}
if ($privs_available) {
$update_privs_available = $GLOBALS['dbi']->tryQuery(
'UPDATE `mysql`.`tables_priv` SET `host` = "" WHERE `host` = "" AND '
. '`Db` = "" AND `User` = "" AND Table_name = "" LIMIT 1'
);
$privs_available = $update_privs_available && $privs_available;
}
return $privs_available;
}
/**
@ -192,50 +159,24 @@ function PMA_hasMysqlTablesPrivileges()
*/
function PMA_hasMysqlProcsPrivileges()
{
$privs_available = true;
// FOR PROCS_PRIV
$select_privs_available = $GLOBALS['dbi']->tryQuery(
'SELECT * FROM `mysql`.`procs_priv` LIMIT 1'
return PMA_hasRequiredPrivileges(
array(
'0select' => 'SELECT * FROM `mysql`.`procs_priv` LIMIT 1',
'1delete' => 'DELETE FROM `mysql`.`procs_priv` WHERE `host` '
. '= "" AND `Db` = "" AND `User` = "" AND `Routine_name` = '
. '"" AND `Routine_type` = "" LIMIT 1',
'2insert' => 'INSERT INTO `mysql`.`procs_priv`(`host`, `Db`, '
. '`User`, `Routine_name`, `Routine_type`) '
. 'VALUES("pma_test_host", "mysql", "pma_test_user", "", "PROCEDURE")',
'3delete' => 'DELETE FROM `mysql`.`procs_priv` WHERE `host` = '
. '"pma_test_host" AND `Db` = "mysql" AND `User` = '
. '"pma_test_user" AND `Routine_name` = "" '
. 'AND `Routine_type` = "PROCEDURE" LIMIT 1',
'4update' => 'UPDATE `mysql`.`procs_priv` SET `host` = "" '
. 'WHERE `host` = "" AND `Db` = "" AND `User` = "" '
. 'AND `Routine_name` = "" LIMIT 1'
)
);
$privs_available = $select_privs_available && $privs_available;
if ($privs_available) {
$delete_privs_available = $GLOBALS['dbi']->tryQuery(
'DELETE FROM `mysql`.`procs_priv` WHERE `host` = "" AND '
. '`Db` = "" AND `User` = "" AND `Routine_name` = ""'
. ' AND `Routine_type` = "" LIMIT 1'
);
$privs_available = $delete_privs_available && $privs_available;
}
if ($privs_available) {
$insert_privs_available = $GLOBALS['dbi']->tryQuery(
'INSERT INTO `mysql`.`procs_priv`(`host`, `Db`, `User`, `Routine_name`,'
. ' `Routine_type`) VALUES("pma_test_host", '
. '"mysql", "pma_test_user", "", "PROCEDURE")'
);
// If successful test insert, delete the test row
if ($insert_privs_available) {
$GLOBALS['dbi']->tryQuery(
'DELETE FROM `mysql`.`procs_priv` WHERE `host` = "pma_test_host" AND '
. '`Db` = "mysql" AND `User` = "pma_test_user" AND `Routine_name` = ""'
. ' AND `Routine_type` = "PROCEDURE" LIMIT 1'
);
}
$privs_available = $insert_privs_available && $privs_available;
}
if ($privs_available) {
$update_privs_available = $GLOBALS['dbi']->tryQuery(
'UPDATE `mysql`.`procs_priv` SET `host` = "" WHERE `host` = "" AND '
. '`Db` = "" AND `User` = "" AND `Routine_name` = "" LIMIT 1'
);
$privs_available = $update_privs_available && $privs_available;
}
return $privs_available;
}
/**