Bug#35924 DEFINER should be stored 'quoted' in I_S
The '@' symbol can not be used in the host name according to rfc952. The fix: added function check_host_name(LEX_STRING *str) which checks that all symbols in host name string are valid and host name length is not more than max host name length (just moved check_string_length() function from the parser into check_host_name()). mysql-test/r/create.result: test result mysql-test/t/create.test: test case sql/mysql_priv.h: added function check_host_name(LEX_STRING *str) sql/sql_parse.cc: added function check_host_name(LEX_STRING *str) which checks that all symbols in host name string are valid and host name length is not more than max host name length(HOSTNAME_LENGTH). sql/sql_yacc.yy: using newly added function check_host_name()
This commit is contained in:
parent
7e60f71001
commit
d51e2c0760
@ -1546,6 +1546,8 @@ SHOW INDEX FROM t1;
|
|||||||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
|
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
|
||||||
t1 1 c1 1 c1 A NULL NULL NULL YES BTREE
|
t1 1 c1 1 c1 A NULL NULL NULL YES BTREE
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
create user mysqltest_1@'test@test';
|
||||||
|
ERROR HY000: Malformed hostname (illegal symbol: '@')
|
||||||
CREATE TABLE t1 (a INTEGER AUTO_INCREMENT PRIMARY KEY, b INTEGER NOT NULL);
|
CREATE TABLE t1 (a INTEGER AUTO_INCREMENT PRIMARY KEY, b INTEGER NOT NULL);
|
||||||
INSERT IGNORE INTO t1 (b) VALUES (5);
|
INSERT IGNORE INTO t1 (b) VALUES (5);
|
||||||
CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
|
CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
|
||||||
|
@ -1171,6 +1171,11 @@ CREATE TABLE t1(c1 VARCHAR(33), KEY USING HASH (c1) USING BTREE) ENGINE=MEMORY;
|
|||||||
SHOW INDEX FROM t1;
|
SHOW INDEX FROM t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#35924 DEFINER should be stored 'quoted' in I_S
|
||||||
|
#
|
||||||
|
--error ER_UNKNOWN_ERROR
|
||||||
|
create user mysqltest_1@'test@test';
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug#38821: Assert table->auto_increment_field_not_null failed in open_table()
|
# Bug#38821: Assert table->auto_increment_field_not_null failed in open_table()
|
||||||
|
@ -614,6 +614,7 @@ LEX_USER *create_definer(THD *thd, LEX_STRING *user_name, LEX_STRING *host_name)
|
|||||||
LEX_USER *get_current_user(THD *thd, LEX_USER *user);
|
LEX_USER *get_current_user(THD *thd, LEX_USER *user);
|
||||||
bool check_string_length(LEX_STRING *str,
|
bool check_string_length(LEX_STRING *str,
|
||||||
const char *err_msg, uint max_length);
|
const char *err_msg, uint max_length);
|
||||||
|
bool check_host_name(LEX_STRING *str);
|
||||||
|
|
||||||
enum enum_mysql_completiontype {
|
enum enum_mysql_completiontype {
|
||||||
ROLLBACK_RELEASE=-2, ROLLBACK=1, ROLLBACK_AND_CHAIN=7,
|
ROLLBACK_RELEASE=-2, ROLLBACK=1, ROLLBACK_AND_CHAIN=7,
|
||||||
|
@ -7982,3 +7982,35 @@ int test_if_data_home_dir(const char *dir)
|
|||||||
|
|
||||||
C_MODE_END
|
C_MODE_END
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Check that host name string is valid.
|
||||||
|
|
||||||
|
@param[in] str string to be checked
|
||||||
|
|
||||||
|
@return Operation status
|
||||||
|
@retval FALSE host name is ok
|
||||||
|
@retval TRUE host name string is longer than max_length or
|
||||||
|
has invalid symbols
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool check_host_name(LEX_STRING *str)
|
||||||
|
{
|
||||||
|
const char *name= str->str;
|
||||||
|
const char *end= str->str + str->length;
|
||||||
|
if (check_string_length(str, ER(ER_HOSTNAME), HOSTNAME_LENGTH))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
while (name != end)
|
||||||
|
{
|
||||||
|
if (*name == '@')
|
||||||
|
{
|
||||||
|
my_printf_error(ER_UNKNOWN_ERROR,
|
||||||
|
"Malformed hostname (illegal symbol: '%c')", MYF(0),
|
||||||
|
*name);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
name++;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
@ -9269,8 +9269,7 @@ user:
|
|||||||
|
|
||||||
if (check_string_length(&$$->user,
|
if (check_string_length(&$$->user,
|
||||||
ER(ER_USERNAME), USERNAME_LENGTH) ||
|
ER(ER_USERNAME), USERNAME_LENGTH) ||
|
||||||
check_string_length(&$$->host,
|
check_host_name(&$$->host))
|
||||||
ER(ER_HOSTNAME), HOSTNAME_LENGTH))
|
|
||||||
MYSQL_YYABORT;
|
MYSQL_YYABORT;
|
||||||
}
|
}
|
||||||
| CURRENT_USER optional_braces
|
| CURRENT_USER optional_braces
|
||||||
|
Loading…
x
Reference in New Issue
Block a user