Lookups: fix mysql lookup returns for no-data "queries",
authorJeremy Harris <jgh146exb@wizmail.org>
Sat, 13 Jan 2018 18:11:21 +0000 (18:11 +0000)
committerJeremy Harris <jgh146exb@wizmail.org>
Sat, 13 Jan 2018 18:54:08 +0000 (18:54 +0000)
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.

14 files changed:
doc/doc-txt/ChangeLog
src/src/lookups/mysql.c
test/confs/2610 [moved from test/confs/9100 with 90% similarity]
test/log/2610 [moved from test/log/9100 with 61% similarity]
test/mail/2610.ph10 [moved from test/mail/9100.CALLER with 84% similarity]
test/scripts/2610-MySQL/2610 [new file with mode: 0644]
test/scripts/2610-MySQL/REQUIRES [new file with mode: 0644]
test/scripts/2620-Postgresql/2620
test/scripts/9100-MySQL/9100 [deleted file]
test/stderr/2610 [moved from test/stderr/9100 with 51% similarity]
test/stderr/2620
test/stdout/2610 [new file with mode: 0644]
test/stdout/2620
test/stdout/9100 [deleted file]

index 742dc05f6f7d18609483140274c9a33aff2e3123..a62d767c9eec3c8c82ba16ea76469f6349ede39a 100644 (file)
@@ -39,6 +39,9 @@ JH/07 Bug 2214: Fix SMTP responses resulting from non-accept result of MIME ACL.
       Previously a spurious "250 OK id=" response was appended to the proper
       failure response.
 
+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
 -----------------
index ff1ef83250d7236be7e83aeb8b747a66221d893f..8d101b27b32b4d0ef0b3856480e237ca6b07ed73 100644 (file)
@@ -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
similarity index 90%
rename from test/confs/9100
rename to test/confs/2610
index a031f44decbfb7ee6fbd9df4d9f2e4f6cc1014af..9e2217215924458089f57ed0c6d45d861ec8bd8d 100644 (file)
@@ -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 -----
similarity index 61%
rename from test/log/9100
rename to test/log/2610
index 5ca026f385ad5f80855e4641212e03a9ae18369b..38ea30eb64beaf83ffce00e1a913fdb0817d358e 100644 (file)
@@ -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 <CALLER@myhost.test.ex> R=r1 T=t1
+1999-03-02 09:44:33 10HmaX-0005vi-00 => ph10 <ph10@myhost.test.ex> R=r1 T=t1
 1999-03-02 09:44:33 10HmaX-0005vi-00 Completed
similarity index 84%
rename from test/mail/9100.CALLER
rename to test/mail/2610.ph10
index 1e1294c188cd3612106455462ba0cd7847529c99..3305d49bb6f9995da1d6fc188ad5265221f6c03f 100644 (file)
@@ -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 <CALLER@myhost.test.ex>)
        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: <E10HmaX-0005vi-00@myhost.test.ex>
 From: CALLER_NAME <CALLER@myhost.test.ex>
 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 (file)
index 0000000..b3e36a5
--- /dev/null
@@ -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:<a@b>
+rcpt to:<c@d>
+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 (file)
index 0000000..e11f866
--- /dev/null
@@ -0,0 +1 @@
+lookup mysql
index ba3a3bcc82fd6f5445d684b85d42bb642d59a94d..a3301c36a1fc81267bfbfa2215684d9efba7818e 100644 (file)
@@ -41,6 +41,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:<a@b>
diff --git a/test/scripts/9100-MySQL/9100 b/test/scripts/9100-MySQL/9100
deleted file mode 100644 (file)
index fdf2caf..0000000
+++ /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:<a@b>
-rcpt to:<c@d>
-quit
-****
-exim -odi -d ph10
-Test message
-.
-****
similarity index 51%
rename from test/stderr/9100
rename to test/stderr/2610
index 60c63ba08b4af4830cd052c219fa4f22ada4e217..60d964387f172a4982b614025c628980452a08fd 100644 (file)
@@ -1,24 +1,26 @@
+Tue Mar 02 09:44:33 1999 PerconaFT file system space is low
+\amysqladmin: 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:<a@b>
+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:<c@d>
 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=<a@b> rejected RCPT <c@d>: 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 <CALLER@myhost.test.ex>
+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: <E10HmaX-0005vi-00@myhost.test.ex>
 F From: CALLER_NAME <CALLER@myhost.test.ex>
   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 <CALLER@myhost.test.ex>)
        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 <TESTSUITE/spool/db/retry> dir <TESTSUITE/spool/db> 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 <TESTSUITE/spool/db/retry> dir <TESTSUITE/spool/db> 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 <CALLER@myhost.test.ex> transport=t1
+changed uid/gid: local delivery to ph10 <ph10@myhost.test.ex> 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 <CALLER@myhost.test.ex> R=r1 T=t1
+  => ph10 <ph10@myhost.test.ex> 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 >>>>>>>>>>>>>>>>
index b0bed620945752c665bf629bd510addfc98405f7..c32f7c50dd60343e660626fc5b1aa2ce88e19951 100644 (file)
@@ -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 (file)
index 0000000..f0774a8
--- /dev/null
@@ -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\r
+250 OK\r
+550 relay not permitted\r
+221 myhost.test.ex closing connection\r
index 668eca73acf011885831fd1ca15f9ffa56d2c55a..386e72fbd0ebf58c19040c0605b8680ee7f762b3 100644 (file)
@@ -49,6 +49,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 (file)
index 460d767..0000000
+++ /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\r
-250 OK\r
-550 relay not permitted\r
-221 myhost.test.ex closing connection\r