From ba0e37b13c652435898f9b1050d6fe648875b125 Mon Sep 17 00:00:00 2001 From: Jeremy Harris Date: Sat, 13 Jan 2018 18:11:21 +0000 Subject: [PATCH] Lookups: fix mysql lookup returns for no-data "queries", when the number of rows affected is returned. Bug 2223 Broken-by: acec9514b1 Also enhance the testsuite mysql testcase to be standalone and move to standard-run set and add a specific testcase for this bug. Testcase working on Fedora at least - we'll see what happens on other platforms where executable locaation may vary. --- doc/doc-txt/ChangeLog | 3 + src/src/lookups/mysql.c | 48 ++--- test/confs/{9100 => 2610} | 4 +- test/log/{9100 => 2610} | 2 +- test/mail/{9100.CALLER => 2610.ph10} | 2 +- test/scripts/2610-MySQL/2610 | 68 +++++++ test/scripts/2610-MySQL/REQUIRES | 1 + test/scripts/2620-Postgresql/2620 | 1 + test/scripts/9100-MySQL/9100 | 26 --- test/stderr/{9100 => 2610} | 279 +++++++++++++++++---------- test/stderr/2620 | 13 ++ test/stdout/2610 | 31 +++ test/stdout/2620 | 1 + test/stdout/9100 | 26 --- 14 files changed, 320 insertions(+), 185 deletions(-) rename test/confs/{9100 => 2610} (90%) rename test/log/{9100 => 2610} (61%) rename test/mail/{9100.CALLER => 2610.ph10} (84%) create mode 100644 test/scripts/2610-MySQL/2610 create mode 100644 test/scripts/2610-MySQL/REQUIRES delete mode 100644 test/scripts/9100-MySQL/9100 rename test/stderr/{9100 => 2610} (51%) create mode 100644 test/stdout/2610 delete mode 100644 test/stdout/9100 diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog index 43446d8c2..2c2448537 100644 --- a/doc/doc-txt/ChangeLog +++ b/doc/doc-txt/ChangeLog @@ -55,6 +55,9 @@ JH/09 The "aveserver", "kavdaemon" and "mksd" interfaces are now not included by the template makefile "src/EDITME". The "STREAM" support for an older ClamAV interface method is removed. +JH/10 Bug 2223: Fix mysql lookup returns for the no-data case (when the number of + rows affected is given instead). + Exim version 4.90 ----------------- diff --git a/src/src/lookups/mysql.c b/src/src/lookups/mysql.c index ff1ef8325..8d101b27b 100644 --- a/src/src/lookups/mysql.c +++ b/src/src/lookups/mysql.c @@ -281,7 +281,7 @@ we return the number of rows affected by the command. In this event, we do NOT want to cache the result; also the whole cache for the handle must be cleaned up. Setting do_cache zero requests this. */ -if ((mysql_result = mysql_use_result(mysql_handle)) == NULL) +if (!(mysql_result = mysql_use_result(mysql_handle))) { if ( mysql_field_count(mysql_handle) == 0 ) { @@ -314,34 +314,32 @@ while ((mysql_row_data = mysql_fetch_row(mysql_result))) if (result) result = string_catn(result, US"\n", 1); - if (num_fields == 1) - { - if (mysql_row_data[0] != NULL) /* NULL value yields nothing */ - { - result = string_catn(result, US mysql_row_data[0], - lengths[0]); - (void) string_from_gstring(result); - } - } + if (num_fields != 1) + for (i = 0; i < num_fields; i++) + result = lf_quote(US fields[i].name, US mysql_row_data[i], lengths[i], + result); - else for (i = 0; i < num_fields; i++) - result = lf_quote(US fields[i].name, US mysql_row_data[i], lengths[i], result); + else if (mysql_row_data[0] != NULL) /* NULL value yields nothing */ + result = string_catn(result, US mysql_row_data[0], lengths[0]); } /* more results? -1 = no, >0 = error, 0 = yes (keep looping) This is needed because of the CLIENT_MULTI_RESULTS on mysql_real_connect(), we don't expect any more results. */ -while((i = mysql_next_result(mysql_handle)) >= 0) { - if(i == 0) { /* Just ignore more results */ - DEBUG(D_lookup) debug_printf("MYSQL: got unexpected more results\n"); - continue; - } +while((i = mysql_next_result(mysql_handle)) >= 0) + { + if(i == 0) /* Just ignore more results */ + { + DEBUG(D_lookup) debug_printf("MYSQL: got unexpected more results\n"); + continue; + } - *errmsg = string_sprintf("MYSQL: lookup result error when checking for more results: %s\n", - mysql_error(mysql_handle)); - goto MYSQL_EXIT; -} + *errmsg = string_sprintf( + "MYSQL: lookup result error when checking for more results: %s\n", + mysql_error(mysql_handle)); + goto MYSQL_EXIT; + } /* If result is NULL then no data has been found and so we return FAIL. Otherwise, we must terminate the string which has been built; string_cat() @@ -352,11 +350,6 @@ if (!result) yield = FAIL; *errmsg = US"MYSQL: no data found"; } -else - { - (void) string_from_gstring(result); - store_reset(result->s + result->ptr + 1); - } /* Get here by goto from various error checks and from the case where no data was read (e.g. an update query). */ @@ -372,7 +365,8 @@ if (mysql_result) mysql_free_result(mysql_result); if (result) { - *resultptr = result->s; + *resultptr = string_from_gstring(result); + store_reset(result->s + (result->size = result->ptr + 1)); return OK; } else diff --git a/test/confs/9100 b/test/confs/2610 similarity index 90% rename from test/confs/9100 rename to test/confs/2610 index a031f44de..9e2217215 100644 --- a/test/confs/9100 +++ b/test/confs/2610 @@ -1,4 +1,4 @@ -# Exim test configuration 9100 +# Exim test configuration 2610 .include DIR/aux-var/std_conf_prefix @@ -11,7 +11,7 @@ hostlist relay_hosts = net-mysql;select * from them where id='$sender_host_add acl_smtp_rcpt = check_recipient -mysql_servers = localhost/test/root/ +mysql_servers = 127.0.0.1::PORT_N/test/root/ # ----- ACL ----- diff --git a/test/log/9100 b/test/log/2610 similarity index 61% rename from test/log/9100 rename to test/log/2610 index 5ca026f38..38ea30eb6 100644 --- a/test/log/9100 +++ b/test/log/2610 @@ -1,3 +1,3 @@ 1999-03-02 09:44:33 10HmaX-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss -1999-03-02 09:44:33 10HmaX-0005vi-00 => CALLER R=r1 T=t1 +1999-03-02 09:44:33 10HmaX-0005vi-00 => ph10 R=r1 T=t1 1999-03-02 09:44:33 10HmaX-0005vi-00 Completed diff --git a/test/mail/9100.CALLER b/test/mail/2610.ph10 similarity index 84% rename from test/mail/9100.CALLER rename to test/mail/2610.ph10 index 1e1294c18..3305d49bb 100644 --- a/test/mail/9100.CALLER +++ b/test/mail/2610.ph10 @@ -2,7 +2,7 @@ From CALLER@myhost.test.ex Tue Mar 02 09:44:33 1999 Received: from CALLER by myhost.test.ex with local (Exim x.yz) (envelope-from ) id 10HmaX-0005vi-00 - for CALLER@myhost.test.ex; Tue, 2 Mar 1999 09:44:33 +0000 + for ph10@myhost.test.ex; Tue, 2 Mar 1999 09:44:33 +0000 Message-Id: From: CALLER_NAME Date: Tue, 2 Mar 1999 09:44:33 +0000 diff --git a/test/scripts/2610-MySQL/2610 b/test/scripts/2610-MySQL/2610 new file mode 100644 index 000000000..b3e36a5a7 --- /dev/null +++ b/test/scripts/2610-MySQL/2610 @@ -0,0 +1,68 @@ +# mysql lookups +# +# first, populate a DB to test against +sudo rm -fr DIR/mysql +perl +system 'mysql_install_db --datadir=DIR/mysql'; +**** +sudo rm test-stdout +# +# start a 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 +**** +sleep 1 +sudo rm test-stderr-server +# +# 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 \ + -e "CREATE TABLE them ( name text, id text ); \ + INSERT INTO them VALUES ( \'Philip Hazel\', \'ph10\' ); \ + INSERT INTO them VALUES ( \'Aristotle\', \'aaaa\' ); \ + INSERT INTO them VALUES ( \'\', \'nothing\' ); \ + INSERT INTO them VALUES ( \'\"stquot\', \'quote2\' ); \ + 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\' ); \ + "'; +**** +# +# +exim -d-all+lookup -be +${lookup mysql {select name from them where id='ph10';}} +${lookup mysql {select name from them where id='ph10';}} +${lookup mysql {select name from them where id='xxxx';}} +${lookup mysql {select name from them where id='nothing';}} +${lookup mysql {select id,name from them where id='nothing';}} +${lookup mysql {delete from them where id='nonexist';}} +${lookup mysql {select * from them where id='quote';}} +${lookup mysql {select * from them where id='filter';}} +${lookup mysql {select * from them where id='quote2';}} +${lookup mysql {select * from them where id='nlonly';}} +${lookup mysql {servers=x:127.0.0.1::PORT_N; select name from them where id='ph10';}} +${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';}} +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 +mail from: +rcpt to: +quit +**** +exim -odi -d ph10 +Test message +. +**** +# +perl +system 'mysqladmin --protocol=TCP -P PORT_N -u root shutdown'; +**** +killdaemon +sudo rm -fr DIR/mysql diff --git a/test/scripts/2610-MySQL/REQUIRES b/test/scripts/2610-MySQL/REQUIRES new file mode 100644 index 000000000..e11f866d0 --- /dev/null +++ b/test/scripts/2610-MySQL/REQUIRES @@ -0,0 +1 @@ +lookup mysql diff --git a/test/scripts/2620-Postgresql/2620 b/test/scripts/2620-Postgresql/2620 index d0dd00190..cf45726f4 100644 --- a/test/scripts/2620-Postgresql/2620 +++ b/test/scripts/2620-Postgresql/2620 @@ -43,6 +43,7 @@ ${lookup pgsql {servers=(DIR/pgsql/.s.PGSQL.PORT_N)/test/CALLER/:x; select name x ${lookup pgsql {SELECT name FROM them WHERE id IN ('ph10', 'aaaa');}} ${lookup pgsql {SELECT * FROM them WHERE id IN ('ph10', 'aaaa');}} +${lookup pgsql {delete from them where id='aaaa'}} **** exim -d -bh 10.0.0.0 mail from: diff --git a/test/scripts/9100-MySQL/9100 b/test/scripts/9100-MySQL/9100 deleted file mode 100644 index fdf2caf9a..000000000 --- a/test/scripts/9100-MySQL/9100 +++ /dev/null @@ -1,26 +0,0 @@ -# mysql lookups - expects specific data -exim -d-all+lookup -be -${lookup mysql {select name from them where id='ph10';}} -${lookup mysql {select name from them where id='ph10';}} -${lookup mysql {select name from them where id='xxxx';}} -${lookup mysql {select name from them where id='nothing';}} -${lookup mysql {select id,name from them where id='nothing';}} -${lookup mysql {delete from them where id='nonexist';}} -${lookup mysql {select * from them where id='quote';}} -${lookup mysql {select * from them where id='filter';}} -${lookup mysql {select * from them where id='quote2';}} -${lookup mysql {select * from them where id='nlonly';}} -${lookup mysql {servers=x:localhost; select name from them where id='ph10';}} -${lookup mysql {servers=localhost:x; select name from them where id='ph10';}} -${lookup mysql {servers=localhost/test/root/:x; select name from them where id='ph10';}} -${lookup mysql {servers=HOST_IPV4/test/root/:localhost; select name from them where id='ph10';}} -**** -exim -d -bh 10.0.0.0 -mail from: -rcpt to: -quit -**** -exim -odi -d ph10 -Test message -. -**** diff --git a/test/stderr/9100 b/test/stderr/2610 similarity index 51% rename from test/stderr/9100 rename to test/stderr/2610 index 60c63ba08..60d964387 100644 --- a/test/stderr/9100 +++ b/test/stderr/2610 @@ -1,24 +1,26 @@ +Tue Mar 02 09:44:33 1999 PerconaFT file system space is low +mysqladmin: CREATE DATABASE failed; error: 'Can't create database 'test'; database exists' Exim version x.yz .... configuration file is TESTSUITE/test-config admin user search_open: mysql "NULL" search_find: file="NULL" - key="select name from them where id='CALLER';" partial=-1 affix=NULL starflags=0 + key="select name from them where id='ph10';" partial=-1 affix=NULL starflags=0 LRU list: internal_search_find: file="NULL" - type=mysql key="select name from them where id='CALLER';" -database lookup required for select name from them where id='CALLER'; -MySQL query: select name from them where id='CALLER'; -MYSQL new connection: host=localhost port=0 socket=NULL database=test user=root + type=mysql key="select name from them where id='ph10';" +database lookup required for select name from them where id='ph10'; +MySQL query: select name from them where id='ph10'; +MYSQL new connection: host=127.0.0.1 port=1223 socket=NULL database=test user=root lookup yielded: Philip Hazel search_open: mysql "NULL" cached open search_find: file="NULL" - key="select name from them where id='CALLER';" partial=-1 affix=NULL starflags=0 + key="select name from them where id='ph10';" partial=-1 affix=NULL starflags=0 LRU list: internal_search_find: file="NULL" - type=mysql key="select name from them where id='CALLER';" -cached data used for lookup of select name from them where id='CALLER'; + type=mysql key="select name from them where id='ph10';" +cached data used for lookup of select name from them where id='ph10'; lookup yielded: Philip Hazel search_open: mysql "NULL" cached open @@ -29,7 +31,7 @@ internal_search_find: file="NULL" type=mysql key="select name from them where id='xxxx';" database lookup required for select name from them where id='xxxx'; MySQL query: select name from them where id='xxxx'; -MYSQL using cached connection for localhost/test/root +MYSQL using cached connection for 127.0.0.1:1223/test/root MYSQL: no data found lookup failed search_open: mysql "NULL" @@ -41,9 +43,8 @@ internal_search_find: file="NULL" type=mysql key="select name from them where id='nothing';" database lookup required for select name from them where id='nothing'; MySQL query: select name from them where id='nothing'; -MYSQL using cached connection for localhost/test/root -MYSQL: no data found -lookup failed +MYSQL using cached connection for 127.0.0.1:1223/test/root +lookup yielded: search_open: mysql "NULL" cached open search_find: file="NULL" @@ -53,7 +54,7 @@ internal_search_find: file="NULL" type=mysql key="select id,name from them where id='nothing';" database lookup required for select id,name from them where id='nothing'; MySQL query: select id,name from them where id='nothing'; -MYSQL using cached connection for localhost/test/root +MYSQL using cached connection for 127.0.0.1:1223/test/root lookup yielded: id=nothing name="" search_open: mysql "NULL" cached open @@ -64,7 +65,7 @@ internal_search_find: file="NULL" type=mysql key="delete from them where id='nonexist';" database lookup required for delete from them where id='nonexist'; MySQL query: delete from them where id='nonexist'; -MYSQL using cached connection for localhost/test/root +MYSQL using cached connection for 127.0.0.1:1223/test/root MYSQL: query was not one that returns data lookup forced cache cleanup lookup yielded: 0 @@ -77,8 +78,9 @@ internal_search_find: file="NULL" type=mysql key="select * from them where id='quote';" database lookup required for select * from them where id='quote'; MySQL query: select * from them where id='quote'; -MYSQL using cached connection for localhost/test/root -lookup yielded: id=quote name="\"Q\" Oted" home=/home/quoted mail=quoted@xxx +MYSQL using cached connection for 127.0.0.1:1223/test/root +MYSQL: no data found +lookup failed search_open: mysql "NULL" cached open search_find: file="NULL" @@ -88,9 +90,9 @@ internal_search_find: file="NULL" type=mysql key="select * from them where id='filter';" database lookup required for select * from them where id='filter'; MySQL query: select * from them where id='filter'; -MYSQL using cached connection for localhost/test/root -lookup yielded: id=filter name=filter home=filter mail="#Exim filter -deliver postmaster" +MYSQL using cached connection for 127.0.0.1:1223/test/root +MYSQL: no data found +lookup failed search_open: mysql "NULL" cached open search_find: file="NULL" @@ -100,8 +102,8 @@ internal_search_find: file="NULL" type=mysql key="select * from them where id='quote2';" database lookup required for select * from them where id='quote2'; MySQL query: select * from them where id='quote2'; -MYSQL using cached connection for localhost/test/root -lookup yielded: id=quote2 name="\"qnosp" home=/home/q2 mail="" +MYSQL using cached connection for 127.0.0.1:1223/test/root +lookup yielded: name="\"stquot" id=quote2 search_open: mysql "NULL" cached open search_find: file="NULL" @@ -111,57 +113,105 @@ internal_search_find: file="NULL" type=mysql key="select * from them where id='nlonly';" database lookup required for select * from them where id='nlonly'; MySQL query: select * from them where id='nlonly'; -MYSQL using cached connection for localhost/test/root -lookup yielded: id=nlonly name=filter home=filter mail="Before -After" +MYSQL using cached connection for 127.0.0.1:1223/test/root +MYSQL: no data found +lookup failed search_open: mysql "NULL" cached open search_find: file="NULL" - key="servers=x:localhost; select name from them where id='CALLER';" partial=-1 affix=NULL starflags=0 + key="servers=x:127.0.0.1::1223; select name from them where id='ph10';" partial=-1 affix=NULL starflags=0 LRU list: internal_search_find: file="NULL" - type=mysql key="servers=x:localhost; select name from them where id='CALLER';" -database lookup required for servers=x:localhost; select name from them where id='CALLER'; -MySQL query: servers=x:localhost; select name from them where id='CALLER'; + type=mysql key="servers=x:127.0.0.1::1223; select name from them where id='ph10';" +database lookup required for servers=x:127.0.0.1::1223; select name from them where id='ph10'; +MySQL query: servers=x:127.0.0.1::1223; select name from them where id='ph10'; lookup deferred: MySQL server "x" not found in mysql_servers search_open: mysql "NULL" cached open search_find: file="NULL" - key="servers=localhost:x; select name from them where id='CALLER';" partial=-1 affix=NULL starflags=0 + key="servers=127.0.0.1::1223:x; select name from them where id='ph10';" partial=-1 affix=NULL starflags=0 +LRU list: +internal_search_find: file="NULL" + type=mysql key="servers=127.0.0.1::1223:x; select name from them where id='ph10';" +database lookup required for servers=127.0.0.1::1223:x; select name from them where id='ph10'; +MySQL query: servers=127.0.0.1::1223:x; select name from them where id='ph10'; +MYSQL using cached connection for 127.0.0.1:1223/test/root +lookup yielded: Philip Hazel +search_open: mysql "NULL" + cached open +search_find: file="NULL" + key="servers=127.0.0.1::1223/test/root/:x; select name from them where id='ph10';" partial=-1 affix=NULL starflags=0 +LRU list: +internal_search_find: file="NULL" + type=mysql key="servers=127.0.0.1::1223/test/root/:x; select name from them where id='ph10';" +database lookup required for servers=127.0.0.1::1223/test/root/:x; select name from them where id='ph10'; +MySQL query: servers=127.0.0.1::1223/test/root/:x; select name from them where id='ph10'; +MYSQL using cached connection for 127.0.0.1:1223/test/root +lookup yielded: Philip Hazel +search_open: mysql "NULL" + cached open +search_find: file="NULL" + key="servers=ip4.ip4.ip4.ip4::1223/test/root/:127.0.0.1::1223; select name from them where id='ph10';" partial=-1 affix=NULL starflags=0 LRU list: internal_search_find: file="NULL" - type=mysql key="servers=localhost:x; select name from them where id='CALLER';" -database lookup required for servers=localhost:x; select name from them where id='CALLER'; -MySQL query: servers=localhost:x; select name from them where id='CALLER'; -MYSQL using cached connection for localhost/test/root + type=mysql key="servers=ip4.ip4.ip4.ip4::1223/test/root/:127.0.0.1::1223; select name from them where id='ph10';" +database lookup required for servers=ip4.ip4.ip4.ip4::1223/test/root/:127.0.0.1::1223; select name from them where id='ph10'; +MySQL query: servers=ip4.ip4.ip4.ip4::1223/test/root/:127.0.0.1::1223; select name from them where id='ph10'; +MYSQL new connection: host=ip4.ip4.ip4.ip4 port=1223 socket=NULL database=test user=root lookup yielded: Philip Hazel search_open: mysql "NULL" cached open search_find: file="NULL" - key="servers=localhost/test/root/:x; select name from them where id='CALLER';" partial=-1 affix=NULL starflags=0 + key="servers=localhost(TESTSUITE/mysql/sock)/test/root/; select name from them where id='ph10';" partial=-1 affix=NULL starflags=0 LRU list: internal_search_find: file="NULL" - type=mysql key="servers=localhost/test/root/:x; select name from them where id='CALLER';" -database lookup required for servers=localhost/test/root/:x; select name from them where id='CALLER'; -MySQL query: servers=localhost/test/root/:x; select name from them where id='CALLER'; -MYSQL using cached connection for localhost/test/root + type=mysql key="servers=localhost(TESTSUITE/mysql/sock)/test/root/; select name from them where id='ph10';" +database lookup required for servers=localhost(TESTSUITE/mysql/sock)/test/root/; select name from them where id='ph10'; +MySQL query: servers=localhost(TESTSUITE/mysql/sock)/test/root/; select name from them where id='ph10'; +MYSQL new connection: host=localhost port=0 socket=TESTSUITE/mysql/sock database=test user=root lookup yielded: Philip Hazel search_open: mysql "NULL" cached open search_find: file="NULL" - key="servers=HOST_IPV4/test/root/:localhost; select name from them where id='CALLER';" partial=-1 affix=NULL starflags=0 + key="SELECT name FROM them WHERE id IN ('ph10', 'aaaa');" partial=-1 affix=NULL starflags=0 LRU list: internal_search_find: file="NULL" - type=mysql key="servers=HOST_IPV4/test/root/:localhost; select name from them where id='CALLER';" -database lookup required for servers=HOST_IPV4/test/root/:localhost; select name from them where id='CALLER'; -MySQL query: servers=HOST_IPV4/test/root/:localhost; select name from them where id='CALLER'; -MYSQL new connection: host=HOST_IPV4 port=0 socket=NULL database=test user=root -MYSQL connection failed: Unknown MySQL server host 'HOST_IPV4' (1) -MYSQL using cached connection for localhost/test/root + type=mysql key="SELECT name FROM them WHERE id IN ('ph10', 'aaaa');" +database lookup required for SELECT name FROM them WHERE id IN ('ph10', 'aaaa'); +MySQL query: SELECT name FROM them WHERE id IN ('ph10', 'aaaa'); +MYSQL using cached connection for 127.0.0.1:1223/test/root lookup yielded: Philip Hazel +Aristotle +search_open: mysql "NULL" + cached open +search_find: file="NULL" + key="SELECT * FROM them WHERE id IN ('ph10', 'aaaa');" partial=-1 affix=NULL starflags=0 +LRU list: +internal_search_find: file="NULL" + type=mysql key="SELECT * FROM them WHERE id IN ('ph10', 'aaaa');" +database lookup required for SELECT * FROM them WHERE id IN ('ph10', 'aaaa'); +MySQL query: SELECT * FROM them WHERE id IN ('ph10', 'aaaa'); +MYSQL using cached connection for 127.0.0.1:1223/test/root +lookup yielded: name="Philip Hazel" id=ph10 +name=Aristotle id=aaaa +search_open: mysql "NULL" + cached open +search_find: file="NULL" + key="delete from them where id='aaaa'" partial=-1 affix=NULL starflags=0 +LRU list: +internal_search_find: file="NULL" + type=mysql key="delete from them where id='aaaa'" +database lookup required for delete from them where id='aaaa' +MySQL query: delete from them where id='aaaa' +MYSQL using cached connection for 127.0.0.1:1223/test/root +MYSQL: query was not one that returns data +lookup forced cache cleanup +lookup yielded: 1 search_tidyup called -close MYSQL connection: localhost/test/root ->>>>>>>>>>>>>>>> Exim pid=pppp terminating with rc=0 >>>>>>>>>>>>>>>> +close MYSQL connection: localhost(TESTSUITE/mysql/sock)/test/root +close MYSQL connection: ip4.ip4.ip4.ip4:1223/test/root +close MYSQL connection: 127.0.0.1:1223/test/root +>>>>>>>>>>>>>>>> Exim pid=pppp (main: expansion test) terminating with rc=0 >>>>>>>>>>>>>>>> Exim version x.yz .... changed uid/gid: forcing real = effective uid=uuuu gid=CALLER_GID pid=pppp @@ -189,6 +239,8 @@ host in helo_accept_junk_hosts? no (option unset) SMTP>> 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 smtp_setup_msg entered SMTP<< mail from: +spool directory space = nnnnnK inodes = nnnnn check_space = 10240K inodes = 100 msg_size = 0 +log directory space = nnnnnK inodes = nnnnn check_space = 10240K inodes = 100 SMTP>> 250 OK SMTP<< rcpt to: using ACL "check_recipient" @@ -196,7 +248,7 @@ processing "accept" check domains = +local_domains d in "@"? no (end of list) d in "+local_domains"? no (end of list) -accept: condition test failed +accept: condition test failed in ACL "check_recipient" processing "accept" check hosts = +relay_hosts search_open: mysql "NULL" @@ -207,14 +259,16 @@ internal_search_find: file="NULL" type=mysql key="select * from them where id='10.0.0.0'" database lookup required for select * from them where id='10.0.0.0' MySQL query: select * from them where id='10.0.0.0' -MYSQL new connection: host=localhost port=0 socket=NULL database=test user=root +MYSQL new connection: host=127.0.0.1 port=1223 socket=NULL database=test user=root MYSQL: no data found lookup failed host in "net-mysql;select * from them where id='10.0.0.0'"? no (end of list) host in "+relay_hosts"? no (end of list) -accept: condition test failed +accept: condition test failed in ACL "check_recipient" processing "deny" -deny: condition test succeeded + message: relay not permitted +deny: condition test succeeded in ACL "check_recipient" +end of ACL "check_recipient": DENY SMTP>> 550 relay not permitted LOG: MAIN REJECT H=[10.0.0.0] F= rejected RCPT : relay not permitted @@ -223,8 +277,8 @@ SMTP>> 221 myhost.test.ex closing connection LOG: smtp_connection MAIN SMTP connection from [10.0.0.0] closed by QUIT search_tidyup called -close MYSQL connection: localhost/test/root ->>>>>>>>>>>>>>>> Exim pid=pppp terminating with rc=0 >>>>>>>>>>>>>>>> +close MYSQL connection: 127.0.0.1:1223/test/root +>>>>>>>>>>>>>>>> Exim pid=pppp (main) terminating with rc=0 >>>>>>>>>>>>>>>> Exim version x.yz .... changed uid/gid: forcing real = effective uid=uuuu gid=CALLER_GID pid=pppp @@ -237,9 +291,11 @@ getpwnam() succeeded uid=CALLER_UID gid=CALLER_GID originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME sender address = CALLER@myhost.test.ex set_process_info: pppp accepting a local non-SMTP message from +spool directory space = nnnnnK inodes = nnnnn check_space = 10240K inodes = 100 msg_size = 0 +log directory space = nnnnnK inodes = nnnnn check_space = 10240K inodes = 100 Sender: CALLER@myhost.test.ex Recipients: - CALLER + ph10 search_tidyup called >>Headers received: @@ -251,15 +307,21 @@ I Message-Id: F From: CALLER_NAME Date: Tue, 2 Mar 1999 09:44:33 +0000 +Data file name: TESTSUITE/spool//input//10HmaX-0005vi-00-D Data file written for message 10HmaX-0005vi-00 >>Generated Received: header line P Received: from CALLER by myhost.test.ex with local (Exim x.yz) (envelope-from ) id 10HmaX-0005vi-00 - for CALLER@myhost.test.ex; Tue, 2 Mar 1999 09:44:33 +0000 + for ph10@myhost.test.ex; Tue, 2 Mar 1999 09:44:33 +0000 calling local_scan(); timeout=300 local_scan() returned 0 NULL -Writing spool header file +Writing spool header file: TESTSUITE/spool//input//hdr.pppp +DSN: Write SPOOL :-dsn_envid NULL +DSN: Write SPOOL :-dsn_ret 0 +DSN: Flags :0 +DSN: **** SPOOL_OUT - address: |ph10@myhost.test.ex| errorsto: |NULL| orcpt: |NULL| dsn_flags: 0 +Renaming spool header file: TESTSUITE/spool//input//10HmaX-0005vi-00-H Size of headers = sss LOG: MAIN <= CALLER@myhost.test.ex U=CALLER P=local S=sss @@ -272,11 +334,11 @@ changed uid/gid: forcing real = effective configuration file is TESTSUITE/test-config trusted user admin user -skipping ACL configuration - not needed seeking password data for user "CALLER": cache not available getpwnam() succeeded uid=CALLER_UID gid=CALLER_GID set_process_info: pppp delivering specified messages set_process_info: pppp delivering 10HmaX-0005vi-00 +Trying spool file TESTSUITE/spool//input//10HmaX-0005vi-00-D reading spool file 10HmaX-0005vi-00-H user=CALLER uid=CALLER_UID gid=CALLER_GID sender=CALLER@myhost.test.ex sender_local=1 ident=CALLER @@ -284,117 +346,130 @@ Non-recipients: Empty Tree ---- End of tree ---- recipients_count=1 +**** SPOOL_IN - No additional fields body_linecount=1 message_linecount=7 +DSN: set orcpt: NULL flags: 0 Delivery address list: - CALLER@myhost.test.ex + ph10@myhost.test.ex locking TESTSUITE/spool/db/retry.lockfile -locked TESTSUITE/spool/db/retry.lockfile -EXIM_DBOPEN(TESTSUITE/spool/db/retry) -returned from EXIM_DBOPEN +locked TESTSUITE/spool/db/retry.lockfile +EXIM_DBOPEN: file dir flags=O_RDONLY +returned from EXIM_DBOPEN: (nil) ensuring TESTSUITE/spool/db/retry.lockfile is owned by exim +failed to open DB file TESTSUITE/spool/db/retry.lockfile: No such file or directory no retry data available >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -Considering: CALLER@myhost.test.ex -unique = CALLER@myhost.test.ex +Considering: ph10@myhost.test.ex +unique = ph10@myhost.test.ex no domain retry record no address retry record -CALLER@myhost.test.ex: queued for routing +ph10@myhost.test.ex: queued for routing >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -routing CALLER@myhost.test.ex +routing ph10@myhost.test.ex --------> r1 router <-------- -local_part=CALLER domain=myhost.test.ex +local_part=ph10 domain=myhost.test.ex processing address_data search_open: mysql "NULL" search_find: file="NULL" - key="select name from them where id='CALLER'" partial=-1 affix=NULL starflags=0 + key="select name from them where id='ph10'" partial=-1 affix=NULL starflags=0 LRU list: internal_search_find: file="NULL" - type=mysql key="select name from them where id='CALLER'" -database lookup required for select name from them where id='CALLER' -MySQL query: select name from them where id='CALLER' -MYSQL new connection: host=localhost port=0 socket=NULL database=test user=root + type=mysql key="select name from them where id='ph10'" +database lookup required for select name from them where id='ph10' +MySQL query: select name from them where id='ph10' +MYSQL new connection: host=127.0.0.1 port=1223 socket=NULL database=test user=root lookup yielded: Philip Hazel calling r1 router -r1 router called for CALLER@myhost.test.ex +r1 router called for ph10@myhost.test.ex domain = myhost.test.ex set transport t1 -queued for t1 transport: local_part = CALLER +queued for t1 transport: local_part = ph10 domain = myhost.test.ex errors_to=NULL domain_data=NULL localpart_data=NULL routed by r1 router - envelope to: CALLER@myhost.test.ex + envelope to: ph10@myhost.test.ex transport: t1 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> After routing: Local deliveries: - CALLER@myhost.test.ex + ph10@myhost.test.ex Remote deliveries: Failed addresses: Deferred addresses: search_tidyup called -close MYSQL connection: localhost/test/root +close MYSQL connection: 127.0.0.1:1223/test/root >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>> ---------> CALLER@myhost.test.ex <-------- +--------> ph10@myhost.test.ex <-------- locking TESTSUITE/spool/db/retry.lockfile -locked TESTSUITE/spool/db/retry.lockfile -EXIM_DBOPEN(TESTSUITE/spool/db/retry) -returned from EXIM_DBOPEN +locked TESTSUITE/spool/db/retry.lockfile +EXIM_DBOPEN: file dir flags=O_RDONLY +returned from EXIM_DBOPEN: (nil) +failed to open DB file TESTSUITE/spool/db/retry: No such file or directory no retry data available search_tidyup called -changed uid/gid: local delivery to CALLER transport=t1 +changed uid/gid: local delivery to ph10 transport=t1 uid=CALLER_UID gid=CALLER_GID pid=pppp home=NULL current=/ -set_process_info: pppp delivering 10HmaX-0005vi-00 to CALLER using t1 +set_process_info: pppp delivering 10HmaX-0005vi-00 to ph10 using t1 appendfile transport entered search_open: mysql "NULL" search_find: file="NULL" - key="select id from them where id='CALLER'" partial=-1 affix=NULL starflags=0 + key="select id from them where id='ph10'" partial=-1 affix=NULL starflags=0 LRU list: internal_search_find: file="NULL" - type=mysql key="select id from them where id='CALLER'" -database lookup required for select id from them where id='CALLER' -MySQL query: select id from them where id='CALLER' -MYSQL new connection: host=localhost port=0 socket=NULL database=test user=root -lookup yielded: CALLER + type=mysql key="select id from them where id='ph10'" +database lookup required for select id from them where id='ph10' +MySQL query: select id from them where id='ph10' +MYSQL new connection: host=127.0.0.1 port=1223 socket=NULL database=test user=root +lookup yielded: ph10 appendfile: mode=600 notify_comsat=0 quota=0 warning=0 - file=TESTSUITE/test-mail/CALLER format=unix + file=TESTSUITE/test-mail/ph10 format=unix message_prefix=From ${if def:return_path{$return_path}{MAILER-DAEMON}} ${tod_bsdinbox}\n message_suffix=\n maildir_use_size_file=no locking by lockfile fcntl -lock name: TESTSUITE/test-mail/CALLER.lock -hitch name: TESTSUITE/test-mail/CALLER.lock.test.ex.dddddddd.pppppppp +lock name: TESTSUITE/test-mail/ph10.lock +hitch name: TESTSUITE/test-mail/ph10.lock.test.ex.dddddddd.pppppppp lock file created -mailbox TESTSUITE/test-mail/CALLER is locked -writing to file TESTSUITE/test-mail/CALLER +mailbox TESTSUITE/test-mail/ph10 is locked +writing to file TESTSUITE/test-mail/ph10 writing data block fd=dddd size=sss timeout=0 +cannot use sendfile for body: spoolfile not wireformat writing data block fd=dddd size=sss timeout=0 writing data block fd=dddd size=sss timeout=0 appendfile yields 0 with errno=dd more_errno=dd search_tidyup called -close MYSQL connection: localhost/test/root -journalling CALLER@myhost.test.ex -t1 transport returned OK for CALLER@myhost.test.ex -post-process CALLER@myhost.test.ex (0) -CALLER@myhost.test.ex delivered +close MYSQL connection: 127.0.0.1:1223/test/root +journalling ph10@myhost.test.ex +t1 transport returned OK for ph10@myhost.test.ex +post-process ph10@myhost.test.ex (0) +ph10@myhost.test.ex delivered LOG: MAIN - => CALLER R=r1 T=t1 + => ph10 R=r1 T=t1 >>>>>>>>>>>>>>>> deliveries are done >>>>>>>>>>>>>>>> changed uid/gid: post-delivery tidying uid=EXIM_UID gid=EXIM_GID pid=pppp set_process_info: pppp tidying up after delivering 10HmaX-0005vi-00 Processing retry items Succeeded addresses: -CALLER@myhost.test.ex: no retry items + ph10@myhost.test.ex: no retry items Failed addresses: Deferred addresses: end of retry processing +DSN: processing router : r1 +DSN: processing successful delivery address: ph10@myhost.test.ex +DSN: Sender_address: CALLER@myhost.test.ex +DSN: orcpt: NULL flags: 0 +DSN: envid: NULL ret: 0 +DSN: Final recipient: ph10@myhost.test.ex +DSN: Remote SMTP server supports DSN: 0 +DSN: not sending DSN success message LOG: MAIN Completed end delivery of 10HmaX-0005vi-00 search_tidyup called search_tidyup called ->>>>>>>>>>>>>>>> Exim pid=pppp terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=pppp (main) terminating with rc=0 >>>>>>>>>>>>>>>> search_tidyup called ->>>>>>>>>>>>>>>> Exim pid=pppp terminating with rc=0 >>>>>>>>>>>>>>>> +>>>>>>>>>>>>>>>> Exim pid=pppp (main) terminating with rc=0 >>>>>>>>>>>>>>>> diff --git a/test/stderr/2620 b/test/stderr/2620 index 8faf3345a..625552a18 100644 --- a/test/stderr/2620 +++ b/test/stderr/2620 @@ -183,6 +183,19 @@ PostgreSQL query: SELECT * FROM them WHERE id IN ('ph10', 'aaaa'); PGSQL using cached connection for localhost:1223/test/CALLER lookup yielded: name="Philip Hazel" id=ph10 name=Aristotle id=aaaa +search_open: pgsql "NULL" + cached open +search_find: file="NULL" + key="delete from them where id='aaaa'" partial=-1 affix=NULL starflags=0 +LRU list: +internal_search_find: file="NULL" + type=pgsql key="delete from them where id='aaaa'" +database lookup required for delete from them where id='aaaa' +PostgreSQL query: delete from them where id='aaaa' +PGSQL using cached connection for localhost:1223/test/CALLER +PGSQL: command does not return any data but was successful. Rows affected: 1 +lookup forced cache cleanup +lookup yielded: 1 search_tidyup called close PGSQL connection: (TESTSUITE/pgsql/.s.PGSQL.1223)/test/CALLER close PGSQL connection: localhost:1223/test/CALLER diff --git a/test/stdout/2610 b/test/stdout/2610 new file mode 100644 index 000000000..f0774a81a --- /dev/null +++ b/test/stdout/2610 @@ -0,0 +1,31 @@ +> Philip Hazel +> Philip Hazel +> +> +> id=nothing name="" +> 0 +> +> +> name="\"stquot" id=quote2 +> +> Failed: lookup of "servers=x:127.0.0.1::1223; select name from them where id='ph10';" gave DEFER: MySQL server "x" not found in mysql_servers +> Philip Hazel +> Philip Hazel +> Philip Hazel +> Philip Hazel +> x +> Philip Hazel +Aristotle +> name="Philip Hazel" id=ph10 +name=Aristotle id=aaaa +> 1 +> + +**** SMTP testing session as if from host 10.0.0.0 +**** but without any ident (RFC 1413) callback. +**** This is not for real! + +220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 +250 OK +550 relay not permitted +221 myhost.test.ex closing connection diff --git a/test/stdout/2620 b/test/stdout/2620 index 08e417d0f..4f907c1bc 100644 --- a/test/stdout/2620 +++ b/test/stdout/2620 @@ -19,6 +19,7 @@ after" id=newline Aristotle > name="Philip Hazel" id=ph10 name=Aristotle id=aaaa +> 1 > **** SMTP testing session as if from host 10.0.0.0 diff --git a/test/stdout/9100 b/test/stdout/9100 deleted file mode 100644 index 460d76714..000000000 --- a/test/stdout/9100 +++ /dev/null @@ -1,26 +0,0 @@ -> Philip Hazel -> Philip Hazel -> -> -> id=nothing name="" -> 0 -> id=quote name="\"Q\" Oted" home=/home/quoted mail=quoted@xxx -> id=filter name=filter home=filter mail="#Exim filter -deliver postmaster" -> id=quote2 name="\"qnosp" home=/home/q2 mail="" -> id=nlonly name=filter home=filter mail="Before -After" -> Failed: lookup of "servers=x:localhost; select name from them where id='CALLER';" gave DEFER: MySQL server "x" not found in mysql_servers -> Philip Hazel -> Philip Hazel -> Philip Hazel -> - -**** SMTP testing session as if from host 10.0.0.0 -**** but without any ident (RFC 1413) callback. -**** This is not for real! - -220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 -250 OK -550 relay not permitted -221 myhost.test.ex closing connection -- 2.30.2