summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Widenius <monty@mariadb.org>2014-12-15 13:01:11 +0200
committerMichael Widenius <monty@mariadb.org>2014-12-15 13:01:11 +0200
commit80ee57a30ac9f4692c57ba3b02ce364cc9fcbfe9 (patch)
tree63b425cea44ad8d52d2f354a9974f58f04e06440
parent4a32d9c0580d6362cfcd86c6d8f103748946e580 (diff)
downloadmariadb-git-80ee57a30ac9f4692c57ba3b02ce364cc9fcbfe9.tar.gz
MDEV-6896 kill user command cause MariaDB crash
mysql-test/r/kill-2.result: test case for MDEV-6896 mysql-test/t/kill-2-master.opt: test case for MDEV-6896 mysql-test/t/kill-2.test: test case for MDEV-6896 sql/sql_parse.cc: Use host_or_ip instead of host as host may be 0
-rw-r--r--mysql-test/r/kill-2.result10
-rw-r--r--mysql-test/t/kill-2-master.opt1
-rw-r--r--mysql-test/t/kill-2.test29
-rw-r--r--sql/sql_parse.cc2
4 files changed, 41 insertions, 1 deletions
diff --git a/mysql-test/r/kill-2.result b/mysql-test/r/kill-2.result
new file mode 100644
index 00000000000..c2bcc979441
--- /dev/null
+++ b/mysql-test/r/kill-2.result
@@ -0,0 +1,10 @@
+#
+# MDEV-6896 kill user command cause MariaDB crash!
+#
+create user foo@'127.0.0.1';
+select user from information_schema.processlist;
+user
+foo
+root
+kill user foo@'127.0.0.1';
+drop user foo@'127.0.0.1';
diff --git a/mysql-test/t/kill-2-master.opt b/mysql-test/t/kill-2-master.opt
new file mode 100644
index 00000000000..ab6ca1731f5
--- /dev/null
+++ b/mysql-test/t/kill-2-master.opt
@@ -0,0 +1 @@
+--skip-name-resolve
diff --git a/mysql-test/t/kill-2.test b/mysql-test/t/kill-2.test
new file mode 100644
index 00000000000..0c1177722b4
--- /dev/null
+++ b/mysql-test/t/kill-2.test
@@ -0,0 +1,29 @@
+#
+# Test KILL and KILL QUERY statements.
+#
+# Killing a connection in an embedded server does not work like in a normal
+# server, if it is waiting for a new statement. In an embedded server, the
+# connection does not read() from a socket, but returns control to the
+# application. 'mysqltest' does not handle the kill request.
+#
+
+-- source include/not_embedded.inc
+-- source include/not_threadpool.inc
+
+--echo #
+--echo # MDEV-6896 kill user command cause MariaDB crash!
+--echo #
+
+create user foo@'127.0.0.1';
+
+--connect (con1,127.0.0.1,foo,,)
+
+--connection default
+select user from information_schema.processlist;
+kill user foo@'127.0.0.1';
+
+let $wait_condition=
+ select count(*) = 0 from information_schema.processlist
+ where user = "foo";
+--source include/wait_condition.inc
+drop user foo@'127.0.0.1';
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 0fe3c5b90ea..c21e7fa3e4b 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -6745,7 +6745,7 @@ static uint kill_threads_for_user(THD *thd, LEX_USER *user,
host.str[0] == '%' means that host name was not given. See sql_yacc.yy
*/
if (((user->host.str[0] == '%' && !user->host.str[1]) ||
- !strcmp(tmp->security_ctx->host, user->host.str)) &&
+ !strcmp(tmp->security_ctx->host_or_ip, user->host.str)) &&
!strcmp(tmp->security_ctx->user, user->user.str))
{
if (!(thd->security_ctx->master_access & SUPER_ACL) &&