diff options
author | Georgi Kodinov <joro@sun.com> | 2009-11-27 11:59:44 +0200 |
---|---|---|
committer | Georgi Kodinov <joro@sun.com> | 2009-11-27 11:59:44 +0200 |
commit | 2ac344ecf662f6b5d901825850e3b5568ab91174 (patch) | |
tree | c045dabae4e0b466721e1464fbd22b1f41b1acda /sql/sql_acl.cc | |
parent | 97d74332c2edd81754f3771f4212fa653f8c7864 (diff) | |
download | mariadb-git-2ac344ecf662f6b5d901825850e3b5568ab91174.tar.gz |
Bug #48872 : Privileges for stored functions ignored if function name
is mixed case
Transcode the procedure name to lowercase when searching for it in the
hash. This is the missing part of the fix for bug #41049.
Diffstat (limited to 'sql/sql_acl.cc')
-rw-r--r-- | sql/sql_acl.cc | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index d04a81e2b0a..f29baad9a84 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -2280,14 +2280,17 @@ static GRANT_NAME *name_hash_search(HASH *name_hash, const char *host,const char* ip, const char *db, const char *user, const char *tname, - bool exact) + bool exact, bool name_tolower) { - char helping [NAME_LEN*2+USERNAME_LENGTH+3]; + char helping [NAME_LEN*2+USERNAME_LENGTH+3], *name_ptr; uint len; GRANT_NAME *grant_name,*found=0; HASH_SEARCH_STATE state; - len = (uint) (strmov(strmov(strmov(helping,user)+1,db)+1,tname)-helping)+ 1; + name_ptr= strmov(strmov(helping, user) + 1, db) + 1; + len = (uint) (strmov(name_ptr, tname) - helping) + 1; + if (name_tolower) + my_casedn_str(files_charset_info, name_ptr); for (grant_name= (GRANT_NAME*) hash_first(name_hash, (byte*) helping, len, &state); grant_name ; @@ -2320,7 +2323,7 @@ routine_hash_search(const char *host, const char *ip, const char *db, { return (GRANT_TABLE*) name_hash_search(proc ? &proc_priv_hash : &func_priv_hash, - host, ip, db, user, tname, exact); + host, ip, db, user, tname, exact, TRUE); } @@ -2329,7 +2332,7 @@ table_hash_search(const char *host, const char *ip, const char *db, const char *user, const char *tname, bool exact) { return (GRANT_TABLE*) name_hash_search(&column_priv_hash, host, ip, db, - user, tname, exact); + user, tname, exact, FALSE); } |