mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
aea5007d64
"ALTER SERVER can cause server to crash" While retrieving values, it would erronously set the socket value to NULL and attempt to use it in strcmp(). Ensure it is correctly set to "" so that strcmp may not crash. mysql-test/r/federated_server.result: results for bug30671 fix inconsistent result mysql-test/t/federated_server.test: surplus semicolon test for bug30671 sql/sql_servers.cc: bug30671 inside function get_server_from_table_to_cache() server->socket was being set to NULL instead of empty string
295 lines
8.5 KiB
Text
295 lines
8.5 KiB
Text
stop slave;
|
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
|
reset master;
|
|
reset slave;
|
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
|
start slave;
|
|
stop slave;
|
|
DROP DATABASE IF EXISTS federated;
|
|
CREATE DATABASE federated;
|
|
DROP DATABASE IF EXISTS federated;
|
|
CREATE DATABASE federated;
|
|
create database first_db;
|
|
create database second_db;
|
|
use first_db;
|
|
DROP TABLE IF EXISTS first_db.t1;
|
|
Warnings:
|
|
Note 1051 Unknown table 't1'
|
|
CREATE TABLE first_db.t1 (
|
|
`id` int(20) NOT NULL,
|
|
`name` varchar(64) NOT NULL default ''
|
|
)
|
|
DEFAULT CHARSET=latin1;
|
|
DROP TABLE IF EXISTS first_db.t2;
|
|
Warnings:
|
|
Note 1051 Unknown table 't2'
|
|
CREATE TABLE first_db.t2 (
|
|
`id` int(20) NOT NULL,
|
|
`name` varchar(64) NOT NULL default ''
|
|
)
|
|
DEFAULT CHARSET=latin1;
|
|
use second_db;
|
|
DROP TABLE IF EXISTS second_db.t1;
|
|
Warnings:
|
|
Note 1051 Unknown table 't1'
|
|
CREATE TABLE second_db.t1 (
|
|
`id` int(20) NOT NULL,
|
|
`name` varchar(64) NOT NULL default ''
|
|
)
|
|
DEFAULT CHARSET=latin1;
|
|
DROP TABLE IF EXISTS second_db.t2;
|
|
Warnings:
|
|
Note 1051 Unknown table 't2'
|
|
CREATE TABLE second_db.t2 (
|
|
`id` int(20) NOT NULL,
|
|
`name` varchar(64) NOT NULL default ''
|
|
)
|
|
DEFAULT CHARSET=latin1;
|
|
drop server if exists 'server_one';
|
|
create server 'server_one' foreign data wrapper 'mysql' options
|
|
(HOST '127.0.0.1',
|
|
DATABASE 'first_db',
|
|
USER 'root',
|
|
PASSWORD '',
|
|
PORT SLAVE_PORT,
|
|
SOCKET '',
|
|
OWNER 'root');
|
|
drop server if exists 'server_two';
|
|
create server 'server_two' foreign data wrapper 'mysql' options
|
|
(HOST '127.0.0.1',
|
|
DATABASE 'second_db',
|
|
USER 'root',
|
|
PASSWORD '',
|
|
PORT SLAVE_PORT,
|
|
SOCKET '',
|
|
OWNER 'root');
|
|
select * from mysql.servers;
|
|
Server_name Host Db Username Password Port Socket Wrapper Owner
|
|
server_one 127.0.0.1 first_db root SLAVE_PORT mysql root
|
|
server_two 127.0.0.1 second_db root SLAVE_PORT mysql root
|
|
DROP TABLE IF EXISTS federated.old;
|
|
Warnings:
|
|
Note 1051 Unknown table 'old'
|
|
CREATE TABLE federated.old (
|
|
`id` int(20) NOT NULL,
|
|
`name` varchar(64) NOT NULL default ''
|
|
)
|
|
ENGINE="FEDERATED" DEFAULT CHARSET=latin1
|
|
CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/first_db/t1';
|
|
INSERT INTO federated.old (id, name) values (1, 'federated.old-> first_db.t1, url format');
|
|
SELECT * FROM federated.old;
|
|
id name
|
|
1 federated.old-> first_db.t1, url format
|
|
DROP TABLE IF EXISTS federated.old2;
|
|
Warnings:
|
|
Note 1051 Unknown table 'old2'
|
|
CREATE TABLE federated.old2 (
|
|
`id` int(20) NOT NULL,
|
|
`name` varchar(64) NOT NULL default ''
|
|
)
|
|
ENGINE="FEDERATED" DEFAULT CHARSET=latin1
|
|
CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/first_db/t2';
|
|
INSERT INTO federated.old2 (id, name) values (1, 'federated.old2-> first_db.t2, url format');
|
|
SELECT * FROM federated.old2;
|
|
id name
|
|
1 federated.old2-> first_db.t2, url format
|
|
DROP TABLE IF EXISTS federated.urldb2t1;
|
|
Warnings:
|
|
Note 1051 Unknown table 'urldb2t1'
|
|
CREATE TABLE federated.urldb2t1 (
|
|
`id` int(20) NOT NULL,
|
|
`name` varchar(64) NOT NULL default ''
|
|
)
|
|
ENGINE="FEDERATED" DEFAULT CHARSET=latin1
|
|
CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/second_db/t1';
|
|
INSERT INTO federated.urldb2t1 (id, name) values (1, 'federated.urldb2t1 -> second_db.t1, url format');
|
|
SELECT * FROM federated.urldb2t1;
|
|
id name
|
|
1 federated.urldb2t1 -> second_db.t1, url format
|
|
DROP TABLE IF EXISTS federated.urldb2t2;
|
|
Warnings:
|
|
Note 1051 Unknown table 'urldb2t2'
|
|
CREATE TABLE federated.urldb2t2 (
|
|
`id` int(20) NOT NULL,
|
|
`name` varchar(64) NOT NULL default ''
|
|
)
|
|
ENGINE="FEDERATED" DEFAULT CHARSET=latin1
|
|
CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/second_db/t2';
|
|
INSERT INTO federated.urldb2t2 (id, name) values (1, 'federated.urldb2t2 -> second_db.t2, url format');
|
|
SELECT * FROM federated.urldb2t2;
|
|
id name
|
|
1 federated.urldb2t2 -> second_db.t2, url format
|
|
DROP TABLE IF EXISTS federated.t1;
|
|
Warnings:
|
|
Note 1051 Unknown table 't1'
|
|
CREATE TABLE federated.t1 (
|
|
`id` int(20) NOT NULL,
|
|
`name` varchar(64) NOT NULL default ''
|
|
)
|
|
ENGINE="FEDERATED" DEFAULT CHARSET=latin1
|
|
CONNECTION='server_one';
|
|
INSERT INTO federated.t1 (id, name) values (1, 'server_one, new scheme, first_db.t1');
|
|
SELECT * FROM federated.t1;
|
|
id name
|
|
1 federated.old-> first_db.t1, url format
|
|
1 server_one, new scheme, first_db.t1
|
|
DROP TABLE IF EXISTS federated.whatever;
|
|
Warnings:
|
|
Note 1051 Unknown table 'whatever'
|
|
CREATE TABLE federated.whatever (
|
|
`id` int(20) NOT NULL,
|
|
`name` varchar(64) NOT NULL default ''
|
|
)
|
|
ENGINE="FEDERATED" DEFAULT CHARSET=latin1
|
|
CONNECTION='server_one/t1';
|
|
INSERT INTO federated.whatever (id, name) values (1, 'server_one, new scheme, whatever, first_db.t1');
|
|
SELECT * FROM federated.whatever;
|
|
id name
|
|
1 federated.old-> first_db.t1, url format
|
|
1 server_one, new scheme, first_db.t1
|
|
1 server_one, new scheme, whatever, first_db.t1
|
|
ALTER SERVER 'server_one' options(DATABASE 'second_db');
|
|
INSERT INTO federated.t1 (id, name) values (1, 'server_two, new scheme, second_db.t1');
|
|
SELECT * FROM federated.t1;
|
|
id name
|
|
1 federated.urldb2t1 -> second_db.t1, url format
|
|
1 server_two, new scheme, second_db.t1
|
|
INSERT INTO federated.whatever (id, name) values (1, 'server_two, new scheme, whatever, second_db.t1');
|
|
SELECT * FROM federated.whatever;
|
|
id name
|
|
1 federated.urldb2t1 -> second_db.t1, url format
|
|
1 server_two, new scheme, second_db.t1
|
|
1 server_two, new scheme, whatever, second_db.t1
|
|
drop table federated.t1;
|
|
drop server 'server_one';
|
|
drop server 'server_two';
|
|
select * from mysql.servers;
|
|
Server_name Host Db Username Password Port Socket Wrapper Owner
|
|
drop table first_db.t1;
|
|
drop table second_db.t1;
|
|
drop database first_db;
|
|
drop database second_db;
|
|
create database db_legitimate;
|
|
create database db_bogus;
|
|
use db_legitimate;
|
|
CREATE TABLE db_legitimate.t1 (
|
|
`id` int(20) NOT NULL,
|
|
`name` varchar(64) NOT NULL default ''
|
|
);
|
|
INSERT INTO db_legitimate.t1 VALUES ('1','this is legitimate');
|
|
use db_bogus;
|
|
CREATE TABLE db_bogus.t1 (
|
|
`id` int(20) NOT NULL,
|
|
`name` varchar(64) NOT NULL default ''
|
|
)
|
|
;
|
|
INSERT INTO db_bogus.t1 VALUES ('2','this is bogus');
|
|
create server 's1' foreign data wrapper 'mysql' options
|
|
(HOST '127.0.0.1',
|
|
DATABASE 'db_legitimate',
|
|
USER 'root',
|
|
PASSWORD '',
|
|
PORT SLAVE_PORT,
|
|
SOCKET '',
|
|
OWNER 'root');
|
|
create user guest_select@localhost;
|
|
grant select on federated.* to guest_select@localhost;
|
|
create user guest_super@localhost;
|
|
grant select,SUPER,RELOAD on *.* to guest_super@localhost;
|
|
create user guest_usage@localhost;
|
|
grant usage on *.* to guest_usage@localhost;
|
|
CREATE TABLE federated.t1 (
|
|
`id` int(20) NOT NULL,
|
|
`name` varchar(64) NOT NULL default ''
|
|
) ENGINE = FEDERATED CONNECTION = 's1';
|
|
select * from federated.t1;
|
|
id name
|
|
1 this is legitimate
|
|
alter server s1 options (database 'db_bogus');
|
|
ERROR 42000: Access denied; you need the SUPER privilege for this operation
|
|
flush tables;
|
|
select * from federated.t1;
|
|
id name
|
|
1 this is legitimate
|
|
alter server s1 options (database 'db_bogus');
|
|
ERROR 42000: Access denied; you need the SUPER privilege for this operation
|
|
flush tables;
|
|
select * from federated.t1;
|
|
id name
|
|
1 this is legitimate
|
|
alter server s1 options (database 'db_bogus');
|
|
flush tables;
|
|
select * from federated.t1;
|
|
id name
|
|
2 this is bogus
|
|
drop server if exists 's1';
|
|
ERROR 42000: Access denied; you need the SUPER privilege for this operation
|
|
create server 's1' foreign data wrapper 'mysql' options
|
|
(HOST '127.0.0.1',
|
|
DATABASE 'db_legitimate',
|
|
USER 'root',
|
|
PASSWORD '',
|
|
PORT SLAVE_PORT,
|
|
SOCKET '',
|
|
OWNER 'root');
|
|
ERROR 42000: Access denied; you need the SUPER privilege for this operation
|
|
drop server 's1';
|
|
create server 's1' foreign data wrapper 'mysql' options
|
|
(HOST '127.0.0.1',
|
|
DATABASE 'db_legitimate',
|
|
USER 'root',
|
|
PASSWORD '',
|
|
PORT SLAVE_PORT,
|
|
SOCKET '',
|
|
OWNER 'root');
|
|
flush tables;
|
|
select * from federated.t1;
|
|
id name
|
|
1 this is legitimate
|
|
drop database db_legitimate;
|
|
drop database db_bogus;
|
|
drop user guest_super@localhost;
|
|
drop user guest_usage@localhost;
|
|
drop user guest_select@localhost;
|
|
drop table federated.t1;
|
|
drop server 's1';
|
|
create server 's1' foreign data wrapper 'mysql' options (port 3306);
|
|
alter server 's1' options
|
|
(host 'localhost', database '', user '',
|
|
password '', socket '', owner '', port 3306);
|
|
alter server 's1' options
|
|
(host 'localhost', database 'database1', user '',
|
|
password '', socket '', owner '', port 3306);
|
|
drop server 's1';
|
|
# End of 5.1 tests
|
|
use test;
|
|
create procedure p1 ()
|
|
begin
|
|
DECLARE v INT DEFAULT 0;
|
|
DECLARE e INT DEFAULT 0;
|
|
DECLARE i INT;
|
|
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET e = e + 1;
|
|
SET i = sleep(5);
|
|
WHILE v < 10000 do
|
|
CREATE SERVER s
|
|
FOREIGN DATA WRAPPER mysql
|
|
OPTIONS (USER 'Remote', HOST '192.168.1.106', DATABASE 'test');
|
|
ALTER SERVER s OPTIONS (USER 'Remote');
|
|
DROP SERVER s;
|
|
SET v = v + 1;
|
|
END WHILE;
|
|
SELECT e > 0;
|
|
END//
|
|
use test;
|
|
call p1();
|
|
call p1();
|
|
e > 0
|
|
1
|
|
e > 0
|
|
1
|
|
drop procedure p1;
|
|
drop server if exists s;
|
|
DROP TABLE IF EXISTS federated.t1;
|
|
DROP DATABASE IF EXISTS federated;
|
|
DROP TABLE IF EXISTS federated.t1;
|
|
DROP DATABASE IF EXISTS federated;
|