1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-23 03:54:27 +03:00
Files
mariadb/mysql-test/suite/sys_vars/t/secure_file_priv.test
Elena Stepanova c29e450e37 MDEV-4070 sys_vars.secure_file_priv fails sporadically if it's executed with --mem
The test created a file in location relative to the datadir
(a few levels above datadir).
The file was created by MariaDB server (via INTO OUTFILE), and
later removed by mysqltest (via remove_file). The problem is that
when the vardir is a symlink, MariaDB server and mysqltest can
resolve such paths differently. MariaDB server would return back
to where the symlink is located, while mysqltest would go above
the real directory. For example, if the test is run with --mem,
and /bld/5.5/mysql-test/var points at /dev/shm/var_auto_X, then
SELECT INTO OUTFILE created a file in /bld/5.5/mysql-test , but
remove_file would look for it in /dev/shm/.

The test is re-written so that all paths are resolved in perl,
the logic itself hasn't changed.
2016-02-26 03:02:07 +02:00

44 lines
1.5 KiB
Plaintext

--echo #
--echo # Bug50373 --secure-file-priv=""
--echo #
CREATE TABLE t1 (c1 VARCHAR(50));
INSERT INTO t1 VALUES ("one"),("two"),("three"),("four"),("five");
SHOW VARIABLES LIKE 'secure_file_priv';
--disable_query_log
# Atempt to create a file where we normally aren't allowed to create one.
#
# Doing this in a portable manner is difficult but we should be able to
# count on the directory hierarchy used. A step up from MYSQLTEST_VARDIR
# should definitely lead us to a "protected" directory,
# but at the same time should still be writable since MTR was able
# to create the vardir itself there.
# If we run tests normally, it will be mysql-test directory.
# If we run tests with --mem, it will be /dev/shm.
# If we run tests with --parallel, it will be mysql-test/var
# (because MYSQLTEST_VARDIR in this case is mysql-test/var/N).
--perl
use File::Basename;
my $protected_file= dirname($ENV{MYSQLTEST_VARDIR}).'/bug50373.txt';
open(FILE, ">", "$ENV{MYSQL_TMP_DIR}/bug50373.inc") or die;
print FILE "SELECT * FROM t1 INTO OUTFILE '".$protected_file."';\n";
print FILE "DELETE FROM t1;\n";
print FILE "LOAD DATA INFILE '".$protected_file."' INTO TABLE t1;\n";
print FILE "SELECT * FROM t1;\n";
print FILE "SELECT load_file('",$protected_file,"') AS loaded_file;\n";
close(FILE);
EOF
--source $MYSQL_TMP_DIR/bug50373.inc
--remove_file $MYSQL_TMP_DIR/bug50373.inc
--enable_query_log
DROP TABLE t1;
--perl
use File::Basename;
unlink dirname($ENV{MYSQLTEST_VARDIR}).'/bug50373.txt';
EOF