Lookups: fix pgsql multiple-row, single-column return
authorJeremy Harris <jgh146exb@wizmail.org>
Sun, 24 Dec 2017 21:30:20 +0000 (21:30 +0000)
committerJeremy Harris <jgh146exb@wizmail.org>
Sun, 24 Dec 2017 21:30:20 +0000 (21:30 +0000)
Report & fix from James <list@xdrv.co.uk>; additional tidying and testcase by JGH

Broken-by: acec9514b1
12 files changed:
doc/doc-txt/ChangeLog
src/src/lookups/pgsql.c
test/confs/2620 [moved from test/confs/9200 with 92% similarity]
test/log/2620 [moved from test/log/9200 with 100% similarity]
test/mail/2620.ph10 [moved from test/mail/9200.CALLER with 100% similarity]
test/runtest
test/scripts/2620-Postgresql/2620 [new file with mode: 0644]
test/scripts/2620-Postgresql/REQUIRES [new file with mode: 0644]
test/scripts/9200-PostgreSQL/9200 [deleted file]
test/stderr/2620 [moved from test/stderr/9200 with 60% similarity]
test/stdout/2620 [new file with mode: 0644]
test/stdout/9200 [deleted file]

index 824ae232e6c0ca71ed70777c566ec1c1a2c9602e..08ed2ce9d1b262a15b47e8f0d138a692c9f98881 100644 (file)
@@ -5,6 +5,13 @@ affect Exim's operation, with an unchanged configuration file.  For new
 options, and new features, see the NewStuff file next to this ChangeLog.
 
 
 options, and new features, see the NewStuff file next to this ChangeLog.
 
 
+Since Exim version 4.90
+-----------------
+
+JH/03 Fix pgsql lookup for multiple result-tuples with a single column.
+      Previously only the last row was returned.
+
+
 Exim version 4.90
 -----------------
 
 Exim version 4.90
 -----------------
 
index 0b771f59cae389302f0bc563b35e6e85a04c7250..cece43b66b4750a744bb4eb4593f7cb477dc73f9 100644 (file)
@@ -140,7 +140,7 @@ has the password removed. This copy is also used for debugging output. */
 for (i = 2; i >= 0; i--)
   {
   uschar *pp = Ustrrchr(server, '/');
 for (i = 2; i >= 0; i--)
   {
   uschar *pp = Ustrrchr(server, '/');
-  if (pp == NULL)
+  if (!pp)
     {
     *errmsg = string_sprintf("incomplete pgSQL server data: %s",
       (i == 2)? server : server_copy);
     {
     *errmsg = string_sprintf("incomplete pgSQL server data: %s",
       (i == 2)? server : server_copy);
@@ -156,18 +156,16 @@ for (i = 2; i >= 0; i--)
 start is the identification of the server (host or path). See if we have a
 cached connection to the server. */
 
 start is the identification of the server (host or path). See if we have a
 cached connection to the server. */
 
-for (cn = pgsql_connections; cn != NULL; cn = cn->next)
-  {
+for (cn = pgsql_connections; cn; cn = cn->next)
   if (Ustrcmp(cn->server, server_copy) == 0)
     {
     pg_conn = cn->handle;
     break;
     }
   if (Ustrcmp(cn->server, server_copy) == 0)
     {
     pg_conn = cn->handle;
     break;
     }
-  }
 
 /* If there is no cached connection, we must set one up. */
 
 
 /* If there is no cached connection, we must set one up. */
 
-if (cn == NULL)
+if (!cn)
   {
   uschar *port = US"";
 
   {
   uschar *port = US"";
 
@@ -178,7 +176,7 @@ if (cn == NULL)
     uschar *last_slash, *last_dot, *p;
 
     p = ++server;
     uschar *last_slash, *last_dot, *p;
 
     p = ++server;
-    while (*p != 0 && *p != ')') p++;
+    while (*p && *p != ')') p++;
     *p = 0;
 
     last_slash = Ustrrchr(server, '/');
     *p = 0;
 
     last_slash = Ustrrchr(server, '/');
@@ -191,10 +189,9 @@ if (cn == NULL)
     We have to call PQsetdbLogin with '/var/run/postgresql' as the hostname
     argument and put '5432' into the port variable. */
 
     We have to call PQsetdbLogin with '/var/run/postgresql' as the hostname
     argument and put '5432' into the port variable. */
 
-    if (last_slash == NULL || last_dot == NULL)
+    if (!last_slash || !last_dot)
       {
       {
-      *errmsg = string_sprintf("PGSQL invalid filename for socket: %s",
-        server);
+      *errmsg = string_sprintf("PGSQL invalid filename for socket: %s", server);
       *defer_break = TRUE;
       return DEFER;
       }
       *defer_break = TRUE;
       return DEFER;
       }
@@ -211,13 +208,13 @@ if (cn == NULL)
   else
     {
     uschar *p;
   else
     {
     uschar *p;
-    if ((p = Ustrchr(server, ':')) != NULL)
+    if ((p = Ustrchr(server, ':')))
       {
       *p++ = 0;
       port = p;
       }
 
       {
       *p++ = 0;
       port = p;
       }
 
-    if (Ustrchr(server, '/') != NULL)
+    if (Ustrchr(server, '/'))
       {
       *errmsg = string_sprintf("unexpected slash in pgSQL server hostname: %s",
         server);
       {
       *errmsg = string_sprintf("unexpected slash in pgSQL server hostname: %s",
         server);
@@ -280,37 +277,37 @@ else
 
 /* Run the query */
 
 
 /* Run the query */
 
-  pg_result = PQexec(pg_conn, CS query);
-  switch(PQresultStatus(pg_result))
-    {
-    case PGRES_EMPTY_QUERY:
-    case PGRES_COMMAND_OK:
-      /* The command was successful but did not return any data since it was
-      not SELECT but either an INSERT, UPDATE or DELETE statement. Tell the
-      high level code to not cache this query, and clean the current cache for
-      this handle by setting *do_cache zero. */
-
-      result = string_cat(result, US PQcmdTuples(pg_result));
-      *do_cache = 0;
-      DEBUG(D_lookup) debug_printf("PGSQL: command does not return any data "
-       "but was successful. Rows affected: %s\n", result->s);
-      break;
+pg_result = PQexec(pg_conn, CS query);
+switch(PQresultStatus(pg_result))
+  {
+  case PGRES_EMPTY_QUERY:
+  case PGRES_COMMAND_OK:
+    /* The command was successful but did not return any data since it was
+    not SELECT but either an INSERT, UPDATE or DELETE statement. Tell the
+    high level code to not cache this query, and clean the current cache for
+    this handle by setting *do_cache zero. */
+
+    result = string_cat(result, US PQcmdTuples(pg_result));
+    *do_cache = 0;
+    DEBUG(D_lookup) debug_printf("PGSQL: command does not return any data "
+      "but was successful. Rows affected: %s\n", string_from_gstring(result));
+    break;
 
 
-    case PGRES_TUPLES_OK:
-      break;
+  case PGRES_TUPLES_OK:
+    break;
 
 
-    default:
-      /* This was the original code:
-      *errmsg = string_sprintf("PGSQL: query failed: %s\n",
-                              PQresultErrorMessage(pg_result));
-      This was suggested by a user:
-      */
-
-      *errmsg = string_sprintf("PGSQL: query failed: %s (%s) (%s)\n",
-                             PQresultErrorMessage(pg_result),
-                             PQresStatus(PQresultStatus(pg_result)), query);
-      goto PGSQL_EXIT;
-    }
+  default:
+    /* This was the original code:
+    *errmsg = string_sprintf("PGSQL: query failed: %s\n",
+                            PQresultErrorMessage(pg_result));
+    This was suggested by a user:
+    */
+
+    *errmsg = string_sprintf("PGSQL: query failed: %s (%s) (%s)\n",
+                          PQresultErrorMessage(pg_result),
+                          PQresStatus(PQresultStatus(pg_result)), query);
+    goto PGSQL_EXIT;
+  }
 
 /* Result is in pg_result. Find the number of fields returned. If this is one,
 we don't add field names to the data. Otherwise we do. If the query did not
 
 /* Result is in pg_result. Find the number of fields returned. If this is one,
 we don't add field names to the data. Otherwise we do. If the query did not
@@ -329,7 +326,7 @@ for (i = 0; i < num_tuples; i++)
     result = string_catn(result, US"\n", 1);
 
   if (num_fields == 1)
     result = string_catn(result, US"\n", 1);
 
   if (num_fields == 1)
-    result = string_catn(NULL,
+    result = string_catn(result,
        US PQgetvalue(pg_result, i, 0), PQgetlength(pg_result, i, 0));
   else
     {
        US PQgetvalue(pg_result, i, 0), PQgetlength(pg_result, i, 0));
   else
     {
@@ -342,17 +339,13 @@ for (i = 0; i < num_tuples; i++)
     }
   }
 
     }
   }
 
-/* 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()
-always leaves enough room for a terminating zero. */
+/* If result is NULL then no data has been found and so we return FAIL. */
 
 if (!result)
   {
   yield = FAIL;
   *errmsg = US"PGSQL: no data found";
   }
 
 if (!result)
   {
   yield = FAIL;
   *errmsg = US"PGSQL: no data found";
   }
-else
-  store_reset(result->s + result->ptr + 1);
 
 /* Get here by goto from various error checks. */
 
 
 /* Get here by goto from various error checks. */
 
@@ -367,6 +360,7 @@ if (pg_result) PQclear(pg_result);
 
 if (result)
   {
 
 if (result)
   {
+  store_reset(result->s + result->ptr + 1);
   *resultptr = string_from_gstring(result);
   return OK;
   }
   *resultptr = string_from_gstring(result);
   return OK;
   }
similarity index 92%
rename from test/confs/9200
rename to test/confs/2620
index 04f52a9a01911fe76efabf5d2b72a26b6a4e3fd9..009e74fd8540f6010a83328bea471f75849e10eb 100644 (file)
@@ -1,6 +1,6 @@
-# Exim test configuration 9200
+# Exim test configuration 2620
 
 
-SERVERS=localhost/test/ph10/
+SERVERS=localhost::PORT_N/test/CALLER/
 
 .include DIR/aux-var/std_conf_prefix
 
 
 .include DIR/aux-var/std_conf_prefix
 
similarity index 100%
rename from test/log/9200
rename to test/log/2620
similarity index 100%
rename from test/mail/9200.CALLER
rename to test/mail/2620.ph10
index a1259f76920c8b73671e260c1d66d71a31bfd04c..d0de8622e4b448bb88cc2240abfde41da846464a 100755 (executable)
@@ -2428,6 +2428,7 @@ elsif (/^background$/)
 
   $_ = <SCRIPT>; $lineno++;
   chomp;
 
   $_ = <SCRIPT>; $lineno++;
   chomp;
+  do_substitute($testno);
   $line = $_;
   if ($debug) { printf ">> daemon: $line >>test-stdout 2>>test-stderr\n"; }
 
   $line = $_;
   if ($debug) { printf ">> daemon: $line >>test-stdout 2>>test-stderr\n"; }
 
diff --git a/test/scripts/2620-Postgresql/2620 b/test/scripts/2620-Postgresql/2620
new file mode 100644 (file)
index 0000000..ba3a3bc
--- /dev/null
@@ -0,0 +1,63 @@
+# pgsql lookups
+#
+# first, populate a DB to test against
+sudo rm -fr DIR/pgsql
+perl
+system 'initdb -D DIR/pgsql/data';
+****
+background
+/usr/bin/postgres -D DIR/pgsql/data -p PORT_N -k DIR/pgsql
+****
+perl
+system 'createdb -h localhost -p PORT_N test';
+system 'psql -h localhost -p PORT_N -d test \
+ -c "CREATE TABLE them ( name text, id text );" \
+ -c "INSERT INTO them VALUES ( \'Philip Hazel\', \'ph10\' );" \
+ -c "INSERT INTO them VALUES ( \'Aristotle\',    \'aaaa\' );" \
+ -c "INSERT INTO them VALUES ( \'\', \'nothing\' );" \
+ -c "INSERT INTO them VALUES ( \'\"stquot\', \'quote2\' );" \
+ -c "INSERT INTO them VALUES ( \'before\' || CHR(13) || CHR(10) || \'after\', \'newline\' );" \
+ -c "INSERT INTO them VALUES ( \'x\' || CHR(9) || \'x\', \'tab\' );" \
+ -c "INSERT INTO them VALUES ( CHR(39) || \'stquot\', \'quote1\' );" \
+ ';
+****
+#
+# now, the tests
+exim -d-all+lookup -be
+${lookup pgsql {select name from them where id='ph10';}}
+${lookup pgsql {select name from them where id='ph10';}}
+${lookup pgsql {select name from them where id='xxxx';}}
+${lookup pgsql {select name from them where id='nothing';}}
+${lookup pgsql {select id,name from them where id='nothing';}}
+${lookup pgsql {delete from them where id='nonexist';}}
+${lookup pgsql {select * from them where id='quote2';}}
+${lookup pgsql {select * from them where id='newline';}}
+${lookup pgsql {select * from them where id='tab';}}
+${lookup pgsql {select * from them where name='${quote_pgsql:'stquot}';}}
+${lookup pgsql {servers=x:localhost; select name from them where id='ph10';}}
+${lookup pgsql {servers=localhost::PORT_N:x; select name from them where id='ph10';}}
+${lookup pgsql {servers=localhost::PORT_N/test/CALLER/:x; select name from them where id='ph10';}}
+${lookup pgsql {servers=(DIR/pgsql/.s.PGSQL.PORT_N)/test/CALLER/:x; select name from them where id='ph10';}}
+x
+${lookup pgsql {SELECT name FROM them WHERE id IN ('ph10', 'aaaa');}}
+${lookup pgsql {SELECT *    FROM them WHERE id IN ('ph10', 'aaaa');}}
+****
+exim -d -bh 10.0.0.0
+mail from:<a@b>
+rcpt to:<c@d>
+rcpt to:<c@d>
+quit
+****
+exim -odi -d CALLER
+Test message
+.
+****
+exim -DSERVERS=\(DIR/pgsql/.s.PGSQL.PORT_N\)/test/CALLER/ -d-all+lookup -be
+${lookup pgsql {select name from them where id='ph10';}}
+****
+#
+perl
+system 'pg_ctl stop -D DIR/pgsql/data -m immediate';
+****
+killdaemon
+sudo rm -fr DIR/pgsql
diff --git a/test/scripts/2620-Postgresql/REQUIRES b/test/scripts/2620-Postgresql/REQUIRES
new file mode 100644 (file)
index 0000000..5303be6
--- /dev/null
@@ -0,0 +1 @@
+lookup pgsql
diff --git a/test/scripts/9200-PostgreSQL/9200 b/test/scripts/9200-PostgreSQL/9200
deleted file mode 100644 (file)
index 2dfb15b..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# pgsql lookups - expects specific data
-exim -d-all+lookup -be
-${lookup pgsql {select name from them where id='ph10';}}
-${lookup pgsql {select name from them where id='ph10';}}
-${lookup pgsql {select name from them where id='xxxx';}}
-${lookup pgsql {select name from them where id='nothing';}}
-${lookup pgsql {select id,name from them where id='nothing';}}
-${lookup pgsql {delete from them where id='nonexist';}}
-${lookup pgsql {select * from them where id='quote2';}}
-${lookup pgsql {select * from them where id='newline';}}
-${lookup pgsql {select * from them where id='tab';}}
-${lookup pgsql {select * from them where name='${quote_pgsql:'stquot}';}}
-${lookup pgsql {servers=x:localhost; select name from them where id='ph10';}}
-${lookup pgsql {servers=localhost:x; select name from them where id='ph10';}}
-${lookup pgsql {servers=localhost/test/CALLER/:x; select name from them where id='ph10';}}
-${lookup pgsql {servers=(/tmp/.s.PGSQL.5432)/test/ph10/:x; select name from them where id='ph10';}}
-****
-exim -d -bh 10.0.0.0
-mail from:<a@b>
-rcpt to:<c@d>
-rcpt to:<c@d>
-quit
-****
-exim -odi -d CALLER
-Test message
-.
-****
-exim -DSERVERS=\(/tmp/.s.PGSQL.5432\)/test/ph10/ -d-all+lookup -be
-${lookup pgsql {select name from them where id='CALLER';}}
-****
similarity index 60%
rename from test/stderr/9200
rename to test/stderr/2620
index 2fff471a35eb502fa20c50885649b6f7ee168159..b0bed620945752c665bf629bd510addfc98405f7 100644 (file)
@@ -1,24 +1,28 @@
+
+WARNING: enabling "trust" authentication for local connections
+You can change this by editing pg_hba.conf or using the option -A, or
+--auth-local and --auth-host, the next time you run initdb.
 Exim version x.yz ....
 configuration file is TESTSUITE/test-config
 admin user
 search_open: pgsql "NULL"
 search_find: file="NULL"
 Exim version x.yz ....
 configuration file is TESTSUITE/test-config
 admin user
 search_open: pgsql "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"
 LRU list:
 internal_search_find: file="NULL"
-  type=pgsql key="select name from them where id='CALLER';"
-database lookup required for select name from them where id='CALLER';
-PostgreSQL query: select name from them where id='CALLER';
-PGSQL new connection: host=localhost port= database=test user=CALLER
+  type=pgsql key="select name from them where id='ph10';"
+database lookup required for select name from them where id='ph10';
+PostgreSQL query: select name from them where id='ph10';
+PGSQL new connection: host=localhost port=1223 database=test user=CALLER
 lookup yielded: Philip Hazel
 search_open: pgsql "NULL"
   cached open
 search_find: file="NULL"
 lookup yielded: Philip Hazel
 search_open: pgsql "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"
 LRU list:
 internal_search_find: file="NULL"
-  type=pgsql key="select name from them where id='CALLER';"
-cached data used for lookup of select name from them where id='CALLER';
+  type=pgsql 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: pgsql "NULL"
   cached open
 lookup yielded: Philip Hazel
 search_open: pgsql "NULL"
   cached open
@@ -29,7 +33,7 @@ internal_search_find: file="NULL"
   type=pgsql key="select name from them where id='xxxx';"
 database lookup required for select name from them where id='xxxx';
 PostgreSQL query: select name from them where id='xxxx';
   type=pgsql key="select name from them where id='xxxx';"
 database lookup required for select name from them where id='xxxx';
 PostgreSQL query: select name from them where id='xxxx';
-PGSQL using cached connection for localhost/test/CALLER
+PGSQL using cached connection for localhost:1223/test/CALLER
 PGSQL: no data found
 lookup failed
 search_open: pgsql "NULL"
 PGSQL: no data found
 lookup failed
 search_open: pgsql "NULL"
@@ -41,7 +45,7 @@ internal_search_find: file="NULL"
   type=pgsql key="select name from them where id='nothing';"
 database lookup required for select name from them where id='nothing';
 PostgreSQL query: select name from them where id='nothing';
   type=pgsql key="select name from them where id='nothing';"
 database lookup required for select name from them where id='nothing';
 PostgreSQL query: select name from them where id='nothing';
-PGSQL using cached connection for localhost/test/CALLER
+PGSQL using cached connection for localhost:1223/test/CALLER
 lookup yielded: 
 search_open: pgsql "NULL"
   cached open
 lookup yielded: 
 search_open: pgsql "NULL"
   cached open
@@ -52,7 +56,7 @@ internal_search_find: file="NULL"
   type=pgsql key="select id,name from them where id='nothing';"
 database lookup required for select id,name from them where id='nothing';
 PostgreSQL query: select id,name from them where id='nothing';
   type=pgsql key="select id,name from them where id='nothing';"
 database lookup required for select id,name from them where id='nothing';
 PostgreSQL query: select id,name from them where id='nothing';
-PGSQL using cached connection for localhost/test/CALLER
+PGSQL using cached connection for localhost:1223/test/CALLER
 lookup yielded: id=nothing name="" 
 search_open: pgsql "NULL"
   cached open
 lookup yielded: id=nothing name="" 
 search_open: pgsql "NULL"
   cached open
@@ -63,7 +67,7 @@ internal_search_find: file="NULL"
   type=pgsql key="delete from them where id='nonexist';"
 database lookup required for delete from them where id='nonexist';
 PostgreSQL query: delete from them where id='nonexist';
   type=pgsql key="delete from them where id='nonexist';"
 database lookup required for delete from them where id='nonexist';
 PostgreSQL query: delete from them where id='nonexist';
-PGSQL using cached connection for localhost/test/CALLER
+PGSQL using cached connection for localhost:1223/test/CALLER
 PGSQL: command does not return any data but was successful. Rows affected: 0
 lookup forced cache cleanup
 lookup yielded: 0
 PGSQL: command does not return any data but was successful. Rows affected: 0
 lookup forced cache cleanup
 lookup yielded: 0
@@ -76,7 +80,7 @@ internal_search_find: file="NULL"
   type=pgsql key="select * from them where id='quote2';"
 database lookup required for select * from them where id='quote2';
 PostgreSQL query: select * from them where id='quote2';
   type=pgsql key="select * from them where id='quote2';"
 database lookup required for select * from them where id='quote2';
 PostgreSQL query: select * from them where id='quote2';
-PGSQL using cached connection for localhost/test/CALLER
+PGSQL using cached connection for localhost:1223/test/CALLER
 lookup yielded: name="\"stquot" id=quote2 
 search_open: pgsql "NULL"
   cached open
 lookup yielded: name="\"stquot" id=quote2 
 search_open: pgsql "NULL"
   cached open
@@ -87,8 +91,8 @@ internal_search_find: file="NULL"
   type=pgsql key="select * from them where id='newline';"
 database lookup required for select * from them where id='newline';
 PostgreSQL query: select * from them where id='newline';
   type=pgsql key="select * from them where id='newline';"
 database lookup required for select * from them where id='newline';
 PostgreSQL query: select * from them where id='newline';
-PGSQL using cached connection for localhost/test/CALLER
-lookup yielded: name="before
+PGSQL using cached connection for localhost:1223/test/CALLER
+lookup yielded: name="before\r
 after" id=newline 
 search_open: pgsql "NULL"
   cached open
 after" id=newline 
 search_open: pgsql "NULL"
   cached open
@@ -99,7 +103,7 @@ internal_search_find: file="NULL"
   type=pgsql key="select * from them where id='tab';"
 database lookup required for select * from them where id='tab';
 PostgreSQL query: select * from them where id='tab';
   type=pgsql key="select * from them where id='tab';"
 database lookup required for select * from them where id='tab';
 PostgreSQL query: select * from them where id='tab';
-PGSQL using cached connection for localhost/test/CALLER
+PGSQL using cached connection for localhost:1223/test/CALLER
 lookup yielded: name="x        x" id=tab 
 search_open: pgsql "NULL"
   cached open
 lookup yielded: name="x        x" id=tab 
 search_open: pgsql "NULL"
   cached open
@@ -110,55 +114,79 @@ internal_search_find: file="NULL"
   type=pgsql key="select * from them where name='''stquot';"
 database lookup required for select * from them where name='''stquot';
 PostgreSQL query: select * from them where name='''stquot';
   type=pgsql key="select * from them where name='''stquot';"
 database lookup required for select * from them where name='''stquot';
 PostgreSQL query: select * from them where name='''stquot';
-PGSQL using cached connection for localhost/test/CALLER
+PGSQL using cached connection for localhost:1223/test/CALLER
 lookup yielded: name='stquot id=quote1 
 search_open: pgsql "NULL"
   cached open
 search_find: file="NULL"
 lookup yielded: name='stquot id=quote1 
 search_open: pgsql "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:localhost; select name from them where id='ph10';" partial=-1 affix=NULL starflags=0
 LRU list:
 internal_search_find: file="NULL"
 LRU list:
 internal_search_find: file="NULL"
-  type=pgsql 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';
-PostgreSQL query: servers=x:localhost; select name from them where id='CALLER';
+  type=pgsql key="servers=x:localhost; select name from them where id='ph10';"
+database lookup required for servers=x:localhost; select name from them where id='ph10';
+PostgreSQL query: servers=x:localhost; select name from them where id='ph10';
 lookup deferred: PostgreSQL server "x" not found in pgsql_servers
 search_open: pgsql "NULL"
   cached open
 search_find: file="NULL"
 lookup deferred: PostgreSQL server "x" not found in pgsql_servers
 search_open: pgsql "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=localhost::1223:x; select name from them where id='ph10';" partial=-1 affix=NULL starflags=0
+LRU list:
+internal_search_find: file="NULL"
+  type=pgsql key="servers=localhost::1223:x; select name from them where id='ph10';"
+database lookup required for servers=localhost::1223:x; select name from them where id='ph10';
+PostgreSQL query: servers=localhost::1223:x; select name from them where id='ph10';
+PGSQL using cached connection for localhost:1223/test/CALLER
+lookup yielded: Philip Hazel
+search_open: pgsql "NULL"
+  cached open
+search_find: file="NULL"
+  key="servers=localhost::1223/test/CALLER/:x; select name from them where id='ph10';" partial=-1 affix=NULL starflags=0
 LRU list:
 internal_search_find: file="NULL"
 LRU list:
 internal_search_find: file="NULL"
-  type=pgsql 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';
-PostgreSQL query: servers=localhost:x; select name from them where id='CALLER';
-PGSQL using cached connection for localhost/test/CALLER
+  type=pgsql key="servers=localhost::1223/test/CALLER/:x; select name from them where id='ph10';"
+database lookup required for servers=localhost::1223/test/CALLER/:x; select name from them where id='ph10';
+PostgreSQL query: servers=localhost::1223/test/CALLER/:x; select name from them where id='ph10';
+PGSQL using cached connection for localhost:1223/test/CALLER
 lookup yielded: Philip Hazel
 search_open: pgsql "NULL"
   cached open
 search_find: file="NULL"
 lookup yielded: Philip Hazel
 search_open: pgsql "NULL"
   cached open
 search_find: file="NULL"
-  key="servers=localhost/test/CALLER/:x; select name from them where id='CALLER';" partial=-1 affix=NULL starflags=0
+  key="servers=(TESTSUITE/pgsql/.s.PGSQL.1223)/test/CALLER/:x; select name from them where id='ph10';" partial=-1 affix=NULL starflags=0
 LRU list:
 internal_search_find: file="NULL"
 LRU list:
 internal_search_find: file="NULL"
-  type=pgsql key="servers=localhost/test/CALLER/:x; select name from them where id='CALLER';"
-database lookup required for servers=localhost/test/CALLER/:x; select name from them where id='CALLER';
-PostgreSQL query: servers=localhost/test/CALLER/:x; select name from them where id='CALLER';
-PGSQL using cached connection for localhost/test/CALLER
+  type=pgsql key="servers=(TESTSUITE/pgsql/.s.PGSQL.1223)/test/CALLER/:x; select name from them where id='ph10';"
+database lookup required for servers=(TESTSUITE/pgsql/.s.PGSQL.1223)/test/CALLER/:x; select name from them where id='ph10';
+PostgreSQL query: servers=(TESTSUITE/pgsql/.s.PGSQL.1223)/test/CALLER/:x; select name from them where id='ph10';
+PGSQL new connection: socket=TESTSUITE/pgsql/.s.PGSQL.1223 database=test user=CALLER
 lookup yielded: Philip Hazel
 search_open: pgsql "NULL"
   cached open
 search_find: file="NULL"
 lookup yielded: Philip Hazel
 search_open: pgsql "NULL"
   cached open
 search_find: file="NULL"
-  key="servers=(/tmp/.s.PGSQL.5432)/test/CALLER/:x; 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"
 LRU list:
 internal_search_find: file="NULL"
-  type=pgsql key="servers=(/tmp/.s.PGSQL.5432)/test/CALLER/:x; select name from them where id='CALLER';"
-database lookup required for servers=(/tmp/.s.PGSQL.5432)/test/CALLER/:x; select name from them where id='CALLER';
-PostgreSQL query: servers=(/tmp/.s.PGSQL.5432)/test/CALLER/:x; select name from them where id='CALLER';
-PGSQL new connection: socket=/tmp/.s.PGSQL.5432 database=test user=CALLER
+  type=pgsql key="SELECT name FROM them WHERE id IN ('ph10', 'aaaa');"
+database lookup required for SELECT name FROM them WHERE id IN ('ph10', 'aaaa');
+PostgreSQL query: SELECT name FROM them WHERE id IN ('ph10', 'aaaa');
+PGSQL using cached connection for localhost:1223/test/CALLER
 lookup yielded: Philip Hazel
 lookup yielded: Philip Hazel
+Aristotle
+search_open: pgsql "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=pgsql key="SELECT *    FROM them WHERE id IN ('ph10', 'aaaa');"
+database lookup required for SELECT *    FROM them WHERE id IN ('ph10', 'aaaa');
+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_tidyup called
 search_tidyup called
-close PGSQL connection: (/tmp/.s.PGSQL.5432)/test/CALLER
-close PGSQL connection: localhost/test/CALLER
->>>>>>>>>>>>>>>> Exim pid=pppp terminating with rc=0 >>>>>>>>>>>>>>>>
+close PGSQL connection: (TESTSUITE/pgsql/.s.PGSQL.1223)/test/CALLER
+close PGSQL connection: localhost:1223/test/CALLER
+>>>>>>>>>>>>>>>> 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
 Exim version x.yz ....
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=pppp
@@ -186,6 +214,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>
 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"
 SMTP>> 250 OK
 SMTP<< rcpt to:<c@d>
 using ACL "check_recipient"
@@ -193,7 +223,7 @@ processing "accept"
 check domains = +local_domains
 d in "@"? no (end of list)
 d in "+local_domains"? no (end of list)
 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: pgsql "NULL"
 processing "accept"
 check hosts = +relay_hosts
 search_open: pgsql "NULL"
@@ -204,14 +234,16 @@ internal_search_find: file="NULL"
   type=pgsql key="select * from them where id='10.0.0.0'"
 database lookup required for select * from them where id='10.0.0.0'
 PostgreSQL query: select * from them where id='10.0.0.0'
   type=pgsql key="select * from them where id='10.0.0.0'"
 database lookup required for select * from them where id='10.0.0.0'
 PostgreSQL query: select * from them where id='10.0.0.0'
-PGSQL new connection: host=localhost port= database=test user=CALLER
+PGSQL new connection: host=localhost port=1223 database=test user=CALLER
 PGSQL: no data found
 lookup failed
 host in "net-pgsql;select * from them where id='10.0.0.0'"? no (end of list)
 host in "+relay_hosts"? no (end of list)
 PGSQL: no data found
 lookup failed
 host in "net-pgsql;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"
 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
 SMTP>> 550 relay not permitted
 LOG: MAIN REJECT
   H=[10.0.0.0] F=<a@b> rejected RCPT <c@d>: relay not permitted
@@ -221,7 +253,7 @@ processing "accept"
 check domains = +local_domains
 d in "@"? no (end of list)
 d in "+local_domains"? no (end of list)
 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: pgsql "NULL"
 processing "accept"
 check hosts = +relay_hosts
 search_open: pgsql "NULL"
@@ -235,9 +267,11 @@ cached data used for lookup of select * from them where id='10.0.0.0'
 lookup failed
 host in "net-pgsql;select * from them where id='10.0.0.0'"? no (end of list)
 host in "+relay_hosts"? no (end of list)
 lookup failed
 host in "net-pgsql;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"
 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
 SMTP>> 550 relay not permitted
 LOG: MAIN REJECT
   H=[10.0.0.0] F=<a@b> rejected RCPT <c@d>: relay not permitted
@@ -246,8 +280,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
 LOG: smtp_connection MAIN
   SMTP connection from [10.0.0.0] closed by QUIT
 search_tidyup called
-close PGSQL connection: localhost/test/CALLER
->>>>>>>>>>>>>>>> Exim pid=pppp terminating with rc=0 >>>>>>>>>>>>>>>>
+close PGSQL connection: localhost:1223/test/CALLER
+>>>>>>>>>>>>>>>> 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
 Exim version x.yz ....
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=pppp
@@ -260,6 +294,8 @@ 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>
 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
 Sender: CALLER@myhost.test.ex
 Recipients:
   CALLER
@@ -274,6 +310,7 @@ 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
 
 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)
 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)
@@ -282,7 +319,12 @@ P Received: from CALLER by myhost.test.ex with local (Exim x.yz)
        for CALLER@myhost.test.ex; Tue, 2 Mar 1999 09:44:33 +0000
 calling local_scan(); timeout=300
 local_scan() returned 0 NULL
        for CALLER@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: |CALLER@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
 Size of headers = sss
 LOG: MAIN
   <= CALLER@myhost.test.ex U=CALLER P=local S=sss
@@ -295,11 +337,11 @@ changed uid/gid: forcing real = effective
 configuration file is TESTSUITE/test-config
 trusted user
 admin user
 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
 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
 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
@@ -307,14 +349,17 @@ Non-recipients:
 Empty Tree
 ---- End of tree ----
 recipients_count=1
 Empty Tree
 ---- End of tree ----
 recipients_count=1
+**** SPOOL_IN - No additional fields
 body_linecount=1 message_linecount=7
 body_linecount=1 message_linecount=7
+DSN: set orcpt: NULL  flags: 0
 Delivery address list:
   CALLER@myhost.test.ex 
 locking TESTSUITE/spool/db/retry.lockfile
 Delivery address list:
   CALLER@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
 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
 no retry data available
 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 Considering: CALLER@myhost.test.ex
@@ -329,13 +374,13 @@ local_part=CALLER domain=myhost.test.ex
 processing address_data
 search_open: pgsql "NULL"
 search_find: file="NULL"
 processing address_data
 search_open: pgsql "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"
 LRU list:
 internal_search_find: file="NULL"
-  type=pgsql key="select name from them where id='CALLER'"
-database lookup required for select name from them where id='CALLER'
-PostgreSQL query: select name from them where id='CALLER'
-PGSQL new connection: host=localhost port= database=test user=CALLER
+  type=pgsql key="select name from them where id='ph10'"
+database lookup required for select name from them where id='ph10'
+PostgreSQL query: select name from them where id='ph10'
+PGSQL new connection: host=localhost port=1223 database=test user=CALLER
 lookup yielded: Philip Hazel
 calling r1 router
 r1 router called for CALLER@myhost.test.ex
 lookup yielded: Philip Hazel
 calling r1 router
 r1 router called for CALLER@myhost.test.ex
@@ -356,13 +401,14 @@ After routing:
   Failed addresses:
   Deferred addresses:
 search_tidyup called
   Failed addresses:
   Deferred addresses:
 search_tidyup called
-close PGSQL connection: localhost/test/CALLER
+close PGSQL connection: localhost:1223/test/CALLER
 >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>>
 --------> CALLER@myhost.test.ex <--------
 locking TESTSUITE/spool/db/retry.lockfile
 >>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>>
 --------> CALLER@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
 no retry data available
 search_tidyup called
 changed uid/gid: local delivery to CALLER <CALLER@myhost.test.ex> transport=t1
@@ -372,31 +418,32 @@ set_process_info: pppp delivering 10HmaX-0005vi-00 to CALLER using t1
 appendfile transport entered
 search_open: pgsql "NULL"
 search_find: file="NULL"
 appendfile transport entered
 search_open: pgsql "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"
 LRU list:
 internal_search_find: file="NULL"
-  type=pgsql key="select id from them where id='CALLER'"
-database lookup required for select id from them where id='CALLER'
-PostgreSQL query: select id from them where id='CALLER'
-PGSQL new connection: host=localhost port= database=test user=CALLER
-lookup yielded: CALLER
+  type=pgsql key="select id from them where id='ph10'"
+database lookup required for select id from them where id='ph10'
+PostgreSQL query: select id from them where id='ph10'
+PGSQL new connection: host=localhost port=1223 database=test user=CALLER
+lookup yielded: ph10
 appendfile: mode=600 notify_comsat=0 quota=0 warning=0
 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 
   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
 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
 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
 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 PGSQL connection: localhost/test/CALLER
+close PGSQL connection: localhost:1223/test/CALLER
 journalling CALLER@myhost.test.ex
 t1 transport returned OK for CALLER@myhost.test.ex
 post-process CALLER@myhost.test.ex (0)
 journalling CALLER@myhost.test.ex
 t1 transport returned OK for CALLER@myhost.test.ex
 post-process CALLER@myhost.test.ex (0)
@@ -409,31 +456,43 @@ changed uid/gid: post-delivery tidying
 set_process_info: pppp tidying up after delivering 10HmaX-0005vi-00
 Processing retry items
 Succeeded addresses:
 set_process_info: pppp tidying up after delivering 10HmaX-0005vi-00
 Processing retry items
 Succeeded addresses:
-CALLER@myhost.test.ex: no retry items
+ CALLER@myhost.test.ex: no retry items
 Failed addresses:
 Deferred addresses:
 end of retry processing
 Failed addresses:
 Deferred addresses:
 end of retry processing
+DSN: processing router : r1
+DSN: processing successful delivery address: CALLER@myhost.test.ex
+DSN: Sender_address: CALLER@myhost.test.ex
+DSN: orcpt: NULL  flags: 0
+DSN: envid: NULL  ret: 0
+DSN: Final recipient: CALLER@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
 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
 search_tidyup called
->>>>>>>>>>>>>>>> Exim pid=pppp terminating with rc=0 >>>>>>>>>>>>>>>>
+>>>>>>>>>>>>>>>> Exim pid=pppp (main) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
 configuration file is TESTSUITE/test-config
 admin user
 search_open: pgsql "NULL"
 search_find: file="NULL"
 Exim version x.yz ....
 configuration file is TESTSUITE/test-config
 admin user
 search_open: pgsql "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"
 LRU list:
 internal_search_find: file="NULL"
-  type=pgsql key="select name from them where id='CALLER';"
-database lookup required for select name from them where id='CALLER';
-PostgreSQL query: select name from them where id='CALLER';
-PGSQL new connection: socket=/tmp/.s.PGSQL.5432 database=test user=CALLER
+  type=pgsql key="select name from them where id='ph10';"
+database lookup required for select name from them where id='ph10';
+PostgreSQL query: select name from them where id='ph10';
+PGSQL new connection: socket=TESTSUITE/pgsql/.s.PGSQL.1223 database=test user=CALLER
 lookup yielded: Philip Hazel
 search_tidyup called
 lookup yielded: Philip Hazel
 search_tidyup called
-close PGSQL connection: (/tmp/.s.PGSQL.5432)/test/CALLER
->>>>>>>>>>>>>>>> Exim pid=pppp terminating with rc=0 >>>>>>>>>>>>>>>>
+close PGSQL connection: (TESTSUITE/pgsql/.s.PGSQL.1223)/test/CALLER
+>>>>>>>>>>>>>>>> Exim pid=pppp (main: expansion test) terminating with rc=0 >>>>>>>>>>>>>>>>
+
+******** SERVER ********
+LOG:  redirecting log output to logging collector process
+HINT:  Future log output will appear in directory "pg_log".
diff --git a/test/stdout/2620 b/test/stdout/2620
new file mode 100644 (file)
index 0000000..668eca7
--- /dev/null
@@ -0,0 +1,66 @@
+The files belonging to this database system will be owned by user "CALLER".
+This user must also own the server process.
+
+The database cluster will be initialized with locale "C".
+The default database encoding has accordingly been set to "SQL_ASCII".
+The default text search configuration will be set to "english".
+
+Data page checksums are disabled.
+
+creating directory TESTSUITE/pgsql/data ... ok
+creating subdirectories ... ok
+selecting default max_connections ... 100
+selecting default shared_buffers ... 128MB
+selecting dynamic shared memory implementation ... posix
+creating configuration files ... ok
+running bootstrap script ... ok
+performing post-bootstrap initialization ... ok
+syncing data to disk ... ok
+
+Success. You can now start the database server using:
+
+    pg_ctl -D TESTSUITE/pgsql/data -l logfile start
+
+CREATE TABLE
+INSERT 0 1
+INSERT 0 1
+INSERT 0 1
+INSERT 0 1
+INSERT 0 1
+INSERT 0 1
+INSERT 0 1
+> Philip Hazel
+> Philip Hazel
+> 
+> 
+> id=nothing name="" 
+> 0
+> name="\"stquot" id=quote2 
+> name="before\r
+after" id=newline 
+> name="x      x" id=tab 
+> name='stquot id=quote1 
+> Failed: lookup of "servers=x:localhost; select name from them where id='ph10';" gave DEFER: PostgreSQL server "x" not found in pgsql_servers
+> Philip Hazel
+> Philip Hazel
+> Philip Hazel
+> x
+> Philip Hazel
+Aristotle
+> name="Philip Hazel" id=ph10 
+name=Aristotle id=aaaa 
+> 
+
+**** 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
+550 relay not permitted\r
+221 myhost.test.ex closing connection\r
+> Philip Hazel
+> 
+waiting for server to shut down.... done
+server stopped
diff --git a/test/stdout/9200 b/test/stdout/9200
deleted file mode 100644 (file)
index d2ec96f..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-> Philip Hazel
-> Philip Hazel
-> 
-> 
-> id=nothing name="" 
-> 0
-> name="\"stquot" id=quote2 
-> name="before
-after" id=newline 
-> name="x      x" id=tab 
-> name='stquot id=quote1 
-> Failed: lookup of "servers=x:localhost; select name from them where id='CALLER';" gave DEFER: PostgreSQL server "x" not found in pgsql_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
-550 relay not permitted\r
-221 myhost.test.ex closing connection\r
-> Philip Hazel
->