summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <monty@mashka.mysql.fi>2002-09-22 10:59:33 +0300
committerunknown <monty@mashka.mysql.fi>2002-09-22 10:59:33 +0300
commit6546f36e2d8378f224114b88cae3806684990162 (patch)
tree9bdcec4c2cce4db72873b8d790dc4c3c011c5f0f
parentcc71ac185d1dcef30a964b5f0b98ef4ebce263d1 (diff)
parent0e88d440d689cb8805bab3a7bcca274e0aa5c975 (diff)
downloadmariadb-git-6546f36e2d8378f224114b88cae3806684990162.tar.gz
Merge with 3.23.53
Docs/manual.texi: Auto merged sql/lock.cc: Auto merged sql/sql_show.cc: Auto merged sql/sql_table.cc: Auto merged tests/grant.pl: Auto merged sql/sql_acl.cc: Merge with 3.23.53 (fixes problem with critical region in GRANT) sql/sql_insert.cc: Merge with 3.23.53 (no changes) sql/sql_parse.cc: Merge with 3.23.53 (no changes) sql/sql_udf.cc: Merge with 3.23.53 (indent change) sql/table.h: Merge with 3.23.53 (no changes)
-rw-r--r--Docs/manual.texi6
-rw-r--r--sql/sql_acl.cc20
-rw-r--r--sql/sql_show.cc2
-rw-r--r--sql/sql_udf.cc2
-rw-r--r--tests/grant.pl2
5 files changed, 24 insertions, 8 deletions
diff --git a/Docs/manual.texi b/Docs/manual.texi
index 7c108bc2d74..6f7737d4917 100644
--- a/Docs/manual.texi
+++ b/Docs/manual.texi
@@ -51252,10 +51252,16 @@ not yet 100% confident in this code.
@item
Fixed core dump bug when using the @code{BINARY} cast on a @code{NULL} value.
@item
+Fixed race condition when someone did a @code{GRANT} at the same time a new
+user logged in or did a @code{USE DATABASE}.
+@item
Fixed bug in @code{ALTER TABLE} and @code{RENAME TABLE} when running with
@code{-O lower_case_table_names=1} (typically on windows) when giving the
table name in uppercase.
@item
+Fixed that @code{-O lower_case_table_names=1} also converts database
+names to lower case.
+@item
Fixed unlikely core dump with @code{SELECT ... ORDER BY ... LIMIT}.
@item
Changed @code{AND/OR} to report that they can return NULL. This fixes a
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index 6ff93eecedd..0705762e311 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -2033,6 +2033,7 @@ int mysql_table_grant (THD *thd, TABLE_LIST *table_list,
while ((Str = str_list++))
{
+ int error;
GRANT_TABLE *grant_table;
if (!Str->host.str)
{
@@ -2047,8 +2048,11 @@ int mysql_table_grant (THD *thd, TABLE_LIST *table_list,
continue;
}
/* Create user if needed */
- if (replace_user_table(thd, tables[0].table, *Str,
- 0, revoke_grant, create_new_users))
+ pthread_mutex_lock(&acl_cache->lock);
+ error=replace_user_table(thd, tables[0].table, *Str,
+ 0, revoke_grant, create_new_users);
+ pthread_mutex_unlock(&acl_cache->lock);
+ if (error)
{
result= -1; // Remember error
continue; // Add next user
@@ -2064,7 +2068,7 @@ int mysql_table_grant (THD *thd, TABLE_LIST *table_list,
{
my_printf_error(ER_NONEXISTING_TABLE_GRANT,
ER(ER_NONEXISTING_TABLE_GRANT),MYF(0),
- Str->user.str, Str->host.str, table_list->alias);
+ Str->user.str, Str->host.str, table_list->real_name);
result= -1;
continue;
}
@@ -2593,6 +2597,7 @@ bool check_grant_db(THD *thd,const char *db)
ulong get_table_grant(THD *thd, TABLE_LIST *table)
{
+ uint privilege;
char *user = thd->priv_user;
const char *db = table->db ? table->db : thd->db;
GRANT_TABLE *grant_table;
@@ -2604,8 +2609,9 @@ ulong get_table_grant(THD *thd, TABLE_LIST *table)
table->grant.version=grant_version;
if (grant_table)
table->grant.privilege|= grant_table->privs;
+ privilege= table->grant.privilege;
pthread_mutex_unlock(&LOCK_grant);
- return table->grant.privilege;
+ return privilege;
}
@@ -2716,6 +2722,7 @@ int mysql_show_grants(THD *thd,LEX_USER *lex_user)
if (send_fields(thd,field_list,1))
DBUG_RETURN(-1);
+ pthread_mutex_lock(&LOCK_grant);
VOID(pthread_mutex_lock(&acl_cache->lock));
/* Add first global access grants */
@@ -2971,13 +2978,16 @@ int mysql_show_grants(THD *thd,LEX_USER *lex_user)
thd->packet.length()))
{
error=-1;
- goto end;
+ break;
}
}
}
}
+
end:
VOID(pthread_mutex_unlock(&acl_cache->lock));
+ pthread_mutex_unlock(&LOCK_grant);
+
send_eof(&thd->net);
DBUG_RETURN(error);
}
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index d9e007bf314..ef8fce455b1 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -424,7 +424,7 @@ int mysqld_extend_show_tables(THD *thd,const char *db,const char *wild)
/***************************************************************************
-** List all columns in a table
+** List all columns in a table_list->real_name
***************************************************************************/
int
diff --git a/sql/sql_udf.cc b/sql/sql_udf.cc
index 1e7da96174d..daf02b1c6d6 100644
--- a/sql/sql_udf.cc
+++ b/sql/sql_udf.cc
@@ -141,7 +141,7 @@ void udf_init()
new_thd->db_length=5;
bzero((gptr) &tables,sizeof(tables));
- tables.alias= tables.real_name = (char*) "func";
+ tables.alias= tables.real_name= (char*) "func";
tables.lock_type = TL_READ;
tables.db=new_thd->db;
diff --git a/tests/grant.pl b/tests/grant.pl
index 6da4326d465..1cd72af48fe 100644
--- a/tests/grant.pl
+++ b/tests/grant.pl
@@ -304,7 +304,7 @@ safe_query("revoke GRANT OPTION on $opt_database.test from $user",1);
#
safe_query("grant select(a) on $opt_database.test to $user");
-user_query("show columns from test");
+user_query("show full columns from test");
safe_query("grant insert (b), update (b) on $opt_database.test to $user");
user_query("select count(a) from test");