summaryrefslogtreecommitdiff
path: root/sql/sql_acl.cc
diff options
context:
space:
mode:
authorGeorgi Kodinov <joro@sun.com>2009-11-27 11:59:44 +0200
committerGeorgi Kodinov <joro@sun.com>2009-11-27 11:59:44 +0200
commit2ac344ecf662f6b5d901825850e3b5568ab91174 (patch)
treec045dabae4e0b466721e1464fbd22b1f41b1acda /sql/sql_acl.cc
parent97d74332c2edd81754f3771f4212fa653f8c7864 (diff)
downloadmariadb-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.cc13
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);
}