Commit 7f7f4f30 authored by unknown's avatar unknown

fixes for "backport wild_compare fix from 4.1 - bug#3924"


sql/sql_acl.cc:
  don't use acl_cache for GRANT
sql/sql_parse.cc:
  fixed backporting error in "backport wild_compare fix from 4.1 - bug#3924"
parent c5ad0fc0
...@@ -855,6 +855,9 @@ static void acl_insert_db(const char *user, const char *host, const char *db, ...@@ -855,6 +855,9 @@ static void acl_insert_db(const char *user, const char *host, const char *db,
/* /*
Get privilege for a host, user and db combination Get privilege for a host, user and db combination
as db_is_pattern changes the semantics of comparison,
acl_cache is not used if db_is_pattern is set.
*/ */
ulong acl_get(const char *host, const char *ip, const char *bin_ip, ulong acl_get(const char *host, const char *ip, const char *bin_ip,
...@@ -875,7 +878,7 @@ ulong acl_get(const char *host, const char *ip, const char *bin_ip, ...@@ -875,7 +878,7 @@ ulong acl_get(const char *host, const char *ip, const char *bin_ip,
db=tmp_db; db=tmp_db;
} }
key_length=(uint) (end-key); key_length=(uint) (end-key);
if ((entry=(acl_entry*) acl_cache->search(key,key_length))) if (!db_is_pattern && (entry=(acl_entry*) acl_cache->search(key,key_length)))
{ {
db_access=entry->access; db_access=entry->access;
VOID(pthread_mutex_unlock(&acl_cache->lock)); VOID(pthread_mutex_unlock(&acl_cache->lock));
...@@ -923,7 +926,8 @@ ulong acl_get(const char *host, const char *ip, const char *bin_ip, ...@@ -923,7 +926,8 @@ ulong acl_get(const char *host, const char *ip, const char *bin_ip,
} }
exit: exit:
/* Save entry in cache for quick retrieval */ /* Save entry in cache for quick retrieval */
if ((entry= (acl_entry*) malloc(sizeof(acl_entry)+key_length))) if (!db_is_pattern &&
(entry= (acl_entry*) malloc(sizeof(acl_entry)+key_length)))
{ {
entry->access=(db_access & host_access); entry->access=(db_access & host_access);
entry->length=key_length; entry->length=key_length;
......
...@@ -2727,7 +2727,7 @@ check_access(THD *thd, ulong want_access, const char *db, ulong *save_priv, ...@@ -2727,7 +2727,7 @@ check_access(THD *thd, ulong want_access, const char *db, ulong *save_priv,
if (!(thd->master_access & SELECT_ACL) && if (!(thd->master_access & SELECT_ACL) &&
(db && (!thd->db || strcmp(db,thd->db)))) (db && (!thd->db || strcmp(db,thd->db))))
db_access=acl_get(thd->host, thd->ip, (char*) &thd->remote.sin_addr, db_access=acl_get(thd->host, thd->ip, (char*) &thd->remote.sin_addr,
thd->priv_user, db, 0); /* purecov: inspected */ thd->priv_user, db, test(want_access & GRANT_ACL));
*save_priv=thd->master_access | db_access; *save_priv=thd->master_access | db_access;
DBUG_RETURN(FALSE); DBUG_RETURN(FALSE);
} }
...@@ -2747,7 +2747,7 @@ check_access(THD *thd, ulong want_access, const char *db, ulong *save_priv, ...@@ -2747,7 +2747,7 @@ check_access(THD *thd, ulong want_access, const char *db, ulong *save_priv,
if (db && (!thd->db || strcmp(db,thd->db))) if (db && (!thd->db || strcmp(db,thd->db)))
db_access=acl_get(thd->host, thd->ip, (char*) &thd->remote.sin_addr, db_access=acl_get(thd->host, thd->ip, (char*) &thd->remote.sin_addr,
thd->priv_user, db, 0); /* purecov: inspected */ thd->priv_user, db, test(want_access & GRANT_ACL));
else else
db_access=thd->db_access; db_access=thd->db_access;
// Remove SHOW attribute and access rights we already have // Remove SHOW attribute and access rights we already have
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment