mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Fix hostcache_ipv4_blocked and hostcache_ipv6_blocked to pass.
Don't abort plugin reads whem mpvio->make_it_fail is set - this can leak information.
This commit is contained in:
@ -6,6 +6,6 @@ exec MYSQL --default_auth=qa_auth_client -h localhost -P MASTER_MYPORT -u qa_tes
|
|||||||
current_user() user() @@local.proxy_user @@local.external_user
|
current_user() user() @@local.proxy_user @@local.external_user
|
||||||
qa_test_11_dest@% qa_test_11_user@localhost 'qa_test_11_user'@'%' NULL
|
qa_test_11_dest@% qa_test_11_user@localhost 'qa_test_11_user'@'%' NULL
|
||||||
exec MYSQL --default_auth=qa_auth_client -h localhost -P MASTER_MYPORT -u qa_test_2_user --password=qa_test_11_dest test_user_db -e "SELECT current_user(),user(),@@local.proxy_user,@@local.external_user;" 2>&1
|
exec MYSQL --default_auth=qa_auth_client -h localhost -P MASTER_MYPORT -u qa_test_2_user --password=qa_test_11_dest test_user_db -e "SELECT current_user(),user(),@@local.proxy_user,@@local.external_user;" 2>&1
|
||||||
ERROR 1045 (28000): Access denied for user 'qa_test_2_user'@'localhost' (using password: NO)
|
ERROR 1045 (28000): Access denied for user 'qa_test_2_user'@'localhost' (using password: YES)
|
||||||
DROP USER qa_test_11_user, qa_test_11_dest;
|
DROP USER qa_test_11_user, qa_test_11_dest;
|
||||||
DROP DATABASE test_user_db;
|
DROP DATABASE test_user_db;
|
||||||
|
@ -32,7 +32,7 @@ select current_user();
|
|||||||
current_user()
|
current_user()
|
||||||
root@localhost
|
root@localhost
|
||||||
set global debug_dbug= "+d,vio_peer_addr_fake_ipv4,getnameinfo_fake_ipv4,getaddrinfo_fake_good_ipv4,native_password_bad_reply";
|
set global debug_dbug= "+d,vio_peer_addr_fake_ipv4,getnameinfo_fake_ipv4,getaddrinfo_fake_good_ipv4,native_password_bad_reply";
|
||||||
ERROR 28000: Access denied for user 'quota'@'santa.claus.ipv4.example.com' (using password: NO)
|
ERROR 08S01: Bad handshake
|
||||||
"Dumping performance_schema.host_cache"
|
"Dumping performance_schema.host_cache"
|
||||||
IP 192.0.2.4
|
IP 192.0.2.4
|
||||||
HOST santa.claus.ipv4.example.com
|
HOST santa.claus.ipv4.example.com
|
||||||
@ -61,7 +61,7 @@ COUNT_LOCAL_ERRORS 0
|
|||||||
COUNT_UNKNOWN_ERRORS 0
|
COUNT_UNKNOWN_ERRORS 0
|
||||||
FIRST_ERROR_SEEN set
|
FIRST_ERROR_SEEN set
|
||||||
LAST_ERROR_SEEN set
|
LAST_ERROR_SEEN set
|
||||||
ERROR 28000: Access denied for user 'quota'@'santa.claus.ipv4.example.com' (using password: NO)
|
ERROR 08S01: Bad handshake
|
||||||
"Dumping performance_schema.host_cache"
|
"Dumping performance_schema.host_cache"
|
||||||
IP 192.0.2.4
|
IP 192.0.2.4
|
||||||
HOST santa.claus.ipv4.example.com
|
HOST santa.claus.ipv4.example.com
|
||||||
@ -90,7 +90,7 @@ COUNT_LOCAL_ERRORS 0
|
|||||||
COUNT_UNKNOWN_ERRORS 0
|
COUNT_UNKNOWN_ERRORS 0
|
||||||
FIRST_ERROR_SEEN set
|
FIRST_ERROR_SEEN set
|
||||||
LAST_ERROR_SEEN set
|
LAST_ERROR_SEEN set
|
||||||
ERROR 28000: Access denied for user 'quota'@'santa.claus.ipv4.example.com' (using password: NO)
|
ERROR 08S01: Bad handshake
|
||||||
"Dumping performance_schema.host_cache"
|
"Dumping performance_schema.host_cache"
|
||||||
IP 192.0.2.4
|
IP 192.0.2.4
|
||||||
HOST santa.claus.ipv4.example.com
|
HOST santa.claus.ipv4.example.com
|
||||||
@ -178,7 +178,7 @@ COUNT_UNKNOWN_ERRORS 0
|
|||||||
FIRST_ERROR_SEEN set
|
FIRST_ERROR_SEEN set
|
||||||
LAST_ERROR_SEEN set
|
LAST_ERROR_SEEN set
|
||||||
flush hosts;
|
flush hosts;
|
||||||
ERROR 28000: Access denied for user 'quota'@'santa.claus.ipv4.example.com' (using password: NO)
|
ERROR 08S01: Bad handshake
|
||||||
"Dumping performance_schema.host_cache"
|
"Dumping performance_schema.host_cache"
|
||||||
IP 192.0.2.4
|
IP 192.0.2.4
|
||||||
HOST santa.claus.ipv4.example.com
|
HOST santa.claus.ipv4.example.com
|
||||||
|
@ -32,7 +32,7 @@ select current_user();
|
|||||||
current_user()
|
current_user()
|
||||||
root@localhost
|
root@localhost
|
||||||
set global debug_dbug= "+d,vio_peer_addr_fake_ipv6,getnameinfo_fake_ipv6,getaddrinfo_fake_good_ipv6,native_password_bad_reply";
|
set global debug_dbug= "+d,vio_peer_addr_fake_ipv6,getnameinfo_fake_ipv6,getaddrinfo_fake_good_ipv6,native_password_bad_reply";
|
||||||
ERROR 28000: Access denied for user 'quota'@'santa.claus.ipv6.example.com' (using password: NO)
|
ERROR 08S01: Bad handshake
|
||||||
"Dumping performance_schema.host_cache"
|
"Dumping performance_schema.host_cache"
|
||||||
IP 2001:db8::6:6
|
IP 2001:db8::6:6
|
||||||
HOST santa.claus.ipv6.example.com
|
HOST santa.claus.ipv6.example.com
|
||||||
@ -61,7 +61,7 @@ COUNT_LOCAL_ERRORS 0
|
|||||||
COUNT_UNKNOWN_ERRORS 0
|
COUNT_UNKNOWN_ERRORS 0
|
||||||
FIRST_ERROR_SEEN set
|
FIRST_ERROR_SEEN set
|
||||||
LAST_ERROR_SEEN set
|
LAST_ERROR_SEEN set
|
||||||
ERROR 28000: Access denied for user 'quota'@'santa.claus.ipv6.example.com' (using password: NO)
|
ERROR 08S01: Bad handshake
|
||||||
"Dumping performance_schema.host_cache"
|
"Dumping performance_schema.host_cache"
|
||||||
IP 2001:db8::6:6
|
IP 2001:db8::6:6
|
||||||
HOST santa.claus.ipv6.example.com
|
HOST santa.claus.ipv6.example.com
|
||||||
@ -90,7 +90,7 @@ COUNT_LOCAL_ERRORS 0
|
|||||||
COUNT_UNKNOWN_ERRORS 0
|
COUNT_UNKNOWN_ERRORS 0
|
||||||
FIRST_ERROR_SEEN set
|
FIRST_ERROR_SEEN set
|
||||||
LAST_ERROR_SEEN set
|
LAST_ERROR_SEEN set
|
||||||
ERROR 28000: Access denied for user 'quota'@'santa.claus.ipv6.example.com' (using password: NO)
|
ERROR 08S01: Bad handshake
|
||||||
"Dumping performance_schema.host_cache"
|
"Dumping performance_schema.host_cache"
|
||||||
IP 2001:db8::6:6
|
IP 2001:db8::6:6
|
||||||
HOST santa.claus.ipv6.example.com
|
HOST santa.claus.ipv6.example.com
|
||||||
@ -178,7 +178,7 @@ COUNT_UNKNOWN_ERRORS 0
|
|||||||
FIRST_ERROR_SEEN set
|
FIRST_ERROR_SEEN set
|
||||||
LAST_ERROR_SEEN set
|
LAST_ERROR_SEEN set
|
||||||
flush hosts;
|
flush hosts;
|
||||||
ERROR 28000: Access denied for user 'quota'@'santa.claus.ipv6.example.com' (using password: NO)
|
ERROR 08S01: Bad handshake
|
||||||
"Dumping performance_schema.host_cache"
|
"Dumping performance_schema.host_cache"
|
||||||
IP 2001:db8::6:6
|
IP 2001:db8::6:6
|
||||||
HOST santa.claus.ipv6.example.com
|
HOST santa.claus.ipv6.example.com
|
||||||
|
@ -31,7 +31,7 @@ disconnect con1;
|
|||||||
set global debug_dbug= "+d,vio_peer_addr_fake_ipv4,getnameinfo_fake_ipv4,getaddrinfo_fake_good_ipv4,native_password_bad_reply";
|
set global debug_dbug= "+d,vio_peer_addr_fake_ipv4,getnameinfo_fake_ipv4,getaddrinfo_fake_good_ipv4,native_password_bad_reply";
|
||||||
|
|
||||||
--disable_query_log
|
--disable_query_log
|
||||||
--error ER_ACCESS_DENIED_ERROR
|
--error ER_HANDSHAKE_ERROR
|
||||||
connect (con2a,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
connect (con2a,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ connect (con2a,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
|||||||
--source ../include/hostcache_dump.inc
|
--source ../include/hostcache_dump.inc
|
||||||
|
|
||||||
--disable_query_log
|
--disable_query_log
|
||||||
--error ER_ACCESS_DENIED_ERROR
|
--error ER_HANDSHAKE_ERROR
|
||||||
connect (con2b,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
connect (con2b,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
|
||||||
@ -47,7 +47,7 @@ connect (con2b,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
|||||||
--source ../include/hostcache_dump.inc
|
--source ../include/hostcache_dump.inc
|
||||||
|
|
||||||
--disable_query_log
|
--disable_query_log
|
||||||
--error ER_ACCESS_DENIED_ERROR
|
--error ER_HANDSHAKE_ERROR
|
||||||
connect (con2c,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
connect (con2c,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ connect (con2e,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
|||||||
flush hosts;
|
flush hosts;
|
||||||
|
|
||||||
--disable_query_log
|
--disable_query_log
|
||||||
--error ER_ACCESS_DENIED_ERROR
|
--error ER_HANDSHAKE_ERROR
|
||||||
connect (con2c,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
connect (con2c,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ disconnect con1;
|
|||||||
set global debug_dbug= "+d,vio_peer_addr_fake_ipv6,getnameinfo_fake_ipv6,getaddrinfo_fake_good_ipv6,native_password_bad_reply";
|
set global debug_dbug= "+d,vio_peer_addr_fake_ipv6,getnameinfo_fake_ipv6,getaddrinfo_fake_good_ipv6,native_password_bad_reply";
|
||||||
|
|
||||||
--disable_query_log
|
--disable_query_log
|
||||||
--error ER_ACCESS_DENIED_ERROR
|
--error ER_HANDSHAKE_ERROR
|
||||||
connect (con2a,"::1",quota,,test,$MASTER_MYPORT,);
|
connect (con2a,"::1",quota,,test,$MASTER_MYPORT,);
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
|
||||||
@ -40,7 +40,7 @@ connect (con2a,"::1",quota,,test,$MASTER_MYPORT,);
|
|||||||
--source ../include/hostcache_dump.inc
|
--source ../include/hostcache_dump.inc
|
||||||
|
|
||||||
--disable_query_log
|
--disable_query_log
|
||||||
--error ER_ACCESS_DENIED_ERROR
|
--error ER_HANDSHAKE_ERROR
|
||||||
connect (con2b,"::1",quota,,test,$MASTER_MYPORT,);
|
connect (con2b,"::1",quota,,test,$MASTER_MYPORT,);
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
|
||||||
@ -48,7 +48,7 @@ connect (con2b,"::1",quota,,test,$MASTER_MYPORT,);
|
|||||||
--source ../include/hostcache_dump.inc
|
--source ../include/hostcache_dump.inc
|
||||||
|
|
||||||
--disable_query_log
|
--disable_query_log
|
||||||
--error ER_ACCESS_DENIED_ERROR
|
--error ER_HANDSHAKE_ERROR
|
||||||
connect (con2c,"::1",quota,,test,$MASTER_MYPORT,);
|
connect (con2c,"::1",quota,,test,$MASTER_MYPORT,);
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
|
||||||
@ -75,7 +75,7 @@ connect (con2e,"::1",quota,,test,$MASTER_MYPORT,);
|
|||||||
flush hosts;
|
flush hosts;
|
||||||
|
|
||||||
--disable_query_log
|
--disable_query_log
|
||||||
--error ER_ACCESS_DENIED_ERROR
|
--error ER_HANDSHAKE_ERROR
|
||||||
connect (con2c,"::1",quota,,test,$MASTER_MYPORT,);
|
connect (con2c,"::1",quota,,test,$MASTER_MYPORT,);
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
|
||||||
|
@ -11728,9 +11728,6 @@ static int server_mpvio_read_packet(MYSQL_PLUGIN_VIO *param, uchar **buf)
|
|||||||
mpvio->cached_client_reply.pkt= 0;
|
mpvio->cached_client_reply.pkt= 0;
|
||||||
mpvio->packets_read++;
|
mpvio->packets_read++;
|
||||||
|
|
||||||
if (mpvio->make_it_fail)
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
DBUG_RETURN ((int) mpvio->cached_client_reply.pkt_len);
|
DBUG_RETURN ((int) mpvio->cached_client_reply.pkt_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -11765,21 +11762,13 @@ static int server_mpvio_read_packet(MYSQL_PLUGIN_VIO *param, uchar **buf)
|
|||||||
else
|
else
|
||||||
*buf= mpvio->thd->net.read_pos;
|
*buf= mpvio->thd->net.read_pos;
|
||||||
|
|
||||||
if (mpvio->make_it_fail)
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
DBUG_RETURN((int)pkt_len);
|
DBUG_RETURN((int)pkt_len);
|
||||||
|
|
||||||
err:
|
err:
|
||||||
if (mpvio->status == MPVIO_EXT::FAILURE)
|
if (mpvio->status == MPVIO_EXT::FAILURE)
|
||||||
{
|
{
|
||||||
if (!mpvio->thd->is_error())
|
if (!mpvio->thd->is_error())
|
||||||
{
|
my_error(ER_HANDSHAKE_ERROR, MYF(0));
|
||||||
if (mpvio->make_it_fail)
|
|
||||||
login_failed_error(mpvio->thd);
|
|
||||||
else
|
|
||||||
my_error(ER_HANDSHAKE_ERROR, MYF(0));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
DBUG_RETURN(-1);
|
DBUG_RETURN(-1);
|
||||||
}
|
}
|
||||||
@ -12044,7 +12033,7 @@ bool acl_authenticate(THD *thd, uint connect_errors,
|
|||||||
auth_plugin_name= &mpvio.acl_user->plugin;
|
auth_plugin_name= &mpvio.acl_user->plugin;
|
||||||
res= do_auth_once(thd, auth_plugin_name, &mpvio);
|
res= do_auth_once(thd, auth_plugin_name, &mpvio);
|
||||||
}
|
}
|
||||||
if (mpvio.make_it_fail)
|
if (mpvio.make_it_fail && res == CR_OK)
|
||||||
{
|
{
|
||||||
mpvio.status= MPVIO_EXT::FAILURE;
|
mpvio.status= MPVIO_EXT::FAILURE;
|
||||||
res= CR_ERROR;
|
res= CR_ERROR;
|
||||||
@ -12342,6 +12331,8 @@ static int native_password_authenticate(MYSQL_PLUGIN_VIO *vio,
|
|||||||
DBUG_RETURN(CR_OK);
|
DBUG_RETURN(CR_OK);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
DBUG_EXECUTE_IF("native_password_bad_reply", { pkt_len= 12; });
|
||||||
|
|
||||||
if (pkt_len == 0) /* no password */
|
if (pkt_len == 0) /* no password */
|
||||||
DBUG_RETURN(mpvio->acl_user->salt_len != 0 ? CR_AUTH_USER_CREDENTIALS : CR_OK);
|
DBUG_RETURN(mpvio->acl_user->salt_len != 0 ? CR_AUTH_USER_CREDENTIALS : CR_OK);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user