From 13062cbad63ec17b47865ceb13718771db060a9b Mon Sep 17 00:00:00 2001 From: "msvensson@shellback.(none)" <> Date: Tue, 18 Apr 2006 10:46:17 +0200 Subject: [PATCH 1/3] BUG#13310 incorrect user parsing by SP - Strip surrounding ''s from username when a new user connects. There is no user 'a@', it should be a@ --- mysql-test/r/grant2.result | 13 +++++++++++++ mysql-test/t/grant2.test | 25 +++++++++++++++++++++++++ sql/sql_parse.cc | 15 ++++++++++++--- 3 files changed, 50 insertions(+), 3 deletions(-) diff --git a/mysql-test/r/grant2.result b/mysql-test/r/grant2.result index a42ad0d79a5..fa25df3203f 100644 --- a/mysql-test/r/grant2.result +++ b/mysql-test/r/grant2.result @@ -356,3 +356,16 @@ insert into mysql.user select * from t1; drop table t1, t2; drop database TESTDB; flush privileges; +grant all privileges on test.* to `a@`@localhost; +grant execute on * to `a@`@localhost; +create table t2 (s1 int); +insert into t2 values (1); +drop function if exists f2; +create function f2 () returns int begin declare v int; select s1 from t2 +into v; return v; end// +select f2(); +f2() +1 +drop function f2; +drop table t2; +REVOKE ALL PRIVILEGES, GRANT OPTION FROM `a@`@localhost; diff --git a/mysql-test/t/grant2.test b/mysql-test/t/grant2.test index 2c62d2f1bd3..32232360afa 100644 --- a/mysql-test/t/grant2.test +++ b/mysql-test/t/grant2.test @@ -465,3 +465,28 @@ drop table t1, t2; drop database TESTDB; flush privileges; +# +# BUG#13310 incorrect user parsing by SP +# + +grant all privileges on test.* to `a@`@localhost; +grant execute on * to `a@`@localhost; +connect (bug13310,localhost,'a@',,test); +connection bug13310; +create table t2 (s1 int); +insert into t2 values (1); +--disable_warnings +drop function if exists f2; +--enable_warnings +delimiter //; +create function f2 () returns int begin declare v int; select s1 from t2 +into v; return v; end// +delimiter ;// +select f2(); + +drop function f2; +drop table t2; +disconnect bug13310; + +connection default; +REVOKE ALL PRIVILEGES, GRANT OPTION FROM `a@`@localhost; diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index d9f5499f362..e163a7a1093 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -993,6 +993,7 @@ static int check_connection(THD *thd) char *user= end; char *passwd= strend(user)+1; + uint user_len= passwd - user - 1; char *db= passwd; char db_buff[NAME_LEN+1]; // buffer to store db in utf8 char user_buff[USERNAME_LENGTH+1]; // buffer to store user in utf8 @@ -1018,11 +1019,19 @@ static int check_connection(THD *thd) db= db_buff; } - user_buff[copy_and_convert(user_buff, sizeof(user_buff)-1, - system_charset_info, user, strlen(user), - thd->charset(), &dummy_errors)]= '\0'; + user_buff[user_len= copy_and_convert(user_buff, sizeof(user_buff)-1, + system_charset_info, user, user_len, + thd->charset(), &dummy_errors)]= '\0'; user= user_buff; + /* If username starts and ends in "'", chop them off */ + if (user_len > 1 && user[0] == '\'' && user[user_len - 1] == '\'') + { + user[user_len-1]= 0; + user++; + user_len-= 2; + } + if (thd->main_security_ctx.user) x_free(thd->main_security_ctx.user); if (!(thd->main_security_ctx.user= my_strdup(user, MYF(0)))) From 3f683e2ba4eb8f823e66fa703fbe871b6fee4e65 Mon Sep 17 00:00:00 2001 From: "msvensson@neptunus.(none)" <> Date: Tue, 18 Apr 2006 18:10:47 +0200 Subject: [PATCH 2/3] Cleanup test cases that leaves "stuff" behind --- mysql-test/r/ctype_latin2_ch.result | 1 + mysql-test/r/grant2.result | 1 + mysql-test/r/openssl_1.result | 5 ++--- mysql-test/r/rpl_openssl.result | 3 ++- mysql-test/r/sp-security.result | 1 + mysql-test/r/sp_notembedded.result | 1 + mysql-test/r/trigger.result | 2 +- mysql-test/t/ctype_latin2_ch.test | 2 ++ mysql-test/t/grant2.test | 1 + mysql-test/t/openssl_1.test | 6 +++--- mysql-test/t/rpl_openssl.test | 1 + mysql-test/t/sp-security.test | 1 + mysql-test/t/sp_notembedded.test | 1 + mysql-test/t/trigger.test | 2 +- 14 files changed, 19 insertions(+), 9 deletions(-) diff --git a/mysql-test/r/ctype_latin2_ch.result b/mysql-test/r/ctype_latin2_ch.result index 2b3765c07c4..5b607872737 100644 --- a/mysql-test/r/ctype_latin2_ch.result +++ b/mysql-test/r/ctype_latin2_ch.result @@ -28,3 +28,4 @@ select * from t1 ignore index (primary) where tt like 'AA%'; id tt select * from t1 where tt like '%AA%'; id tt +drop table t1; diff --git a/mysql-test/r/grant2.result b/mysql-test/r/grant2.result index fa25df3203f..eb9e95c40bd 100644 --- a/mysql-test/r/grant2.result +++ b/mysql-test/r/grant2.result @@ -369,3 +369,4 @@ f2() drop function f2; drop table t2; REVOKE ALL PRIVILEGES, GRANT OPTION FROM `a@`@localhost; +drop user `a@`@localhost; diff --git a/mysql-test/r/openssl_1.result b/mysql-test/r/openssl_1.result index 77f2d5495a9..91382619b6c 100644 --- a/mysql-test/r/openssl_1.result +++ b/mysql-test/r/openssl_1.result @@ -38,7 +38,6 @@ f1 5 delete from t1; ERROR 42000: DELETE command denied to user 'ssl_user4'@'localhost' for table 't1' -delete from mysql.user where user='ssl_user%'; -delete from mysql.db where user='ssl_user%'; -flush privileges; +drop user ssl_user1@localhost, ssl_user2@localhost, +ssl_user3@localhost, ssl_user4@localhost; drop table t1; diff --git a/mysql-test/r/rpl_openssl.result b/mysql-test/r/rpl_openssl.result index d916e9f2c5c..c10606bc03f 100644 --- a/mysql-test/r/rpl_openssl.result +++ b/mysql-test/r/rpl_openssl.result @@ -24,7 +24,8 @@ Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File stop slave; change master to master_user='root',master_password='', master_ssl=0; start slave; +drop user replssl@localhost; drop table t1; show slave status; Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master -# 127.0.0.1 root MASTER_MYPORT 1 master-bin.000001 474 # # master-bin.000001 Yes Yes 0 0 474 # None 0 No MYSQL_TEST_DIR/std_data/cacert.pem MYSQL_TEST_DIR/std_data/client-cert.pem MYSQL_TEST_DIR/std_data/client-key.pem # +# 127.0.0.1 root MASTER_MYPORT 1 master-bin.000001 564 # # master-bin.000001 Yes Yes 0 0 564 # None 0 No MYSQL_TEST_DIR/std_data/cacert.pem MYSQL_TEST_DIR/std_data/client-cert.pem MYSQL_TEST_DIR/std_data/client-key.pem # diff --git a/mysql-test/r/sp-security.result b/mysql-test/r/sp-security.result index 896b6fa572c..04f2f58ba37 100644 --- a/mysql-test/r/sp-security.result +++ b/mysql-test/r/sp-security.result @@ -322,6 +322,7 @@ 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; +drop user user_bug7787@localhost; use test; ---> connection: root diff --git a/mysql-test/r/sp_notembedded.result b/mysql-test/r/sp_notembedded.result index d434f5c32ce..e39ddd1d79d 100644 --- a/mysql-test/r/sp_notembedded.result +++ b/mysql-test/r/sp_notembedded.result @@ -204,3 +204,4 @@ drop procedure bug10100pv| drop procedure bug10100pd| drop procedure bug10100pc| drop view v1| +drop table t3| diff --git a/mysql-test/r/trigger.result b/mysql-test/r/trigger.result index 681b805f547..f897af6d69f 100644 --- a/mysql-test/r/trigger.result +++ b/mysql-test/r/trigger.result @@ -949,7 +949,7 @@ insert into t1 values create function f2() returns int return (select max(b) from t2); insert into t2 select a, f2() from t1; load data infile '../std_data_ln/words.dat' into table t1 (a) set b:= f1(); -drop table t1; +drop table t1, t2; drop function f1; drop function f2; DROP TABLE IF EXISTS t1; diff --git a/mysql-test/t/ctype_latin2_ch.test b/mysql-test/t/ctype_latin2_ch.test index 626d83fa17d..3925d02659d 100644 --- a/mysql-test/t/ctype_latin2_ch.test +++ b/mysql-test/t/ctype_latin2_ch.test @@ -28,3 +28,5 @@ select * from t1 ignore index (primary) where tt like 'AA%'; select * from t1 where tt like '%AA%'; # End of 4.1 tests + +drop table t1; diff --git a/mysql-test/t/grant2.test b/mysql-test/t/grant2.test index 32232360afa..2b9a273df7e 100644 --- a/mysql-test/t/grant2.test +++ b/mysql-test/t/grant2.test @@ -490,3 +490,4 @@ disconnect bug13310; connection default; REVOKE ALL PRIVILEGES, GRANT OPTION FROM `a@`@localhost; +drop user `a@`@localhost; diff --git a/mysql-test/t/openssl_1.test b/mysql-test/t/openssl_1.test index 359b8b69a4d..4cc9113048f 100644 --- a/mysql-test/t/openssl_1.test +++ b/mysql-test/t/openssl_1.test @@ -48,9 +48,9 @@ select * from t1; delete from t1; connection default; -delete from mysql.user where user='ssl_user%'; -delete from mysql.db where user='ssl_user%'; -flush privileges; +drop user ssl_user1@localhost, ssl_user2@localhost, +ssl_user3@localhost, ssl_user4@localhost; + drop table t1; # End of 4.1 tests diff --git a/mysql-test/t/rpl_openssl.test b/mysql-test/t/rpl_openssl.test index e15eb9b179a..7d769ad448e 100644 --- a/mysql-test/t/rpl_openssl.test +++ b/mysql-test/t/rpl_openssl.test @@ -53,6 +53,7 @@ stop slave; change master to master_user='root',master_password='', master_ssl=0; start slave; connection master; +drop user replssl@localhost; drop table t1; save_master_pos; connection slave; diff --git a/mysql-test/t/sp-security.test b/mysql-test/t/sp-security.test index f369dc64b0e..a8c3c0a22eb 100644 --- a/mysql-test/t/sp-security.test +++ b/mysql-test/t/sp-security.test @@ -545,6 +545,7 @@ GRANT EXECUTE ON PROCEDURE p1 TO user_bug7787@localhost; # Cleanup. DROP DATABASE db_bug7787; +drop user user_bug7787@localhost; use test; diff --git a/mysql-test/t/sp_notembedded.test b/mysql-test/t/sp_notembedded.test index 3854297ec0c..4eb429156b2 100644 --- a/mysql-test/t/sp_notembedded.test +++ b/mysql-test/t/sp_notembedded.test @@ -258,5 +258,6 @@ drop procedure bug10100pv| drop procedure bug10100pd| drop procedure bug10100pc| drop view v1| +drop table t3| delimiter ;| diff --git a/mysql-test/t/trigger.test b/mysql-test/t/trigger.test index a0b67b2204d..8f225b1ef0d 100644 --- a/mysql-test/t/trigger.test +++ b/mysql-test/t/trigger.test @@ -1111,7 +1111,7 @@ insert into t1 values create function f2() returns int return (select max(b) from t2); insert into t2 select a, f2() from t1; load data infile '../std_data_ln/words.dat' into table t1 (a) set b:= f1(); -drop table t1; +drop table t1, t2; drop function f1; drop function f2; From d1640175dbe68a21b965a38e6c7e63990bb64059 Mon Sep 17 00:00:00 2001 From: "msvensson@neptunus.(none)" <> Date: Fri, 21 Apr 2006 12:30:33 +0200 Subject: [PATCH 3/3] Don't run mysqld when started in ddd Maybe we should do the same for gdb? --- mysql-test/mysql-test-run.pl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index a045441e046..15c1817bdf4 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -3212,8 +3212,7 @@ sub ddd_arguments { "break mysql_parse\n" . "commands 1\n" . "disable 1\n" . - "end\n" . - "run"); + "end"); } if ( $opt_manual_ddd )