Commit 761b1b29 authored by Sven Sandberg's avatar Sven Sandberg

BUG#37858: loaddata,rpl_slave_skip,rpl_innodb_mixed_dml fail if datafile not world-readable

Problem 1: main.loaddata tried to trigger an error caused by
reading files outside the vardir, by reading itself. However,
if loaddata.test is not world-readable (e.g., umask=0077),
then another error is triggered.
Fix 1: allow the other error too.
Problem 2: rpl_slave_skip and rpl_innodb_mixed_dml tried to
copy a file from mysql-test/suite/rpl/data to mysql-test/var
and then read it. That failed too if umask=0077, since the
file would not become world-readable.
Fix 2: move the files from mysql-test/suite/rpl/data to
mysql-test/std_data and update tests accordingly. Remove
the directory mysql-test/suite/rpl/data.


mysql-test/r/loaddata.result:
  Updated result file.
mysql-test/std_data/rpl_bug28618.dat:
  Moved this file to std_data.
mysql-test/std_data/rpl_mixed.dat:
  Moved this file to std_data.
mysql-test/suite/rpl/data:
  Removed directory that is now unused.
mysql-test/suite/rpl/include/rpl_mixed_dml.inc:
  The rpl_mixed.dat file has been moved. Updated the test to
  use the new location.
mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result:
  Updated result file.
mysql-test/suite/rpl/r/rpl_slave_skip.result:
  Updated result file.
mysql-test/suite/rpl/t/rpl_slave_skip.test:
  The rpl_bug28618.dat file has been moved. Updated the test
  to use the new location.
mysql-test/t/loaddata.test:
  Allow more error messages. ER_TEXTFILE_NOT_READABLE may
  happen if the file is not world-readable (which may happen,
  e.g., if the user has umask=0077).
parent f068061a
...@@ -212,7 +212,7 @@ set @@secure_file_priv= 0; ...@@ -212,7 +212,7 @@ set @@secure_file_priv= 0;
ERROR HY000: Variable 'secure_file_priv' is a read only variable ERROR HY000: Variable 'secure_file_priv' is a read only variable
truncate table t1; truncate table t1;
load data infile 'MYSQL_TEST_DIR/t/loaddata.test' into table t1; load data infile 'MYSQL_TEST_DIR/t/loaddata.test' into table t1;
ERROR HY000: The MySQL server is running with the --secure-file-priv option so it cannot execute this statement Got one of the listed errors
select * from t1; select * from t1;
a b c a b c
select load_file("MYSQL_TEST_DIR/t/loaddata.test"); select load_file("MYSQL_TEST_DIR/t/loaddata.test");
......
...@@ -51,9 +51,8 @@ DELETE FROM t2 WHERE a = 2; ...@@ -51,9 +51,8 @@ DELETE FROM t2 WHERE a = 2;
--echo --echo
--echo ******************** LOAD DATA INFILE ******************** --echo ******************** LOAD DATA INFILE ********************
--copy_file suite/rpl/data/rpl_mixed.dat $MYSQLTEST_VARDIR/tmp/rpl_mixed.dat --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
LOAD DATA INFILE '../../tmp/rpl_mixed.dat' INTO TABLE t1 FIELDS TERMINATED BY '|' ; eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/std_data/rpl_mixed.dat' INTO TABLE t1 FIELDS TERMINATED BY '|' ;
--remove_file $MYSQLTEST_VARDIR/tmp/rpl_mixed.dat
SELECT * FROM t1 ORDER BY a; SELECT * FROM t1 ORDER BY a;
--source suite/rpl/include/rpl_mixed_check_select.inc --source suite/rpl/include/rpl_mixed_check_select.inc
--source suite/rpl/include/rpl_mixed_clear_tables.inc --source suite/rpl/include/rpl_mixed_clear_tables.inc
...@@ -329,6 +328,7 @@ DROP VIEW v2; ...@@ -329,6 +328,7 @@ DROP VIEW v2;
--echo ******************** SHOW BINLOG EVENTS ******************** --echo ******************** SHOW BINLOG EVENTS ********************
--replace_column 2 # 5 # --replace_column 2 # 5 #
--replace_regex /Server ver: .+/Server ver: #/ /table_id: [0-9]+/table_id: #/ /COMMIT.+xid=[0-9]+.+/#/ /file_id=[0-9]+/file_id=#/ /block_len=[0-9]+/block_len=#/ --replace_regex /Server ver: .+/Server ver: #/ /table_id: [0-9]+/table_id: #/ /COMMIT.+xid=[0-9]+.+/#/ /file_id=[0-9]+/file_id=#/ /block_len=[0-9]+/block_len=#/
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
show binlog events from 1; show binlog events from 1;
sync_slave_with_master; sync_slave_with_master;
# as we're using UUID we don't SELECT but use "diff" like in rpl_row_UUID # as we're using UUID we don't SELECT but use "diff" like in rpl_row_UUID
......
...@@ -103,7 +103,7 @@ DELETE FROM t1; ...@@ -103,7 +103,7 @@ DELETE FROM t1;
DELETE FROM t2; DELETE FROM t2;
******************** LOAD DATA INFILE ******************** ******************** LOAD DATA INFILE ********************
LOAD DATA INFILE '../../tmp/rpl_mixed.dat' INTO TABLE t1 FIELDS TERMINATED BY '|' ; LOAD DATA INFILE 'MYSQLTEST_VARDIR/std_data/rpl_mixed.dat' INTO TABLE t1 FIELDS TERMINATED BY '|' ;
SELECT * FROM t1 ORDER BY a; SELECT * FROM t1 ORDER BY a;
a b a b
10 line A 10 line A
...@@ -884,7 +884,7 @@ master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t2 ...@@ -884,7 +884,7 @@ master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t2
master-bin.000001 # Xid 1 # # master-bin.000001 # Xid 1 # #
master-bin.000001 # Query 1 # use `test_rpl`; BEGIN master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Begin_load_query 1 # ;file_id=#;block_len=# master-bin.000001 # Begin_load_query 1 # ;file_id=#;block_len=#
master-bin.000001 # Execute_load_query 1 # use `test_rpl`; LOAD DATA INFILE '../../tmp/rpl_mixed.dat' INTO TABLE t1 FIELDS TERMINATED BY '|' ;file_id=# master-bin.000001 # Execute_load_query 1 # use `test_rpl`; LOAD DATA INFILE 'MYSQLTEST_VARDIR/std_data/rpl_mixed.dat' INTO TABLE t1 FIELDS TERMINATED BY '|' ;file_id=#
master-bin.000001 # Xid 1 # # master-bin.000001 # Xid 1 # #
master-bin.000001 # Query 1 # use `test_rpl`; BEGIN master-bin.000001 # Query 1 # use `test_rpl`; BEGIN
master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1 master-bin.000001 # Query 1 # use `test_rpl`; DELETE FROM t1
......
...@@ -344,7 +344,7 @@ CREATE TABLE t10 (a INT, b VARCHAR(20)) ENGINE=myisam; ...@@ -344,7 +344,7 @@ CREATE TABLE t10 (a INT, b VARCHAR(20)) ENGINE=myisam;
STOP SLAVE; STOP SLAVE;
*** On Master *** *** On Master ***
SET SESSION BINLOG_FORMAT=STATEMENT; SET SESSION BINLOG_FORMAT=STATEMENT;
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/rpl_bug28618.dat' INTO TABLE t10 FIELDS TERMINATED BY '|'; LOAD DATA INFILE 'MYSQLTEST_VARDIR/std_data/rpl_bug28618.dat' INTO TABLE t10 FIELDS TERMINATED BY '|';
SELECT * FROM t10 ORDER BY a; SELECT * FROM t10 ORDER BY a;
a b a b
1 master only 1 master only
......
...@@ -286,10 +286,9 @@ source include/wait_for_slave_to_stop.inc; ...@@ -286,10 +286,9 @@ source include/wait_for_slave_to_stop.inc;
--echo *** On Master *** --echo *** On Master ***
connection master; connection master;
SET SESSION BINLOG_FORMAT=STATEMENT; SET SESSION BINLOG_FORMAT=STATEMENT;
exec cp ./suite/rpl/data/rpl_bug28618.dat $MYSQLTEST_VARDIR/tmp/;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/rpl_bug28618.dat' INTO TABLE t10 FIELDS TERMINATED BY '|'; eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/std_data/rpl_bug28618.dat' INTO TABLE t10 FIELDS TERMINATED BY '|';
remove_file $MYSQLTEST_VARDIR/tmp/rpl_bug28618.dat;
SELECT * FROM t10 ORDER BY a; SELECT * FROM t10 ORDER BY a;
......
...@@ -163,7 +163,7 @@ set @@secure_file_priv= 0; ...@@ -163,7 +163,7 @@ set @@secure_file_priv= 0;
# Test "load data" # Test "load data"
truncate table t1; truncate table t1;
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
--error 1290 --error ER_OPTION_PREVENTS_STATEMENT, ER_TEXTFILE_NOT_READABLE
eval load data infile '$MYSQL_TEST_DIR/t/loaddata.test' into table t1; eval load data infile '$MYSQL_TEST_DIR/t/loaddata.test' into table t1;
select * from t1; select * from t1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment