diff options
author | unknown <msvensson@neptunus.(none)> | 2006-04-18 10:55:57 +0200 |
---|---|---|
committer | unknown <msvensson@neptunus.(none)> | 2006-04-18 10:55:57 +0200 |
commit | 5c1b70beb8a0dd93d0ffb0ef1944a93ec7a92e10 (patch) | |
tree | 8e7d983bef3a7f0f2eaa63cceb22c2e46534a010 | |
parent | bf8f30b532ef217dac2a168124706d28e19a320f (diff) | |
parent | 3bcbf91376ff05ee9da1736c98998356c3bcbc56 (diff) | |
download | mariadb-git-5c1b70beb8a0dd93d0ffb0ef1944a93ec7a92e10.tar.gz |
Merge 192.168.0.20:mysql/bug13310/my50-bug13310
into neptunus.(none):/home/msvensson/mysql/mysql-5.0
sql/sql_parse.cc:
Auto merged
-rw-r--r-- | mysql-test/r/grant2.result | 13 | ||||
-rw-r--r-- | mysql-test/t/grant2.test | 25 | ||||
-rw-r--r-- | 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 38eadb5a738..1321342c210 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -992,6 +992,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 @@ -1017,11 +1018,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)))) |