summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/mysqld_error.h3
-rw-r--r--sql/share/czech/errmsg.txt1
-rw-r--r--sql/share/danish/errmsg.txt1
-rw-r--r--sql/share/dutch/errmsg.txt1
-rw-r--r--sql/share/english/errmsg.txt1
-rw-r--r--sql/share/estonian/errmsg.txt1
-rw-r--r--sql/share/french/errmsg.txt1
-rw-r--r--sql/share/german/errmsg.txt1
-rw-r--r--sql/share/greek/errmsg.txt1
-rw-r--r--sql/share/hungarian/errmsg.txt1
-rw-r--r--sql/share/italian/errmsg.txt1
-rw-r--r--sql/share/japanese/errmsg.txt1
-rw-r--r--sql/share/korean/errmsg.txt1
-rw-r--r--sql/share/norwegian-ny/errmsg.txt1
-rw-r--r--sql/share/norwegian/errmsg.txt1
-rw-r--r--sql/share/polish/errmsg.txt1
-rw-r--r--sql/share/portuguese/errmsg.txt1
-rw-r--r--sql/share/romanian/errmsg.txt1
-rw-r--r--sql/share/russian/errmsg.txt1
-rw-r--r--sql/share/serbian/errmsg.txt1
-rw-r--r--sql/share/slovak/errmsg.txt1
-rw-r--r--sql/share/spanish/errmsg.txt1
-rw-r--r--sql/share/swedish/errmsg.txt1
-rw-r--r--sql/share/ukrainian/errmsg.txt1
-rw-r--r--sql/sql_acl.cc66
-rw-r--r--sql/sql_acl.h1
-rw-r--r--sql/sql_parse.cc13
27 files changed, 103 insertions, 3 deletions
diff --git a/include/mysqld_error.h b/include/mysqld_error.h
index a6e23fbff3a..6b37b95cc45 100644
--- a/include/mysqld_error.h
+++ b/include/mysqld_error.h
@@ -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
diff --git a/sql/share/czech/errmsg.txt b/sql/share/czech/errmsg.txt
index c40765ebf94..02dd0b18940 100644
--- a/sql/share/czech/errmsg.txt
+++ b/sql/share/czech/errmsg.txt
@@ -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",
diff --git a/sql/share/danish/errmsg.txt b/sql/share/danish/errmsg.txt
index 98540e1bd0a..f4dc64282e6 100644
--- a/sql/share/danish/errmsg.txt
+++ b/sql/share/danish/errmsg.txt
@@ -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",
diff --git a/sql/share/dutch/errmsg.txt b/sql/share/dutch/errmsg.txt
index 44c9399b821..c034e18e055 100644
--- a/sql/share/dutch/errmsg.txt
+++ b/sql/share/dutch/errmsg.txt
@@ -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",
diff --git a/sql/share/english/errmsg.txt b/sql/share/english/errmsg.txt
index e4f7c27610b..5e2c6844507 100644
--- a/sql/share/english/errmsg.txt
+++ b/sql/share/english/errmsg.txt
@@ -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",
diff --git a/sql/share/estonian/errmsg.txt b/sql/share/estonian/errmsg.txt
index dec488567ff..43204a3979b 100644
--- a/sql/share/estonian/errmsg.txt
+++ b/sql/share/estonian/errmsg.txt
@@ -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",
diff --git a/sql/share/french/errmsg.txt b/sql/share/french/errmsg.txt
index c41c927d539..b7b03250341 100644
--- a/sql/share/french/errmsg.txt
+++ b/sql/share/french/errmsg.txt
@@ -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",
diff --git a/sql/share/german/errmsg.txt b/sql/share/german/errmsg.txt
index 0425a709950..bb8aa296d58 100644
--- a/sql/share/german/errmsg.txt
+++ b/sql/share/german/errmsg.txt
@@ -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",
diff --git a/sql/share/greek/errmsg.txt b/sql/share/greek/errmsg.txt
index 3cf5bbf592d..70913d58ff7 100644
--- a/sql/share/greek/errmsg.txt
+++ b/sql/share/greek/errmsg.txt
@@ -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",
diff --git a/sql/share/hungarian/errmsg.txt b/sql/share/hungarian/errmsg.txt
index f1b719ba716..a79bf7b184c 100644
--- a/sql/share/hungarian/errmsg.txt
+++ b/sql/share/hungarian/errmsg.txt
@@ -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",
diff --git a/sql/share/italian/errmsg.txt b/sql/share/italian/errmsg.txt
index ed39950e9f1..c8fc5079c75 100644
--- a/sql/share/italian/errmsg.txt
+++ b/sql/share/italian/errmsg.txt
@@ -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",
diff --git a/sql/share/japanese/errmsg.txt b/sql/share/japanese/errmsg.txt
index 9760cd3f9e8..b8ece1ecf4c 100644
--- a/sql/share/japanese/errmsg.txt
+++ b/sql/share/japanese/errmsg.txt
@@ -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",
diff --git a/sql/share/korean/errmsg.txt b/sql/share/korean/errmsg.txt
index 10eed3bb2de..d57c3e13efe 100644
--- a/sql/share/korean/errmsg.txt
+++ b/sql/share/korean/errmsg.txt
@@ -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",
diff --git a/sql/share/norwegian-ny/errmsg.txt b/sql/share/norwegian-ny/errmsg.txt
index 7149eea8b10..01f50789449 100644
--- a/sql/share/norwegian-ny/errmsg.txt
+++ b/sql/share/norwegian-ny/errmsg.txt
@@ -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",
diff --git a/sql/share/norwegian/errmsg.txt b/sql/share/norwegian/errmsg.txt
index dc96d39f8dc..806729ccced 100644
--- a/sql/share/norwegian/errmsg.txt
+++ b/sql/share/norwegian/errmsg.txt
@@ -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",
diff --git a/sql/share/polish/errmsg.txt b/sql/share/polish/errmsg.txt
index b2b2e52ad75..30c77b41ed0 100644
--- a/sql/share/polish/errmsg.txt
+++ b/sql/share/polish/errmsg.txt
@@ -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",
diff --git a/sql/share/portuguese/errmsg.txt b/sql/share/portuguese/errmsg.txt
index c4a150d79bf..d4232007aed 100644
--- a/sql/share/portuguese/errmsg.txt
+++ b/sql/share/portuguese/errmsg.txt
@@ -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",
diff --git a/sql/share/romanian/errmsg.txt b/sql/share/romanian/errmsg.txt
index dce141da20a..f4712f75180 100644
--- a/sql/share/romanian/errmsg.txt
+++ b/sql/share/romanian/errmsg.txt
@@ -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",
diff --git a/sql/share/russian/errmsg.txt b/sql/share/russian/errmsg.txt
index 27c1b49f4f0..30b0b8b4931 100644
--- a/sql/share/russian/errmsg.txt
+++ b/sql/share/russian/errmsg.txt
@@ -289,3 +289,4 @@ character-set=koi8r
"Кеш запросов не может установить размер %lu, новый размер кеша зпросов - %lu",
"Column '%-.64s' cannot be part of FULLTEXT index",
"Unknown key cache '%-.100s'",
+"Can't resolve '%s' if --skip-name-resolve active",
diff --git a/sql/share/serbian/errmsg.txt b/sql/share/serbian/errmsg.txt
index 5311fa016dc..4d2ce07e369 100644
--- a/sql/share/serbian/errmsg.txt
+++ b/sql/share/serbian/errmsg.txt
@@ -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",
diff --git a/sql/share/slovak/errmsg.txt b/sql/share/slovak/errmsg.txt
index 9355e8fc0c4..fb062bc29e8 100644
--- a/sql/share/slovak/errmsg.txt
+++ b/sql/share/slovak/errmsg.txt
@@ -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",
diff --git a/sql/share/spanish/errmsg.txt b/sql/share/spanish/errmsg.txt
index 3cdcc3967d7..c4d4e1c9e93 100644
--- a/sql/share/spanish/errmsg.txt
+++ b/sql/share/spanish/errmsg.txt
@@ -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",
diff --git a/sql/share/swedish/errmsg.txt b/sql/share/swedish/errmsg.txt
index 17dcdb89ae6..143aa6af9eb 100644
--- a/sql/share/swedish/errmsg.txt
+++ b/sql/share/swedish/errmsg.txt
@@ -287,3 +287,4 @@ character-set=latin1
"Storleken av "Query cache" kunde inte sДttas till %lu, ny storlek Д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",
diff --git a/sql/share/ukrainian/errmsg.txt b/sql/share/ukrainian/errmsg.txt
index 99a09afde6c..416d6fac572 100644
--- a/sql/share/ukrainian/errmsg.txt
+++ b/sql/share/ukrainian/errmsg.txt
@@ -292,3 +292,4 @@ character-set=koi8u
"Кеш запит╕в неспроможен встановити розм╕р %lu, новий розм╕р кеша запит╕в - %lu",
"Column '%-.64s' cannot be part of FULLTEXT index",
"Unknown key cache '%-.100s'",
+"Can't resolve '%s' if --skip-name-resolve active",
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index b54e6a95bc5..0ce544edda5 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -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]));
diff --git a/sql/sql_acl.h b/sql/sql_acl.h
index 7e96f2eaff1..8b8115b10db 100644
--- a/sql/sql_acl.h
+++ b/sql/sql_acl.h
@@ -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);
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 017ef065012..a73b2767995 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -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,