From 39b0f4d34bff1815ff37241ea4c47698e6d4f935 Mon Sep 17 00:00:00 2001 From: Rouslan Placella Date: Tue, 16 Aug 2011 12:35:43 +0100 Subject: [PATCH 1/3] Fixed wrong destination page on "Drop Routine" action --- libraries/rte/rte_list.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/rte/rte_list.lib.php b/libraries/rte/rte_list.lib.php index 3b6177dbbd..01af4ced17 100644 --- a/libraries/rte/rte_list.lib.php +++ b/libraries/rte/rte_list.lib.php @@ -188,7 +188,7 @@ function PMA_RTN_getRowForList($routine, $rowclass = '') . ' href="sql.php?' . $url_query . '&sql_query=' . urlencode($sql_drop) - . '&goto=db_events.php' . urlencode("?db={$db}") + . '&goto=db_routines.php' . urlencode("?db={$db}") . '" >' . $titles['Drop'] . "\n"; } else { $retval .= " {$titles['NoDrop']}\n"; From 4e4456e9b87720ea9e1c426e9efc381356b68c3d Mon Sep 17 00:00:00 2001 From: Rouslan Placella Date: Tue, 16 Aug 2011 12:36:38 +0100 Subject: [PATCH 2/3] Fixed wrong permission check for "Drop Routine" action --- libraries/rte/rte_list.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/rte/rte_list.lib.php b/libraries/rte/rte_list.lib.php index 01af4ced17..c39fd45143 100644 --- a/libraries/rte/rte_list.lib.php +++ b/libraries/rte/rte_list.lib.php @@ -183,7 +183,7 @@ function PMA_RTN_getRowForList($routine, $rowclass = '') . '">' . $titles['Export'] . "\n"; $retval .= " \n"; $retval .= " \n"; - if (PMA_currentUserHasPrivilege('EVENT', $db)) { + if (PMA_currentUserHasPrivilege('ALTER ROUTINE', $db)) { $retval .= ' ' . $titles['Edit'] . "\n"; } else { $retval .= " {$titles['NoEdit']}\n"; @@ -150,6 +151,7 @@ function PMA_RTN_getRowForList($routine, $rowclass = '') // otherwise we can execute it directly. $routine_details = PMA_RTN_getDataFromName( $routine['SPECIFIC_NAME'], + $routine['ROUTINE_TYPE'], false ); if ($routine !== false) { @@ -168,6 +170,7 @@ function PMA_RTN_getRowForList($routine, $rowclass = '') . $url_query . '&' . $execute_action . '=1' . '&item_name=' . urlencode($routine['SPECIFIC_NAME']) + . '&' . $type_link . '">' . $titles['Execute'] . "\n"; } } else { @@ -180,6 +183,7 @@ function PMA_RTN_getRowForList($routine, $rowclass = '') . $url_query . '&export_item=1' . '&item_name=' . urlencode($routine['SPECIFIC_NAME']) + . '&' . $type_link . '">' . $titles['Export'] . "\n"; $retval .= " \n"; $retval .= " \n"; diff --git a/libraries/rte/rte_routines.lib.php b/libraries/rte/rte_routines.lib.php index 3e6360321f..8cd052923e 100644 --- a/libraries/rte/rte_routines.lib.php +++ b/libraries/rte/rte_routines.lib.php @@ -304,7 +304,9 @@ function PMA_RTN_handleEditor() $extra_data = array(); if ($message->isSuccess()) { $columns = "`SPECIFIC_NAME`, `ROUTINE_NAME`, `ROUTINE_TYPE`, `DTD_IDENTIFIER`, `ROUTINE_DEFINITION`"; - $where = "ROUTINE_SCHEMA='" . PMA_sqlAddSlashes($db) . "' AND ROUTINE_NAME='" . PMA_sqlAddSlashes($_REQUEST['item_name']) . "'"; + $where = "ROUTINE_SCHEMA='" . PMA_sqlAddSlashes($db) . "' " + . "AND ROUTINE_NAME='" . PMA_sqlAddSlashes($_REQUEST['item_name']) . "'" + . "AND ROUTINE_TYPE='" . PMA_sqlAddSlashes($_REQUEST['item_type']) . "'"; $routine = PMA_DBI_fetch_single_row("SELECT $columns FROM `INFORMATION_SCHEMA`.`ROUTINES` WHERE $where;"); $extra_data['name'] = htmlspecialchars(strtoupper($_REQUEST['item_name'])); $extra_data['new_row'] = PMA_RTN_getRowForList($routine); @@ -343,7 +345,7 @@ function PMA_RTN_handleEditor() } else if (! empty($_REQUEST['edit_item'])) { $title = __("Edit routine"); if (! $operation && ! empty($_REQUEST['item_name']) && empty($_REQUEST['editor_process_edit'])) { - $routine = PMA_RTN_getDataFromName($_REQUEST['item_name']); + $routine = PMA_RTN_getDataFromName($_REQUEST['item_name'], $_REQUEST['item_type']); if ($routine !== false) { $routine['item_original_name'] = $routine['item_name']; $routine['item_original_type'] = $routine['item_type']; @@ -501,12 +503,13 @@ function PMA_RTN_getDataFromRequest() * the "Edit routine" form given the name of a routine. * * @param string $name The name of the routine. + * @param string $type Type of routine (ROUTINE|PROCEDURE) * @param bool $all Whether to return all data or just * the info about parameters. * * @return array Data necessary to create the routine editor. */ -function PMA_RTN_getDataFromName($name, $all = true) +function PMA_RTN_getDataFromName($name, $type, $all = true) { global $param_directions, $param_sqldataaccess, $db; @@ -517,7 +520,8 @@ function PMA_RTN_getDataFromName($name, $all = true) . "ROUTINE_DEFINITION, IS_DETERMINISTIC, SQL_DATA_ACCESS, " . "ROUTINE_COMMENT, SECURITY_TYPE"; $where = "ROUTINE_SCHEMA='" . PMA_sqlAddSlashes($db) . "' " - . "AND SPECIFIC_NAME='" . PMA_sqlAddSlashes($name) . "'"; + . "AND SPECIFIC_NAME='" . PMA_sqlAddSlashes($name) . "'" + . "AND ROUTINE_TYPE='" . PMA_sqlAddSlashes($type) . "'"; $query = "SELECT $fields FROM INFORMATION_SCHEMA.ROUTINES WHERE $where;"; $routine = PMA_DBI_fetch_single_row($query); @@ -1002,7 +1006,7 @@ function PMA_RTN_getQueryFromRequest() $warned_about_dir = false; $warned_about_name = false; $warned_about_length = false; - if (! empty($_REQUEST['item_param_name']) + if ( ! empty($_REQUEST['item_param_name']) && ! empty($_REQUEST['item_param_type']) && ! empty($_REQUEST['item_param_length']) && is_array($_REQUEST['item_param_name']) @@ -1124,7 +1128,7 @@ function PMA_RTN_handleExecute() */ if (! empty($_REQUEST['execute_routine']) && ! empty($_REQUEST['item_name'])) { // Build the queries - $routine = PMA_RTN_getDataFromName($_REQUEST['item_name'], false); + $routine = PMA_RTN_getDataFromName($_REQUEST['item_name'], $_REQUEST['item_type'], false); if ($routine !== false) { $queries = array(); $end_query = array(); @@ -1279,7 +1283,7 @@ function PMA_RTN_handleExecute() /** * Display the execute form for a routine. */ - $routine = PMA_RTN_getDataFromName($_GET['item_name'], false); + $routine = PMA_RTN_getDataFromName($_GET['item_name'], $_GET['item_type'], true); if ($routine !== false) { $form = PMA_RTN_getExecuteForm($routine); if ($GLOBALS['is_ajax_request'] == true) { @@ -1336,6 +1340,8 @@ function PMA_RTN_getExecuteForm($routine) $retval .= "
\n"; $retval .= "