Commit c945766f authored by unknown's avatar unknown
Browse files

Merge ahristov@bk-internal.mysql.com:/home/bk/mysql-5.1-runtime

into lmy004.:/work/mysql-5.1-runtime-bug18897


mysql-test/t/events_bugs.test:
  Auto merged
sql/sql_parse.cc:
  Auto merged
parents 11f81a7c d6cf50ca
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -178,4 +178,27 @@ drop procedure ee_16407_6_pendant;
set global event_scheduler= 2;
drop table events_smode_test;
set sql_mode=@old_sql_mode;
set global event_scheduler=2;
delete from mysql.user where User like 'mysqltest_%';
delete from mysql.db where User like 'mysqltest_%';
flush privileges;
drop database if exists mysqltest_db1;
create user mysqltest_user1@localhost;
create database mysqltest_db1;
grant event on events_test.* to mysqltest_user1@localhost;
create event mysqltest_user1 on schedule every 10 second do select 42;
alter event mysqltest_user1 rename to mysqltest_db1.mysqltest_user1;
ERROR 42000: Access denied for user 'mysqltest_user1'@'localhost' to database 'mysqltest_db1'
"Let's test now rename when there is no select DB"
select database();
database()
NULL
alter event events_test.mysqltest_user1 rename to mysqltest_user1;
ERROR 3D000: No database selected
select event_schema, event_name, definer, event_type, status from information_schema.events;
event_schema	event_name	definer	event_type	status
events_test	mysqltest_user1	mysqltest_user1@localhost	RECURRING	ENABLED
drop event events_test.mysqltest_user1;
drop user mysqltest_user1@localhost;
drop database mysqltest_db1;
drop database events_test;
+34 −0
Original line number Diff line number Diff line
@@ -175,4 +175,38 @@ set sql_mode=@old_sql_mode;
#
# End  - 16407: Events: Changes in sql_mode won't be taken into account  
#

#
# START - 18897: Events: unauthorized action possible with alter event rename
#
set global event_scheduler=2;
--disable_warnings
delete from mysql.user where User like 'mysqltest_%';
delete from mysql.db where User like 'mysqltest_%';
flush privileges;
drop database if exists mysqltest_db1;
--enable_warnings
create user mysqltest_user1@localhost;
create database mysqltest_db1;
grant event on events_test.* to mysqltest_user1@localhost;
connect (conn2,localhost,mysqltest_user1,,events_test);
create event mysqltest_user1 on schedule every 10 second do select 42;
--error ER_DBACCESS_DENIED_ERROR
alter event mysqltest_user1 rename to mysqltest_db1.mysqltest_user1;
--echo "Let's test now rename when there is no select DB"
disconnect conn2;
connect (conn2,localhost,mysqltest_user1,,*NO-ONE*);
select database();
--error ER_NO_DB_ERROR
alter event events_test.mysqltest_user1 rename to mysqltest_user1;
select event_schema, event_name, definer, event_type, status from information_schema.events;
drop event events_test.mysqltest_user1;
disconnect conn2;
connection default;
drop user mysqltest_user1@localhost;
drop database mysqltest_db1;
#
# END   - 18897: Events: unauthorized action possible with alter event rename
#

drop database events_test;
+7 −2
Original line number Diff line number Diff line
@@ -3824,7 +3824,9 @@ mysql_execute_command(THD *thd)
    uint rows_affected= 1;
    DBUG_ASSERT(lex->et);
    do {
      if (! lex->et->dbname.str)
      if (! lex->et->dbname.str ||
          (lex->sql_command == SQLCOM_ALTER_EVENT && lex->spname &&
           !lex->spname->m_db.str))
      {
        my_message(ER_NO_DB_ERROR, ER(ER_NO_DB_ERROR), MYF(0));
        res= true;
@@ -3832,7 +3834,10 @@ mysql_execute_command(THD *thd)
      }

      if (check_access(thd, EVENT_ACL, lex->et->dbname.str, 0, 0, 0,
                       is_schema_db(lex->et->dbname.str)))
                       is_schema_db(lex->et->dbname.str)) ||
          (lex->sql_command == SQLCOM_ALTER_EVENT && lex->spname &&
           (check_access(thd, EVENT_ACL, lex->spname->m_db.str, 0, 0, 0,
                         is_schema_db(lex->spname->m_db.str)))))
        break;

      if (end_active_trans(thd))