List:Commits« Previous MessageNext Message »
From:ahristov Date:April 27 2006 1:40pm
Subject:bk commit into 5.1 tree (andrey:1.2367) BUG#17394
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
  1.2367 06/04/27 16:40:37 andrey@lmy004. +8 -0
  make events not-personal
  fix for bug#17394 (Events: namespace is wrong)
  CAUTION: Now everyone can alter/drop others' events, if
  he has EVENT on the schema. This means that rights elevation is possible.
  More to be done on this bug after there is a final decision how the rights
  should be managed : who sees what and what one can do with others' events.

  sql/sql_parse.cc
    1.541 06/04/27 16:40:29 andrey@lmy004. +1 -1
    make events not-personal

  sql/event_timed.cc
    1.49 06/04/27 16:40:29 andrey@lmy004. +1 -1
    make events not-personal

  sql/event_priv.h
    1.21 06/04/27 16:40:29 andrey@lmy004. +0 -1
    make events not-personal

  sql/event.h
    1.28 06/04/27 16:40:29 andrey@lmy004. +1 -1
    make events not-personal

  sql/event.cc
    1.40 06/04/27 16:40:29 andrey@lmy004. +16 -25
    make events not-personal

  scripts/mysql_fix_privilege_tables.sql
    1.45 06/04/27 16:40:29 andrey@lmy004. +2 -2
    make events not personal

  mysql-test/t/events.test
    1.28 06/04/27 16:40:29 andrey@lmy004. +2 -2
    fix the test, but only a bit to make it finish. not changing the result,
    and it will fail

  mysql-test/lib/init_db.sql
    1.27 06/04/27 16:40:28 andrey@lmy004. +1 -1
    make events not personal (bug 17394)

# 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:	lmy004.
# Root:	/work/mysql-5.1-bug17394

--- 1.540/sql/sql_parse.cc	2006-04-25 11:57:27 +03:00
+++ 1.541/sql/sql_parse.cc	2006-04-27 16:40:29 +03:00
@@ -3855,7 +3855,7 @@ end_with_restore_list:
       my_error(ER_TOO_LONG_IDENT, MYF(0), lex->spname->m_name.str);
       goto error;
     }
-    res= evex_show_create_event(thd, lex->spname, lex->et->definer);
+    res= evex_show_create_event(thd, lex->spname);
     break;
   }
   case SQLCOM_CREATE_FUNCTION:                  // UDF function

--- 1.27/mysql-test/t/events.test	2006-04-07 12:29:08 +03:00
+++ 1.28/mysql-test/t/events.test	2006-04-27 16:40:29 +03:00
@@ -251,7 +251,7 @@ SELECT EVENT_CATALOG, EVENT_SCHEMA, EVEN
 CREATE DATABASE events_test2;
 CREATE USER ev_test@localhost;
 GRANT ALL ON events_test.* to ev_test@localhost;
-GRANT ALL on events_test2.* to ev_test@localhost;
+GRANT ALL ON events_test2.* to ev_test@localhost;
 REVOKE EVENT ON events_test2.* FROM ev_test@localhost;
 REVOKE PROCESS on *.* from ev_test@localhost;
 #now we are on con1
@@ -271,6 +271,7 @@ USE events_test;
 SHOW EVENTS;
 #now create an event with the same name but we are different user
 select concat("Let's create some new events from the name of ",user());
+--error ER_EVENT_ALREADY_EXISTS
 create event one_event on schedule every 20 second do select 123;
 create event two_event on schedule every 20 second on completion not preserve comment "two event" do select 123;
 create event three_event on schedule every 20 second on completion preserve comment "three event" do select 123;
@@ -304,7 +305,6 @@ SHOW FULL EVENTS;
 SELECT EVENT_CATALOG, EVENT_SCHEMA, EVENT_NAME, DEFINER, EVENT_BODY, EVENT_TYPE, EXECUTE_AT, INTERVAL_VALUE, INTERVAL_FIELD, STATUS,ON_COMPLETION, EVENT_COMMENT from information_schema.events;
 
 connection ev_con1;
-drop event one_event;
 drop event two_event;
 drop event three_event;
 disconnect ev_con1;

--- 1.39/sql/event.cc	2006-04-07 10:13:20 +03:00
+++ 1.40/sql/event.cc	2006-04-27 16:40:29 +03:00
@@ -510,7 +510,7 @@ evex_open_event_table(THD *thd, enum thr
   SYNOPSIS
     evex_db_find_event_aux()
       thd    Thread context
-      et     evet_timed object containing dbname, name & definer
+      et     event_timed object containing dbname & name
       table  TABLE object for open mysql.event table.
 
   RETURN VALUE
@@ -521,8 +521,7 @@ evex_open_event_table(THD *thd, enum thr
 inline int
 evex_db_find_event_aux(THD *thd, Event_timed *et, TABLE *table)
 {
-  return evex_db_find_event_by_name(thd, et->dbname, et->name,
-                                    et->definer, table);
+  return evex_db_find_event_by_name(thd, et->dbname, et->name, table);
 }
 
 
@@ -544,7 +543,6 @@ evex_db_find_event_aux(THD *thd, Event_t
 int
 evex_db_find_event_by_name(THD *thd, const LEX_STRING dbname,
                           const LEX_STRING ev_name,
-                          const LEX_STRING user_name,
                           TABLE *table)
 {
   byte key[MAX_KEY_LENGTH];
@@ -559,16 +557,13 @@ evex_db_find_event_by_name(THD *thd, con
     same fields.
   */
   if (dbname.length > table->field[EVEX_FIELD_DB]->field_length ||
-      ev_name.length > table->field[EVEX_FIELD_NAME]->field_length ||
-      user_name.length > table->field[EVEX_FIELD_DEFINER]->field_length)
+      ev_name.length > table->field[EVEX_FIELD_NAME]->field_length)
       
     DBUG_RETURN(EVEX_KEY_NOT_FOUND);
 
   table->field[EVEX_FIELD_DB]->store(dbname.str, dbname.length, &my_charset_bin);
   table->field[EVEX_FIELD_NAME]->store(ev_name.str, ev_name.length,
                                        &my_charset_bin);
-  table->field[EVEX_FIELD_DEFINER]->store(user_name.str, user_name.length,
-                                          &my_charset_bin);
 
   key_copy(key, table->record[0], table->key_info, table->key_info->key_length);
 
@@ -740,7 +735,7 @@ db_create_event(THD *thd, Event_timed *e
     goto err;
   }
 
-  DBUG_PRINT("info", ("check existance of an event with the same name"));
+  DBUG_PRINT("info", ("check existence of an event with the same name"));
   if (!evex_db_find_event_aux(thd, et, table))
   {
     if (create_if_not)
@@ -884,15 +879,14 @@ db_update_event(THD *thd, Event_timed *e
       goto err;    
     }
   
-    if (!evex_db_find_event_by_name(thd, new_name->m_db, new_name->m_name,
-                                et->definer, table))
+    if (!evex_db_find_event_by_name(thd,new_name->m_db,new_name->m_name,table))
     {
       my_error(ER_EVENT_ALREADY_EXISTS, MYF(0), new_name->m_name.str);
       goto err;
     }  
   }
   /*
-    ...and then whether there is such an event. don't exchange the blocks
+    ...and then if there is such an event. Don't exchange the blocks
     because you will get error 120 from table handler because new_name will
     overwrite the key and SE will tell us that it cannot find the already found
     row (copied into record[1] later
@@ -959,8 +953,8 @@ err:
 */
 
 static int
-db_find_event(THD *thd, sp_name *name, LEX_STRING *definer, Event_timed **ett,
-              TABLE *tbl, MEM_ROOT *root)
+db_find_event(THD *thd, sp_name *name, Event_timed **ett, TABLE *tbl,
+              MEM_ROOT *root)
 {
   TABLE *table;
   int ret;
@@ -980,8 +974,7 @@ db_find_event(THD *thd, sp_name *name, L
     goto done;
   }
 
-  if ((ret= evex_db_find_event_by_name(thd, name->m_db, name->m_name, *definer,
-                                       table)))
+  if ((ret= evex_db_find_event_by_name(thd, name->m_db, name->m_name, table)))
   {
     my_error(ER_EVENT_DOES_NOT_EXIST, MYF(0), name->m_name.str);
     goto done;    
@@ -1031,8 +1024,7 @@ done:
 */
 
 static int
-evex_load_and_compile_event(THD * thd, sp_name *spn, LEX_STRING definer,
-                            bool use_lock)
+evex_load_and_compile_event(THD * thd, sp_name *spn, bool use_lock)
 {
   int ret= 0;
   MEM_ROOT *tmp_mem_root;
@@ -1047,7 +1039,7 @@ evex_load_and_compile_event(THD * thd, s
 
   thd->reset_n_backup_open_tables_state(&backup);
   /* no need to use my_error() here because db_find_event() has done it */
-  ret= db_find_event(thd, spn, &definer, &ett, NULL, NULL);
+  ret= db_find_event(thd, spn, &ett, NULL, NULL);
   thd->restore_backup_open_tables_state(&backup);
   if (ret)
     goto done;
@@ -1098,7 +1090,6 @@ static int
 evex_remove_from_cache(LEX_STRING *db, LEX_STRING *name, bool use_lock,
                        bool is_drop)
 {
-  //ToDo : Add definer to the tuple (db, name) to become triple
   uint i;
   int ret= 0;
 
@@ -1183,7 +1174,7 @@ evex_create_event(THD *thd, Event_timed 
   if (evex_is_running && et->status == MYSQL_EVENT_ENABLED)
   {
     sp_name spn(et->dbname, et->name);
-    ret= evex_load_and_compile_event(thd, &spn, et->definer, true);
+    ret= evex_load_and_compile_event(thd, &spn, true);
   }
   VOID(pthread_mutex_unlock(&LOCK_evex_running));
 
@@ -1236,11 +1227,11 @@ evex_update_event(THD *thd, Event_timed 
   if (et->status == MYSQL_EVENT_ENABLED)
   {
     if (new_name)
-      ret= evex_load_and_compile_event(thd, new_name, et->definer, false);
+      ret= evex_load_and_compile_event(thd, new_name, false);
     else
     {
       sp_name spn(et->dbname, et->name);
-      ret= evex_load_and_compile_event(thd, &spn, et->definer, false);
+      ret= evex_load_and_compile_event(thd, &spn, false);
     }
     if (ret == EVEX_COMPILE_ERROR)
       my_error(ER_EVENT_COMPILE_ERROR, MYF(0));
@@ -1366,7 +1357,7 @@ evex_drop_event(THD *thd, Event_timed *e
 */
 
 int
-evex_show_create_event(THD *thd, sp_name *spn, LEX_STRING definer)
+evex_show_create_event(THD *thd, sp_name *spn)
 {
   int ret;
   Event_timed *et= NULL;
@@ -1376,7 +1367,7 @@ evex_show_create_event(THD *thd, sp_name
   DBUG_PRINT("enter", ("name: %*s", spn->m_name.length, spn->m_name.str));
 
   thd->reset_n_backup_open_tables_state(&backup);
-  ret= db_find_event(thd, spn, &definer, &et, NULL, thd->mem_root);
+  ret= db_find_event(thd, spn, &et, NULL, thd->mem_root);
   thd->restore_backup_open_tables_state(&backup);
 
   if (et)

--- 1.27/sql/event.h	2006-03-16 14:14:32 +02:00
+++ 1.28/sql/event.h	2006-04-27 16:40:29 +03:00
@@ -312,7 +312,7 @@ int
 evex_open_event_table(THD *thd, enum thr_lock_type lock_type, TABLE **table);
 
 int
-evex_show_create_event(THD *thd, sp_name *spn, LEX_STRING definer);
+evex_show_create_event(THD *thd, sp_name *spn);
 
 int sortcmp_lex_string(LEX_STRING s, LEX_STRING t, CHARSET_INFO *cs);
 

--- 1.20/sql/event_priv.h	2006-02-28 19:33:25 +02:00
+++ 1.21/sql/event_priv.h	2006-04-27 16:40:29 +03:00
@@ -38,7 +38,6 @@ my_time_compare(TIME *a, TIME *b);
 int
 evex_db_find_event_by_name(THD *thd, const LEX_STRING dbname,
                           const LEX_STRING ev_name,
-                          const LEX_STRING user_name,
                           TABLE *table);
 
 int

--- 1.48/sql/event_timed.cc	2006-04-07 10:13:20 +03:00
+++ 1.49/sql/event_timed.cc	2006-04-27 16:40:29 +03:00
@@ -1117,7 +1117,7 @@ Event_timed::update_fields(THD *thd)
   }
 
 
-  if ((ret= evex_db_find_event_by_name(thd, dbname, name, definer, table)))
+  if ((ret= evex_db_find_event_by_name(thd, dbname, name, table)))
     goto done;
 
   store_record(table,record[1]);

--- 1.26/mysql-test/lib/init_db.sql	2006-03-24 18:45:44 +02:00
+++ 1.27/mysql-test/lib/init_db.sql	2006-04-27 16:40:28 +03:00
@@ -631,7 +631,7 @@ CREATE TABLE event (
                         'HIGH_NOT_PRECEDENCE'
                     ) DEFAULT '' NOT NULL,
   comment char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '',
-  PRIMARY KEY  (definer, db, name)
+  PRIMARY KEY  (db, name)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT 'Events';
 
 CREATE DATABASE IF NOT EXISTS cluster;

--- 1.44/scripts/mysql_fix_privilege_tables.sql	2006-03-24 18:48:43 +02:00
+++ 1.45/scripts/mysql_fix_privilege_tables.sql	2006-04-27 16:40:29 +03:00
@@ -570,7 +570,7 @@ DROP PROCEDURE create_log_tables;
 
 CREATE TABLE event (
   db char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '',
-  name char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '',
+  name char(64) CHARACTER SET utf8 NOT NULL default '',
   body longblob NOT NULL,
   definer char(77) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '',
   execute_at DATETIME default NULL,
@@ -636,7 +636,7 @@ SELECT @hadEventPriv :=1 FROM user WHERE
 ALTER TABLE user add Event_priv enum('N','Y') character set utf8 DEFAULT 'N' NOT NULL AFTER Create_user_priv;
 ALTER TABLE db add Event_priv enum('N','Y') character set utf8 DEFAULT 'N' NOT NULL;
 ALTER TABLE event DROP PRIMARY KEY;
-ALTER TABLE event ADD PRIMARY KEY(definer, db, name);
+ALTER TABLE event ADD PRIMARY KEY(db, name);
 ALTER TABLE event ADD sql_mode
                         set('REAL_AS_FLOAT',
                             'PIPES_AS_CONCAT',
Thread
bk commit into 5.1 tree (andrey:1.2367) BUG#17394ahristov27 Apr