mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
Fix for BUG#7787: Stored procedures: improper warning for "grant execute" statement.
The problem was that error flag was not reset.
This commit is contained in:
parent
f0abdf1ebe
commit
a77cc69e62
3 changed files with 38 additions and 4 deletions
|
@ -314,3 +314,12 @@ select * from db_bug14533.t1;
|
|||
ERROR 42000: SELECT command denied to user 'user_bug14533'@'localhost' for table 't1'
|
||||
drop user user_bug14533@localhost;
|
||||
drop database db_bug14533;
|
||||
CREATE DATABASE db_bug7787;
|
||||
use db_bug7787;
|
||||
CREATE PROCEDURE p1()
|
||||
SHOW INNODB STATUS;
|
||||
Warnings:
|
||||
Warning 1287 'SHOW INNODB STATUS' is deprecated; use 'SHOW ENGINE INNODB STATUS' instead
|
||||
GRANT EXECUTE ON PROCEDURE p1 TO user_bug7787@localhost;
|
||||
DROP DATABASE db_bug7787;
|
||||
use test;
|
||||
|
|
|
@ -525,4 +525,26 @@ disconnect user_bug14533;
|
|||
drop user user_bug14533@localhost;
|
||||
drop database db_bug14533;
|
||||
|
||||
|
||||
#
|
||||
# BUG#7787: Stored procedures: improper warning for "grant execute" statement
|
||||
#
|
||||
|
||||
# Prepare.
|
||||
|
||||
CREATE DATABASE db_bug7787;
|
||||
use db_bug7787;
|
||||
|
||||
# Test.
|
||||
|
||||
CREATE PROCEDURE p1()
|
||||
SHOW INNODB STATUS;
|
||||
|
||||
GRANT EXECUTE ON PROCEDURE p1 TO user_bug7787@localhost;
|
||||
|
||||
# Cleanup.
|
||||
|
||||
DROP DATABASE db_bug7787;
|
||||
use test;
|
||||
|
||||
# End of 5.0 bugs.
|
||||
|
|
11
sql/sp.cc
11
sql/sp.cc
|
@ -1012,6 +1012,7 @@ sp_exist_routines(THD *thd, TABLE_LIST *routines, bool any, bool no_error)
|
|||
{
|
||||
TABLE_LIST *routine;
|
||||
bool result= 0;
|
||||
bool sp_object_found;
|
||||
DBUG_ENTER("sp_exists_routine");
|
||||
for (routine= routines; routine; routine= routine->next_global)
|
||||
{
|
||||
|
@ -1024,10 +1025,12 @@ sp_exist_routines(THD *thd, TABLE_LIST *routines, bool any, bool no_error)
|
|||
lex_name.str= thd->strmake(routine->table_name, lex_name.length);
|
||||
name= new sp_name(lex_db, lex_name);
|
||||
name->init_qname(thd);
|
||||
if (sp_find_routine(thd, TYPE_ENUM_PROCEDURE, name,
|
||||
&thd->sp_proc_cache, FALSE) != NULL ||
|
||||
sp_find_routine(thd, TYPE_ENUM_FUNCTION, name,
|
||||
&thd->sp_func_cache, FALSE) != NULL)
|
||||
sp_object_found= sp_find_routine(thd, TYPE_ENUM_PROCEDURE, name,
|
||||
&thd->sp_proc_cache, FALSE) != NULL ||
|
||||
sp_find_routine(thd, TYPE_ENUM_FUNCTION, name,
|
||||
&thd->sp_func_cache, FALSE) != NULL;
|
||||
mysql_reset_errors(thd, TRUE);
|
||||
if (sp_object_found)
|
||||
{
|
||||
if (any)
|
||||
DBUG_RETURN(1);
|
||||
|
|
Loading…
Reference in a new issue