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
16 files changed:
doc/doc-txt/ChangeLog
src/src/lookups/pgsql.c
test/confs/2620 [new file with mode: 0644]
test/confs/9200 [deleted file]
test/log/2620 [new file with mode: 0644]
test/log/9200 [deleted file]
test/mail/2620.ph10 [new file with mode: 0644]
test/mail/9200.CALLER [deleted file]
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 [new file with mode: 0644]
test/stderr/9200 [deleted file]
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;
   }
diff --git a/test/confs/2620 b/test/confs/2620
new file mode 100644 (file)
index 0000000..009e74f
--- /dev/null
@@ -0,0 +1,51 @@
+# Exim test configuration 2620
+
+SERVERS=localhost::PORT_N/test/CALLER/
+
+.include DIR/aux-var/std_conf_prefix
+
+primary_hostname = myhost.test.ex
+
+# ----- Main settings -----
+
+domainlist local_domains = @
+hostlist   relay_hosts = net-pgsql;select * from them where \
+                                     id='$sender_host_address'
+
+acl_smtp_rcpt = check_recipient
+
+pgsql_servers = SERVERS
+
+
+# ----- ACL -----
+
+begin acl
+
+check_recipient:
+  accept  domains = +local_domains
+  accept  hosts = +relay_hosts
+  deny    message = relay not permitted
+
+
+# ----- Routers -----
+
+begin routers
+
+r1:
+  driver = accept
+  address_data = ${lookup pgsql{select name from them where id='ph10'}}
+  transport = t1
+
+
+# ----- Transports -----
+
+begin transports
+
+t1:
+  driver = appendfile
+  file = DIR/test-mail/\
+    ${lookup pgsql{select id from them where id='ph10'}{$value}fail}
+  user = CALLER
+
+
+# End
diff --git a/test/confs/9200 b/test/confs/9200
deleted file mode 100644 (file)
index 04f52a9..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-# Exim test configuration 9200
-
-SERVERS=localhost/test/ph10/
-
-.include DIR/aux-var/std_conf_prefix
-
-primary_hostname = myhost.test.ex
-
-# ----- Main settings -----
-
-domainlist local_domains = @
-hostlist   relay_hosts = net-pgsql;select * from them where \
-                                     id='$sender_host_address'
-
-acl_smtp_rcpt = check_recipient
-
-pgsql_servers = SERVERS
-
-
-# ----- ACL -----
-
-begin acl
-
-check_recipient:
-  accept  domains = +local_domains
-  accept  hosts = +relay_hosts
-  deny    message = relay not permitted
-
-
-# ----- Routers -----
-
-begin routers
-
-r1:
-  driver = accept
-  address_data = ${lookup pgsql{select name from them where id='ph10'}}
-  transport = t1
-
-
-# ----- Transports -----
-
-begin transports
-
-t1:
-  driver = appendfile
-  file = DIR/test-mail/\
-    ${lookup pgsql{select id from them where id='ph10'}{$value}fail}
-  user = CALLER
-
-
-# End
diff --git a/test/log/2620 b/test/log/2620
new file mode 100644 (file)
index 0000000..5ca026f
--- /dev/null
@@ -0,0 +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 Completed
diff --git a/test/log/9200 b/test/log/9200
deleted file mode 100644 (file)
index 5ca026f..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-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 Completed
diff --git a/test/mail/2620.ph10 b/test/mail/2620.ph10
new file mode 100644 (file)
index 0000000..1e1294c
--- /dev/null
@@ -0,0 +1,11 @@
+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
+Message-Id: <E10HmaX-0005vi-00@myhost.test.ex>
+From: CALLER_NAME <CALLER@myhost.test.ex>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+Test message
+
diff --git a/test/mail/9200.CALLER b/test/mail/9200.CALLER
deleted file mode 100644 (file)
index 1e1294c..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-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
-Message-Id: <E10HmaX-0005vi-00@myhost.test.ex>
-From: CALLER_NAME <CALLER@myhost.test.ex>
-Date: Tue, 2 Mar 1999 09:44:33 +0000
-
-Test message
-
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';}}
-****
diff --git a/test/stderr/2620 b/test/stderr/2620
new file mode 100644 (file)
index 0000000..b0bed62
--- /dev/null
@@ -0,0 +1,498 @@
+
+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"
+  key="select name from them where id='ph10';" partial=-1 affix=NULL starflags=0
+LRU list:
+internal_search_find: file="NULL"
+  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"
+  key="select name from them where id='ph10';" partial=-1 affix=NULL starflags=0
+LRU list:
+internal_search_find: file="NULL"
+  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
+search_find: file="NULL"
+  key="select name from them where id='xxxx';" partial=-1 affix=NULL starflags=0
+LRU list:
+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';
+PGSQL using cached connection for localhost:1223/test/CALLER
+PGSQL: no data found
+lookup failed
+search_open: pgsql "NULL"
+  cached open
+search_find: file="NULL"
+  key="select name from them where id='nothing';" partial=-1 affix=NULL starflags=0
+LRU list:
+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';
+PGSQL using cached connection for localhost:1223/test/CALLER
+lookup yielded: 
+search_open: pgsql "NULL"
+  cached open
+search_find: file="NULL"
+  key="select id,name from them where id='nothing';" partial=-1 affix=NULL starflags=0
+LRU list:
+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';
+PGSQL using cached connection for localhost:1223/test/CALLER
+lookup yielded: id=nothing name="" 
+search_open: pgsql "NULL"
+  cached open
+search_find: file="NULL"
+  key="delete from them where id='nonexist';" partial=-1 affix=NULL starflags=0
+LRU list:
+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';
+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
+search_open: pgsql "NULL"
+  cached open
+search_find: file="NULL"
+  key="select * from them where id='quote2';" partial=-1 affix=NULL starflags=0
+LRU list:
+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';
+PGSQL using cached connection for localhost:1223/test/CALLER
+lookup yielded: name="\"stquot" id=quote2 
+search_open: pgsql "NULL"
+  cached open
+search_find: file="NULL"
+  key="select * from them where id='newline';" partial=-1 affix=NULL starflags=0
+LRU list:
+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';
+PGSQL using cached connection for localhost:1223/test/CALLER
+lookup yielded: name="before\r
+after" id=newline 
+search_open: pgsql "NULL"
+  cached open
+search_find: file="NULL"
+  key="select * from them where id='tab';" partial=-1 affix=NULL starflags=0
+LRU list:
+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';
+PGSQL using cached connection for localhost:1223/test/CALLER
+lookup yielded: name="x        x" id=tab 
+search_open: pgsql "NULL"
+  cached open
+search_find: file="NULL"
+  key="select * from them where name='''stquot';" partial=-1 affix=NULL starflags=0
+LRU list:
+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';
+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"
+  key="servers=x:localhost; select name from them where id='ph10';" partial=-1 affix=NULL starflags=0
+LRU list:
+internal_search_find: file="NULL"
+  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"
+  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"
+  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"
+  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"
+  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"
+  key="SELECT name FROM them WHERE id IN ('ph10', 'aaaa');" partial=-1 affix=NULL starflags=0
+LRU list:
+internal_search_find: file="NULL"
+  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
+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
+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
+configuration file is TESTSUITE/test-config
+admin user
+changed uid/gid: privilege not needed
+  uid=EXIM_UID gid=EXIM_GID pid=pppp
+seeking password data for user "CALLER": cache not available
+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
+sender_fullhost = [10.0.0.0]
+sender_rcvhost = [10.0.0.0]
+host in hosts_connection_nolog? no (option unset)
+LOG: smtp_connection MAIN
+  SMTP connection from [10.0.0.0]
+host in host_lookup? no (option unset)
+set_process_info: pppp handling incoming connection from [10.0.0.0]
+host in host_reject_connection? no (option unset)
+host in sender_unqualified_hosts? no (option unset)
+host in recipient_unqualified_hosts? no (option unset)
+host in helo_verify_hosts? no (option unset)
+host in helo_try_verify_hosts? no (option unset)
+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"
+processing "accept"
+check domains = +local_domains
+d in "@"? no (end of list)
+d in "+local_domains"? no (end of list)
+accept: condition test failed in ACL "check_recipient"
+processing "accept"
+check hosts = +relay_hosts
+search_open: pgsql "NULL"
+search_find: file="NULL"
+  key="select * from them where id='10.0.0.0'" partial=-1 affix=NULL starflags=0
+LRU list:
+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'
+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)
+accept: condition test failed in ACL "check_recipient"
+processing "deny"
+  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<< rcpt to:<c@d>
+using ACL "check_recipient"
+processing "accept"
+check domains = +local_domains
+d in "@"? no (end of list)
+d in "+local_domains"? no (end of list)
+accept: condition test failed in ACL "check_recipient"
+processing "accept"
+check hosts = +relay_hosts
+search_open: pgsql "NULL"
+  cached open
+search_find: file="NULL"
+  key="select * from them where id='10.0.0.0'" partial=-1 affix=NULL starflags=0
+LRU list:
+internal_search_find: file="NULL"
+  type=pgsql key="select * from them where id='10.0.0.0'"
+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)
+accept: condition test failed in ACL "check_recipient"
+processing "deny"
+  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<< quit
+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 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
+configuration file is TESTSUITE/test-config
+admin user
+changed uid/gid: privilege not needed
+  uid=EXIM_UID gid=EXIM_GID pid=pppp
+seeking password data for user "CALLER": cache not available
+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
+search_tidyup called
+>>Headers received:
+
+rewrite_one_header: type=F:
+  From: CALLER_NAME <CALLER@myhost.test.ex>
+search_tidyup called
+>>Headers after rewriting and local additions:
+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
+calling local_scan(); timeout=300
+local_scan() returned 0 NULL
+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
+created log directory TESTSUITE/spool/log
+search_tidyup called
+exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xfbb95cfd -odi -Mc 10HmaX-0005vi-00
+Exim version x.yz ....
+changed uid/gid: forcing real = effective
+  uid=uuuu gid=EXIM_GID pid=pppp
+configuration file is TESTSUITE/test-config
+trusted user
+admin user
+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
+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 
+locking TESTSUITE/spool/db/retry.lockfile
+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
+no domain retry record
+no address retry record
+CALLER@myhost.test.ex: queued for routing
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+routing CALLER@myhost.test.ex
+--------> r1 router <--------
+local_part=CALLER domain=myhost.test.ex
+processing address_data
+search_open: pgsql "NULL"
+search_find: file="NULL"
+  key="select name from them where id='ph10'" partial=-1 affix=NULL starflags=0
+LRU list:
+internal_search_find: file="NULL"
+  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
+  domain = myhost.test.ex
+set transport t1
+queued for t1 transport: local_part = CALLER
+domain = myhost.test.ex
+  errors_to=NULL
+  domain_data=NULL localpart_data=NULL
+routed by r1 router
+  envelope to: CALLER@myhost.test.ex
+  transport: t1
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+After routing:
+  Local deliveries:
+    CALLER@myhost.test.ex
+  Remote deliveries:
+  Failed addresses:
+  Deferred addresses:
+search_tidyup called
+close PGSQL connection: localhost:1223/test/CALLER
+>>>>>>>>>>>>>>>> Local deliveries >>>>>>>>>>>>>>>>
+--------> CALLER@myhost.test.ex <--------
+locking TESTSUITE/spool/db/retry.lockfile
+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
+  uid=CALLER_UID gid=CALLER_GID pid=pppp
+  home=NULL current=/
+set_process_info: pppp delivering 10HmaX-0005vi-00 to CALLER using t1
+appendfile transport entered
+search_open: pgsql "NULL"
+search_find: file="NULL"
+  key="select id from them where id='ph10'" partial=-1 affix=NULL starflags=0
+LRU list:
+internal_search_find: file="NULL"
+  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
+  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/ph10.lock
+hitch name: TESTSUITE/test-mail/ph10.lock.test.ex.dddddddd.pppppppp
+lock file created
+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 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)
+CALLER@myhost.test.ex delivered
+LOG: MAIN
+  => CALLER <CALLER@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
+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
+>>>>>>>>>>>>>>>> Exim pid=pppp (main) terminating with rc=0 >>>>>>>>>>>>>>>>
+search_tidyup called
+>>>>>>>>>>>>>>>> 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"
+  key="select name from them where id='ph10';" partial=-1 affix=NULL starflags=0
+LRU list:
+internal_search_find: file="NULL"
+  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
+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/stderr/9200 b/test/stderr/9200
deleted file mode 100644 (file)
index 2fff471..0000000
+++ /dev/null
@@ -1,439 +0,0 @@
-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
-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
-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
-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';
-lookup yielded: Philip Hazel
-search_open: pgsql "NULL"
-  cached open
-search_find: file="NULL"
-  key="select name from them where id='xxxx';" partial=-1 affix=NULL starflags=0
-LRU list:
-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';
-PGSQL using cached connection for localhost/test/CALLER
-PGSQL: no data found
-lookup failed
-search_open: pgsql "NULL"
-  cached open
-search_find: file="NULL"
-  key="select name from them where id='nothing';" partial=-1 affix=NULL starflags=0
-LRU list:
-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';
-PGSQL using cached connection for localhost/test/CALLER
-lookup yielded: 
-search_open: pgsql "NULL"
-  cached open
-search_find: file="NULL"
-  key="select id,name from them where id='nothing';" partial=-1 affix=NULL starflags=0
-LRU list:
-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';
-PGSQL using cached connection for localhost/test/CALLER
-lookup yielded: id=nothing name="" 
-search_open: pgsql "NULL"
-  cached open
-search_find: file="NULL"
-  key="delete from them where id='nonexist';" partial=-1 affix=NULL starflags=0
-LRU list:
-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';
-PGSQL using cached connection for localhost/test/CALLER
-PGSQL: command does not return any data but was successful. Rows affected: 0
-lookup forced cache cleanup
-lookup yielded: 0
-search_open: pgsql "NULL"
-  cached open
-search_find: file="NULL"
-  key="select * from them where id='quote2';" partial=-1 affix=NULL starflags=0
-LRU list:
-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';
-PGSQL using cached connection for localhost/test/CALLER
-lookup yielded: name="\"stquot" id=quote2 
-search_open: pgsql "NULL"
-  cached open
-search_find: file="NULL"
-  key="select * from them where id='newline';" partial=-1 affix=NULL starflags=0
-LRU list:
-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';
-PGSQL using cached connection for localhost/test/CALLER
-lookup yielded: name="before
-after" id=newline 
-search_open: pgsql "NULL"
-  cached open
-search_find: file="NULL"
-  key="select * from them where id='tab';" partial=-1 affix=NULL starflags=0
-LRU list:
-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';
-PGSQL using cached connection for localhost/test/CALLER
-lookup yielded: name="x        x" id=tab 
-search_open: pgsql "NULL"
-  cached open
-search_find: file="NULL"
-  key="select * from them where name='''stquot';" partial=-1 affix=NULL starflags=0
-LRU list:
-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';
-PGSQL using cached connection for localhost/test/CALLER
-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
-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';
-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
-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
-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
-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
-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
-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
-lookup yielded: Philip Hazel
-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 >>>>>>>>>>>>>>>>
-Exim version x.yz ....
-changed uid/gid: forcing real = effective
-  uid=uuuu gid=CALLER_GID pid=pppp
-configuration file is TESTSUITE/test-config
-admin user
-changed uid/gid: privilege not needed
-  uid=EXIM_UID gid=EXIM_GID pid=pppp
-seeking password data for user "CALLER": cache not available
-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
-sender_fullhost = [10.0.0.0]
-sender_rcvhost = [10.0.0.0]
-host in hosts_connection_nolog? no (option unset)
-LOG: smtp_connection MAIN
-  SMTP connection from [10.0.0.0]
-host in host_lookup? no (option unset)
-set_process_info: pppp handling incoming connection from [10.0.0.0]
-host in host_reject_connection? no (option unset)
-host in sender_unqualified_hosts? no (option unset)
-host in recipient_unqualified_hosts? no (option unset)
-host in helo_verify_hosts? no (option unset)
-host in helo_try_verify_hosts? no (option unset)
-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>> 250 OK
-SMTP<< rcpt to:<c@d>
-using ACL "check_recipient"
-processing "accept"
-check domains = +local_domains
-d in "@"? no (end of list)
-d in "+local_domains"? no (end of list)
-accept: condition test failed
-processing "accept"
-check hosts = +relay_hosts
-search_open: pgsql "NULL"
-search_find: file="NULL"
-  key="select * from them where id='10.0.0.0'" partial=-1 affix=NULL starflags=0
-LRU list:
-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'
-PGSQL new connection: host=localhost port= 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)
-accept: condition test failed
-processing "deny"
-deny: condition test succeeded
-SMTP>> 550 relay not permitted
-LOG: MAIN REJECT
-  H=[10.0.0.0] F=<a@b> rejected RCPT <c@d>: relay not permitted
-SMTP<< rcpt to:<c@d>
-using ACL "check_recipient"
-processing "accept"
-check domains = +local_domains
-d in "@"? no (end of list)
-d in "+local_domains"? no (end of list)
-accept: condition test failed
-processing "accept"
-check hosts = +relay_hosts
-search_open: pgsql "NULL"
-  cached open
-search_find: file="NULL"
-  key="select * from them where id='10.0.0.0'" partial=-1 affix=NULL starflags=0
-LRU list:
-internal_search_find: file="NULL"
-  type=pgsql key="select * from them where id='10.0.0.0'"
-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)
-accept: condition test failed
-processing "deny"
-deny: condition test succeeded
-SMTP>> 550 relay not permitted
-LOG: MAIN REJECT
-  H=[10.0.0.0] F=<a@b> rejected RCPT <c@d>: relay not permitted
-SMTP<< quit
-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 PGSQL connection: localhost/test/CALLER
->>>>>>>>>>>>>>>> Exim pid=pppp terminating with rc=0 >>>>>>>>>>>>>>>>
-Exim version x.yz ....
-changed uid/gid: forcing real = effective
-  uid=uuuu gid=CALLER_GID pid=pppp
-configuration file is TESTSUITE/test-config
-admin user
-changed uid/gid: privilege not needed
-  uid=EXIM_UID gid=EXIM_GID pid=pppp
-seeking password data for user "CALLER": cache not available
-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>
-Sender: CALLER@myhost.test.ex
-Recipients:
-  CALLER
-search_tidyup called
->>Headers received:
-
-rewrite_one_header: type=F:
-  From: CALLER_NAME <CALLER@myhost.test.ex>
-search_tidyup called
->>Headers after rewriting and local additions:
-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 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
-calling local_scan(); timeout=300
-local_scan() returned 0 NULL
-Writing spool header file
-Size of headers = sss
-LOG: MAIN
-  <= CALLER@myhost.test.ex U=CALLER P=local S=sss
-created log directory TESTSUITE/spool/log
-search_tidyup called
-exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xfbb95cfd -odi -Mc 10HmaX-0005vi-00
-Exim version x.yz ....
-changed uid/gid: forcing real = effective
-  uid=uuuu gid=EXIM_GID pid=pppp
-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
-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
-Non-recipients:
-Empty Tree
----- End of tree ----
-recipients_count=1
-body_linecount=1 message_linecount=7
-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
-ensuring TESTSUITE/spool/db/retry.lockfile is owned by exim
-no retry data available
->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-Considering: CALLER@myhost.test.ex
-unique = CALLER@myhost.test.ex
-no domain retry record
-no address retry record
-CALLER@myhost.test.ex: queued for routing
->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-routing CALLER@myhost.test.ex
---------> r1 router <--------
-local_part=CALLER domain=myhost.test.ex
-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
-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
-lookup yielded: Philip Hazel
-calling r1 router
-r1 router called for CALLER@myhost.test.ex
-  domain = myhost.test.ex
-set transport t1
-queued for t1 transport: local_part = CALLER
-domain = myhost.test.ex
-  errors_to=NULL
-  domain_data=NULL localpart_data=NULL
-routed by r1 router
-  envelope to: CALLER@myhost.test.ex
-  transport: t1
->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-After routing:
-  Local deliveries:
-    CALLER@myhost.test.ex
-  Remote deliveries:
-  Failed addresses:
-  Deferred addresses:
-search_tidyup called
-close PGSQL connection: localhost/test/CALLER
->>>>>>>>>>>>>>>> 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
-no retry data available
-search_tidyup called
-changed uid/gid: local delivery to CALLER <CALLER@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
-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
-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
-appendfile: mode=600 notify_comsat=0 quota=0 warning=0
-  file=TESTSUITE/test-mail/CALLER 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 file created
-mailbox TESTSUITE/test-mail/CALLER is locked
-writing to file TESTSUITE/test-mail/CALLER
-writing data block fd=dddd size=sss timeout=0
-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
-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
-LOG: MAIN
-  => CALLER <CALLER@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
-Failed addresses:
-Deferred addresses:
-end of retry processing
-LOG: MAIN
-  Completed
-end delivery of 10HmaX-0005vi-00
-search_tidyup called
-search_tidyup called
->>>>>>>>>>>>>>>> Exim pid=pppp terminating with rc=0 >>>>>>>>>>>>>>>>
-search_tidyup called
->>>>>>>>>>>>>>>> Exim pid=pppp terminating with rc=0 >>>>>>>>>>>>>>>>
-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
-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
-lookup yielded: Philip Hazel
-search_tidyup called
-close PGSQL connection: (/tmp/.s.PGSQL.5432)/test/CALLER
->>>>>>>>>>>>>>>> Exim pid=pppp terminating with rc=0 >>>>>>>>>>>>>>>>
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
->