mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
SCRUM
WL#1284 (warnings about --skip-name-resolve) Now MySQL will issue warnings during startup about entries in grant tables with hostnames that require resolve, and after GRANT commands with that kind of hostnames.
This commit is contained in:
@ -300,4 +300,5 @@
|
||||
#define ER_WARN_QC_RESIZE 1281
|
||||
#define ER_BAD_FT_COLUMN 1282
|
||||
#define ER_UNKNOWN_KEY_CACHE 1283
|
||||
#define ER_ERROR_MESSAGES 284
|
||||
#define ER_WARN_HOSTNAME_WONT_WORK 1284
|
||||
#define ER_ERROR_MESSAGES 285
|
||||
|
@ -296,3 +296,4 @@ character-set=latin2
|
||||
"Query cache failed to set size %lu, new query cache size is %lu",
|
||||
"Column '%-.64s' cannot be part of FULLTEXT index",
|
||||
"Unknown key cache '%-.100s'",
|
||||
"Can't resolve '%s' if --skip-name-resolve active",
|
||||
|
@ -290,3 +290,4 @@ character-set=latin1
|
||||
"Query cache failed to set size %lu, new query cache size is %lu",
|
||||
"Column '%-.64s' cannot be part of FULLTEXT index",
|
||||
"Unknown key cache '%-.100s'",
|
||||
"Can't resolve '%s' if --skip-name-resolve active",
|
||||
|
@ -298,3 +298,4 @@ character-set=latin1
|
||||
"Query cache failed to set size %lu, new query cache size is %lu",
|
||||
"Column '%-.64s' cannot be part of FULLTEXT index",
|
||||
"Unknown key cache '%-.100s'",
|
||||
"Can't resolve '%s' if --skip-name-resolve active",
|
||||
|
@ -287,3 +287,4 @@ character-set=latin1
|
||||
"Query cache failed to set size %lu, new query cache size is %lu",
|
||||
"Column '%-.64s' cannot be part of FULLTEXT index",
|
||||
"Unknown key cache '%-.100s'",
|
||||
"Can't resolve '%s' if --skip-name-resolve active",
|
||||
|
@ -292,3 +292,4 @@ character-set=latin7
|
||||
"Query cache failed to set size %lu, new query cache size is %lu",
|
||||
"Column '%-.64s' cannot be part of FULLTEXT index",
|
||||
"Unknown key cache '%-.100s'",
|
||||
"Can't resolve '%s' if --skip-name-resolve active",
|
||||
|
@ -287,3 +287,4 @@ character-set=latin1
|
||||
"Query cache failed to set size %lu, new query cache size is %lu",
|
||||
"Column '%-.64s' cannot be part of FULLTEXT index",
|
||||
"Unknown key cache '%-.100s'",
|
||||
"Can't resolve '%s' if --skip-name-resolve active",
|
||||
|
@ -299,3 +299,4 @@ character-set=latin1
|
||||
"Query cache failed to set size %lu, new query cache size is %lu",
|
||||
"Column '%-.64s' cannot be part of FULLTEXT index",
|
||||
"Unknown key cache '%-.100s'",
|
||||
"Can't resolve '%s' if --skip-name-resolve active",
|
||||
|
@ -287,3 +287,4 @@ character-set=greek
|
||||
"Query cache failed to set size %lu, new query cache size is %lu",
|
||||
"Column '%-.64s' cannot be part of FULLTEXT index",
|
||||
"Unknown key cache '%-.100s'",
|
||||
"Can't resolve '%s' if --skip-name-resolve active",
|
||||
|
@ -289,3 +289,4 @@ character-set=latin2
|
||||
"Query cache failed to set size %lu, new query cache size is %lu",
|
||||
"Column '%-.64s' cannot be part of FULLTEXT index",
|
||||
"Unknown key cache '%-.100s'",
|
||||
"Can't resolve '%s' if --skip-name-resolve active",
|
||||
|
@ -287,3 +287,4 @@ character-set=latin1
|
||||
"Query cache failed to set size %lu, new query cache size is %lu",
|
||||
"Column '%-.64s' cannot be part of FULLTEXT index",
|
||||
"Unknown key cache '%-.100s'",
|
||||
"Can't resolve '%s' if --skip-name-resolve active",
|
||||
|
@ -289,3 +289,4 @@ character-set=ujis
|
||||
"Query cache failed to set size %lu, new query cache size is %lu",
|
||||
"Column '%-.64s' cannot be part of FULLTEXT index",
|
||||
"Unknown key cache '%-.100s'",
|
||||
"Can't resolve '%s' if --skip-name-resolve active",
|
||||
|
@ -287,3 +287,4 @@ character-set=euckr
|
||||
"Query cache failed to set size %lu, new query cache size is %lu",
|
||||
"Column '%-.64s' cannot be part of FULLTEXT index",
|
||||
"Unknown key cache '%-.100s'",
|
||||
"Can't resolve '%s' if --skip-name-resolve active",
|
||||
|
@ -289,3 +289,4 @@ character-set=latin1
|
||||
"Query cache failed to set size %lu, new query cache size is %lu",
|
||||
"Column '%-.64s' cannot be part of FULLTEXT index",
|
||||
"Unknown key cache '%-.100s'",
|
||||
"Can't resolve '%s' if --skip-name-resolve active",
|
||||
|
@ -289,3 +289,4 @@ character-set=latin1
|
||||
"Query cache failed to set size %lu, new query cache size is %lu",
|
||||
"Column '%-.64s' cannot be part of FULLTEXT index",
|
||||
"Unknown key cache '%-.100s'",
|
||||
"Can't resolve '%s' if --skip-name-resolve active",
|
||||
|
@ -291,3 +291,4 @@ character-set=latin2
|
||||
"Query cache failed to set size %lu, new query cache size is %lu",
|
||||
"Column '%-.64s' cannot be part of FULLTEXT index",
|
||||
"Unknown key cache '%-.100s'",
|
||||
"Can't resolve '%s' if --skip-name-resolve active",
|
||||
|
@ -288,3 +288,4 @@ character-set=latin1
|
||||
"Query cache failed to set size %lu, new query cache size is %lu",
|
||||
"Column '%-.64s' cannot be part of FULLTEXT index",
|
||||
"Unknown key cache '%-.100s'",
|
||||
"Can't resolve '%s' if --skip-name-resolve active",
|
||||
|
@ -291,3 +291,4 @@ character-set=latin2
|
||||
"Query cache failed to set size %lu, new query cache size is %lu",
|
||||
"Column '%-.64s' cannot be part of FULLTEXT index",
|
||||
"Unknown key cache '%-.100s'",
|
||||
"Can't resolve '%s' if --skip-name-resolve active",
|
||||
|
@ -289,3 +289,4 @@ character-set=koi8r
|
||||
"<22><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %lu, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - %lu",
|
||||
"Column '%-.64s' cannot be part of FULLTEXT index",
|
||||
"Unknown key cache '%-.100s'",
|
||||
"Can't resolve '%s' if --skip-name-resolve active",
|
||||
|
@ -282,3 +282,4 @@ character-set=cp1250
|
||||
"Query cache failed to set size %lu, new query cache size is %lu",
|
||||
"Column '%-.64s' cannot be part of FULLTEXT index",
|
||||
"Unknown key cache '%-.100s'",
|
||||
"Can't resolve '%s' if --skip-name-resolve active",
|
||||
|
@ -295,3 +295,4 @@ character-set=latin2
|
||||
"Query cache failed to set size %lu, new query cache size is %lu",
|
||||
"Column '%-.64s' cannot be part of FULLTEXT index",
|
||||
"Unknown key cache '%-.100s'",
|
||||
"Can't resolve '%s' if --skip-name-resolve active",
|
||||
|
@ -289,3 +289,4 @@ character-set=latin1
|
||||
"Query cache failed to set size %lu, new query cache size is %lu",
|
||||
"Column '%-.64s' cannot be part of FULLTEXT index",
|
||||
"Unknown key cache '%-.100s'",
|
||||
"Can't resolve '%s' if --skip-name-resolve active",
|
||||
|
@ -287,3 +287,4 @@ character-set=latin1
|
||||
"Storleken av "Query cache" kunde inte s<>ttas till %lu, ny storlek <20>r %lu",
|
||||
"Kolumn '%-.64s' kan inte vara del av ett FULLTEXT index",
|
||||
"Unknown key cache '%-.100s'",
|
||||
"Can't resolve '%s' if --skip-name-resolve active",
|
||||
|
@ -292,3 +292,4 @@ character-set=koi8u
|
||||
"<22><><EFBFBD> <20><><EFBFBD><EFBFBD>Ԧ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ͦ<EFBFBD> %lu, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ͦ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ԧ<EFBFBD> - %lu",
|
||||
"Column '%-.64s' cannot be part of FULLTEXT index",
|
||||
"Unknown key cache '%-.100s'",
|
||||
"Can't resolve '%s' if --skip-name-resolve active",
|
||||
|
@ -139,6 +139,8 @@ my_bool acl_init(THD *org_thd, bool dont_read_acl_tables)
|
||||
READ_RECORD read_record_info;
|
||||
MYSQL_LOCK *lock;
|
||||
my_bool return_val=1;
|
||||
bool check_no_resolve= specialflag & SPECIAL_NO_RESOLVE;
|
||||
|
||||
DBUG_ENTER("acl_init");
|
||||
|
||||
if (!acl_cache)
|
||||
@ -198,6 +200,13 @@ my_bool acl_init(THD *org_thd, bool dont_read_acl_tables)
|
||||
host.access= get_access(table,2);
|
||||
host.access= fix_rights_for_db(host.access);
|
||||
host.sort= get_sort(2,host.host.hostname,host.db);
|
||||
if (check_no_resolve && hostname_requires_resolving(host.host.hostname))
|
||||
{
|
||||
sql_print_error("Error in table 'host' entry '%s|%s'. "
|
||||
"Can't resolve '%s' if --skip-name-resolve active. Skipped",
|
||||
host.host.hostname, host.db, host.host.hostname);
|
||||
continue;
|
||||
}
|
||||
#ifndef TO_BE_REMOVED
|
||||
if (table->fields == 8)
|
||||
{ // Without grant
|
||||
@ -259,6 +268,14 @@ my_bool acl_init(THD *org_thd, bool dont_read_acl_tables)
|
||||
ACL_USER user;
|
||||
update_hostname(&user.host, get_field(&mem, table->field[0]));
|
||||
user.user= get_field(&mem, table->field[1]);
|
||||
if (check_no_resolve && hostname_requires_resolving(user.host.hostname))
|
||||
{
|
||||
sql_print_error("Error in table 'user' entry '%s@%s'. "
|
||||
"Can't resolve '%s' if --skip-name-resolve active. Skipped",
|
||||
user.user, user.host.hostname, user.host.hostname);
|
||||
continue;
|
||||
}
|
||||
|
||||
const char *password= get_field(&mem, table->field[2]);
|
||||
uint password_len= password ? strlen(password) : 0;
|
||||
set_user_salt(&user, password, password_len);
|
||||
@ -353,6 +370,13 @@ my_bool acl_init(THD *org_thd, bool dont_read_acl_tables)
|
||||
continue;
|
||||
}
|
||||
db.user=get_field(&mem, table->field[2]);
|
||||
if (check_no_resolve && hostname_requires_resolving(db.host.hostname))
|
||||
{
|
||||
sql_print_error("Error in table 'db' entry '%s %s@%s'. "
|
||||
"Can't resolve '%s' if --skip-name-resolve active. Skipped",
|
||||
db.db, db.user, db.host.hostname, db.host.hostname);
|
||||
continue;
|
||||
}
|
||||
db.access=get_access(table,3);
|
||||
db.access=fix_rights_for_db(db.access);
|
||||
db.sort=get_sort(3,db.host.hostname,db.db,db.user);
|
||||
@ -1257,6 +1281,25 @@ static bool compare_hostname(const acl_host_and_ip *host, const char *hostname,
|
||||
(ip && !wild_compare(ip,host->hostname,0)));
|
||||
}
|
||||
|
||||
bool hostname_requires_resolving(const char *hostname)
|
||||
{
|
||||
char cur;
|
||||
if (!hostname)
|
||||
return false;
|
||||
int namelen= strlen(hostname);
|
||||
int lhlen= strlen(my_localhost);
|
||||
if ((namelen == lhlen) &&
|
||||
!my_strnncoll(&my_charset_latin1, (const uchar *)hostname, namelen,
|
||||
(const uchar *)my_localhost, strlen(my_localhost)))
|
||||
return false;
|
||||
for (; (cur=*hostname); hostname++)
|
||||
{
|
||||
if ((cur != '%') && (cur != '_') && (cur != '.') &&
|
||||
((cur < '0') || (cur > '9')))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
Update grants in the user and database privilege tables
|
||||
@ -2444,6 +2487,7 @@ my_bool grant_init(THD *org_thd)
|
||||
MYSQL_LOCK *lock;
|
||||
my_bool return_val= 1;
|
||||
TABLE *t_table, *c_table;
|
||||
bool check_no_resolve= specialflag & SPECIAL_NO_RESOLVE;
|
||||
DBUG_ENTER("grant_init");
|
||||
|
||||
grant_option = FALSE;
|
||||
@ -2493,13 +2537,31 @@ my_bool grant_init(THD *org_thd)
|
||||
do
|
||||
{
|
||||
GRANT_TABLE *mem_check;
|
||||
if (!(mem_check=new GRANT_TABLE(t_table,c_table)) ||
|
||||
mem_check->ok() && my_hash_insert(&column_priv_hash,(byte*) mem_check))
|
||||
if (!(mem_check=new GRANT_TABLE(t_table,c_table)) || mem_check->ok())
|
||||
{
|
||||
/* This could only happen if we are out memory */
|
||||
grant_option= FALSE; /* purecov: deadcode */
|
||||
goto end_unlock;
|
||||
}
|
||||
|
||||
if (check_no_resolve)
|
||||
{
|
||||
if (hostname_requires_resolving(mem_check->host))
|
||||
{
|
||||
char buff[MAX_FIELD_WIDTH];
|
||||
sql_print_error("Error in table 'tables_priv' entry '%s %s@%s'. "
|
||||
"Can't resolve '%s' if --skip-name-resolve active. Skipped",
|
||||
mem_check->tname, mem_check->user,
|
||||
mem_check->host, mem_check->host);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (my_hash_insert(&column_priv_hash,(byte*) mem_check))
|
||||
{
|
||||
grant_option= FALSE;
|
||||
goto end_unlock;
|
||||
}
|
||||
}
|
||||
while (!t_table->file->index_next(t_table->record[0]));
|
||||
|
||||
|
@ -131,6 +131,7 @@ public:
|
||||
|
||||
/* prototypes */
|
||||
|
||||
bool hostname_requires_resolving(const char *hostname);
|
||||
my_bool acl_init(THD *thd, bool dont_read_acl_tables);
|
||||
void acl_reload(THD *thd);
|
||||
void acl_free(bool end=0);
|
||||
|
@ -3183,6 +3183,19 @@ mysql_execute_command(THD *thd)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (specialflag & SPECIAL_NO_RESOLVE)
|
||||
{
|
||||
LEX_USER *user;
|
||||
List_iterator <LEX_USER> user_list(lex->users_list);
|
||||
while ((user=user_list++))
|
||||
{
|
||||
if (hostname_requires_resolving(user->host.str))
|
||||
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_WARN_HOSTNAME_WONT_WORK,
|
||||
ER(ER_WARN_HOSTNAME_WONT_WORK),
|
||||
user->host.str);
|
||||
}
|
||||
}
|
||||
if (tables)
|
||||
{
|
||||
if (grant_option && check_grant(thd,
|
||||
|
Reference in New Issue
Block a user