List:Commits« Previous MessageNext Message »
From:ahristov Date:June 6 2007 3:21pm
Subject:bk commit into 5.1 tree (andrey:1.2541) BUG#28924
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of andrey. When andrey does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2007-06-06 16:21:00+03:00, andrey@stripped +3 -0
  Fix for bug#28924
  If I drop the user who is the definer of an active event then server cores
  
  Deinit phase of not executed init code has been called. It triggered an assert.

  mysql-test/r/events_bugs.result@stripped, 2007-06-06 16:20:52+03:00, andrey@stripped +47
-0
    update result

  mysql-test/t/events_bugs.test@stripped, 2007-06-06 16:20:52+03:00, andrey@stripped +59 -0
    add test case for bug#28924
    If I drop the user who is the definer of an active event then server cores

  sql/event_data_objects.cc@stripped, 2007-06-06 16:20:52+03:00, andrey@stripped +3 -3
    Directly return if there is a problem with the security context.
    If parsing hasn't started don't jump to error: label.

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	andrey
# Host:	example.com
# Root:	/work/mysql-5.1-runtime

--- 1.33/mysql-test/r/events_bugs.result	2007-06-06 16:21:14 +03:00
+++ 1.34/mysql-test/r/events_bugs.result	2007-06-06 16:21:14 +03:00
@@ -557,4 +557,51 @@ CREATE EVENT new_event ON SCHEDULE AT NO
 ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near 'ENDS NOW() DO SELECT 1' at
line 1
 CREATE EVENT new_event ON SCHEDULE AT NOW() STARTS NOW() ENDS NOW() DO SELECT 1;
 ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near 'STARTS NOW() ENDS NOW() DO
SELECT 1' at line 1
+USE test;
+SHOW GRANTS FOR CURRENT_USER;
+Grants for root@localhost
+GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION
+SET GLOBAL event_scheduler = ON;
+CREATE TABLE event_log (id int KEY AUTO_INCREMENT,
+ev_nm char(40), ev_cnt int,
+ev_tm timestamp) ENGINE=MyISAM;
+SET @ev_base_date = 20281224180000;
+SET autocommit=0;
+CREATE USER evtest1@localhost;
+SET PASSWORD FOR evtest1@localhost = password('ev1');
+REVOKE ALL PRIVILEGES, GRANT OPTION FROM evtest1@localhost;
+GRANT create, insert, select, event ON events_test.* TO evtest1@localhost;
+GRANT select,insert ON TEST.* TO evtest1@lcalhost;
+SHOW GRANTS FOR evtest1@localhost;
+Grants for evtest1@localhost
+GRANT USAGE ON *.* TO 'evtest1'@'localhost' IDENTIFIED BY PASSWORD
'*3170F3644E31580C25DE4A08F4C07CC9A2D40C32'
+GRANT SELECT, INSERT, CREATE, EVENT ON `events_test`.* TO 'evtest1'@'localhost'
+connection e1;
+USE events_test;
+CREATE EVENT ev_sched_1823 ON SCHEDULE EVERY 2 SECOND
+DO BEGIN
+SET AUTOCOMMIT = 0;
+SET @evname = 'ev_sched_1823';
+SET @cnt = 0;
+SELECT COUNT(*) INTO @cnt FROM test.event_log WHERE ev_nm = @evname;
+INSERT INTO test.event_log VALUES (NULL,@evname,@cnt+1,current_timestamp());
+COMMIT;
+SELECT COUNT(*) INTO @cnt FROM test.event_log WHERE ev_nm = @evname;
+INSERT INTO test.event_log VALUES (NULL,@evname,@cnt+1,current_timestamp());
+ROLLBACK;
+END;|
+connection default;
+DROP USER evtest1@localhost;
+USE test;
+=====================================================================================
+select id,ev_nm,ev_cnt from event_log order by id;
+id	ev_nm	ev_cnt
+1	ev_sched_1823	1
+2	ev_sched_1823	2
+3	ev_sched_1823	3
+4	ev_sched_1823	4
+5	ev_sched_1823	5
+6	ev_sched_1823	6
+DROP TABLE event_log;
+SET GLOBAL event_scheduler = OFF;
 DROP DATABASE events_test;

--- 1.30/mysql-test/t/events_bugs.test	2007-06-06 16:21:14 +03:00
+++ 1.31/mysql-test/t/events_bugs.test	2007-06-06 16:21:14 +03:00
@@ -649,6 +649,65 @@ CREATE EVENT new_event ON SCHEDULE AT NO
 CREATE EVENT new_event ON SCHEDULE AT NOW() STARTS NOW() ENDS NOW() DO SELECT 1;
 
 
+#
+# START - BUG#28924 If I drop the user who is the definer of an active event then server
cores
+#
+let $engine=MyISAM;
+USE test;
+SHOW GRANTS FOR CURRENT_USER;
+SET GLOBAL event_scheduler = ON;
+eval CREATE TABLE event_log (id int KEY AUTO_INCREMENT,
+                             ev_nm char(40), ev_cnt int,
+                             ev_tm timestamp) ENGINE=$engine; 
+SET @ev_base_date = 20281224180000;
+--disable_warnings
+SET autocommit=0;
+#DROP DATABASE IF EXISTS ev_db_1;
+#CREATE DATABASE ev_db_1;
+--enable_warnings
+CREATE USER evtest1@localhost;
+SET PASSWORD FOR evtest1@localhost = password('ev1');
+REVOKE ALL PRIVILEGES, GRANT OPTION FROM evtest1@localhost;
+GRANT create, insert, select, event ON events_test.* TO evtest1@localhost;
+GRANT select,insert ON TEST.* TO evtest1@lcalhost;
+SHOW GRANTS FOR evtest1@localhost;
+
+--echo connection e1;
+--replace_result $MASTER_MYPORT MASTER_MYPORT $MASTER_MYSOCK MASTER_MYSOCK
+connect (e1,localhost,evtest1,ev1,events_test,$MASTER_MYPORT,$MASTER_MYSOCK);
+USE events_test;
+
+DELIMITER |;
+CREATE EVENT ev_sched_1823 ON SCHEDULE EVERY 2 SECOND
+DO BEGIN
+	SET AUTOCOMMIT = 0;
+	SET @evname = 'ev_sched_1823';
+	SET @cnt = 0;
+	SELECT COUNT(*) INTO @cnt FROM test.event_log WHERE ev_nm = @evname;
+	INSERT INTO test.event_log VALUES (NULL,@evname,@cnt+1,current_timestamp());
+	COMMIT;
+	SELECT COUNT(*) INTO @cnt FROM test.event_log WHERE ev_nm = @evname;
+	INSERT INTO test.event_log VALUES (NULL,@evname,@cnt+1,current_timestamp());
+	ROLLBACK;
+END;|
+DELIMITER ;|
+
+--sleep 6
+--echo connection default;
+connection default;
+DROP USER evtest1@localhost;
+
+--sleep 6
+USE test;
+--echo
=====================================================================================
+--sleep 5
+#--disable_result_log
+select id,ev_nm,ev_cnt from event_log order by id;
+#--enable_result_log
+DROP TABLE event_log;
+#DROP DATABASE ev_db_1;
+SET GLOBAL event_scheduler = OFF;
+
 
 # 
 # End of tests

--- 1.101/sql/event_data_objects.cc	2007-06-06 16:21:14 +03:00
+++ 1.102/sql/event_data_objects.cc	2007-06-06 16:21:14 +03:00
@@ -1875,7 +1875,7 @@ Event_job_data::execute(THD *thd, bool d
                     "[%s].[%s.%s] execution failed, "
                     "failed to authenticate the user.",
                     definer.str, dbname.str, name.str);
-    goto end;
+    DBUG_RETURN(TRUE);
   }
 #endif
 
@@ -1892,11 +1892,11 @@ Event_job_data::execute(THD *thd, bool d
                     "[%s].[%s.%s] execution failed, "
                     "user no longer has EVENT privilege.",
                     definer.str, dbname.str, name.str);
-    goto end;
+    DBUG_RETURN(TRUE);
   }
 
   if (construct_sp_sql(thd, &sp_sql))
-    goto end;
+    DBUG_RETURN(TRUE);
 
   /*
     Set up global thread attributes to reflect the properties of
Thread
bk commit into 5.1 tree (andrey:1.2541) BUG#28924ahristov6 Jun