mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 13:32:33 +01:00
ff4b438be0
RENAME TABLE against a table with DATA/INDEX DIRECTORY overwrites the file to which the symlink points. This is security issue, because it is possible to create a table with some name in some non-system database and set DATA/INDEX DIRECTORY to mysql system database. Renaming this table to one of mysql system tables (e.g. user, host) would overwrite the system table. Return an error when the file to which the symlink points exist. mysql-test/r/symlink.result: A test case for BUG#32111. mysql-test/t/symlink.test: A test case for BUG#32111. mysys/my_symlink2.c: Return an error when the file to which the symlink points exist.
92 lines
2.9 KiB
Text
92 lines
2.9 KiB
Text
drop table if exists t1,t2,t7,t8,t9;
|
|
drop database if exists mysqltest;
|
|
create table t1 (a int not null auto_increment, b char(16) not null, primary key (a));
|
|
create table t2 (a int not null auto_increment, b char(16) not null, primary key (a));
|
|
insert into t1 (b) values ("test"),("test1"),("test2"),("test3");
|
|
insert into t2 (b) select b from t1;
|
|
insert into t1 (b) select b from t2;
|
|
insert into t2 (b) select b from t1;
|
|
insert into t1 (b) select b from t2;
|
|
insert into t2 (b) select b from t1;
|
|
insert into t1 (b) select b from t2;
|
|
insert into t2 (b) select b from t1;
|
|
insert into t1 (b) select b from t2;
|
|
insert into t2 (b) select b from t1;
|
|
insert into t1 (b) select b from t2;
|
|
insert into t2 (b) select b from t1;
|
|
insert into t1 (b) select b from t2;
|
|
insert into t2 (b) select b from t1;
|
|
insert into t1 (b) select b from t2;
|
|
insert into t2 (b) select b from t1;
|
|
insert into t1 (b) select b from t2;
|
|
insert into t2 (b) select b from t1;
|
|
insert into t1 (b) select b from t2;
|
|
drop table t2;
|
|
insert into t9 select * from t1;
|
|
check table t9;
|
|
Table Op Msg_type Msg_text
|
|
test.t9 check status OK
|
|
optimize table t9;
|
|
Table Op Msg_type Msg_text
|
|
test.t9 optimize status OK
|
|
repair table t9;
|
|
Table Op Msg_type Msg_text
|
|
test.t9 repair status OK
|
|
alter table t9 add column c int not null;
|
|
show create table t9;
|
|
Table Create Table
|
|
t9 CREATE TABLE `t9` (
|
|
`a` int(11) NOT NULL auto_increment,
|
|
`b` char(16) NOT NULL default '',
|
|
`c` int(11) NOT NULL default '0',
|
|
PRIMARY KEY (`a`)
|
|
) TYPE=MyISAM DATA DIRECTORY='TEST_DIR/var/tmp/' INDEX DIRECTORY='TEST_DIR/var/run/'
|
|
alter table t9 rename t8, add column d int not null;
|
|
alter table t8 rename t7;
|
|
rename table t7 to t9;
|
|
drop table t1;
|
|
Got one of the listed errors
|
|
Got one of the listed errors
|
|
Got one of the listed errors
|
|
Got one of the listed errors
|
|
Got one of the listed errors
|
|
alter table t9 rename mysqltest.t9;
|
|
select count(*) from mysqltest.t9;
|
|
count(*)
|
|
16724
|
|
show create table mysqltest.t9;
|
|
Table Create Table
|
|
t9 CREATE TABLE `t9` (
|
|
`a` int(11) NOT NULL auto_increment,
|
|
`b` char(16) NOT NULL default '',
|
|
`c` int(11) NOT NULL default '0',
|
|
`d` int(11) NOT NULL default '0',
|
|
PRIMARY KEY (`a`)
|
|
) TYPE=MyISAM DATA DIRECTORY='TEST_DIR/var/tmp/' INDEX DIRECTORY='TEST_DIR/var/run/'
|
|
drop database mysqltest;
|
|
create table t1 (a int not null) type=myisam;
|
|
show create table t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`a` int(11) NOT NULL default '0'
|
|
) TYPE=MyISAM
|
|
alter table t1 add b int;
|
|
show create table t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`a` int(11) NOT NULL default '0',
|
|
`b` int(11) default NULL
|
|
) TYPE=MyISAM
|
|
show create table t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`a` int(11) NOT NULL default '0',
|
|
`b` int(11) default NULL
|
|
) TYPE=MyISAM
|
|
drop table t1;
|
|
CREATE TABLE t1(a INT)
|
|
DATA DIRECTORY='TEST_DIR/var/master-data/mysql'
|
|
INDEX DIRECTORY='TEST_DIR/var/master-data/mysql';
|
|
RENAME TABLE t1 TO user;
|
|
Can't create/write to file 'TEST_DIR/var/master-data/mysql/user.MYI' (Errcode: 17)
|
|
DROP TABLE t1;
|