mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
5.0-bugteam->5.1-bugteam merge
This commit is contained in:
@ -263,8 +263,7 @@ my_bool acl_init(bool dont_read_acl_tables)
|
||||
acl_cache= new hash_filo(ACL_CACHE_SIZE, 0, 0,
|
||||
(hash_get_key) acl_entry_get_key,
|
||||
(hash_free_key) free,
|
||||
lower_case_file_system ?
|
||||
system_charset_info : &my_charset_bin);
|
||||
&my_charset_utf8_bin);
|
||||
if (dont_read_acl_tables)
|
||||
{
|
||||
DBUG_RETURN(0); /* purecov: tested */
|
||||
@ -2251,12 +2250,13 @@ public:
|
||||
ulong sort;
|
||||
size_t key_length;
|
||||
GRANT_NAME(const char *h, const char *d,const char *u,
|
||||
const char *t, ulong p);
|
||||
GRANT_NAME (TABLE *form);
|
||||
const char *t, ulong p, bool is_routine);
|
||||
GRANT_NAME (TABLE *form, bool is_routine);
|
||||
virtual ~GRANT_NAME() {};
|
||||
virtual bool ok() { return privs != 0; }
|
||||
void set_user_details(const char *h, const char *d,
|
||||
const char *u, const char *t);
|
||||
const char *u, const char *t,
|
||||
bool is_routine);
|
||||
};
|
||||
|
||||
|
||||
@ -2275,7 +2275,8 @@ public:
|
||||
|
||||
|
||||
void GRANT_NAME::set_user_details(const char *h, const char *d,
|
||||
const char *u, const char *t)
|
||||
const char *u, const char *t,
|
||||
bool is_routine)
|
||||
{
|
||||
/* Host given by user */
|
||||
update_hostname(&host, strdup_root(&memex, h));
|
||||
@ -2290,7 +2291,7 @@ void GRANT_NAME::set_user_details(const char *h, const char *d,
|
||||
if (tname != t)
|
||||
{
|
||||
tname= strdup_root(&memex, t);
|
||||
if (lower_case_table_names)
|
||||
if (lower_case_table_names || is_routine)
|
||||
my_casedn_str(files_charset_info, tname);
|
||||
}
|
||||
key_length= strlen(d) + strlen(u)+ strlen(t)+3;
|
||||
@ -2299,22 +2300,22 @@ void GRANT_NAME::set_user_details(const char *h, const char *d,
|
||||
}
|
||||
|
||||
GRANT_NAME::GRANT_NAME(const char *h, const char *d,const char *u,
|
||||
const char *t, ulong p)
|
||||
const char *t, ulong p, bool is_routine)
|
||||
:db(0), tname(0), privs(p)
|
||||
{
|
||||
set_user_details(h, d, u, t);
|
||||
set_user_details(h, d, u, t, is_routine);
|
||||
}
|
||||
|
||||
GRANT_TABLE::GRANT_TABLE(const char *h, const char *d,const char *u,
|
||||
const char *t, ulong p, ulong c)
|
||||
:GRANT_NAME(h,d,u,t,p), cols(c)
|
||||
:GRANT_NAME(h,d,u,t,p, FALSE), cols(c)
|
||||
{
|
||||
(void) hash_init2(&hash_columns,4,system_charset_info,
|
||||
0,0,0, (hash_get_key) get_key_column,0,0);
|
||||
}
|
||||
|
||||
|
||||
GRANT_NAME::GRANT_NAME(TABLE *form)
|
||||
GRANT_NAME::GRANT_NAME(TABLE *form, bool is_routine)
|
||||
{
|
||||
update_hostname(&host, get_field(&memex, form->field[0]));
|
||||
db= get_field(&memex,form->field[1]);
|
||||
@ -2332,6 +2333,9 @@ GRANT_NAME::GRANT_NAME(TABLE *form)
|
||||
if (lower_case_table_names)
|
||||
{
|
||||
my_casedn_str(files_charset_info, db);
|
||||
}
|
||||
if (lower_case_table_names || is_routine)
|
||||
{
|
||||
my_casedn_str(files_charset_info, tname);
|
||||
}
|
||||
key_length= (strlen(db) + strlen(user) + strlen(tname) + 3);
|
||||
@ -2343,7 +2347,7 @@ GRANT_NAME::GRANT_NAME(TABLE *form)
|
||||
|
||||
|
||||
GRANT_TABLE::GRANT_TABLE(TABLE *form, TABLE *col_privs)
|
||||
:GRANT_NAME(form)
|
||||
:GRANT_NAME(form, FALSE)
|
||||
{
|
||||
uchar key[MAX_KEY_LENGTH];
|
||||
|
||||
@ -3338,7 +3342,7 @@ bool mysql_routine_grant(THD *thd, TABLE_LIST *table_list, bool is_proc,
|
||||
}
|
||||
grant_name= new GRANT_NAME(Str->host.str, db_name,
|
||||
Str->user.str, table_name,
|
||||
rights);
|
||||
rights, TRUE);
|
||||
if (!grant_name)
|
||||
{
|
||||
result= TRUE;
|
||||
@ -3549,10 +3553,10 @@ static my_bool grant_load_procs_priv(TABLE *p_table)
|
||||
MEM_ROOT **save_mem_root_ptr= my_pthread_getspecific_ptr(MEM_ROOT**,
|
||||
THR_MALLOC);
|
||||
DBUG_ENTER("grant_load_procs_priv");
|
||||
(void) hash_init(&proc_priv_hash,system_charset_info,
|
||||
(void) hash_init(&proc_priv_hash, &my_charset_utf8_bin,
|
||||
0,0,0, (hash_get_key) get_grant_table,
|
||||
0,0);
|
||||
(void) hash_init(&func_priv_hash,system_charset_info,
|
||||
(void) hash_init(&func_priv_hash, &my_charset_utf8_bin,
|
||||
0,0,0, (hash_get_key) get_grant_table,
|
||||
0,0);
|
||||
p_table->file->ha_index_init(0, 1);
|
||||
@ -3566,7 +3570,7 @@ static my_bool grant_load_procs_priv(TABLE *p_table)
|
||||
{
|
||||
GRANT_NAME *mem_check;
|
||||
HASH *hash;
|
||||
if (!(mem_check=new (memex_ptr) GRANT_NAME(p_table)))
|
||||
if (!(mem_check=new (memex_ptr) GRANT_NAME(p_table, TRUE)))
|
||||
{
|
||||
/* This could only happen if we are out memory */
|
||||
goto end_unlock;
|
||||
@ -3650,7 +3654,7 @@ static my_bool grant_load(THD *thd, TABLE_LIST *tables)
|
||||
|
||||
thd->variables.sql_mode&= ~MODE_PAD_CHAR_TO_FULL_LENGTH;
|
||||
|
||||
(void) hash_init(&column_priv_hash,system_charset_info,
|
||||
(void) hash_init(&column_priv_hash, &my_charset_utf8_bin,
|
||||
0,0,0, (hash_get_key) get_grant_table,
|
||||
(hash_free_key) free_grant_table,0);
|
||||
|
||||
@ -5452,7 +5456,8 @@ static int handle_grant_struct(uint struct_no, bool drop,
|
||||
host name
|
||||
*/
|
||||
grant_name->set_user_details(user_to->host.str, grant_name->db,
|
||||
user_to->user.str, grant_name->tname);
|
||||
user_to->user.str, grant_name->tname,
|
||||
TRUE);
|
||||
|
||||
/*
|
||||
Since username is part of the hash key, when the user name
|
||||
@ -6139,7 +6144,7 @@ bool sp_revoke_privileges(THD *thd, const char *sp_db, const char *sp_name,
|
||||
for (counter= 0, revoked= 0 ; counter < hash->records ; )
|
||||
{
|
||||
GRANT_NAME *grant_proc= (GRANT_NAME*) hash_element(hash, counter);
|
||||
if (!my_strcasecmp(system_charset_info, grant_proc->db, sp_db) &&
|
||||
if (!my_strcasecmp(&my_charset_utf8_bin, grant_proc->db, sp_db) &&
|
||||
!my_strcasecmp(system_charset_info, grant_proc->tname, sp_name))
|
||||
{
|
||||
LEX_USER lex_user;
|
||||
|
Reference in New Issue
Block a user