Merge branch 'exim-4.96+security' into master+security
[exim.git] / test / scripts / 2610-MySQL / 2610
index b3e36a5a71ff4d297159b1c112fdbe04ca7aef8a..91a3f6be3038407de3929addf55269aa6160068d 100644 (file)
@@ -1,23 +1,49 @@
 # mysql lookups
+# The mysql-devel (or equivalent) package will be need for Exim to build, and
+# the mysql-server (or mariadb-server or equivalent) package for this test to run.
 #
 # first, populate a DB to test against
 sudo rm -fr DIR/mysql
+echo Installing DB server dir
 perl
-system 'mysql_install_db --datadir=DIR/mysql';
+system 'mysql_install_db --no-defaults --datadir=DIR/mysql --user=CALLER';
 ****
-sudo rm test-stdout
+sudo rm test-stdout test-stderr
 #
-# start a db server
+### start a db server
+echo Starting DB server
 background
-mysqld_safe --datadir=DIR/mysql --log-error=DIR/mysql/log --port=PORT_N --socket=DIR/mysql/sock --pid-file=DIR/mysql/pidfile
+DIR/bin.sys/mysqld --datadir=DIR/mysql --log-error=DIR/mysql/log --bind-address=* --port=PORT_N --socket=DIR/mysql/sock --pid-file=DIR/mysql/pidfile
+****
+#
+### wait for db startup, set password on the root user
+echo Waiting for DB server startup
+sudo perl
+system 'DIR/bin.sys/mysql --protocol=socket --socket=`pwd`/mysql/sock --connect_timeout=10 -u root -e "set password = password(\"pass\")"';
+****
+#
+### create testdb and extra users
+echo Create testdb and extra users
+perl
+system 'mysqladmin --protocol=TCP -P PORT_N -u root -ppass create test';
+my $fh;
+open($fh, '-|', 'DIR/bin.sys/mysql --protocol=TCP -P PORT_N -u root -ppass -D test -e "select 1 from mysql.user where User = \'root\' and Host = \'HOSTIPV4\'"');
+my $line = <$fh>;
+if (length($line) == 0) {
+  system 'DIR/bin.sys/mysql --protocol=TCP -P PORT_N -u root -ppass -D test -e "create user \'root\'@\'HOSTIPV4\'"';
+}
+open($fh, '-|', 'DIR/bin.sys/mysql --protocol=TCP -P PORT_N -u root -ppass -D test -e "select 1 from mysql.user where User = \'CALLER\' and Host = \'HOSTIPV4\'"');
+$line = <$fh>;
+if (length($line) == 0) {
+  system 'DIR/bin.sys/mysql --protocol=TCP -P PORT_N -u root -ppass -D test -e "create user \'CALLER\'@\'HOSTIPV4\'"';
+}
 ****
-sleep 1
-sudo rm test-stderr-server
 #
-# insert some data
+#
+# wait for db startup, insert some data
+echo Insert some data
 perl
-system 'mysqladmin --protocol=TCP -P PORT_N -u root create test';
-system 'mysql --protocol=TCP -P PORT_N -u root -D test \
+system 'DIR/bin.sys/mysql --protocol=TCP -P PORT_N -u root -ppass -D test \
  -e "CREATE TABLE them ( name text, id text ); \
      INSERT INTO them VALUES ( \'Philip Hazel\', \'ph10\' ); \
      INSERT INTO them VALUES ( \'Aristotle\',    \'aaaa\' ); \
@@ -26,8 +52,12 @@ system 'mysql --protocol=TCP -P PORT_N -u root -D test \
      INSERT INTO them VALUES ( CONCAT(\'before\', CHAR(13), CHAR(10), \'after\'), \'newline\' ); \
      INSERT INTO them VALUES ( CONCAT(\'x\', CHAR(9), \'x\'), \'tab\' ); \
      INSERT INTO them VALUES ( CONCAT(CHAR(39), \'stquot\'), \'quote1\' ); \
+     GRANT ALL ON *.* TO \'root\'@\'HOSTIPV4\'; \
+     GRANT ALL ON *.* TO \'CALLER\'@\'HOSTIPV4\'; \
  "';
 ****
+echo Populated DB
+sudo rm test-stderr-server
 #
 #
 exim -d-all+lookup -be
@@ -45,24 +75,27 @@ ${lookup mysql {servers=x:127.0.0.1::PORT_N; select name from them where id='ph1
 ${lookup mysql {servers=127.0.0.1::PORT_N:x; select name from them where id='ph10';}}
 ${lookup mysql {servers=127.0.0.1::PORT_N/test/root/:x; select name from them where id='ph10';}}
 ${lookup mysql {servers=HOSTIPV4::PORT_N/test/root/:127.0.0.1::PORT_N; select name from them where id='ph10';}}
-${lookup mysql {servers=localhost(DIR/mysql/sock)/test/root/; select name from them where id='ph10';}}
+${lookup mysql {servers=localhost(DIR/mysql/sock)/test/root/pass; select name from them where id='ph10';}}
 x
 ${lookup mysql {SELECT name FROM them WHERE id IN ('ph10', 'aaaa');}}
 ${lookup mysql {SELECT *    FROM them WHERE id IN ('ph10', 'aaaa');}}
 ${lookup mysql {delete from them where id='aaaa'}}
 ****
 exim -d -bh 10.0.0.0
+helo test
 mail from:<a@b>
 rcpt to:<c@d>
 quit
 ****
+# Check the quote-tracking of tainted data.
+# Currently this will log but continue.
 exim -odi -d ph10
 Test message
 .
 ****
 #
 perl
-system 'mysqladmin --protocol=TCP -P PORT_N -u root shutdown';
+system 'mysqladmin --protocol=TCP -P PORT_N -u root -ppass shutdown';
 ****
 killdaemon
 sudo rm -fr DIR/mysql