[exim-cvs] Lookups: avoid leaking user/passwd from server sp…

Inizio della pagina
Delete this message
Reply to this message
Autore: Exim Git Commits Mailing List
Data:  
To: exim-cvs
Oggetto: [exim-cvs] Lookups: avoid leaking user/passwd from server spec to log. Bug 3066
Gitweb: https://git.exim.org/exim.git/commitdiff/f2738aab2d72569b6d47b788099f6ebab701b2b2
Commit:     f2738aab2d72569b6d47b788099f6ebab701b2b2
Parent:     46ad960434683b3e15eb17edf3b2d748c191fbc4
Author:     Jeremy Harris <jgh146exb@???>
AuthorDate: Wed Feb 28 13:46:56 2024 +0000
Committer:  Jeremy Harris <jgh146exb@???>
CommitDate: Wed Feb 28 14:47:51 2024 +0000

    Lookups: avoid leaking user/passwd from server spec to log.  Bug 3066
---
 doc/doc-txt/ChangeLog           |   4 +-
 src/src/acl.c                   |  10 +-
 src/src/lookups/lf_sqlperform.c |  49 ++-
 src/src/receive.c               |   5 +-
 src/src/search.c                |  48 ++-
 test/confs/2610                 |  20 +-
 test/log/2610                   |   4 +-
 test/paniclog/2610              |   2 +-
 test/runtest                    |   4 +-
 test/scripts/2610-MySQL/2610    |   2 +-
 test/stderr/2610                | 756 ++++++++++++++++++++++++++--------------
 test/stderr/2620                |  51 ++-
 test/stdout/2620                |   7 +
 13 files changed, 629 insertions(+), 333 deletions(-)

diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog
index c261e13c7..20dcd1348 100644
--- a/doc/doc-txt/ChangeLog
+++ b/doc/doc-txt/ChangeLog
@@ -116,7 +116,9 @@ JH/21 Bug 3059: Fix crash in smtp transport. When running for a message for
       dealt with.  Thanks to Wolfgand Breyha for debug runs.
 
 JH/22 The ESMTP_LIMITS facility (RFC 9422) is promoted from experimental status
-      and is now controlled by the build-time option DISABLE_ESMTP_LIMITS..
+      and is now controlled by the build-time option DISABLE_ESMTP_LIMITS.
+
+JH/23 Bug 3066: Avoid leaking lookup database credentials to log.
 
 
 Exim version 4.97
diff --git a/src/src/acl.c b/src/src/acl.c
index ecba07b25..f4d65464e 100644
--- a/src/src/acl.c
+++ b/src/src/acl.c
@@ -1146,9 +1146,9 @@ Returns:         nothing
 */
 
 static void
-acl_warn(int where, uschar *user_message, uschar *log_message)
+acl_warn(int where, uschar * user_message, uschar * log_message)
 {
-if (log_message != NULL && log_message != user_message)
+if (log_message && log_message != user_message)
   {
   uschar *text;
   string_item *logged;
@@ -1159,9 +1159,9 @@ if (log_message != NULL && log_message != user_message)
   /* If a sender verification has failed, and the log message is "sender verify
   failed", add the failure message. */
 
-  if (sender_verified_failed != NULL &&
-      sender_verified_failed->message != NULL &&
-      strcmpic(log_message, US"sender verify failed") == 0)
+  if (  sender_verified_failed
+     && sender_verified_failed->message
+     && strcmpic(log_message, US"sender verify failed") == 0)
     text = string_sprintf("%s: %s", text, sender_verified_failed->message);
 
   /* Search previously logged warnings. They are kept in malloc
diff --git a/src/src/lookups/lf_sqlperform.c b/src/src/lookups/lf_sqlperform.c
index d5bb8d297..0f3984ba7 100644
--- a/src/src/lookups/lf_sqlperform.c
+++ b/src/src/lookups/lf_sqlperform.c
@@ -13,6 +13,15 @@
 
 
 
+static int
+server_len_for_logging(const uschar * server)
+{
+const uschar * s = Ustrchr(server, '/');
+if (!s) return 64;
+if (!(s = Ustrchr(s+1, '/'))) return 64;
+return (int) (s - server);
+}
+
 /*************************************************
 *    Call SQL server(s) to run an actual query   *
 *************************************************/
@@ -30,6 +39,7 @@ Arguments:
   result         where to pass back the result
   errmsg         where to pass back an error message
   do_cache       to be set zero if data is changed
+  opts         options (which suffixed the lookup name, minus cache-control ones) or NULL
   func           the lookup function to call
 
 Returns:         the return from the lookup function, or DEFER
@@ -42,21 +52,19 @@ lf_sqlperform(const uschar *name, const uschar *optionname,
   int(*fn)(const uschar *, uschar *, uschar **, uschar **, BOOL *, uint *, const uschar *))
 {
 int rc;
-uschar *server;
+uschar * server;
 BOOL defer_break = FALSE;
 
 DEBUG(D_lookup) debug_printf_indent("%s query: \"%s\" opts '%s'\n", name, query, opts);
 
-/* Handle queries that do have server information at the start. */
+/* Handle queries that do have server information at the start (old style). */
 
 if (Ustrncmp(query, "servers", 7) == 0)
   {
   int qsep = 0;
-  const uschar *s, *ss;
-  const uschar *qserverlist;
-  uschar *qserver;
+  const uschar * s, * ss, * qserverlist;
 
-  log_write(0, LOG_MAIN|LOG_CONFIG_IN, "WARNING: obslete syntax used for lookup\n");
+  log_write(0, LOG_MAIN|LOG_CONFIG_IN, "WARNING: obsolete syntax used for lookup");
 
   s = query + 7;
   skip_whitespace(&s);
@@ -83,35 +91,37 @@ if (Ustrncmp(query, "servers", 7) == 0)
     }
 
   qserverlist = string_sprintf("%.*s", (int)(ss - s), s);
+  query = ss + 1;
 
-  while ((qserver = string_nextinlist(&qserverlist, &qsep, NULL, 0)))
+  for (uschar * qsrv; qsrv = string_nextinlist(&qserverlist, &qsep, NULL, 0); )
     {
-    if (Ustrchr(qserver, '/'))
-      server = qserver;
+    if (Ustrchr(qsrv, '/'))
+      server = qsrv;            /* full server spec */
     else
-      {
-      int len = Ustrlen(qserver);
+      {                    /* only name; search in option list */
+      int len = Ustrlen(qsrv);
       const uschar * serverlist = optserverlist;
 
       for (int sep = 0; server = string_nextinlist(&serverlist, &sep, NULL, 0);)
-        if (Ustrncmp(server, qserver, len) == 0 && server[len] == '/')
+        if (Ustrncmp(server, qsrv, len) == 0 && server[len] == '/')
           break;
 
       if (!server)
         {
-        *errmsg = string_sprintf("%s server \"%s\" not found in %s", name,
-          qserver, optionname);
+        *errmsg = string_sprintf("%s server \"%.*s\" not found in %s",
+      name, server_len_for_logging(qsrv), qsrv, optionname);
         return DEFER;
         }
       }
 
     if (is_tainted(server))
       {
-      *errmsg = string_sprintf("%s server \"%s\" is tainted", name, server);
+      *errmsg = string_sprintf("%s server \"%.*s\" is tainted",
+    name, server_len_for_logging(server), server);
       return DEFER;
       }
 
-    rc = (*fn)(ss+1, server, result, errmsg, &defer_break, do_cache, opts);
+    rc = (*fn)(query, server, result, errmsg, &defer_break, do_cache, opts);
     if (rc != DEFER || defer_break) return rc;
     }
   }
@@ -139,7 +149,7 @@ else
     *errmsg = string_sprintf("no %s servers defined (%s option)", name,
       optionname);
   else
-    for (int d = 0; (server = string_nextinlist(&serverlist, &d, NULL, 0)); )
+    for (int d = 0; server = string_nextinlist(&serverlist, &d, NULL, 0); )
       {
       /* If not a full spec assume from options; scan main list for matching
       hostname */
@@ -163,7 +173,8 @@ else
 
       if (is_tainted(server))
         {
-        *errmsg = string_sprintf("%s server \"%s\" is tainted", name, server);
+        *errmsg = string_sprintf("%s server \"%.*s\" is tainted",
+      name, server_len_for_logging(server), server);
         return DEFER;
         }
 
@@ -176,3 +187,5 @@ return DEFER;
 }
 
 /* End of lf_sqlperform.c */
+/* vi: aw ai sw=2
+*/
diff --git a/src/src/receive.c b/src/src/receive.c
index abac05c56..a56ff473e 100644
--- a/src/src/receive.c
+++ b/src/src/receive.c
@@ -290,12 +290,11 @@ Returns:       FALSE if there isn't enough space, or if the information cannot
 BOOL
 receive_check_fs(int msg_size)
 {
-int_eximarith_t space;
 int inodes;
 
 if (check_spool_space > 0 || msg_size > 0 || check_spool_inodes > 0)
   {
-  space = receive_statvfs(TRUE, &inodes);
+  int_eximarith_t space = receive_statvfs(TRUE, &inodes);
 
   DEBUG(D_receive)
     debug_printf("spool directory space = " PR_EXIM_ARITH "K inodes = %d "
@@ -313,7 +312,7 @@ if (check_spool_space > 0 || msg_size > 0 || check_spool_inodes > 0)
 
 if (check_log_space > 0 || check_log_inodes > 0)
   {
-  space = receive_statvfs(FALSE, &inodes);
+  int_eximarith_t space = receive_statvfs(FALSE, &inodes);
 
   DEBUG(D_receive)
     debug_printf("log directory space = " PR_EXIM_ARITH "K inodes = %d "
diff --git a/src/src/search.c b/src/src/search.c
index 52dcab2b7..62416da76 100644
--- a/src/src/search.c
+++ b/src/src/search.c
@@ -590,35 +590,48 @@ else
   is either untainted or properly quoted for the lookup type.
 
   XXX Should we this move into lf_sqlperform() ?  The server-taint check is there.
+  Also it already knows about looking for a "servers" spec in the query string.
+  Passing search_type down that far is an issue.
   */
 
   if (  !filename && lookup_list[search_type]->quote
      && is_tainted(keystring) && !is_quoted_like(keystring, search_type))
     {
-    uschar * s = acl_current_verb();
-    if (!s) s = authenticator_current_name();    /* must be before transport */
-    if (!s) s = transport_current_name();    /* must be before router */
-    if (!s) s = router_current_name();    /* GCC ?: would be good, but not in clang */
-    if (!s) s = US"";
+    const uschar * ks = keystring;
+    uschar * loc = acl_current_verb();
+    if (!loc) loc = authenticator_current_name();    /* must be before transport */
+    if (!loc) loc = transport_current_name();        /* must be before router */
+    if (!loc) loc = router_current_name();        /* GCC ?: would be good, but not in clang */
+    if (!loc) loc = US"";
+
+    if (Ustrncmp(ks, "servers", 7) == 0)    /* Avoid logging server/password */
+      if ((ks = Ustrchr(keystring, ';')))
+    while (isspace(*++ks))
+      ;
+      else
+    ks = US"";
+
 #ifdef enforce_quote_protection_notyet
     search_error_message = string_sprintf(
       "tainted search query is not properly quoted%s: %s%s",
-      s, keystring);
+      loc, ks);
     f.search_find_defer = TRUE;
+    goto out;
 #else
-     {
-      int q = quoter_for_address(keystring);
-      /* If we're called from a transport, no privs to open the paniclog;
-      the logging punts to using stderr - and that seems to stop the debug
-      stream. */
-      log_write(0,
-    transport_name ? LOG_MAIN : LOG_MAIN|LOG_PANIC,
-    "tainted search query is not properly quoted%s: %s", s, keystring);
-
-      DEBUG(D_lookup) debug_printf_indent("search_type %d (%s) quoting %d (%s)\n",
+    /* If we're called from a transport, no privs to open the paniclog;
+    the logging punts to using stderr - and that seems to stop the debug
+    stream. */
+    log_write(0,
+      transport_name ? LOG_MAIN : LOG_MAIN|LOG_PANIC,
+      "tainted search query is not properly quoted%s: %s", loc, ks);
+
+    DEBUG(D_lookup)
+      {
+      int q = quoter_for_address(ks);
+      debug_printf_indent("search_type %d (%s) quoting %d (%s)\n",
     search_type, lookup_list[search_type]->name,
     q, is_real_quoter(q) ? lookup_list[q]->name : US"none");
-     }
+      }
 #endif
     }
 
@@ -669,6 +682,7 @@ pointer to NULL here, because we cannot release the store at this stage. */
     }
   }
 
+out:
 DEBUG(D_lookup)
   {
   if (data)
diff --git a/test/confs/2610 b/test/confs/2610
index 3f75d44a2..94be1b91f 100644
--- a/test/confs/2610
+++ b/test/confs/2610
@@ -14,7 +14,7 @@ acl_not_smtp = check_notsmtp
 
 PARTIAL = 127.0.0.1::PORT_N
 SSPEC = PARTIAL/test/root/pass
-mysql_servers = SSPEC
+hide mysql_servers = SSPEC
 
 
 # ----- ACL -----
@@ -25,27 +25,29 @@ check_recipient:
       # Tainted-data checks
   warn
       # taint only in lookup string, properly quoted
-      set acl_m0 =    ok:   ${lookup mysql                    {select name from them where id = '${quote_mysql:$local_part}'}}
+      set acl_m0 =    ok:    ${lookup mysql                    {select name from them where id = '${quote_mysql:$local_part}'}}
       # taint only in lookup string, but not quoted
-      set acl_m0 =    FAIL: ${lookup mysql,no_rd              {select name from them where id = '$local_part'}}
+      set acl_m0 =    FAIL1: ${lookup mysql,no_rd              {select name from them where id = '$local_part'}}
   warn
       # option on lookup type unaffected
-      set acl_m0 =    ok:   ${lookup mysql,servers=SSPEC      {select name from them where id = '${quote_mysql:$local_part}'}}
+      set acl_m0 =    ok:    ${lookup mysql,servers=SSPEC      {select name from them where id = '${quote_mysql:$local_part}'}}
       # partial server-spec, indexing main-option, works
-      set acl_m0 =    ok:   ${lookup mysql,servers=PARTIAL    {select name from them where id = '${quote_mysql:$local_part}'}}
+      set acl_m0 =    ok:    ${lookup mysql,servers=PARTIAL    {select name from them where id = '${quote_mysql:$local_part}'}}
       # oldstyle server spec, prepended to lookup string, fails with taint
-      set acl_m0 =    FAIL: ${lookup mysql     {servers=SSPEC; select name from them where id = '${quote_mysql:$local_part}'}}
+      set acl_m0 =    FAIL2: ${lookup mysql     {servers=SSPEC; select name from them where id = '${quote_mysql:$local_part}'}}
+      # oldstyle partial server spec, prepended to lookup string, indexing main-option, but not quoted
+  warn      set acl_m0 =    FAIL3: ${lookup mysql     {servers=PARTIAL; select name from them where id = '$local_part'}}
 
       # In list-style lookup, tainted lookup string is ok if server spec comes from main-option
-  warn      set acl_m0 =    ok:   hostlist
+  warn      set acl_m0 =    ok:    hostlist
       hosts =    net-mysql;select * from them where id='${quote_mysql:$local_part}'
       # ... but setting a per-query servers spec fails due to the taint
-  warn      set acl_m0 =    FAIL: hostlist
+  warn      set acl_m0 =    FAIL4: hostlist
       hosts =    <& net-mysql;servers=SSPEC; select * from them where id='${quote_mysql:$local_part}'
 
       # The newer server-list-as-option-to-lookup-type is not a solution to tainted data in the lookup, because
       # string-expansion is done before list-expansion so the taint contaminates the entire list.
-  warn      set acl_m0 =    FAIL: hostlist
+  warn      set acl_m0 =    FAIL5: hostlist
       hosts =    <& net-mysql,servers=SSPEC; select * from them where id='${quote_mysql:$local_part}'
 
   accept  domains = +local_domains
diff --git a/test/log/2610 b/test/log/2610
index cd0e6e9dd..4acbbd873 100644
--- a/test/log/2610
+++ b/test/log/2610
@@ -1,5 +1,5 @@
 1999-03-02 09:44:33 10HmaX-000000005vi-0000 <= CALLER@??? U=CALLER P=local S=sss
-1999-03-02 09:44:33 10HmaX-000000005vi-0000 tainted search query is not properly quoted (router r1, TESTSUITE/test-config 66): select name from them where id='ph10' limit 1
-1999-03-02 09:44:33 10HmaX-000000005vi-0000 tainted search query is not properly quoted (transport t1, TESTSUITE/test-config 80): select id from them where id='ph10'
+1999-03-02 09:44:33 10HmaX-000000005vi-0000 tainted search query is not properly quoted (router r1, TESTSUITE/test-config 68): select name from them where id='ph10' limit 1
+1999-03-02 09:44:33 10HmaX-000000005vi-0000 tainted search query is not properly quoted (transport t1, TESTSUITE/test-config 82): select id from them where id='ph10'
 1999-03-02 09:44:33 10HmaX-000000005vi-0000 => ph10 <ph10@???> R=r1 T=t1
 1999-03-02 09:44:33 10HmaX-000000005vi-0000 Completed
diff --git a/test/paniclog/2610 b/test/paniclog/2610
index 3573be261..917a0a801 100644
--- a/test/paniclog/2610
+++ b/test/paniclog/2610
@@ -1 +1 @@
-1999-03-02 09:44:33 10HmaX-000000005vi-0000 tainted search query is not properly quoted (router r1, TESTSUITE/test-config 66): select name from them where id='ph10' limit 1
+1999-03-02 09:44:33 10HmaX-000000005vi-0000 tainted search query is not properly quoted (router r1, TESTSUITE/test-config 68): select name from them where id='ph10' limit 1
diff --git a/test/runtest b/test/runtest
index cdf7bd339..07c499fa4 100755
--- a/test/runtest
+++ b/test/runtest
@@ -1260,7 +1260,7 @@ RESET_AFTER_EXTRA_LINE_READ:
     # drop pdkim debugging header
     next if /^DKIM( <<<<<<<<<<<<<<<<<<<<<<<<<<<<<+|: no signatures)$/;
 
-    # Some platforms have TIOCOUTome do not
+    # Some platforms have TIOCOUT, some do not
     next if /\d+ bytes remain in socket output buffer$/;
     # Various other IPv6 lines must be omitted too
 
@@ -1434,7 +1434,7 @@ RESET_AFTER_EXTRA_LINE_READ:
     s/^cmd buf flush \d+ bytes/cmd buf flush ddd bytes/;
 
     # Spool filesystem free space changes on different systems.
-    s/^((?:spool|log) directory space =) -?\d+K (inodes =)\s*-?\d+/$1 nnnnnK $2 nnnnn/;
+    s/((?:spool|log) directory space =) -?\d+K (inodes =)\s*-?\d+/$1 nnnnnK $2 nnnnn/;
 
     # Non-TLS builds have different expansions for received_header_text
     if (s/(with \$received_protocol)\}\} \$\{if def:tls_cipher \{\(\$tls_cipher\)\n$/$1/)
diff --git a/test/scripts/2610-MySQL/2610 b/test/scripts/2610-MySQL/2610
index 91a3f6be3..597504a59 100644
--- a/test/scripts/2610-MySQL/2610
+++ b/test/scripts/2610-MySQL/2610
@@ -81,7 +81,7 @@ ${lookup mysql {SELECT name FROM them WHERE id IN ('ph10', 'aaaa');}}
 ${lookup mysql {SELECT *    FROM them WHERE id IN ('ph10', 'aaaa');}}
 ${lookup mysql {delete from them where id='aaaa'}}
 ****
-exim -d -bh 10.0.0.0
+exim -d+all -bh 10.0.0.0
 helo test
 mail from:<a@b>
 rcpt to:<c@d>
diff --git a/test/stderr/2610 b/test/stderr/2610
index 667d8bba9..dd45d50c3 100644
--- a/test/stderr/2610
+++ b/test/stderr/2610
@@ -136,9 +136,8 @@ dropping to exim gid; retaining priv uid
  database lookup required for servers=x:127.0.0.1::PORT_N; select name from them where id='ph10';
  MySQL query: "servers=x:127.0.0.1::PORT_N; select name from them where id='ph10';" opts 'NULL'
 LOG: MAIN
-  Exim configuration error in line 87 of TESTSUITE/test-config:
-  WARNING: obslete syntax used for lookup
-
+  Exim configuration error in line 89 of TESTSUITE/test-config:
+  WARNING: obsolete syntax used for lookup
  lookup deferred: MySQL server "x" not found in mysql_servers
  search_open: mysql "NULL"
    cached open
@@ -150,9 +149,8 @@ LOG: MAIN
  database lookup required for servers=127.0.0.1::PORT_N:x; select name from them where id='ph10';
  MySQL query: "servers=127.0.0.1::PORT_N:x; select name from them where id='ph10';" opts 'NULL'
 LOG: MAIN
-  Exim configuration error in line 87 of TESTSUITE/test-config:
-  WARNING: obslete syntax used for lookup
-
+  Exim configuration error in line 89 of TESTSUITE/test-config:
+  WARNING: obsolete syntax used for lookup
  MYSQL using cached connection for 127.0.0.1:PORT_N/test/root
  creating new cache entry
  lookup yielded: Philip Hazel
@@ -166,9 +164,8 @@ LOG: MAIN
  database lookup required for servers=127.0.0.1::PORT_N/test/root/:x; select name from them where id='ph10';
  MySQL query: "servers=127.0.0.1::PORT_N/test/root/:x; select name from them where id='ph10';" opts 'NULL'
 LOG: MAIN
-  Exim configuration error in line 87 of TESTSUITE/test-config:
-  WARNING: obslete syntax used for lookup
-
+  Exim configuration error in line 89 of TESTSUITE/test-config:
+  WARNING: obsolete syntax used for lookup
  MYSQL using cached connection for 127.0.0.1:PORT_N/test/root
  creating new cache entry
  lookup yielded: Philip Hazel
@@ -182,9 +179,8 @@ LOG: MAIN
  database lookup required for servers=ip4.ip4.ip4.ip4::1223/test/root/:127.0.0.1::PORT_N; select name from them where id='ph10';
  MySQL query: "servers=ip4.ip4.ip4.ip4::1223/test/root/:127.0.0.1::PORT_N; select name from them where id='ph10';" opts 'NULL'
 LOG: MAIN
-  Exim configuration error in line 87 of TESTSUITE/test-config:
-  WARNING: obslete syntax used for lookup
-
+  Exim configuration error in line 89 of TESTSUITE/test-config:
+  WARNING: obsolete syntax used for lookup
  MYSQL new connection: host=ip4.ip4.ip4.ip4 port=PORT_N socket=NULL database=test user=root
  creating new cache entry
  lookup yielded: Philip Hazel
@@ -198,9 +194,8 @@ LOG: MAIN
  database lookup required for servers=localhost(TESTSUITE/mysql/sock)/test/root/pass; select name from them where id='ph10';
  MySQL query: "servers=localhost(TESTSUITE/mysql/sock)/test/root/pass; select name from them where id='ph10';" opts 'NULL'
 LOG: MAIN
-  Exim configuration error in line 87 of TESTSUITE/test-config:
-  WARNING: obslete syntax used for lookup
-
+  Exim configuration error in line 89 of TESTSUITE/test-config:
+  WARNING: obsolete syntax used for lookup
  MYSQL new connection: host=localhost port=0 socket=TESTSUITE/mysql/sock database=test user=root
  creating new cache entry
  lookup yielded: Philip Hazel
@@ -248,248 +243,489 @@ close MYSQL connection: localhost(TESTSUITE/mysql/sock)/test/root
 close MYSQL connection: ip4.ip4.ip4.ip4:1223/test/root
 close MYSQL connection: 127.0.0.1:PORT_N/test/root

>>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>

-Exim version x.yz ....
-changed uid/gid: forcing real = effective
-  uid=uuuu gid=CALLER_GID pid=p1235
-configuration file is TESTSUITE/test-config
-admin user
-changed uid/gid: privilege not needed
-  uid=EXIM_UID gid=EXIM_GID pid=p1235
-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@???
-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<< helo test
-test in helo_lookup_domains?
- list element: @
- list element: @[]
-test in helo_lookup_domains? no (end of list)
-sender_fullhost = (test) [10.0.0.0]
-sender_rcvhost = [10.0.0.0] (helo=test)
-set_process_info: pppp handling incoming connection from (test) [10.0.0.0]
-SMTP>> 250 myhost.test.ex Hello test [10.0.0.0]
-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 "warn" (TESTSUITE/test-config 26)
- search_open: mysql "NULL"
- search_find: file="NULL"
-   key="select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts=NULL
- LRU list:
- internal_search_find: file="NULL"
-   type=mysql key="select name from them where id = 'c'" opts=NULL
- database lookup required for select name from them where id = 'c'
-                              (tainted, quoted:mysql)
- MySQL query: "select name from them where id = 'c'" opts 'NULL'
- MYSQL new connection: host=127.0.0.1 port=PORT_N socket=NULL database=test user=root
- MYSQL: no data found
- creating new cache entry
- lookup failed
-check set acl_m0 = ok:   ${lookup mysql                    {select name from them where id = '${quote_mysql:$local_part}'}}
-                 = ok:   
- search_open: mysql "NULL"
-   cached open
- search_find: file="NULL"
-   key="select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts="no_rd"
- LRU list:
- internal_search_find: file="NULL"
-   type=mysql key="select name from them where id = 'c'" opts="no_rd"
- cached data found but wrong opts;  database lookup required for select name from them where id = 'c'
-                              (tainted)
-LOG: MAIN PANIC
-  tainted search query is not properly quoted (ACL warn, TESTSUITE/test-config 26): select name from them where id = 'c'
- search_type NN (mysql) quoting -1 (none)
- MySQL query: "select name from them where id = 'c'" opts 'no_rd'
- MYSQL using cached connection for 127.0.0.1:PORT_N/test/root
- MYSQL: no data found
- replacing old cache entry
- lookup failed
-check set acl_m0 = FAIL: ${lookup mysql,no_rd              {select name from them where id = '$local_part'}}
-                 = FAIL: 
-warn: condition test succeeded in ACL "check_recipient"
-processing "warn" (TESTSUITE/test-config 31)
- search_open: mysql "NULL"
-   cached open
- search_find: file="NULL"
-   key="select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts="servers=127.0.0.1::PORT_N/test/root/pass"
- LRU list:
- internal_search_find: file="NULL"
-   type=mysql key="select name from them where id = 'c'" opts="servers=127.0.0.1::PORT_N/test/root/pass"
- cached data found but wrong opts;  database lookup required for select name from them where id = 'c'
-                              (tainted, quoted:mysql)
- MySQL query: "select name from them where id = 'c'" opts 'servers=127.0.0.1::PORT_N/test/root/pass'
- MYSQL using cached connection for 127.0.0.1:PORT_N/test/root
- MYSQL: no data found
- replacing old cache entry
- lookup failed
-check set acl_m0 = ok:   ${lookup mysql,servers=127.0.0.1::PORT_N/test/root/pass      {select name from them where id = '${quote_mysql:$local_part}'}}
-                 = ok:   
- search_open: mysql "NULL"
-   cached open
- search_find: file="NULL"
-   key="select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts="servers=127.0.0.1::PORT_N"
- LRU list:
- internal_search_find: file="NULL"
-   type=mysql key="select name from them where id = 'c'" opts="servers=127.0.0.1::PORT_N"
- cached data found but wrong opts;  database lookup required for select name from them where id = 'c'
-                              (tainted, quoted:mysql)
- MySQL query: "select name from them where id = 'c'" opts 'servers=127.0.0.1::PORT_N'
- MYSQL using cached connection for 127.0.0.1:PORT_N/test/root
- MYSQL: no data found
- replacing old cache entry
- lookup failed
-check set acl_m0 = ok:   ${lookup mysql,servers=127.0.0.1::PORT_N    {select name from them where id = '${quote_mysql:$local_part}'}}
-                 = ok:   
- search_open: mysql "NULL"
-   cached open
- search_find: file="NULL"
-   key="servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts=NULL
- LRU list:
- internal_search_find: file="NULL"
-   type=mysql key="servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = 'c'" opts=NULL
- database lookup required for servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = 'c'
-                              (tainted, quoted:mysql)
- MySQL query: "servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = 'c'" opts 'NULL'
-LOG: MAIN
-  Exim configuration error in line 87 of TESTSUITE/test-config:
-  WARNING: obslete syntax used for lookup
-
- lookup deferred: MySQL server "127.0.0.1:PORT_N/test/root/pass" is tainted
-warn: condition test deferred in ACL "check_recipient"
-LOG: MAIN
-  H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: MySQL server "127.0.0.1:PORT_N/test/root/pass" is tainted
-processing "warn" (TESTSUITE/test-config 40)
-check set acl_m0 = ok:   hostlist
-check hosts = net-mysql;select * from them where id='${quote_mysql:$local_part}'
-host in "net-mysql;select * from them where id='c'"?
- list element: net-mysql;select * from them where id='c'
- search_open: mysql "NULL"
-   cached open
- search_find: file="NULL"
-   key="select * from them where id='c'" partial=-1 affix=NULL starflags=0 opts=NULL
- LRU list:
- internal_search_find: file="NULL"
-   type=mysql key="select * from them where id='c'" opts=NULL
- database lookup required for select * from them where id='c'
-                              (tainted, quoted:mysql)
- MySQL query: "select * from them where id='c'" opts 'NULL'
- MYSQL using cached connection for 127.0.0.1:PORT_N/test/root
- MYSQL: no data found
- creating new cache entry
- lookup failed
-host in "net-mysql;select * from them where id='c'"? no (end of list)
-warn: condition test failed in ACL "check_recipient"
-processing "warn" (TESTSUITE/test-config 43)
-check set acl_m0 = FAIL: hostlist
-check hosts = <& net-mysql;servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='${quote_mysql:$local_part}'
-host in "<& net-mysql;servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'"?
- list element: net-mysql;servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'
- search_open: mysql "NULL"
-   cached open
- search_find: file="NULL"
-   key="servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'" partial=-1 affix=NULL starflags=0 opts=NULL
- LRU list:
- internal_search_find: file="NULL"
-   type=mysql key="servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'" opts=NULL
- database lookup required for servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'
-                              (tainted, quoted:mysql)
- MySQL query: "servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'" opts 'NULL'
-LOG: MAIN
-  Exim configuration error in line 87 of TESTSUITE/test-config:
-  WARNING: obslete syntax used for lookup
-
- lookup deferred: MySQL server "127.0.0.1:PORT_N/test/root/pass" is tainted
-host in "<& net-mysql;servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'"? list match deferred for net-mysql;servers=127.0.0.1::1223/test/root/pass; select * from them where id='c'
-warn: condition test deferred in ACL "check_recipient"
-LOG: MAIN
-  H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: MySQL server "127.0.0.1:PORT_N/test/root/pass" is tainted
-processing "warn" (TESTSUITE/test-config 48)
-check set acl_m0 = FAIL: hostlist
-check hosts = <& net-mysql,servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='${quote_mysql:$local_part}'
-host in "<& net-mysql,servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'"?
- list element: net-mysql,servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'
- search_open: mysql "NULL"
-   cached open
- search_find: file="NULL"
-   key=" select * from them where id='c'" partial=-1 affix=NULL starflags=0 opts="servers=127.0.0.1::PORT_N/test/root/pass"
- LRU list:
- internal_search_find: file="NULL"
-   type=mysql key=" select * from them where id='c'" opts="servers=127.0.0.1::PORT_N/test/root/pass"
- database lookup required for  select * from them where id='c'
-                              (tainted, quoted:mysql)
- MySQL query: " select * from them where id='c'" opts 'servers=127.0.0.1::PORT_N/test/root/pass'
- lookup deferred: MySQL server "127.0.0.1:PORT_N/test/root/pass" is tainted
-host in "<& net-mysql,servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'"? list match deferred for net-mysql,servers=127.0.0.1::1223/test/root/pass; select * from them where id='c'
-warn: condition test deferred in ACL "check_recipient"
-LOG: MAIN
-  H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: MySQL server "127.0.0.1:PORT_N/test/root/pass" is tainted
-processing "accept" (TESTSUITE/test-config 51)
-check domains = +local_domains
-d in "+local_domains"?
- list element: +local_domains
-  start sublist local_domains
-   d in "@"?
-   ╎list element: @
-   d in "@"? no (end of list)
-  end sublist local_domains
-d in "+local_domains"? no (end of list)
-accept: condition test failed in ACL "check_recipient"
-processing "accept" (TESTSUITE/test-config 54)
-check hosts = +relay_hosts
-host in "+relay_hosts"?
- list element: +relay_hosts
-  start sublist relay_hosts
-  host in "net-mysql;select * from them where id='10.0.0.0'"?
-   ╎list element: net-mysql;select * from them where id='10.0.0.0'
-   ╎search_open: mysql "NULL"
-   ╎  cached open
-   ╎search_find: file="NULL"
-   ╎  key="select * from them where id='10.0.0.0'" partial=-1 affix=NULL starflags=0 opts=NULL
-   ╎LRU list:
-   ╎internal_search_find: file="NULL"
-   ╎  type=mysql key="select * from them where id='10.0.0.0'" opts=NULL
-   ╎database lookup required for select * from them where id='10.0.0.0'
-   ╎MySQL query: "select * from them where id='10.0.0.0'" opts 'NULL'
-   ╎MYSQL using cached connection for 127.0.0.1:PORT_N/test/root
-   ╎MYSQL: no data found
-   ╎creating new cache entry
-   ╎lookup failed
-  host in "net-mysql;select * from them where id='10.0.0.0'"? no (end of list)
-  end sublist relay_hosts
-host in "+relay_hosts"? no (end of list)
-accept: condition test failed in ACL "check_recipient"
-processing "deny" (TESTSUITE/test-config 55)
-  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=(test) [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 (test) [10.0.0.0] D=qqs closed by QUIT
-search_tidyup called
-close MYSQL connection: 127.0.0.1:PORT_N/test/root
->>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
+01:01:01 p1235  Exim version x.yz uid=CALLER_UID gid=CALLER_GID pid=p1235 D=fff9ffff
+01:01:01 p1235  macros_trusted overridden to true by whitelisting
+01:01:01 p1235  changed uid/gid: forcing real = effective
+01:01:01 p1235    uid=uuuu gid=CALLER_GID pid=p1235
+01:01:01 p1235  environment after trimming:
+01:01:01 p1235   PATH=<munged>
+01:01:01 p1235  adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys
+01:01:01 p1235  configuration file is TESTSUITE/test-config
+01:01:01 p1235  admin user
+01:01:01 p1235  changed uid/gid: privilege not needed
+01:01:01 p1235    uid=EXIM_UID gid=EXIM_GID pid=p1235
+01:01:01 p1235  seeking password data for user "CALLER": cache not available
+01:01:01 p1235  getpwnam() succeeded uid=CALLER_UID gid=CALLER_GID
+01:01:01 p1235  try option gecos_pattern
+01:01:01 p1235  try option gecos_name
+01:01:01 p1235  try option unknown_login
+01:01:01 p1235  originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME
+01:01:01 p1235  sender address = CALLER@???
+01:01:01 p1235  try option smtp_active_hostname
+01:01:01 p1235  sender_fullhost = [10.0.0.0]
+01:01:01 p1235  sender_rcvhost = [10.0.0.0]
+01:01:01 p1235  host in hosts_connection_nolog? no (option unset)
+01:01:01 p1235  LOG: smtp_connection MAIN
+01:01:01 p1235    SMTP connection from [10.0.0.0]
+01:01:01 p1235  try option message_size_limit
+01:01:01 p1235  host in host_lookup? no (option unset)
+01:01:01 p1235  set_process_info: pppp handling incoming connection from [10.0.0.0]
+01:01:01 p1235  host in host_reject_connection? no (option unset)
+01:01:01 p1235  host in sender_unqualified_hosts? no (option unset)
+01:01:01 p1235  host in recipient_unqualified_hosts? no (option unset)
+01:01:01 p1235  host in helo_verify_hosts? no (option unset)
+01:01:01 p1235  host in helo_try_verify_hosts? no (option unset)
+01:01:01 p1235  host in helo_accept_junk_hosts? no (option unset)
+01:01:01 p1235  try option acl_smtp_connect
+01:01:01 p1235  try option smtp_banner
+01:01:01 p1235   ╭considering: $smtp_active_hostname ESMTP Exim $version_number $tod_full
+01:01:01 p1235   ├──────value: myhost.test.ex
+01:01:01 p1235   ├considering:  ESMTP Exim $version_number $tod_full
+01:01:01 p1235   ├───────text:  ESMTP Exim 
+01:01:01 p1235   ├considering: $version_number $tod_full
+01:01:01 p1235   ├──────value: x.yz
+01:01:01 p1235   ├considering:  $tod_full
+01:01:01 p1235   ├───────text:  
+01:01:01 p1235   ├considering: $tod_full
+01:01:01 p1235   ├──────value: Tue, 2 Mar 1999 09:44:33 +0000
+01:01:01 p1235   ├──expanding: $smtp_active_hostname ESMTP Exim $version_number $tod_full
+01:01:01 p1235   ╰─────result: myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+01:01:01 p1235  host in pipelining_connect_advertise_hosts?
+01:01:01 p1235   list element: 
+01:01:01 p1235  SMTP>> 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+01:01:01 p1235  smtp_setup_msg entered
+01:01:01 p1235  SMTP<< helo test
+01:01:01 p1235  test in helo_lookup_domains?
+01:01:01 p1235   list element: @
+01:01:01 p1235   list element: @[]
+01:01:01 p1235  test in helo_lookup_domains? no (end of list)
+01:01:01 p1235  sender_fullhost = (test) [10.0.0.0]
+01:01:01 p1235  sender_rcvhost = [10.0.0.0] (helo=test)
+01:01:01 p1235  set_process_info: pppp handling incoming connection from (test) [10.0.0.0]
+01:01:01 p1235  spf_conn_init: test 10.0.0.0
+01:01:01 p1235  SPF_dns_exim_new
+01:01:01 p1235  try option acl_smtp_helo
+01:01:01 p1235  SMTP>> 250 myhost.test.ex Hello test [10.0.0.0]
+01:01:01 p1235  SMTP<< mail from:<a@b>
+01:01:01 p1235  spool directory space = nnnnnK inodes = nnnnn check_space = 10240K inodes = 100 msg_size = 0
+01:01:01 p1235  log directory space = nnnnnK inodes = nnnnn check_space = 10240K inodes = 100
+01:01:01 p1235  try option acl_smtp_mail
+01:01:01 p1235  SMTP>> 250 OK
+01:01:01 p1235  SMTP<< rcpt to:<c@d>
+01:01:01 p1235  try option acl_smtp_rcpt
+01:01:01 p1235  using ACL "check_recipient"
+01:01:01 p1235  processing "warn" (TESTSUITE/test-config 26)
+01:01:01 p1235   ╭considering: ok:    ${lookup mysql                    {select name from them where id = '${quote_mysql:$local_part}'}}
+01:01:01 p1235   ├───────text: ok:    
+01:01:01 p1235   ├considering: ${lookup mysql                    {select name from them where id = '${quote_mysql:$local_part}'}}
+01:01:01 p1235    ╭considering: select name from them where id = '${quote_mysql:$local_part}'}}
+01:01:01 p1235    ├───────text: select name from them where id = '
+01:01:01 p1235    ├considering: ${quote_mysql:$local_part}'}}
+01:01:01 p1235     ╭considering: $local_part}'}}
+01:01:01 p1235     ├──────value: c
+01:01:01 p1235                ╰──(tainted)
+01:01:01 p1235     ├considering: }'}}
+01:01:01 p1235     ├──expanding: $local_part
+01:01:01 p1235     ╰─────result: c
+01:01:01 p1235                ╰──(tainted)
+01:01:01 p1235    ├─────op-res: c
+01:01:01 p1235               ╰──(tainted, quoted:mysql)
+01:01:01 p1235    ├considering: '}}
+01:01:01 p1235    ├───────text: '
+01:01:01 p1235    ├considering: }}
+01:01:01 p1235    ├──expanding: select name from them where id = '${quote_mysql:$local_part}'
+01:01:01 p1235    ╰─────result: select name from them where id = 'c'
+01:01:01 p1235               ╰──(tainted, quoted:mysql)
+01:01:01 p1235   search_open: mysql "NULL"
+01:01:01 p1235   search_find: file="NULL"
+01:01:01 p1235     key="select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts=NULL
+01:01:01 p1235   LRU list:
+01:01:01 p1235   internal_search_find: file="NULL"
+01:01:01 p1235     type=mysql key="select name from them where id = 'c'" opts=NULL
+01:01:01 p1235   database lookup required for select name from them where id = 'c'
+01:01:01 p1235                                (tainted, quoted:mysql)
+01:01:01 p1235   MySQL query: "select name from them where id = 'c'" opts 'NULL'
+01:01:01 p1235   MYSQL new connection: host=127.0.0.1 port=PORT_N socket=NULL database=test user=root
+01:01:01 p1235   MYSQL: no data found
+01:01:01 p1235   creating new cache entry
+01:01:01 p1235   lookup failed
+01:01:01 p1235   ├───item-res: 
+01:01:01 p1235   ├──expanding: ok:    ${lookup mysql                    {select name from them where id = '${quote_mysql:$local_part}'}}
+01:01:01 p1235   ╰─────result: ok:    
+01:01:01 p1235  check set acl_m0 = ok:    ${lookup mysql                    {select name from them where id = '${quote_mysql:$local_part}'}}
+01:01:01 p1235                   = ok:    
+01:01:01 p1235   ╭considering: FAIL1: ${lookup mysql,no_rd              {select name from them where id = '$local_part'}}
+01:01:01 p1235   ├───────text: FAIL1: 
+01:01:01 p1235   ├considering: ${lookup mysql,no_rd              {select name from them where id = '$local_part'}}
+01:01:01 p1235    ╭considering: select name from them where id = '$local_part'}}
+01:01:01 p1235    ├───────text: select name from them where id = '
+01:01:01 p1235    ├considering: $local_part'}}
+01:01:01 p1235    ├──────value: c
+01:01:01 p1235               ╰──(tainted)
+01:01:01 p1235    ├considering: '}}
+01:01:01 p1235    ├───────text: '
+01:01:01 p1235    ├considering: }}
+01:01:01 p1235    ├──expanding: select name from them where id = '$local_part'
+01:01:01 p1235    ╰─────result: select name from them where id = 'c'
+01:01:01 p1235               ╰──(tainted)
+01:01:01 p1235   search_open: mysql "NULL"
+01:01:01 p1235     cached open
+01:01:01 p1235   search_find: file="NULL"
+01:01:01 p1235     key="select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts="no_rd"
+01:01:01 p1235   LRU list:
+01:01:01 p1235   internal_search_find: file="NULL"
+01:01:01 p1235     type=mysql key="select name from them where id = 'c'" opts="no_rd"
+01:01:01 p1235   cached data found but wrong opts;  database lookup required for select name from them where id = 'c'
+01:01:01 p1235                                (tainted)
+01:01:01 p1235  LOG: MAIN PANIC
+01:01:01 p1235    tainted search query is not properly quoted (ACL warn, TESTSUITE/test-config 26): select name from them where id = 'c'
+01:01:01 p1235   search_type 13 (mysql) quoting -1 (none)
+01:01:01 p1235   MySQL query: "select name from them where id = 'c'" opts 'no_rd'
+01:01:01 p1235   MYSQL using cached connection for 127.0.0.1:PORT_N/test/root
+01:01:01 p1235   MYSQL: no data found
+01:01:01 p1235   replacing old cache entry
+01:01:01 p1235   lookup failed
+01:01:01 p1235   ├───item-res: 
+01:01:01 p1235   ├──expanding: FAIL1: ${lookup mysql,no_rd              {select name from them where id = '$local_part'}}
+01:01:01 p1235   ╰─────result: FAIL1: 
+01:01:01 p1235  check set acl_m0 = FAIL1: ${lookup mysql,no_rd              {select name from them where id = '$local_part'}}
+01:01:01 p1235                   = FAIL1: 
+01:01:01 p1235  warn: condition test succeeded in ACL "check_recipient"
+01:01:01 p1235  processing "warn" (TESTSUITE/test-config 31)
+01:01:01 p1235   ╭considering: ok:    ${lookup mysql,servers=127.0.0.1::PORT_N/test/root/pass      {select name from them where id = '${quote_mysql:$local_part}'}}
+01:01:01 p1235   ├───────text: ok:    
+01:01:01 p1235   ├considering: ${lookup mysql,servers=127.0.0.1::PORT_N/test/root/pass      {select name from them where id = '${quote_mysql:$local_part}'}}
+01:01:01 p1235    ╭considering: select name from them where id = '${quote_mysql:$local_part}'}}
+01:01:01 p1235    ├───────text: select name from them where id = '
+01:01:01 p1235    ├considering: ${quote_mysql:$local_part}'}}
+01:01:01 p1235     ╭considering: $local_part}'}}
+01:01:01 p1235     ├──────value: c
+01:01:01 p1235                ╰──(tainted)
+01:01:01 p1235     ├considering: }'}}
+01:01:01 p1235     ├──expanding: $local_part
+01:01:01 p1235     ╰─────result: c
+01:01:01 p1235                ╰──(tainted)
+01:01:01 p1235    ├─────op-res: c
+01:01:01 p1235               ╰──(tainted, quoted:mysql)
+01:01:01 p1235    ├considering: '}}
+01:01:01 p1235    ├───────text: '
+01:01:01 p1235    ├considering: }}
+01:01:01 p1235    ├──expanding: select name from them where id = '${quote_mysql:$local_part}'
+01:01:01 p1235    ╰─────result: select name from them where id = 'c'
+01:01:01 p1235               ╰──(tainted, quoted:mysql)
+01:01:01 p1235   search_open: mysql "NULL"
+01:01:01 p1235     cached open
+01:01:01 p1235   search_find: file="NULL"
+01:01:01 p1235     key="select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts="servers=127.0.0.1::PORT_N/test/root/pass"
+01:01:01 p1235   LRU list:
+01:01:01 p1235   internal_search_find: file="NULL"
+01:01:01 p1235     type=mysql key="select name from them where id = 'c'" opts="servers=127.0.0.1::PORT_N/test/root/pass"
+01:01:01 p1235   cached data found but wrong opts;  database lookup required for select name from them where id = 'c'
+01:01:01 p1235                                (tainted, quoted:mysql)
+01:01:01 p1235   MySQL query: "select name from them where id = 'c'" opts 'servers=127.0.0.1::PORT_N/test/root/pass'
+01:01:01 p1235   MYSQL using cached connection for 127.0.0.1:PORT_N/test/root
+01:01:01 p1235   MYSQL: no data found
+01:01:01 p1235   replacing old cache entry
+01:01:01 p1235   lookup failed
+01:01:01 p1235   ├───item-res: 
+01:01:01 p1235   ├──expanding: ok:    ${lookup mysql,servers=127.0.0.1::PORT_N/test/root/pass      {select name from them where id = '${quote_mysql:$local_part}'}}
+01:01:01 p1235   ╰─────result: ok:    
+01:01:01 p1235  check set acl_m0 = ok:    ${lookup mysql,servers=127.0.0.1::PORT_N/test/root/pass      {select name from them where id = '${quote_mysql:$local_part}'}}
+01:01:01 p1235                   = ok:    
+01:01:01 p1235   ╭considering: ok:    ${lookup mysql,servers=127.0.0.1::PORT_N    {select name from them where id = '${quote_mysql:$local_part}'}}
+01:01:01 p1235   ├───────text: ok:    
+01:01:01 p1235   ├considering: ${lookup mysql,servers=127.0.0.1::PORT_N    {select name from them where id = '${quote_mysql:$local_part}'}}
+01:01:01 p1235    ╭considering: select name from them where id = '${quote_mysql:$local_part}'}}
+01:01:01 p1235    ├───────text: select name from them where id = '
+01:01:01 p1235    ├considering: ${quote_mysql:$local_part}'}}
+01:01:01 p1235     ╭considering: $local_part}'}}
+01:01:01 p1235     ├──────value: c
+01:01:01 p1235                ╰──(tainted)
+01:01:01 p1235     ├considering: }'}}
+01:01:01 p1235     ├──expanding: $local_part
+01:01:01 p1235     ╰─────result: c
+01:01:01 p1235                ╰──(tainted)
+01:01:01 p1235    ├─────op-res: c
+01:01:01 p1235               ╰──(tainted, quoted:mysql)
+01:01:01 p1235    ├considering: '}}
+01:01:01 p1235    ├───────text: '
+01:01:01 p1235    ├considering: }}
+01:01:01 p1235    ├──expanding: select name from them where id = '${quote_mysql:$local_part}'
+01:01:01 p1235    ╰─────result: select name from them where id = 'c'
+01:01:01 p1235               ╰──(tainted, quoted:mysql)
+01:01:01 p1235   search_open: mysql "NULL"
+01:01:01 p1235     cached open
+01:01:01 p1235   search_find: file="NULL"
+01:01:01 p1235     key="select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts="servers=127.0.0.1::PORT_N"
+01:01:01 p1235   LRU list:
+01:01:01 p1235   internal_search_find: file="NULL"
+01:01:01 p1235     type=mysql key="select name from them where id = 'c'" opts="servers=127.0.0.1::PORT_N"
+01:01:01 p1235   cached data found but wrong opts;  database lookup required for select name from them where id = 'c'
+01:01:01 p1235                                (tainted, quoted:mysql)
+01:01:01 p1235   MySQL query: "select name from them where id = 'c'" opts 'servers=127.0.0.1::PORT_N'
+01:01:01 p1235   MYSQL using cached connection for 127.0.0.1:PORT_N/test/root
+01:01:01 p1235   MYSQL: no data found
+01:01:01 p1235   replacing old cache entry
+01:01:01 p1235   lookup failed
+01:01:01 p1235   ├───item-res: 
+01:01:01 p1235   ├──expanding: ok:    ${lookup mysql,servers=127.0.0.1::PORT_N    {select name from them where id = '${quote_mysql:$local_part}'}}
+01:01:01 p1235   ╰─────result: ok:    
+01:01:01 p1235  check set acl_m0 = ok:    ${lookup mysql,servers=127.0.0.1::PORT_N    {select name from them where id = '${quote_mysql:$local_part}'}}
+01:01:01 p1235                   = ok:    
+01:01:01 p1235   ╭considering: FAIL2: ${lookup mysql     {servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = '${quote_mysql:$local_part}'}}
+01:01:01 p1235   ├───────text: FAIL2: 
+01:01:01 p1235   ├considering: ${lookup mysql     {servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = '${quote_mysql:$local_part}'}}
+01:01:01 p1235    ╭considering: servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = '${quote_mysql:$local_part}'}}
+01:01:01 p1235    ├───────text: servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = '
+01:01:01 p1235    ├considering: ${quote_mysql:$local_part}'}}
+01:01:01 p1235     ╭considering: $local_part}'}}
+01:01:01 p1235     ├──────value: c
+01:01:01 p1235                ╰──(tainted)
+01:01:01 p1235     ├considering: }'}}
+01:01:01 p1235     ├──expanding: $local_part
+01:01:01 p1235     ╰─────result: c
+01:01:01 p1235                ╰──(tainted)
+01:01:01 p1235    ├─────op-res: c
+01:01:01 p1235               ╰──(tainted, quoted:mysql)
+01:01:01 p1235    ├considering: '}}
+01:01:01 p1235    ├───────text: '
+01:01:01 p1235    ├considering: }}
+01:01:01 p1235    ├──expanding: servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = '${quote_mysql:$local_part}'
+01:01:01 p1235    ╰─────result: servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = 'c'
+01:01:01 p1235               ╰──(tainted, quoted:mysql)
+01:01:01 p1235   search_open: mysql "NULL"
+01:01:01 p1235     cached open
+01:01:01 p1235   search_find: file="NULL"
+01:01:01 p1235     key="servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts=NULL
+01:01:01 p1235   LRU list:
+01:01:01 p1235   internal_search_find: file="NULL"
+01:01:01 p1235     type=mysql key="servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = 'c'" opts=NULL
+01:01:01 p1235   database lookup required for servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = 'c'
+01:01:01 p1235                                (tainted, quoted:mysql)
+01:01:01 p1235   MySQL query: "servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = 'c'" opts 'NULL'
+01:01:01 p1235  LOG: MAIN
+01:01:01 p1235    Exim configuration error in line 89 of TESTSUITE/test-config:
+01:01:01 p1235    WARNING: obsolete syntax used for lookup
+01:01:01 p1235   lookup deferred: MySQL server "127.0.0.1:PORT_N/test" is tainted
+01:01:01 p1235   ├failed to expand: FAIL2: ${lookup mysql     {servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = '${quote_mysql:$local_part}'}}
+01:01:01 p1235   ╰───error message: lookup of "servers=127.0.0.1::PORT_N/test/root/pass; select name from them where id = 'c'" gave DEFER: MySQL server "127.0.0.1:1223/test" is tainted
+01:01:01 p1235  warn: condition test deferred in ACL "check_recipient"
+01:01:01 p1235  LOG: MAIN
+01:01:01 p1235    H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: MySQL server "127.0.0.1:PORT_N/test" is tainted
+01:01:01 p1235  processing "warn" (TESTSUITE/test-config 39)
+01:01:01 p1235   ╭considering: FAIL3: ${lookup mysql     {servers=127.0.0.1::PORT_N; select name from them where id = '$local_part'}}
+01:01:01 p1235   ├───────text: FAIL3: 
+01:01:01 p1235   ├considering: ${lookup mysql     {servers=127.0.0.1::PORT_N; select name from them where id = '$local_part'}}
+01:01:01 p1235    ╭considering: servers=127.0.0.1::PORT_N; select name from them where id = '$local_part'}}
+01:01:01 p1235    ├───────text: servers=127.0.0.1::PORT_N; select name from them where id = '
+01:01:01 p1235    ├considering: $local_part'}}
+01:01:01 p1235    ├──────value: c
+01:01:01 p1235               ╰──(tainted)
+01:01:01 p1235    ├considering: '}}
+01:01:01 p1235    ├───────text: '
+01:01:01 p1235    ├considering: }}
+01:01:01 p1235    ├──expanding: servers=127.0.0.1::PORT_N; select name from them where id = '$local_part'
+01:01:01 p1235    ╰─────result: servers=127.0.0.1::PORT_N; select name from them where id = 'c'
+01:01:01 p1235               ╰──(tainted)
+01:01:01 p1235   search_open: mysql "NULL"
+01:01:01 p1235     cached open
+01:01:01 p1235   search_find: file="NULL"
+01:01:01 p1235     key="servers=127.0.0.1::PORT_N; select name from them where id = 'c'" partial=-1 affix=NULL starflags=0 opts=NULL
+01:01:01 p1235   LRU list:
+01:01:01 p1235   internal_search_find: file="NULL"
+01:01:01 p1235     type=mysql key="servers=127.0.0.1::PORT_N; select name from them where id = 'c'" opts=NULL
+01:01:01 p1235   database lookup required for servers=127.0.0.1::PORT_N; select name from them where id = 'c'
+01:01:01 p1235                                (tainted)
+01:01:01 p1235  LOG: MAIN PANIC
+01:01:01 p1235    tainted search query is not properly quoted (ACL warn, TESTSUITE/test-config 39): select name from them where id = 'c'
+01:01:01 p1235   search_type 13 (mysql) quoting -1 (none)
+01:01:01 p1235   MySQL query: "servers=127.0.0.1::PORT_N; select name from them where id = 'c'" opts 'NULL'
+01:01:01 p1235  LOG: MAIN
+01:01:01 p1235    Exim configuration error in line 89 of TESTSUITE/test-config:
+01:01:01 p1235    WARNING: obsolete syntax used for lookup
+01:01:01 p1235   MYSQL using cached connection for 127.0.0.1:PORT_N/test/root
+01:01:01 p1235   MYSQL: no data found
+01:01:01 p1235   creating new cache entry
+01:01:01 p1235   lookup failed
+01:01:01 p1235   ├───item-res: 
+01:01:01 p1235   ├──expanding: FAIL3: ${lookup mysql     {servers=127.0.0.1::PORT_N; select name from them where id = '$local_part'}}
+01:01:01 p1235   ╰─────result: FAIL3: 
+01:01:01 p1235  check set acl_m0 = FAIL3: ${lookup mysql     {servers=127.0.0.1::PORT_N; select name from them where id = '$local_part'}}
+01:01:01 p1235                   = FAIL3: 
+01:01:01 p1235  warn: condition test succeeded in ACL "check_recipient"
+01:01:01 p1235  processing "warn" (TESTSUITE/test-config 42)
+01:01:01 p1235  check set acl_m0 = ok:    hostlist
+01:01:01 p1235  check hosts = net-mysql;select * from them where id='${quote_mysql:$local_part}'
+01:01:01 p1235   ╭considering: net-mysql;select * from them where id='${quote_mysql:$local_part}'
+01:01:01 p1235   ├───────text: net-mysql;select * from them where id='
+01:01:01 p1235   ├considering: ${quote_mysql:$local_part}'
+01:01:01 p1235    ╭considering: $local_part}'
+01:01:01 p1235    ├──────value: c
+01:01:01 p1235               ╰──(tainted)
+01:01:01 p1235    ├considering: }'
+01:01:01 p1235    ├──expanding: $local_part
+01:01:01 p1235    ╰─────result: c
+01:01:01 p1235               ╰──(tainted)
+01:01:01 p1235   ├─────op-res: c
+01:01:01 p1235              ╰──(tainted, quoted:mysql)
+01:01:01 p1235   ├considering: '
+01:01:01 p1235   ├───────text: '
+01:01:01 p1235   ├──expanding: net-mysql;select * from them where id='${quote_mysql:$local_part}'
+01:01:01 p1235   ╰─────result: net-mysql;select * from them where id='c'
+01:01:01 p1235              ╰──(tainted, quoted:mysql)
+01:01:01 p1235  host in "net-mysql;select * from them where id='c'"?
+01:01:01 p1235   list element: net-mysql;select * from them where id='c'
+01:01:01 p1235   search_open: mysql "NULL"
+01:01:01 p1235     cached open
+01:01:01 p1235   search_find: file="NULL"
+01:01:01 p1235     key="select * from them where id='c'" partial=-1 affix=NULL starflags=0 opts=NULL
+01:01:01 p1235   LRU list:
+01:01:01 p1235   internal_search_find: file="NULL"
+01:01:01 p1235     type=mysql key="select * from them where id='c'" opts=NULL
+01:01:01 p1235   database lookup required for select * from them where id='c'
+01:01:01 p1235                                (tainted, quoted:mysql)
+01:01:01 p1235   MySQL query: "select * from them where id='c'" opts 'NULL'
+01:01:01 p1235   MYSQL using cached connection for 127.0.0.1:PORT_N/test/root
+01:01:01 p1235   MYSQL: no data found
+01:01:01 p1235   creating new cache entry
+01:01:01 p1235   lookup failed
+01:01:01 p1235  host in "net-mysql;select * from them where id='c'"? no (end of list)
+01:01:01 p1235  warn: condition test failed in ACL "check_recipient"
+01:01:01 p1235  processing "warn" (TESTSUITE/test-config 45)
+01:01:01 p1235  check set acl_m0 = FAIL4: hostlist
+01:01:01 p1235  check hosts = <& net-mysql;servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='${quote_mysql:$local_part}'
+01:01:01 p1235   ╭considering: <& net-mysql;servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='${quote_mysql:$local_part}'
+01:01:01 p1235   ├───────text: <& net-mysql;servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='
+01:01:01 p1235   ├considering: ${quote_mysql:$local_part}'
+01:01:01 p1235    ╭considering: $local_part}'
+01:01:01 p1235    ├──────value: c
+01:01:01 p1235               ╰──(tainted)
+01:01:01 p1235    ├considering: }'
+01:01:01 p1235    ├──expanding: $local_part
+01:01:01 p1235    ╰─────result: c
+01:01:01 p1235               ╰──(tainted)
+01:01:01 p1235   ├─────op-res: c
+01:01:01 p1235              ╰──(tainted, quoted:mysql)
+01:01:01 p1235   ├considering: '
+01:01:01 p1235   ├───────text: '
+01:01:01 p1235   ├──expanding: <& net-mysql;servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='${quote_mysql:$local_part}'
+01:01:01 p1235   ╰─────result: <& net-mysql;servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'
+01:01:01 p1235              ╰──(tainted, quoted:mysql)
+01:01:01 p1235  host in "<& net-mysql;servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'"?
+01:01:01 p1235   list element: net-mysql;servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'
+01:01:01 p1235   search_open: mysql "NULL"
+01:01:01 p1235     cached open
+01:01:01 p1235   search_find: file="NULL"
+01:01:01 p1235     key="servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'" partial=-1 affix=NULL starflags=0 opts=NULL
+01:01:01 p1235   LRU list:
+01:01:01 p1235   internal_search_find: file="NULL"
+01:01:01 p1235     type=mysql key="servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'" opts=NULL
+01:01:01 p1235   database lookup required for servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'
+01:01:01 p1235                                (tainted, quoted:mysql)
+01:01:01 p1235   MySQL query: "servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'" opts 'NULL'
+01:01:01 p1235  LOG: MAIN
+01:01:01 p1235    Exim configuration error in line 89 of TESTSUITE/test-config:
+01:01:01 p1235    WARNING: obsolete syntax used for lookup
+01:01:01 p1235   lookup deferred: MySQL server "127.0.0.1:PORT_N/test" is tainted
+01:01:01 p1235  host in "<& net-mysql;servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'"? list match deferred for net-mysql;servers=127.0.0.1::1223/test/root/pass; select * from them where id='c'
+01:01:01 p1235  warn: condition test deferred in ACL "check_recipient"
+01:01:01 p1235  LOG: MAIN
+01:01:01 p1235    H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: MySQL server "127.0.0.1:PORT_N/test" is tainted
+01:01:01 p1235  processing "warn" (TESTSUITE/test-config 50)
+01:01:01 p1235  check set acl_m0 = FAIL5: hostlist
+01:01:01 p1235  check hosts = <& net-mysql,servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='${quote_mysql:$local_part}'
+01:01:01 p1235   ╭considering: <& net-mysql,servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='${quote_mysql:$local_part}'
+01:01:01 p1235   ├───────text: <& net-mysql,servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='
+01:01:01 p1235   ├considering: ${quote_mysql:$local_part}'
+01:01:01 p1235    ╭considering: $local_part}'
+01:01:01 p1235    ├──────value: c
+01:01:01 p1235               ╰──(tainted)
+01:01:01 p1235    ├considering: }'
+01:01:01 p1235    ├──expanding: $local_part
+01:01:01 p1235    ╰─────result: c
+01:01:01 p1235               ╰──(tainted)
+01:01:01 p1235   ├─────op-res: c
+01:01:01 p1235              ╰──(tainted, quoted:mysql)
+01:01:01 p1235   ├considering: '
+01:01:01 p1235   ├───────text: '
+01:01:01 p1235   ├──expanding: <& net-mysql,servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='${quote_mysql:$local_part}'
+01:01:01 p1235   ╰─────result: <& net-mysql,servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'
+01:01:01 p1235              ╰──(tainted, quoted:mysql)
+01:01:01 p1235  host in "<& net-mysql,servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'"?
+01:01:01 p1235   list element: net-mysql,servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'
+01:01:01 p1235   search_open: mysql "NULL"
+01:01:01 p1235     cached open
+01:01:01 p1235   search_find: file="NULL"
+01:01:01 p1235     key=" select * from them where id='c'" partial=-1 affix=NULL starflags=0 opts="servers=127.0.0.1::PORT_N/test/root/pass"
+01:01:01 p1235   LRU list:
+01:01:01 p1235   internal_search_find: file="NULL"
+01:01:01 p1235     type=mysql key=" select * from them where id='c'" opts="servers=127.0.0.1::PORT_N/test/root/pass"
+01:01:01 p1235   database lookup required for  select * from them where id='c'
+01:01:01 p1235                                (tainted, quoted:mysql)
+01:01:01 p1235   MySQL query: " select * from them where id='c'" opts 'servers=127.0.0.1::PORT_N/test/root/pass'
+01:01:01 p1235   lookup deferred: MySQL server "127.0.0.1:PORT_N/test" is tainted
+01:01:01 p1235  host in "<& net-mysql,servers=127.0.0.1::PORT_N/test/root/pass; select * from them where id='c'"? list match deferred for net-mysql,servers=127.0.0.1::1223/test/root/pass; select * from them where id='c'
+01:01:01 p1235  warn: condition test deferred in ACL "check_recipient"
+01:01:01 p1235  LOG: MAIN
+01:01:01 p1235    H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: MySQL server "127.0.0.1:PORT_N/test" is tainted
+01:01:01 p1235  processing "accept" (TESTSUITE/test-config 53)
+01:01:01 p1235  check domains = +local_domains
+01:01:01 p1235  d in "+local_domains"?
+01:01:01 p1235   list element: +local_domains
+01:01:01 p1235    start sublist local_domains
+01:01:01 p1235     d in "@"?
+01:01:01 p1235     ╎list element: @
+01:01:01 p1235     d in "@"? no (end of list)
+01:01:01 p1235    end sublist local_domains
+01:01:01 p1235  d in "+local_domains"? no (end of list)
+01:01:01 p1235  accept: condition test failed in ACL "check_recipient"
+01:01:01 p1235  processing "accept" (TESTSUITE/test-config 56)
+01:01:01 p1235  check hosts = +relay_hosts
+01:01:01 p1235  host in "+relay_hosts"?
+01:01:01 p1235   list element: +relay_hosts
+01:01:01 p1235    start sublist relay_hosts
+01:01:01 p1235     ╎╭considering: net-mysql;select * from them where id='$sender_host_address'
+01:01:01 p1235     ╎├───────text: net-mysql;select * from them where id='
+01:01:01 p1235     ╎├considering: $sender_host_address'
+01:01:01 p1235     ╎├──────value: 10.0.0.0
+01:01:01 p1235     ╎├considering: '
+01:01:01 p1235     ╎├───────text: '
+01:01:01 p1235     ╎├──expanding: net-mysql;select * from them where id='$sender_host_address'
+01:01:01 p1235     ╎╰─────result: net-mysql;select * from them where id='10.0.0.0'
+01:01:01 p1235     host in "net-mysql;select * from them where id='10.0.0.0'"?
+01:01:01 p1235     ╎list element: net-mysql;select * from them where id='10.0.0.0'
+01:01:01 p1235     ╎search_open: mysql "NULL"
+01:01:01 p1235     ╎  cached open
+01:01:01 p1235     ╎search_find: file="NULL"
+01:01:01 p1235     ╎  key="select * from them where id='10.0.0.0'" partial=-1 affix=NULL starflags=0 opts=NULL
+01:01:01 p1235     ╎LRU list:
+01:01:01 p1235     ╎internal_search_find: file="NULL"
+01:01:01 p1235     ╎  type=mysql key="select * from them where id='10.0.0.0'" opts=NULL
+01:01:01 p1235     ╎database lookup required for select * from them where id='10.0.0.0'
+01:01:01 p1235     ╎MySQL query: "select * from them where id='10.0.0.0'" opts 'NULL'
+01:01:01 p1235     ╎MYSQL using cached connection for 127.0.0.1:PORT_N/test/root
+01:01:01 p1235     ╎MYSQL: no data found
+01:01:01 p1235     ╎creating new cache entry
+01:01:01 p1235     ╎lookup failed
+01:01:01 p1235     host in "net-mysql;select * from them where id='10.0.0.0'"? no (end of list)
+01:01:01 p1235    end sublist relay_hosts
+01:01:01 p1235  host in "+relay_hosts"? no (end of list)
+01:01:01 p1235  accept: condition test failed in ACL "check_recipient"
+01:01:01 p1235  processing "deny" (TESTSUITE/test-config 57)
+01:01:01 p1235    message: relay not permitted
+01:01:01 p1235  deny: condition test succeeded in ACL "check_recipient"
+01:01:01 p1235  end of ACL "check_recipient": DENY
+01:01:01 p1235  SMTP>> 550 relay not permitted
+01:01:01 p1235  LOG: MAIN REJECT
+01:01:01 p1235    H=(test) [10.0.0.0] F=<a@b> rejected RCPT <c@d>: relay not permitted
+01:01:01 p1235  SMTP<< quit
+01:01:01 p1235  try option acl_smtp_quit
+01:01:01 p1235  SMTP>> 221 myhost.test.ex closing connection
+01:01:01 p1235  LOG: smtp_connection MAIN
+01:01:01 p1235    SMTP connection from (test) [10.0.0.0] D=qqs closed by QUIT
+01:01:01 p1235  search_tidyup called
+01:01:01 p1235  close MYSQL connection: 127.0.0.1:PORT_N/test/root
+01:01:01 p1235  >>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
 Exim version x.yz ....
 changed uid/gid: forcing real = effective
   uid=uuuu gid=CALLER_GID pid=p1236
@@ -530,7 +766,7 @@ P Received: from CALLER by myhost.test.ex with local (Exim x.yz)
     for ph10@???;
     Tue, 2 Mar 1999 09:44:33 +0000
 using ACL "check_notsmtp"
-processing "accept" (TESTSUITE/test-config 58)
+processing "accept" (TESTSUITE/test-config 60)
 check set acl_m_qtest = ${quote_mysql:$recipients}
                       = ph10@???
 accept: condition test succeeded in ACL "check_notsmtp"
@@ -609,7 +845,7 @@ processing address_data
  database lookup required for select name from them where id='ph10' limit 1
                               (tainted)
 LOG: MAIN PANIC
-  tainted search query is not properly quoted (router r1, TESTSUITE/test-config 66): select name from them where id='ph10' limit 1
+  tainted search query is not properly quoted (router r1, TESTSUITE/test-config 68): select name from them where id='ph10' limit 1
  search_type NN (mysql) quoting -1 (none)
  MySQL query: "select name from them where id='ph10' limit 1" opts 'NULL'
  MYSQL using cached connection for 127.0.0.1:PORT_N/test/root
@@ -658,7 +894,7 @@ appendfile transport entered
  database lookup required for select id from them where id='ph10'
                               (tainted)
 LOG: MAIN
-  tainted search query is not properly quoted (transport t1, TESTSUITE/test-config 80): select id from them where id='ph10'
+  tainted search query is not properly quoted (transport t1, TESTSUITE/test-config 82): select id from them where id='ph10'
  search_type NN (mysql) quoting -1 (none)
  MySQL query: "select id from them where id='ph10'" opts 'NULL'
  MYSQL new connection: host=127.0.0.1 port=PORT_N socket=NULL database=test user=root
diff --git a/test/stderr/2620 b/test/stderr/2620
index bafb175df..4b4bd1ccf 100644
--- a/test/stderr/2620
+++ b/test/stderr/2620
@@ -1,7 +1,6 @@
 
 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.
+initdb: hint: 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
@@ -134,6 +133,9 @@ dropping to exim gid; retaining priv uid
    type=pgsql key="servers=x:localhost; select name from them where id='ph10';" opts=NULL
  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';" opts 'NULL'
+LOG: MAIN
+  Exim configuration error in line 78 of TESTSUITE/test-config:
+  WARNING: obsolete syntax used for lookup
  lookup deferred: PostgreSQL server "x" not found in pgsql_servers
  search_open: pgsql "NULL"
    cached open
@@ -144,6 +146,9 @@ dropping to exim gid; retaining priv uid
    type=pgsql key="servers=localhost::PORT_N:x; select name from them where id='ph10';" opts=NULL
  database lookup required for servers=localhost::PORT_N:x; select name from them where id='ph10';
  PostgreSQL query: "servers=localhost::PORT_N:x; select name from them where id='ph10';" opts 'NULL'
+LOG: MAIN
+  Exim configuration error in line 78 of TESTSUITE/test-config:
+  WARNING: obsolete syntax used for lookup
  PGSQL using cached connection for localhost:PORT_N/test/CALLER
  creating new cache entry
  lookup yielded: Philip Hazel
@@ -156,6 +161,9 @@ dropping to exim gid; retaining priv uid
    type=pgsql key="servers=localhost::PORT_N/test/CALLER/:x; select name from them where id='ph10';" opts=NULL
  database lookup required for servers=localhost::PORT_N/test/CALLER/:x; select name from them where id='ph10';
  PostgreSQL query: "servers=localhost::PORT_N/test/CALLER/:x; select name from them where id='ph10';" opts 'NULL'
+LOG: MAIN
+  Exim configuration error in line 78 of TESTSUITE/test-config:
+  WARNING: obsolete syntax used for lookup
  PGSQL using cached connection for localhost:PORT_N/test/CALLER
  creating new cache entry
  lookup yielded: Philip Hazel
@@ -168,6 +176,9 @@ dropping to exim gid; retaining priv uid
    type=pgsql key="servers=(TESTSUITE/pgsql/.s.PGSQL.1223)/test/CALLER/:x; select name from them where id='ph10';" opts=NULL
  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';" opts 'NULL'
+LOG: MAIN
+  Exim configuration error in line 78 of TESTSUITE/test-config:
+  WARNING: obsolete syntax used for lookup
  PGSQL new connection: socket=TESTSUITE/pgsql/.s.PGSQL.1223 database=test user=CALLER
  creating new cache entry
  lookup yielded: Philip Hazel
@@ -334,10 +345,13 @@ check set acl_m0 = ok:   ${lookup pgsql,servers=localhost::PORT_N    {select nam
  database lookup required for servers=localhost::PORT_N/test/CALLER/; select name from them where id = 'c'
                               (tainted, quoted:pgsql)
  PostgreSQL query: "servers=localhost::PORT_N/test/CALLER/; select name from them where id = 'c'" opts 'NULL'
- lookup deferred: PostgreSQL server "localhost:PORT_N/test/CALLER/" is tainted
+LOG: MAIN
+  Exim configuration error in line 78 of TESTSUITE/test-config:
+  WARNING: obsolete syntax used for lookup
+ lookup deferred: PostgreSQL server "localhost:PORT_N/test" is tainted
 warn: condition test deferred in ACL "check_recipient"
 LOG: MAIN
-  H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "localhost:PORT_N/test/CALLER/" is tainted
+  H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "localhost:PORT_N/test" is tainted
 processing "warn" (TESTSUITE/test-config 41)
 check set acl_m0 = ok:   hostlist
 check hosts = net-pgsql;select * from them where id='${quote_pgsql:$local_part}'
@@ -374,11 +388,14 @@ host in "<& net-pgsql;servers=localhost::PORT_N/test/CALLER/; select * from them
  database lookup required for servers=localhost::PORT_N/test/CALLER/; select * from them where id='c'
                               (tainted, quoted:pgsql)
  PostgreSQL query: "servers=localhost::PORT_N/test/CALLER/; select * from them where id='c'" opts 'NULL'
- lookup deferred: PostgreSQL server "localhost:PORT_N/test/CALLER/" is tainted
+LOG: MAIN
+  Exim configuration error in line 78 of TESTSUITE/test-config:
+  WARNING: obsolete syntax used for lookup
+ lookup deferred: PostgreSQL server "localhost:PORT_N/test" is tainted
 host in "<& net-pgsql;servers=localhost::PORT_N/test/CALLER/; select * from them where id='c'"? list match deferred for net-pgsql;servers=localhost::1223/test/CALLER/; select * from them where id='c'
 warn: condition test deferred in ACL "check_recipient"
 LOG: MAIN
-  H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "localhost:PORT_N/test/CALLER/" is tainted
+  H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "localhost:PORT_N/test" is tainted
 processing "warn" (TESTSUITE/test-config 49)
 check set acl_m0 = FAIL: hostlist
 check hosts = <& net-pgsql,servers=localhost::PORT_N/test/CALLER/; select * from them where id='${quote_pgsql:$local_part}'
@@ -394,11 +411,11 @@ host in "<& net-pgsql,servers=localhost::PORT_N/test/CALLER/; select * from them
  database lookup required for  select * from them where id='c'
                               (tainted, quoted:pgsql)
  PostgreSQL query: " select * from them where id='c'" opts 'servers=localhost::PORT_N/test/CALLER/'
- lookup deferred: PostgreSQL server "localhost:PORT_N/test/CALLER/" is tainted
+ lookup deferred: PostgreSQL server "localhost:PORT_N/test" is tainted
 host in "<& net-pgsql,servers=localhost::PORT_N/test/CALLER/; select * from them where id='c'"? list match deferred for net-pgsql,servers=localhost::1223/test/CALLER/; select * from them where id='c'
 warn: condition test deferred in ACL "check_recipient"
 LOG: MAIN
-  H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "localhost:PORT_N/test/CALLER/" is tainted
+  H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "localhost:PORT_N/test" is tainted
 processing "accept" (TESTSUITE/test-config 52)
 check domains = +local_domains
 d in "+local_domains"?
@@ -523,10 +540,13 @@ check set acl_m0 = ok:   ${lookup pgsql,servers=localhost::PORT_N    {select nam
  database lookup required for servers=localhost::PORT_N/test/CALLER/; select name from them where id = 'c'
                               (tainted, quoted:pgsql)
  PostgreSQL query: "servers=localhost::PORT_N/test/CALLER/; select name from them where id = 'c'" opts 'NULL'
- lookup deferred: PostgreSQL server "localhost:PORT_N/test/CALLER/" is tainted
+LOG: MAIN
+  Exim configuration error in line 78 of TESTSUITE/test-config:
+  WARNING: obsolete syntax used for lookup
+ lookup deferred: PostgreSQL server "localhost:PORT_N/test" is tainted
 warn: condition test deferred in ACL "check_recipient"
 LOG: MAIN
-  H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "localhost:PORT_N/test/CALLER/" is tainted
+  H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "localhost:PORT_N/test" is tainted
 processing "warn" (TESTSUITE/test-config 41)
 check set acl_m0 = ok:   hostlist
 check hosts = net-pgsql;select * from them where id='${quote_pgsql:$local_part}'
@@ -558,11 +578,14 @@ host in "<& net-pgsql;servers=localhost::PORT_N/test/CALLER/; select * from them
  database lookup required for servers=localhost::PORT_N/test/CALLER/; select * from them where id='c'
                               (tainted, quoted:pgsql)
  PostgreSQL query: "servers=localhost::PORT_N/test/CALLER/; select * from them where id='c'" opts 'NULL'
- lookup deferred: PostgreSQL server "localhost:PORT_N/test/CALLER/" is tainted
+LOG: MAIN
+  Exim configuration error in line 78 of TESTSUITE/test-config:
+  WARNING: obsolete syntax used for lookup
+ lookup deferred: PostgreSQL server "localhost:PORT_N/test" is tainted
 host in "<& net-pgsql;servers=localhost::PORT_N/test/CALLER/; select * from them where id='c'"? list match deferred for net-pgsql;servers=localhost::1223/test/CALLER/; select * from them where id='c'
 warn: condition test deferred in ACL "check_recipient"
 LOG: MAIN
-  H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "localhost:PORT_N/test/CALLER/" is tainted
+  H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "localhost:PORT_N/test" is tainted
 processing "warn" (TESTSUITE/test-config 49)
 check set acl_m0 = FAIL: hostlist
 check hosts = <& net-pgsql,servers=localhost::PORT_N/test/CALLER/; select * from them where id='${quote_pgsql:$local_part}'
@@ -578,11 +601,11 @@ host in "<& net-pgsql,servers=localhost::PORT_N/test/CALLER/; select * from them
  database lookup required for  select * from them where id='c'
                               (tainted, quoted:pgsql)
  PostgreSQL query: " select * from them where id='c'" opts 'servers=localhost::PORT_N/test/CALLER/'
- lookup deferred: PostgreSQL server "localhost:PORT_N/test/CALLER/" is tainted
+ lookup deferred: PostgreSQL server "localhost:PORT_N/test" is tainted
 host in "<& net-pgsql,servers=localhost::PORT_N/test/CALLER/; select * from them where id='c'"? list match deferred for net-pgsql,servers=localhost::1223/test/CALLER/; select * from them where id='c'
 warn: condition test deferred in ACL "check_recipient"
 LOG: MAIN
-  H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "localhost:PORT_N/test/CALLER/" is tainted
+  H=(test) [10.0.0.0] Warning: ACL "warn" statement skipped: condition test deferred: PostgreSQL server "localhost:PORT_N/test" is tainted
 processing "accept" (TESTSUITE/test-config 52)
 check domains = +local_domains
 d in "+local_domains"?
diff --git a/test/stdout/2620 b/test/stdout/2620
index 13020359a..f0796ae6f 100644
--- a/test/stdout/2620
+++ b/test/stdout/2620
@@ -25,6 +25,13 @@ Success. You can now start the database server using:
 
 pg_ctl: server is running (PID: p1234)
 POSTGRES "-D" "TESTSUITE/pgsql/data" "-p" "1223" "-k" "TESTSUITE/pgsql"
+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


--
## subscription configuration (requires account):
## https://lists.exim.org/mailman3/postorius/lists/exim-cvs.lists.exim.org/
## unsubscribe (doesn't require an account):
## exim-cvs-unsubscribe@???
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://wiki.exim.org/