2002-12-05 12:01:15 +01:00
# This test is to check various cases of connections
2005-10-12 13:56:07 +02:00
# with right and wrong password, with and without database
# Unfortunately the check is incomplete as we can't connect without database
2002-12-05 12:01:15 +01:00
2005-03-30 01:50:16 +02:00
# This test makes no sense with the embedded server
--source include/not_embedded.inc
2006-01-19 03:56:06 +01:00
# check that CSV engine was compiled in, as the test relies on the presence
# of the log tables (which are CSV-based). By connect mysql; show tables;
--source include/have_csv.inc
2009-03-06 15:56:17 +01:00
# Save the initial number of concurrent sessions
--source include/count_sessions.inc
2015-08-11 18:45:38 +02:00
SET global secure_auth=0;
2009-03-06 15:56:17 +01:00
2002-12-05 12:01:15 +01:00
#connect (con1,localhost,root,,"");
#show tables;
connect (con1,localhost,root,,mysql);
show tables;
2005-10-12 13:56:07 +02:00
connect (con2,localhost,root,,test);
2002-12-05 12:01:15 +01:00
show tables;
2005-11-07 22:30:44 +01:00
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
2009-03-03 21:34:18 +01:00
--error ER_ACCESS_DENIED_ERROR
2005-10-12 13:56:07 +02:00
connect (fail_con,localhost,root,z,test2);
2005-11-07 22:30:44 +01:00
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
2009-03-03 21:34:18 +01:00
--error ER_ACCESS_DENIED_ERROR
2005-10-12 13:56:07 +02:00
connect (fail_con,localhost,root,z,);
2002-12-05 12:01:15 +01:00
2009-03-03 21:34:18 +01:00
connection default;
disconnect con1;
disconnect con2;
2002-12-05 12:01:15 +01:00
grant ALL on *.* to test@localhost identified by "gambling";
grant ALL on *.* to test@127.0.0.1 identified by "gambling";
# Now check this user with different databases
#connect (con1,localhost,test,gambling,"");
#show tables;
2005-10-12 13:56:07 +02:00
connect (con3,localhost,test,gambling,mysql);
2002-12-05 12:01:15 +01:00
show tables;
2005-10-12 13:56:07 +02:00
connect (con4,localhost,test,gambling,test);
2002-12-05 12:01:15 +01:00
show tables;
2009-03-03 21:34:18 +01:00
connection default;
disconnect con3;
disconnect con4;
2005-11-07 22:30:44 +01:00
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
2009-03-03 21:34:18 +01:00
--error ER_ACCESS_DENIED_ERROR
2005-10-12 13:56:07 +02:00
connect (fail_con,localhost,test,,test2);
2005-11-07 22:30:44 +01:00
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
2009-03-03 21:34:18 +01:00
--error ER_ACCESS_DENIED_ERROR
2009-05-25 17:19:20 +02:00
# Need to protect "" within '' so it's interpreted literally
connect (fail_con,localhost,test,,'""');
2005-11-07 22:30:44 +01:00
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
2009-03-03 21:34:18 +01:00
--error ER_ACCESS_DENIED_ERROR
2005-10-12 13:56:07 +02:00
connect (fail_con,localhost,test,zorro,test2);
2005-11-07 22:30:44 +01:00
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
2009-03-03 21:34:18 +01:00
--error ER_ACCESS_DENIED_ERROR
2005-10-12 13:56:07 +02:00
connect (fail_con,localhost,test,zorro,);
2002-12-05 12:01:15 +01:00
# check if old password version also works
2018-11-24 14:13:41 +01:00
source include/switch_to_mysql_user.inc;
2018-10-14 13:52:52 +02:00
update mysql.user set plugin="", authentication_string="", password=old_password("gambling2") where user=_binary"test";
2002-12-05 12:01:15 +01:00
flush privileges;
2019-01-09 19:17:06 +01:00
show grants for test@localhost;
update mysql.user set plugin='mysql_old_password' where user='test';
flush privileges;
show grants for test@localhost;
2002-12-05 12:01:15 +01:00
2005-10-12 13:56:07 +02:00
connect (con10,localhost,test,gambling2,);
connect (con5,localhost,test,gambling2,mysql);
2004-08-26 17:26:38 +02:00
set password="";
2009-03-03 21:34:18 +01:00
--error ER_PASSWD_LENGTH
2004-07-30 22:05:08 +02:00
set password='gambling3';
2003-07-08 00:36:14 +02:00
set password=old_password('gambling3');
2002-12-05 12:01:15 +01:00
show tables;
2005-10-12 13:56:07 +02:00
connect (con6,localhost,test,gambling3,test);
2002-12-05 12:01:15 +01:00
show tables;
2009-03-03 21:34:18 +01:00
connection default;
disconnect con10;
disconnect con5;
disconnect con6;
2005-11-07 22:30:44 +01:00
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
2009-03-03 21:34:18 +01:00
--error ER_ACCESS_DENIED_ERROR
2005-10-12 13:56:07 +02:00
connect (fail_con,localhost,test,,test2);
2005-11-07 22:30:44 +01:00
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
2009-03-03 21:34:18 +01:00
--error ER_ACCESS_DENIED_ERROR
2005-10-12 13:56:07 +02:00
connect (fail_con,localhost,test,,);
2005-11-07 22:30:44 +01:00
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
2009-03-03 21:34:18 +01:00
--error ER_ACCESS_DENIED_ERROR
2005-10-12 13:56:07 +02:00
connect (fail_con,localhost,test,zorro,test2);
2005-11-07 22:30:44 +01:00
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
2009-03-03 21:34:18 +01:00
--error ER_ACCESS_DENIED_ERROR
2005-10-12 13:56:07 +02:00
connect (fail_con,localhost,test,zorro,);
2003-06-13 11:17:31 +02:00
2018-11-24 14:13:41 +01:00
source include/switch_to_mysql_global_priv.inc;
2003-06-13 11:17:31 +02:00
# remove user 'test' so that other tests which may use 'test'
# do not depend on this test.
2004-07-08 15:54:07 +02:00
delete from mysql.user where user=_binary"test";
2005-07-28 02:22:47 +02:00
2005-09-08 10:09:30 +02:00
#
2009-03-06 15:56:17 +01:00
# Bug#12517 Clear user variables and replication events before
# closing temp tables in thread cleanup.
2005-10-12 13:56:07 +02:00
connect (con7,localhost,root,,test);
2009-03-06 15:56:17 +01:00
let $connection_id= `select connection_id()`;
2005-08-30 15:22:19 +02:00
create table t1 (id integer not null auto_increment primary key);
create temporary table t2(id integer not null auto_increment primary key);
set @id := 1;
delete from t1 where id like @id;
2005-09-08 10:09:30 +02:00
connection default;
2009-03-06 15:56:17 +01:00
disconnect con7;
# Wait till the session con7 is disconnected
let $wait_condition =
SELECT COUNT(*) = 0
FROM information_schema.processlist
WHERE id = '$connection_id';
--source include/wait_condition.inc
2005-09-08 10:09:30 +02:00
drop table t1;
2005-08-30 15:22:19 +02:00
2008-03-12 15:44:40 +01:00
--echo # ------------------------------------------------------------------
--echo # -- End of 4.1 tests
--echo # ------------------------------------------------------------------
Avoid races in connect.test.
The problem was in a test case for Bug33507:
- when the number of active connections reaches the limit,
the server accepts only root connections. That's achieved by
accepting a connection, negotiating with the client and
checking user credentials. If it is not SUPER, the connection
is dropped.
- when the server accepts connection, it increases the counter;
- when the server drops connection, it decreases the counter;
- the race was in between of decreasing the counter and accepting
new connection:
- max_user_connections = 2;
- 2 oridinary user connections accepted;
- extra user connection is establishing;
- server checked user credentials, and sent 'Too many connections'
error;
- the client receives the error and establishes extra SUPER user
connection;
- the server however didn't decrease the counter (the extra
user connection still is "alive" in the server) -- so, the new
SUPER-user connection, will be dropped, because it exceeds
(max_user_connections + 1).
The fix is to implement "safe connect", which makes several attempts
to connect and use it in the test script.
mysql-test/r/connect.result:
Update test file.
mysql-test/t/connect.test:
Avoid races in connect.test.
mysql-test/include/connect2.inc:
Auxiliary routine to establish a connection reliably.
2008-03-17 12:26:00 +01:00
###########################################################################
2008-03-12 15:44:40 +01:00
--echo
--echo # -- Bug#33507: Event scheduler creates more threads than max_connections
--echo # -- which results in user lockout.
Avoid races in connect.test.
The problem was in a test case for Bug33507:
- when the number of active connections reaches the limit,
the server accepts only root connections. That's achieved by
accepting a connection, negotiating with the client and
checking user credentials. If it is not SUPER, the connection
is dropped.
- when the server accepts connection, it increases the counter;
- when the server drops connection, it decreases the counter;
- the race was in between of decreasing the counter and accepting
new connection:
- max_user_connections = 2;
- 2 oridinary user connections accepted;
- extra user connection is establishing;
- server checked user credentials, and sent 'Too many connections'
error;
- the client receives the error and establishes extra SUPER user
connection;
- the server however didn't decrease the counter (the extra
user connection still is "alive" in the server) -- so, the new
SUPER-user connection, will be dropped, because it exceeds
(max_user_connections + 1).
The fix is to implement "safe connect", which makes several attempts
to connect and use it in the test script.
mysql-test/r/connect.result:
Update test file.
mysql-test/t/connect.test:
Avoid races in connect.test.
mysql-test/include/connect2.inc:
Auxiliary routine to establish a connection reliably.
2008-03-17 12:26:00 +01:00
--echo
2015-08-11 18:45:38 +02:00
CREATE USER mysqltest_u1@localhost;
2008-03-12 15:44:40 +01:00
GRANT USAGE ON *.* TO mysqltest_u1@localhost;
# NOTE: if the test case fails sporadically due to spurious connections,
# consider disabling all users.
--echo
let $saved_max_connections = `SELECT @@global.max_connections`;
2018-03-22 19:03:54 +01:00
SET GLOBAL max_connections = 10;
2008-03-12 15:44:40 +01:00
SET GLOBAL event_scheduler = ON;
2018-03-22 19:03:54 +01:00
connect (tmp_con1,localhost,mysqltest_u1,,);
connect (tmp_con2,localhost,mysqltest_u1,,);
connect (tmp_con3,localhost,mysqltest_u1,,);
connect (tmp_con4,localhost,mysqltest_u1,,);
connect (tmp_con5,localhost,mysqltest_u1,,);
connect (tmp_con6,localhost,mysqltest_u1,,);
connect (tmp_con7,localhost,mysqltest_u1,,);
connection default;
2008-03-12 15:44:40 +01:00
--echo
Avoid races in connect.test.
The problem was in a test case for Bug33507:
- when the number of active connections reaches the limit,
the server accepts only root connections. That's achieved by
accepting a connection, negotiating with the client and
checking user credentials. If it is not SUPER, the connection
is dropped.
- when the server accepts connection, it increases the counter;
- when the server drops connection, it decreases the counter;
- the race was in between of decreasing the counter and accepting
new connection:
- max_user_connections = 2;
- 2 oridinary user connections accepted;
- extra user connection is establishing;
- server checked user credentials, and sent 'Too many connections'
error;
- the client receives the error and establishes extra SUPER user
connection;
- the server however didn't decrease the counter (the extra
user connection still is "alive" in the server) -- so, the new
SUPER-user connection, will be dropped, because it exceeds
(max_user_connections + 1).
The fix is to implement "safe connect", which makes several attempts
to connect and use it in the test script.
mysql-test/r/connect.result:
Update test file.
mysql-test/t/connect.test:
Avoid races in connect.test.
mysql-test/include/connect2.inc:
Auxiliary routine to establish a connection reliably.
2008-03-17 12:26:00 +01:00
--echo # -- Waiting for Event Scheduler to start...
2008-03-12 15:44:40 +01:00
let $wait_condition =
SELECT COUNT(*) = 1
FROM information_schema.processlist
WHERE user = 'event_scheduler';
--source include/wait_condition.inc
Avoid races in connect.test.
The problem was in a test case for Bug33507:
- when the number of active connections reaches the limit,
the server accepts only root connections. That's achieved by
accepting a connection, negotiating with the client and
checking user credentials. If it is not SUPER, the connection
is dropped.
- when the server accepts connection, it increases the counter;
- when the server drops connection, it decreases the counter;
- the race was in between of decreasing the counter and accepting
new connection:
- max_user_connections = 2;
- 2 oridinary user connections accepted;
- extra user connection is establishing;
- server checked user credentials, and sent 'Too many connections'
error;
- the client receives the error and establishes extra SUPER user
connection;
- the server however didn't decrease the counter (the extra
user connection still is "alive" in the server) -- so, the new
SUPER-user connection, will be dropped, because it exceeds
(max_user_connections + 1).
The fix is to implement "safe connect", which makes several attempts
to connect and use it in the test script.
mysql-test/r/connect.result:
Update test file.
mysql-test/t/connect.test:
Avoid races in connect.test.
mysql-test/include/connect2.inc:
Auxiliary routine to establish a connection reliably.
2008-03-17 12:26:00 +01:00
--echo
2008-03-12 15:44:40 +01:00
--echo # -- Disconnecting default connection...
--disconnect default
--echo
--echo # -- Check that we allow exactly three user connections, no matter how
--echo # -- many threads are running.
2009-03-06 15:56:17 +01:00
--echo
2008-03-12 15:44:40 +01:00
--echo # -- Connecting (1)...
Avoid races in connect.test.
The problem was in a test case for Bug33507:
- when the number of active connections reaches the limit,
the server accepts only root connections. That's achieved by
accepting a connection, negotiating with the client and
checking user credentials. If it is not SUPER, the connection
is dropped.
- when the server accepts connection, it increases the counter;
- when the server drops connection, it decreases the counter;
- the race was in between of decreasing the counter and accepting
new connection:
- max_user_connections = 2;
- 2 oridinary user connections accepted;
- extra user connection is establishing;
- server checked user credentials, and sent 'Too many connections'
error;
- the client receives the error and establishes extra SUPER user
connection;
- the server however didn't decrease the counter (the extra
user connection still is "alive" in the server) -- so, the new
SUPER-user connection, will be dropped, because it exceeds
(max_user_connections + 1).
The fix is to implement "safe connect", which makes several attempts
to connect and use it in the test script.
mysql-test/r/connect.result:
Update test file.
mysql-test/t/connect.test:
Avoid races in connect.test.
mysql-test/include/connect2.inc:
Auxiliary routine to establish a connection reliably.
2008-03-17 12:26:00 +01:00
let $con_name = con_1;
let $con_user_name = mysqltest_u1;
--source include/connect2.inc
2008-03-12 15:44:40 +01:00
--echo
--echo # -- Connecting (2)...
Avoid races in connect.test.
The problem was in a test case for Bug33507:
- when the number of active connections reaches the limit,
the server accepts only root connections. That's achieved by
accepting a connection, negotiating with the client and
checking user credentials. If it is not SUPER, the connection
is dropped.
- when the server accepts connection, it increases the counter;
- when the server drops connection, it decreases the counter;
- the race was in between of decreasing the counter and accepting
new connection:
- max_user_connections = 2;
- 2 oridinary user connections accepted;
- extra user connection is establishing;
- server checked user credentials, and sent 'Too many connections'
error;
- the client receives the error and establishes extra SUPER user
connection;
- the server however didn't decrease the counter (the extra
user connection still is "alive" in the server) -- so, the new
SUPER-user connection, will be dropped, because it exceeds
(max_user_connections + 1).
The fix is to implement "safe connect", which makes several attempts
to connect and use it in the test script.
mysql-test/r/connect.result:
Update test file.
mysql-test/t/connect.test:
Avoid races in connect.test.
mysql-test/include/connect2.inc:
Auxiliary routine to establish a connection reliably.
2008-03-17 12:26:00 +01:00
let $con_name = con_2;
let $con_user_name = mysqltest_u1;
--source include/connect2.inc
2008-03-12 15:44:40 +01:00
Avoid races in connect.test.
The problem was in a test case for Bug33507:
- when the number of active connections reaches the limit,
the server accepts only root connections. That's achieved by
accepting a connection, negotiating with the client and
checking user credentials. If it is not SUPER, the connection
is dropped.
- when the server accepts connection, it increases the counter;
- when the server drops connection, it decreases the counter;
- the race was in between of decreasing the counter and accepting
new connection:
- max_user_connections = 2;
- 2 oridinary user connections accepted;
- extra user connection is establishing;
- server checked user credentials, and sent 'Too many connections'
error;
- the client receives the error and establishes extra SUPER user
connection;
- the server however didn't decrease the counter (the extra
user connection still is "alive" in the server) -- so, the new
SUPER-user connection, will be dropped, because it exceeds
(max_user_connections + 1).
The fix is to implement "safe connect", which makes several attempts
to connect and use it in the test script.
mysql-test/r/connect.result:
Update test file.
mysql-test/t/connect.test:
Avoid races in connect.test.
mysql-test/include/connect2.inc:
Auxiliary routine to establish a connection reliably.
2008-03-17 12:26:00 +01:00
--echo
2008-03-12 15:44:40 +01:00
--echo # -- Connecting (3)...
Avoid races in connect.test.
The problem was in a test case for Bug33507:
- when the number of active connections reaches the limit,
the server accepts only root connections. That's achieved by
accepting a connection, negotiating with the client and
checking user credentials. If it is not SUPER, the connection
is dropped.
- when the server accepts connection, it increases the counter;
- when the server drops connection, it decreases the counter;
- the race was in between of decreasing the counter and accepting
new connection:
- max_user_connections = 2;
- 2 oridinary user connections accepted;
- extra user connection is establishing;
- server checked user credentials, and sent 'Too many connections'
error;
- the client receives the error and establishes extra SUPER user
connection;
- the server however didn't decrease the counter (the extra
user connection still is "alive" in the server) -- so, the new
SUPER-user connection, will be dropped, because it exceeds
(max_user_connections + 1).
The fix is to implement "safe connect", which makes several attempts
to connect and use it in the test script.
mysql-test/r/connect.result:
Update test file.
mysql-test/t/connect.test:
Avoid races in connect.test.
mysql-test/include/connect2.inc:
Auxiliary routine to establish a connection reliably.
2008-03-17 12:26:00 +01:00
let $con_name = con_3;
let $con_user_name = mysqltest_u1;
--source include/connect2.inc
2008-03-12 15:44:40 +01:00
--echo
Avoid races in connect.test.
The problem was in a test case for Bug33507:
- when the number of active connections reaches the limit,
the server accepts only root connections. That's achieved by
accepting a connection, negotiating with the client and
checking user credentials. If it is not SUPER, the connection
is dropped.
- when the server accepts connection, it increases the counter;
- when the server drops connection, it decreases the counter;
- the race was in between of decreasing the counter and accepting
new connection:
- max_user_connections = 2;
- 2 oridinary user connections accepted;
- extra user connection is establishing;
- server checked user credentials, and sent 'Too many connections'
error;
- the client receives the error and establishes extra SUPER user
connection;
- the server however didn't decrease the counter (the extra
user connection still is "alive" in the server) -- so, the new
SUPER-user connection, will be dropped, because it exceeds
(max_user_connections + 1).
The fix is to implement "safe connect", which makes several attempts
to connect and use it in the test script.
mysql-test/r/connect.result:
Update test file.
mysql-test/t/connect.test:
Avoid races in connect.test.
mysql-test/include/connect2.inc:
Auxiliary routine to establish a connection reliably.
2008-03-17 12:26:00 +01:00
--echo # -- Connecting (4) [should fail]...
let $con_name = con_4;
let $con_user_name = mysqltest_u1;
let $wait_timeout = 5;
--source include/connect2.inc
2008-03-12 15:44:40 +01:00
--echo
--echo # -- Check that we allow one extra SUPER-user connection.
Avoid races in connect.test.
The problem was in a test case for Bug33507:
- when the number of active connections reaches the limit,
the server accepts only root connections. That's achieved by
accepting a connection, negotiating with the client and
checking user credentials. If it is not SUPER, the connection
is dropped.
- when the server accepts connection, it increases the counter;
- when the server drops connection, it decreases the counter;
- the race was in between of decreasing the counter and accepting
new connection:
- max_user_connections = 2;
- 2 oridinary user connections accepted;
- extra user connection is establishing;
- server checked user credentials, and sent 'Too many connections'
error;
- the client receives the error and establishes extra SUPER user
connection;
- the server however didn't decrease the counter (the extra
user connection still is "alive" in the server) -- so, the new
SUPER-user connection, will be dropped, because it exceeds
(max_user_connections + 1).
The fix is to implement "safe connect", which makes several attempts
to connect and use it in the test script.
mysql-test/r/connect.result:
Update test file.
mysql-test/t/connect.test:
Avoid races in connect.test.
mysql-test/include/connect2.inc:
Auxiliary routine to establish a connection reliably.
2008-03-17 12:26:00 +01:00
--echo
2008-03-12 15:44:40 +01:00
--echo # -- Connecting super (1)...
Avoid races in connect.test.
The problem was in a test case for Bug33507:
- when the number of active connections reaches the limit,
the server accepts only root connections. That's achieved by
accepting a connection, negotiating with the client and
checking user credentials. If it is not SUPER, the connection
is dropped.
- when the server accepts connection, it increases the counter;
- when the server drops connection, it decreases the counter;
- the race was in between of decreasing the counter and accepting
new connection:
- max_user_connections = 2;
- 2 oridinary user connections accepted;
- extra user connection is establishing;
- server checked user credentials, and sent 'Too many connections'
error;
- the client receives the error and establishes extra SUPER user
connection;
- the server however didn't decrease the counter (the extra
user connection still is "alive" in the server) -- so, the new
SUPER-user connection, will be dropped, because it exceeds
(max_user_connections + 1).
The fix is to implement "safe connect", which makes several attempts
to connect and use it in the test script.
mysql-test/r/connect.result:
Update test file.
mysql-test/t/connect.test:
Avoid races in connect.test.
mysql-test/include/connect2.inc:
Auxiliary routine to establish a connection reliably.
2008-03-17 12:26:00 +01:00
let $con_name = con_super_1;
let $con_user_name = root;
--source include/connect2.inc
2008-03-12 15:44:40 +01:00
Avoid races in connect.test.
The problem was in a test case for Bug33507:
- when the number of active connections reaches the limit,
the server accepts only root connections. That's achieved by
accepting a connection, negotiating with the client and
checking user credentials. If it is not SUPER, the connection
is dropped.
- when the server accepts connection, it increases the counter;
- when the server drops connection, it decreases the counter;
- the race was in between of decreasing the counter and accepting
new connection:
- max_user_connections = 2;
- 2 oridinary user connections accepted;
- extra user connection is establishing;
- server checked user credentials, and sent 'Too many connections'
error;
- the client receives the error and establishes extra SUPER user
connection;
- the server however didn't decrease the counter (the extra
user connection still is "alive" in the server) -- so, the new
SUPER-user connection, will be dropped, because it exceeds
(max_user_connections + 1).
The fix is to implement "safe connect", which makes several attempts
to connect and use it in the test script.
mysql-test/r/connect.result:
Update test file.
mysql-test/t/connect.test:
Avoid races in connect.test.
mysql-test/include/connect2.inc:
Auxiliary routine to establish a connection reliably.
2008-03-17 12:26:00 +01:00
--echo
--echo # -- Connecting super (2) [should fail]...
let $con_name = con_super_2;
let $con_user_name = root;
let $wait_timeout = 5;
--source include/connect2.inc
2008-03-12 15:44:40 +01:00
--echo
Avoid races in connect.test.
The problem was in a test case for Bug33507:
- when the number of active connections reaches the limit,
the server accepts only root connections. That's achieved by
accepting a connection, negotiating with the client and
checking user credentials. If it is not SUPER, the connection
is dropped.
- when the server accepts connection, it increases the counter;
- when the server drops connection, it decreases the counter;
- the race was in between of decreasing the counter and accepting
new connection:
- max_user_connections = 2;
- 2 oridinary user connections accepted;
- extra user connection is establishing;
- server checked user credentials, and sent 'Too many connections'
error;
- the client receives the error and establishes extra SUPER user
connection;
- the server however didn't decrease the counter (the extra
user connection still is "alive" in the server) -- so, the new
SUPER-user connection, will be dropped, because it exceeds
(max_user_connections + 1).
The fix is to implement "safe connect", which makes several attempts
to connect and use it in the test script.
mysql-test/r/connect.result:
Update test file.
mysql-test/t/connect.test:
Avoid races in connect.test.
mysql-test/include/connect2.inc:
Auxiliary routine to establish a connection reliably.
2008-03-17 12:26:00 +01:00
--echo # -- Ensure that we have Event Scheduler thread, 3 ordinary user
--echo # -- connections and one extra super-user connection.
2008-03-12 15:44:40 +01:00
SELECT user FROM information_schema.processlist ORDER BY id;
--echo
--echo # -- Resetting variables...
2019-08-30 15:06:54 +02:00
--replace_result $saved_max_connections #max_connections#
2008-03-12 15:44:40 +01:00
--eval SET GLOBAL max_connections = $saved_max_connections
2008-03-13 10:02:12 +01:00
--echo
--echo # -- Stopping Event Scheduler...
2008-03-12 15:44:40 +01:00
SET GLOBAL event_scheduler = OFF;
Avoid races in connect.test.
The problem was in a test case for Bug33507:
- when the number of active connections reaches the limit,
the server accepts only root connections. That's achieved by
accepting a connection, negotiating with the client and
checking user credentials. If it is not SUPER, the connection
is dropped.
- when the server accepts connection, it increases the counter;
- when the server drops connection, it decreases the counter;
- the race was in between of decreasing the counter and accepting
new connection:
- max_user_connections = 2;
- 2 oridinary user connections accepted;
- extra user connection is establishing;
- server checked user credentials, and sent 'Too many connections'
error;
- the client receives the error and establishes extra SUPER user
connection;
- the server however didn't decrease the counter (the extra
user connection still is "alive" in the server) -- so, the new
SUPER-user connection, will be dropped, because it exceeds
(max_user_connections + 1).
The fix is to implement "safe connect", which makes several attempts
to connect and use it in the test script.
mysql-test/r/connect.result:
Update test file.
mysql-test/t/connect.test:
Avoid races in connect.test.
mysql-test/include/connect2.inc:
Auxiliary routine to establish a connection reliably.
2008-03-17 12:26:00 +01:00
--echo
2008-03-13 10:02:12 +01:00
--echo # -- Waiting for Event Scheduler to stop...
let $wait_condition =
SELECT COUNT(*) = 0
FROM information_schema.processlist
WHERE user = 'event_scheduler';
--source include/wait_condition.inc
2008-03-12 15:44:40 +01:00
--echo
--echo # -- That's it. Closing connections...
--disconnect con_1
--disconnect con_2
2008-03-13 10:02:12 +01:00
--disconnect con_3
2008-03-12 15:44:40 +01:00
--disconnect con_super_1
2018-03-22 19:03:54 +01:00
--disconnect tmp_con1
--disconnect tmp_con2
--disconnect tmp_con3
--disconnect tmp_con4
--disconnect tmp_con5
--disconnect tmp_con6
--disconnect tmp_con7
2008-03-12 15:44:40 +01:00
--echo
--echo # -- Restoring default connection...
--connect (default,localhost,root,,test)
2008-03-13 10:02:12 +01:00
--echo
--echo # -- Waiting for connections to close...
2018-12-06 19:26:00 +01:00
let $count_sessions=1;
--source include/wait_until_count_sessions.inc
2008-03-13 10:02:12 +01:00
--echo
DROP USER mysqltest_u1@localhost;
2008-03-12 15:44:40 +01:00
--echo
--echo # -- End of Bug#33507.
--echo
2008-03-13 10:02:12 +01:00
###########################################################################
2009-03-06 15:56:17 +01:00
--echo # -- Bug#35074: max_used_connections is not correct.
2008-03-13 10:02:12 +01:00
--echo
FLUSH STATUS;
--echo
SHOW STATUS LIKE 'max_used_connections';
--echo
--echo # -- Starting Event Scheduler...
SET GLOBAL event_scheduler = ON;
--echo # -- Waiting for Event Scheduler to start...
2009-03-06 15:56:17 +01:00
--source include/running_event_scheduler.inc
2008-03-13 10:02:12 +01:00
# NOTE: We should use a new connection here instead of reconnect in order to
# avoid races (we can not for sure when the connection being disconnected is
# actually disconnected on the server).
--echo
--echo # -- Opening a new connection to check max_used_connections...
--connect (con_1,localhost,root)
--echo
--echo # -- Check that max_used_connections hasn't changed.
SHOW STATUS LIKE 'max_used_connections';
--echo
--echo # -- Closing new connection...
--disconnect con_1
--connection default
--echo
--echo # -- Stopping Event Scheduler...
SET GLOBAL event_scheduler = OFF;
--echo # -- Waiting for Event Scheduler to stop...
2009-03-06 15:56:17 +01:00
--source include/no_running_events.inc
2008-03-13 10:02:12 +01:00
--echo
--echo # -- End of Bug#35074.
--echo
2009-03-18 16:46:32 +01:00
# Test connections to the extra port.
connect(extracon,127.0.0.1,root,,test,$MASTER_EXTRA_PORT,);
SELECT 'Connection on extra port ok';
connect(extracon2,127.0.0.1,root,,test,$MASTER_EXTRA_PORT,);
SELECT 'Connection on extra port 2 ok';
--disable_abort_on_error
--disable_result_log
--disable_query_log
connect(extracon3,127.0.0.1,root,,test,$MASTER_EXTRA_PORT,);
--enable_query_log
--enable_result_log
--enable_abort_on_error
let $error = $mysql_errno;
if (!$error)
{
--echo # -- Error: managed to establish more than --extra-max-connections + 1 connections
}
if ($error)
{
--echo # -- Success: more than --extra-max-connections + 1 normal connections not possible
}
2010-11-11 08:34:14 +01:00
###########################################################################
--echo #
--echo # -- Bug#49752: 2469.126.2 unintentionally breaks authentication
--echo # against MySQL 5.1 server
--echo #
2020-11-18 16:04:57 +01:00
GRANT ALL ON test.* TO 'O1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567'@'localhost' IDENTIFIED BY 'test123';
2010-11-11 08:34:14 +01:00
FLUSH PRIVILEGES;
2020-11-18 16:04:57 +01:00
connect (con1,localhost, O1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567x,test123,test);
2010-11-11 08:34:14 +01:00
disconnect con1;
connection default;
2020-11-18 16:04:57 +01:00
DROP USER 'O1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567'@'localhost';
2010-11-11 08:34:14 +01:00
FLUSH PRIVILEGES;
--echo #
--echo # -- End of Bug#49752
--echo #
2008-03-12 15:44:40 +01:00
--echo # ------------------------------------------------------------------
--echo # -- End of 5.1 tests
--echo # ------------------------------------------------------------------
2009-03-06 15:56:17 +01:00
2009-05-19 11:28:05 +02:00
--disconnect extracon
--disconnect extracon2
--connection default
2010-04-05 11:50:31 +02:00
#
# A couple of plugin tests - for builtin plugins only
#
CREATE USER mysqltest_up1 IDENTIFIED VIA mysql_native_password using '*E8D46CE25265E545D225A8A6F1BAF642FEBEE5CB';
CREATE USER mysqltest_up2 IDENTIFIED VIA mysql_old_password using '09301740536db389';
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
--error ER_ACCESS_DENIED_ERROR
2010-04-06 20:36:06 +02:00
connect(pcon1,localhost,mysqltest_up1,foo,,$MASTER_MYPORT,);
connect(pcon2,localhost,mysqltest_up1,bar,,$MASTER_MYPORT,);
2010-04-05 11:50:31 +02:00
select user(), current_user();
disconnect pcon2;
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
--error ER_ACCESS_DENIED_ERROR
2010-04-06 20:36:06 +02:00
connect(pcon3,localhost,mysqltest_up2,newpw,,$MASTER_MYPORT,);
connect(pcon4,localhost,mysqltest_up2,oldpw,,$MASTER_MYPORT,);
2010-04-05 11:50:31 +02:00
select user(), current_user();
disconnect pcon4;
2010-12-20 19:19:24 +01:00
#
2014-06-11 10:09:29 +02:00
# lp:683112 Maria 5.2 incorrectly reports "(using password: NO)"
# even when password is specified
2010-12-20 19:19:24 +01:00
#
# test "access denied" error for nonexisting user with and without a password
#
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
--error ER_ACCESS_DENIED_ERROR
connect(pcon5,localhost,mysqltest_nouser,newpw,,$MASTER_MYPORT,);
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
--error ER_ACCESS_DENIED_ERROR
connect(pcon5,localhost,mysqltest_nouser,,,$MASTER_MYPORT,);
2010-04-05 11:50:31 +02:00
connection default;
2014-06-11 10:09:29 +02:00
#
# MDEV-6253 MySQL Users Break when Migrating from MySQL 5.1 to MariaDB 10.0.10
#
# cannot connect when password is set and plugin=mysql_native_password
#
2018-11-24 14:13:41 +01:00
source include/switch_to_mysql_user.inc;
2014-11-23 20:30:56 +01:00
update mysql.user set plugin='mysql_native_password' where user = 'mysqltest_up1';
update mysql.user set plugin='mysql_old_password' where user = 'mysqltest_up2';
2014-06-11 10:09:29 +02:00
select user, password, plugin, authentication_string from mysql.user
where user like 'mysqltest_up_';
2018-10-14 13:52:52 +02:00
flush privileges;
2014-06-11 10:09:29 +02:00
connect(pcon6,localhost,mysqltest_up1,bar,,$MASTER_MYPORT,);
select user(), current_user();
disconnect pcon6;
connect(pcon7,localhost,mysqltest_up2,oldpw,,$MASTER_MYPORT,);
select user(), current_user();
disconnect pcon7;
connection default;
2018-11-24 14:13:41 +01:00
source include/switch_to_mysql_global_priv.inc;
2010-04-05 11:50:31 +02:00
DROP USER mysqltest_up1@'%';
DROP USER mysqltest_up2@'%';
2009-03-06 15:56:17 +01:00
# Wait till all disconnects are completed
--source include/wait_until_count_sessions.inc
2009-03-03 21:34:18 +01:00
2012-06-10 11:50:21 +02:00
--echo #
2018-10-14 13:52:52 +02:00
--echo # BUG#1010351: New "via" keyword in 5.2+ can't be used as identifier anymore
2012-06-10 11:50:21 +02:00
--echo #
create table t1 (via int);
alter table t1 add key(via);
drop table t1;
create table t1 (col1 int);
alter table t1 add via int not null;
drop table t1;
delimiter |;
create procedure p1(x int)
foo: loop
if x = 0 then
leave foo;
end if;
select 'test';
set x = x-1;
end loop foo|
delimiter ;|
call p1(2);
drop procedure p1;
2015-08-11 18:45:38 +02:00
SET global secure_auth=default;
2019-05-13 21:34:16 +02:00
--echo #
--echo # MDEV-19282: Log more specific warning with log_warnings=2 if
--echo # connection is aborted prior to authentication
--echo # MDEV-19277: Add status variable that gets incremented if
--echo # connection is aborted prior to authentication
--echo #
flush status;
2019-05-15 09:13:31 +02:00
SHOW GLOBAL STATUS LIKE 'Aborted_connects%';
2019-05-13 21:34:16 +02:00
SET GLOBAL log_warnings=2;
--let SEARCH_FILE=$MYSQLTEST_VARDIR/log/mysqld.1.err
--let SEARCH_PATTERN= This connection closed normally without authentication
--source include/search_pattern_in_file.inc
--perl
use Socket;
2019-05-19 20:48:39 +02:00
socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname("tcp"))
or die "Can't create a tcp socket!\n";
connect(SOCK, pack_sockaddr_in($ENV{MASTER_MYPORT}, inet_aton("localhost")))
or die "Can't connect to port $ENV{MASTER_MYPORT}!\n";
2019-05-13 21:34:16 +02:00
exit(0);
EOF
2019-05-19 20:48:39 +02:00
--echo # let tcp to detect disconnect
select sleep(1);
2019-05-13 21:34:16 +02:00
2019-05-15 09:13:31 +02:00
SHOW GLOBAL STATUS LIKE 'Aborted_connects%';
2019-05-13 21:34:16 +02:00
--let SEARCH_PATTERN= This connection closed normally without authentication
--source include/search_pattern_in_file.inc
SET @save_connect_timeout= @@connect_timeout;
SET GLOBAL connect_timeout=2;
--perl
use Socket;
2019-05-19 20:35:38 +02:00
socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname("tcp"))
or die "Can't create a tcp socket!\n";
connect(SOCK, pack_sockaddr_in($ENV{MASTER_MYPORT}, inet_aton("localhost")))
2019-05-19 20:48:39 +02:00
or die "Can't connect to port $ENV{MASTER_MYPORT}!\n";
2019-05-13 21:34:16 +02:00
sleep 3;
exit(0);
EOF
2019-05-15 09:13:31 +02:00
SHOW GLOBAL STATUS LIKE 'Aborted_connects%';
2019-05-13 21:34:16 +02:00
--let SEARCH_PATTERN= This connection closed normally without authentication
--source include/search_pattern_in_file.inc
SET GLOBAL log_warnings=default;
SET GLOBAL connect_timeout= @save_connect_timeout;
--echo # End of 10.4 tests