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#17394 | ahristov | 27 Apr |