mirror of
https://github.com/MariaDB/server.git
synced 2025-02-02 03:51:50 +01:00
Auto-merge.
This commit is contained in:
commit
a23cc5f1d4
10 changed files with 75 additions and 39 deletions
|
@ -4474,9 +4474,7 @@ server_version_string(MYSQL *con)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (server_version == NULL)
|
if (server_version == NULL)
|
||||||
{
|
server_version= my_strdup(mysql_get_server_info(con), MYF(MY_WME));
|
||||||
server_version= strdup(mysql_get_server_info(con));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return server_version ? server_version : "";
|
return server_version ? server_version : "";
|
||||||
|
|
|
@ -557,16 +557,6 @@ unsigned long STDCALL mysql_real_escape_string(MYSQL *mysql,
|
||||||
char *to,const char *from,
|
char *to,const char *from,
|
||||||
unsigned long length);
|
unsigned long length);
|
||||||
void STDCALL mysql_debug(const char *debug);
|
void STDCALL mysql_debug(const char *debug);
|
||||||
char * STDCALL mysql_odbc_escape_string(MYSQL *mysql,
|
|
||||||
char *to,
|
|
||||||
unsigned long to_length,
|
|
||||||
const char *from,
|
|
||||||
unsigned long from_length,
|
|
||||||
void *param,
|
|
||||||
char *
|
|
||||||
(*extend_buffer)
|
|
||||||
(void *, char *to,
|
|
||||||
unsigned long *length));
|
|
||||||
void STDCALL myodbc_remove_escape(MYSQL *mysql,char *name);
|
void STDCALL myodbc_remove_escape(MYSQL *mysql,char *name);
|
||||||
unsigned int STDCALL mysql_thread_safe(void);
|
unsigned int STDCALL mysql_thread_safe(void);
|
||||||
my_bool STDCALL mysql_embedded(void);
|
my_bool STDCALL mysql_embedded(void);
|
||||||
|
|
|
@ -518,16 +518,6 @@ unsigned long mysql_real_escape_string(MYSQL *mysql,
|
||||||
char *to,const char *from,
|
char *to,const char *from,
|
||||||
unsigned long length);
|
unsigned long length);
|
||||||
void mysql_debug(const char *debug);
|
void mysql_debug(const char *debug);
|
||||||
char * mysql_odbc_escape_string(MYSQL *mysql,
|
|
||||||
char *to,
|
|
||||||
unsigned long to_length,
|
|
||||||
const char *from,
|
|
||||||
unsigned long from_length,
|
|
||||||
void *param,
|
|
||||||
char *
|
|
||||||
(*extend_buffer)
|
|
||||||
(void *, char *to,
|
|
||||||
unsigned long *length));
|
|
||||||
void myodbc_remove_escape(MYSQL *mysql,char *name);
|
void myodbc_remove_escape(MYSQL *mysql,char *name);
|
||||||
unsigned int mysql_thread_safe(void);
|
unsigned int mysql_thread_safe(void);
|
||||||
my_bool mysql_embedded(void);
|
my_bool mysql_embedded(void);
|
||||||
|
|
|
@ -1629,20 +1629,6 @@ mysql_real_escape_string(MYSQL *mysql, char *to,const char *from,
|
||||||
return (uint) escape_string_for_mysql(mysql->charset, to, 0, from, length);
|
return (uint) escape_string_for_mysql(mysql->charset, to, 0, from, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char * STDCALL
|
|
||||||
mysql_odbc_escape_string(MYSQL *mysql __attribute__((unused)),
|
|
||||||
char *to __attribute__((unused)),
|
|
||||||
ulong to_length __attribute__((unused)),
|
|
||||||
const char *from __attribute__((unused)),
|
|
||||||
ulong from_length __attribute__((unused)),
|
|
||||||
void *param __attribute__((unused)),
|
|
||||||
char * (*extend_buffer)(void *, char *, ulong *)
|
|
||||||
__attribute__((unused)))
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void STDCALL
|
void STDCALL
|
||||||
myodbc_remove_escape(MYSQL *mysql,char *name)
|
myodbc_remove_escape(MYSQL *mysql,char *name)
|
||||||
{
|
{
|
||||||
|
|
|
@ -78,7 +78,6 @@ EXPORTS
|
||||||
mysql_next_result
|
mysql_next_result
|
||||||
mysql_num_fields
|
mysql_num_fields
|
||||||
mysql_num_rows
|
mysql_num_rows
|
||||||
mysql_odbc_escape_string
|
|
||||||
mysql_options
|
mysql_options
|
||||||
mysql_stmt_param_count
|
mysql_stmt_param_count
|
||||||
mysql_stmt_param_metadata
|
mysql_stmt_param_metadata
|
||||||
|
|
|
@ -50,7 +50,6 @@ EXPORTS
|
||||||
mysql_next_result
|
mysql_next_result
|
||||||
mysql_num_fields
|
mysql_num_fields
|
||||||
mysql_num_rows
|
mysql_num_rows
|
||||||
mysql_odbc_escape_string
|
|
||||||
mysql_options
|
mysql_options
|
||||||
mysql_ping
|
mysql_ping
|
||||||
mysql_query
|
mysql_query
|
||||||
|
|
|
@ -443,3 +443,30 @@ DROP TABLE db1.t1, db1.t2;
|
||||||
DROP USER mysqltest1@localhost;
|
DROP USER mysqltest1@localhost;
|
||||||
DROP DATABASE db1;
|
DROP DATABASE db1;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
USE mysql;
|
||||||
|
SELECT LEFT(CURRENT_USER(),INSTR(CURRENT_USER(),'@')-1) INTO @u;
|
||||||
|
SELECT MID(CURRENT_USER(),INSTR(CURRENT_USER(),'@')+1) INTO @h;
|
||||||
|
SELECT password FROM user WHERE user=@u AND host=@h INTO @pwd;
|
||||||
|
SELECT user,host,password,insert_priv FROM user WHERE user=@u AND host=@h;
|
||||||
|
user host password insert_priv
|
||||||
|
root localhost Y
|
||||||
|
UPDATE user SET insert_priv='N' WHERE user=@u AND host=@h;
|
||||||
|
SELECT user,host,password,insert_priv FROM user WHERE user=@u AND host=@h;
|
||||||
|
user host password insert_priv
|
||||||
|
root localhost N
|
||||||
|
GRANT INSERT ON *.* TO CURRENT_USER();
|
||||||
|
SELECT user,host,password,insert_priv FROM user WHERE user=@u AND host=@h;
|
||||||
|
user host password insert_priv
|
||||||
|
root localhost Y
|
||||||
|
UPDATE user SET insert_priv='N' WHERE user=@u AND host=@h;
|
||||||
|
GRANT INSERT ON *.* TO CURRENT_USER() IDENTIFIED BY 'keksdose';
|
||||||
|
SELECT user,host,password,insert_priv FROM user WHERE user=@u AND host=@h;
|
||||||
|
user host password insert_priv
|
||||||
|
root localhost *0BB7188CF0DE9B403BA66E9DD810D82652D002EB Y
|
||||||
|
UPDATE user SET password=@pwd WHERE user=@u AND host=@h;
|
||||||
|
SELECT user,host,password,insert_priv FROM user WHERE user=@u AND host=@h;
|
||||||
|
user host password insert_priv
|
||||||
|
root localhost Y
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
USE test;
|
||||||
|
End of 5.1 tests
|
||||||
|
|
|
@ -632,5 +632,40 @@ DROP DATABASE db1;
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #48319: Server crashes on "GRANT/REVOKE ... TO CURRENT_USER"
|
||||||
|
#
|
||||||
|
|
||||||
|
# work out who we are.
|
||||||
|
USE mysql;
|
||||||
|
SELECT LEFT(CURRENT_USER(),INSTR(CURRENT_USER(),'@')-1) INTO @u;
|
||||||
|
SELECT MID(CURRENT_USER(),INSTR(CURRENT_USER(),'@')+1) INTO @h;
|
||||||
|
SELECT password FROM user WHERE user=@u AND host=@h INTO @pwd;
|
||||||
|
|
||||||
|
# show current privs.
|
||||||
|
SELECT user,host,password,insert_priv FROM user WHERE user=@u AND host=@h;
|
||||||
|
|
||||||
|
# toggle INSERT
|
||||||
|
UPDATE user SET insert_priv='N' WHERE user=@u AND host=@h;
|
||||||
|
SELECT user,host,password,insert_priv FROM user WHERE user=@u AND host=@h;
|
||||||
|
|
||||||
|
# show that GRANT ... TO CURRENT_USER() no longer crashes
|
||||||
|
GRANT INSERT ON *.* TO CURRENT_USER();
|
||||||
|
SELECT user,host,password,insert_priv FROM user WHERE user=@u AND host=@h;
|
||||||
|
UPDATE user SET insert_priv='N' WHERE user=@u AND host=@h;
|
||||||
|
|
||||||
|
# show that GRANT ... TO CURRENT_USER() IDENTIFIED BY ... works now
|
||||||
|
GRANT INSERT ON *.* TO CURRENT_USER() IDENTIFIED BY 'keksdose';
|
||||||
|
SELECT user,host,password,insert_priv FROM user WHERE user=@u AND host=@h;
|
||||||
|
|
||||||
|
UPDATE user SET password=@pwd WHERE user=@u AND host=@h;
|
||||||
|
SELECT user,host,password,insert_priv FROM user WHERE user=@u AND host=@h;
|
||||||
|
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
|
||||||
|
USE test;
|
||||||
|
|
||||||
|
--echo End of 5.1 tests
|
||||||
|
|
||||||
# Wait till we reached the initial number of concurrent sessions
|
# Wait till we reached the initial number of concurrent sessions
|
||||||
--source include/wait_until_count_sessions.inc
|
--source include/wait_until_count_sessions.inc
|
||||||
|
|
|
@ -3462,6 +3462,13 @@ bool mysql_grant(THD *thd, const char *db, List <LEX_USER> &list,
|
||||||
result= TRUE;
|
result= TRUE;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
No User, but a password?
|
||||||
|
They did GRANT ... TO CURRENT_USER() IDENTIFIED BY ... !
|
||||||
|
Get the current user, and shallow-copy the new password to them!
|
||||||
|
*/
|
||||||
|
if (!tmp_Str->user.str && tmp_Str->password.str)
|
||||||
|
Str->password= tmp_Str->password;
|
||||||
if (replace_user_table(thd, tables[0].table, *Str,
|
if (replace_user_table(thd, tables[0].table, *Str,
|
||||||
(!db ? rights : 0), revoke_grant, create_new_users,
|
(!db ? rights : 0), revoke_grant, create_new_users,
|
||||||
test(thd->variables.sql_mode &
|
test(thd->variables.sql_mode &
|
||||||
|
|
|
@ -7580,6 +7580,9 @@ void get_default_definer(THD *thd, LEX_USER *definer)
|
||||||
|
|
||||||
definer->host.str= (char *) sctx->priv_host;
|
definer->host.str= (char *) sctx->priv_host;
|
||||||
definer->host.length= strlen(definer->host.str);
|
definer->host.length= strlen(definer->host.str);
|
||||||
|
|
||||||
|
definer->password.str= NULL;
|
||||||
|
definer->password.length= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -7631,6 +7634,8 @@ LEX_USER *create_definer(THD *thd, LEX_STRING *user_name, LEX_STRING *host_name)
|
||||||
|
|
||||||
definer->user= *user_name;
|
definer->user= *user_name;
|
||||||
definer->host= *host_name;
|
definer->host= *host_name;
|
||||||
|
definer->password.str= NULL;
|
||||||
|
definer->password.length= 0;
|
||||||
|
|
||||||
return definer;
|
return definer;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue