summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <pem@mysql.com>2004-03-02 16:01:02 +0100
committerunknown <pem@mysql.com>2004-03-02 16:01:02 +0100
commit5aa57221d8b40a0b5146c9af027cdd2dc15af737 (patch)
tree44ee211da6bb3cf7d540abe97ce21180a5ffc0b5 /sql
parente55c4ed179c5703f7b0c4b5ea2a4f9c6c59d0b20 (diff)
parent857b59578c61a15b842f30c1a9b1e0fad8c868a3 (diff)
downloadmariadb-git-5aa57221d8b40a0b5146c9af027cdd2dc15af737.tar.gz
Merge mysql.com:/usr/local/bk/mysql-5.0
into mysql.com:/home/pem/work/mysql-5.0 sql/sp_head.cc: Auto merged sql/sql_parse.cc: Auto merged
Diffstat (limited to 'sql')
-rw-r--r--sql/sp_head.cc3
-rw-r--r--sql/sql_acl.cc22
-rw-r--r--sql/sql_parse.cc4
3 files changed, 28 insertions, 1 deletions
diff --git a/sql/sp_head.cc b/sql/sp_head.cc
index d43ac54e57d..eebe02c1834 100644
--- a/sql/sp_head.cc
+++ b/sql/sp_head.cc
@@ -842,7 +842,10 @@ sp_instr_stmt::exec_stmt(THD *thd, LEX *lex)
thd->lex->unit.thd= thd; // QQ Not reentrant
freelist= thd->free_list;
thd->free_list= NULL;
+
+ VOID(pthread_mutex_lock(&LOCK_thread_count));
thd->query_id= query_id++;
+ VOID(pthread_mutex_unlock(&LOCK_thread_count));
// Copy WHERE clause pointers to avoid damaging by optimisation
// Also clear ref_pointer_arrays.
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index 5febb49e110..d294055ff8a 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -794,6 +794,7 @@ int acl_getroot_no_password(THD *thd)
{
ulong user_access= NO_ACCESS;
int res= 1;
+ uint i;
ACL_USER *acl_user= 0;
DBUG_ENTER("acl_getroot_no_password");
@@ -810,13 +811,16 @@ int acl_getroot_no_password(THD *thd)
VOID(pthread_mutex_lock(&acl_cache->lock));
+ thd->master_access= 0;
+ thd->db_access= 0;
+
/*
Find acl entry in user database.
This is specially tailored to suit the check we do for CALL of
a stored procedure; thd->user is set to what is actually a
priv_user, which can be ''.
*/
- for (uint i=0 ; i < acl_users.elements ; i++)
+ for (i=0 ; i < acl_users.elements ; i++)
{
acl_user= dynamic_element(&acl_users,i,ACL_USER*);
if ((!acl_user->user && (!thd->user || !thd->user[0])) ||
@@ -832,6 +836,22 @@ int acl_getroot_no_password(THD *thd)
if (acl_user)
{
+ for (i=0 ; i < acl_dbs.elements ; i++)
+ {
+ ACL_DB *acl_db= dynamic_element(&acl_dbs, i, ACL_DB*);
+ if (!acl_db->user ||
+ (thd->user && thd->user[0] && !strcmp(thd->user, acl_db->user)))
+ {
+ if (compare_hostname(&acl_db->host, thd->host, thd->ip))
+ {
+ if (!acl_db->db || (thd->db && !strcmp(acl_db->db, thd->db)))
+ {
+ thd->db_access= acl_db->access;
+ break;
+ }
+ }
+ }
+ }
thd->master_access= acl_user->access;
thd->priv_user= acl_user->user ? thd->user : (char *) "";
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 9de3247496c..273e994189f 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -1086,6 +1086,10 @@ extern "C" pthread_handler_decl(handle_bootstrap,arg)
thd->query_length=length;
thd->query= thd->memdup_w_gap(buff, length+1, thd->db_length+1);
thd->query[length] = '\0';
+ /*
+ We don't need to obtain LOCK_thread_count here because in bootstrap
+ mode we have only one thread.
+ */
thd->query_id=query_id++;
if (mqh_used && thd->user_connect && check_mqh(thd, SQLCOM_END))
{