Debug pretrigger capture facility
authorJeremy Harris <jgh146exb@wizmail.org>
Fri, 4 Feb 2022 21:53:28 +0000 (21:53 +0000)
committerJeremy Harris <jgh146exb@wizmail.org>
Sat, 5 Feb 2022 19:34:43 +0000 (19:34 +0000)
39 files changed:
doc/doc-docbook/spec.xfpt
doc/doc-txt/NewStuff
src/src/acl.c
src/src/child.c
src/src/debug.c
src/src/exim.c
src/src/functions.h
src/src/globals.c
src/src/globals.h
src/src/log.c
src/src/macros.h
test/confs/0574 [deleted file]
test/confs/0628 [new file with mode: 0644]
test/confs/0629 [new file with mode: 0644]
test/confs/0630 [new file with mode: 0644]
test/confs/0631 [new file with mode: 0644]
test/log/0574 [deleted file]
test/log/0628 [new file with mode: 0644]
test/log/0629 [new file with mode: 0644]
test/log/0630 [new file with mode: 0644]
test/log/0631 [new file with mode: 0644]
test/paniclog/0629 [new file with mode: 0644]
test/paniclog/0630 [new file with mode: 0644]
test/runtest
test/scripts/0000-Basic/0574 [deleted file]
test/scripts/0000-Basic/0628 [new file with mode: 0644]
test/scripts/0000-Basic/0629 [new file with mode: 0644]
test/scripts/0000-Basic/0630 [new file with mode: 0644]
test/scripts/0000-Basic/0631 [new file with mode: 0644]
test/stderr/0574 [deleted file]
test/stderr/0628 [new file with mode: 0644]
test/stderr/0629 [new file with mode: 0644]
test/stderr/0630 [new file with mode: 0644]
test/stderr/0631 [new file with mode: 0644]
test/stdout/0574 [deleted file]
test/stdout/0628 [new file with mode: 0644]
test/stdout/0629 [new file with mode: 0644]
test/stdout/0630 [new file with mode: 0644]
test/stdout/0631 [new file with mode: 0644]

index 67d79aa7abe49483b529d7351a55b816e5140ec8..6acdc1a328761367e08307947a89c9f980b1900d 100644 (file)
@@ -31600,14 +31600,43 @@ sender when the destination system is doing content-scan based rejection.
 This control turns on debug logging, almost as though Exim had been invoked
 with &`-d`&, with the output going to a new logfile in the usual logs directory,
 by default called &'debuglog'&.
-The filename can be adjusted with the &'tag'& option, which
-may access any variables already defined.  The logging may be adjusted with
-the &'opts'& option, which takes the same values as the &`-d`& command-line
-option.
+
 .new
-Logging started this way may be stopped by using the &'stop'& option.
-The &'kill'& option additionally removes the debug file.
+Options are a slash-separated list.
+If an option takes an argument, the option name and argument are separated by
+an equals character.
+Several options are supported:
 .wen
+.display
+tag=<&'suffix'&>         The filename can be adjusted with thise option.
+                    The argument, which may access any variables already defined,
+                     is appended to the default name.
+
+opts=<&'debug&~options'&> The argument specififes what is to be logged,
+                     using the same values as the &`-d`& command-line option.
+
+stop                 Logging started with this control may be
+                     stopped by using this option.
+
+kill                 Logging started with this control may be
+                     stopped by using this option.
+                     Additionally the debug file will be removed,
+                     providing one means for speculative debug tracing.
+
+pretrigger=<&'size'&>    This option specifies a memory buffuer to be used
+                     for pre-trigger debug capture.
+                     Debug lines are recorded in the buffer until
+                     and if) a trigger occurs; at which time they are
+                     dumped to the debug file.  Newer lines displace the
+                     oldest if the buffer is full.  After a trigger,
+                     immediate writes to file are done as normal.
+
+trigger=<&'reason'&>     This option selects cause for the pretrigger buffer
+                     see above) to be copied to file.  A reason of $*now*
+                     take effect immediately; one of &*paniclog*& triggers
+                     on a write to the panic log.
+.endd
+
 Some examples (which depend on variables that don't exist in all
 contexts):
 .code
@@ -31616,6 +31645,8 @@ contexts):
       control = debug/opts=+expand+acl
       control = debug/tag=.$message_exim_id/opts=+expand
       control = debug/kill
+      control = debug/opts=+all/pretrigger=1024/trigger=paniclog
+      control = debug/trigger=now
 .endd
 
 
index 46e6254bb862db2e19d98c33bf1b2b9c7aec0ec0..3555d8c1202eef86d4c09a898cfdef783c8ee23a 100644 (file)
@@ -22,7 +22,7 @@ Version 4.96
     the main and panic logs.  A future release will enforce this by failing
     the lookup.
 
- 6. The ACL "debug" control gains a "stop" option.
+ 6. The ACL "debug" control gains options "stop", "pretrigger" and "trigger".
 
 
 Version 4.95
index 19c1bbbd9ac0dea99be006483592737699fc2929..fa1172331ed709f5439b51c6466c782c89e51aa2 100644 (file)
@@ -3498,25 +3498,39 @@ for (; cb; cb = cb->next)
              }
            else if (Ustrncmp(pp, "kill", 4) == 0)
              {
-             for (pp += 4; *pp && *pp != '/';) pp++;
+             pp += 4;
              kill = TRUE;
              }
            else if (Ustrncmp(pp, "stop", 4) == 0)
              {
-             for (pp += 4; *pp && *pp != '/';) pp++;
+             pp += 4;
              stop = TRUE;
              }
-           else
-             while (*pp && *pp != '/') pp++;
+           else if (Ustrncmp(pp, "pretrigger=", 11) == 0)
+               debug_pretrigger_setup(pp+11);
+           else if (Ustrncmp(pp, "trigger=", 8) == 0)
+             {
+             if (Ustrncmp(pp += 8, "now", 3) == 0)
+               {
+               pp += 3;
+               debug_trigger_fire();
+               }
+             else if (Ustrncmp(pp, "paniclog", 8) == 0)
+               {
+               pp += 8;
+               dtrigger_selector |= BIT(DTi_panictrigger);
+               }
+             }
+           while (*pp && *pp != '/') pp++;
            p = pp;
            }
 
-           if (kill)
-             debug_logging_stop(TRUE);
-           else if (stop)
-             debug_logging_stop(FALSE);
-           else
-             debug_logging_activate(debug_tag, debug_opts);
+         if (kill)
+           debug_logging_stop(TRUE);
+         else if (stop)
+           debug_logging_stop(FALSE);
+         else if (debug_tag || debug_opts)
+           debug_logging_activate(debug_tag, debug_opts);
          break;
          }
 
index 4a262d623a2d19d40e3896561d22e421480a36ad..07115bee43863bca0b98eec4733346821fedd938 100644 (file)
@@ -76,7 +76,7 @@ int n = 0;
 int extra = pcount ? *pcount : 0;
 uschar **argv;
 
-argv = store_get((extra + acount + MAX_CLMACROS + 21) * sizeof(char *), FALSE);
+argv = store_get((extra + acount + MAX_CLMACROS + 24) * sizeof(char *), FALSE);
 
 /* In all case, the list starts out with the path, any macros, and a changed
 config file. */
@@ -88,10 +88,7 @@ if (clmacro_count > 0)
   n += clmacro_count;
   }
 if (f.config_changed)
-  {
-  argv[n++] = US"-C";
-  argv[n++] = config_main_filename;
-  }
+  { argv[n++] = US"-C"; argv[n++] = config_main_filename; }
 
 /* These values are added only for non-minimal cases. If debug_selector is
 precisely D_v, we have to assume this was started by a non-admin user, and
@@ -120,22 +117,23 @@ if (!minimal)
        }
       }
     }
+  if (debug_pretrigger_buf)
+    { argv[n++] = US"-dp"; argv[n++] = string_sprintf("0x%x", debug_pretrigger_bsize); }
+  if (dtrigger_selector != 0)
+    argv[n++] = string_sprintf("-dt=0x%x", dtrigger_selector);
   DEBUG(D_any)
     {
     argv[n++] = US"-MCd";
     argv[n++] = US process_purpose;
     }
-  if (!f.testsuite_delays) argv[n++] = US"-odd";
-  if (f.dont_deliver) argv[n++] = US"-N";
-  if (f.queue_smtp) argv[n++] = US"-odqs";
-  if (f.synchronous_delivery) argv[n++] = US"-odi";
+  if (!f.testsuite_delays)     argv[n++] = US"-odd";
+  if (f.dont_deliver)          argv[n++] = US"-N";
+  if (f.queue_smtp)            argv[n++] = US"-odqs";
+  if (f.synchronous_delivery)  argv[n++] = US"-odi";
   if (connection_max_messages >= 0)
     argv[n++] = string_sprintf("-oB%d", connection_max_messages);
   if (*queue_name)
-    {
-    argv[n++] = US"-MCG";
-    argv[n++] = queue_name;
-    }
+    { argv[n++] = US"-MCG"; argv[n++] = queue_name; }
   }
 
 /* Now add in any others that are in the call. Remember which they were,
index 92cad6d4817b4652a498577ecdb02e41b3ab1814..7b9be057bb08145e703f722990791fe70d5558cd 100644 (file)
@@ -13,6 +13,8 @@ static uschar  debug_buffer[2048];
 static uschar *debug_ptr = debug_buffer;
 static int     debug_prefix_length = 0;
 
+static unsigned pretrigger_writeoff;
+static unsigned pretrigger_readoff;
 
 
 const uschar * rc_names[] = {          /* Mostly for debug output */
@@ -318,8 +320,40 @@ if (debug_ptr[-1] == '\n')
       }
     }
 
-  fprintf(debug_file, "%s", CS debug_buffer);
-  fflush(debug_file);
+  if (debug_pretrigger_buf)
+    {
+    int needed = Ustrlen(debug_buffer), avail;
+    char c;
+
+    if (needed > debug_pretrigger_bsize)
+      needed = debug_pretrigger_bsize;
+    if ((avail = pretrigger_readoff - pretrigger_writeoff) <= 0)
+      avail += debug_pretrigger_bsize;
+
+    /* We have a pretrigger set up, trigger not yet hit. Copy the line(s) to the
+    pretrig buffer, dropping earlier lines if needed but truncating this line if
+    the pbuf is maxed out.  In the PTB the lines are NOT nul-terminated. */
+
+    while (avail < needed)
+      do
+       {
+       avail++;
+        c = debug_pretrigger_buf[pretrigger_readoff];
+       if (++pretrigger_readoff >= debug_pretrigger_bsize) pretrigger_readoff = 0;
+       }
+      while (c && c != '\n' && pretrigger_readoff != pretrigger_writeoff);
+
+    for (int i = 0; needed; i++, needed--)
+      {
+      debug_pretrigger_buf[pretrigger_writeoff] = debug_buffer[i];
+      if (++pretrigger_writeoff >= debug_pretrigger_bsize) pretrigger_writeoff = 0;
+      }
+    }
+  else
+    {
+    fprintf(debug_file, "%s", CS debug_buffer);
+    fflush(debug_file);
+    }
   debug_ptr = debug_buffer;
   debug_prefix_length = 0;
   }
@@ -410,4 +444,54 @@ else
 }
 
 
+/**************************************************************/
+/* Pretrigger handling for debug.  The debug_printf implementation
+diverts output to a circular buffer if the buffer is set up.
+The routines here set up the buffer, and unload it to file (and release it).
+What ends up in the buffer is subject to the usual debug_selector. */
+
+void
+debug_pretrigger_setup(const uschar * size_string)
+{
+long size = Ustrtol(size_string, NULL, 0);
+if (size > 0)
+  {
+  unsigned bufsize = MIN(size, 16384);
+
+  dtrigger_selector |= BIT(DTi_pretrigger);
+  if (debug_pretrigger_buf) store_free(debug_pretrigger_buf);
+  debug_pretrigger_buf = store_malloc((size_t)(debug_pretrigger_bsize = bufsize));
+  pretrigger_readoff = pretrigger_writeoff = 0;
+  }
+}
+
+void
+debug_trigger_fire(void)
+{
+int nbytes;
+
+if (!debug_pretrigger_buf) return;
+
+if (debug_file && (nbytes = pretrigger_writeoff - pretrigger_readoff) != 0)
+  if (nbytes > 0)
+    fwrite(debug_pretrigger_buf + pretrigger_readoff, 1, nbytes, debug_file);
+  else
+    {
+    fwrite(debug_pretrigger_buf + pretrigger_readoff, 1,
+      debug_pretrigger_bsize - pretrigger_readoff, debug_file);
+    fwrite(debug_pretrigger_buf, 1, pretrigger_writeoff, debug_file);
+    }
+
+debug_pretrigger_discard();
+}
+
+void
+debug_pretrigger_discard(void)
+{
+if (debug_pretrigger_buf) store_free(debug_pretrigger_buf);
+debug_pretrigger_buf = NULL;
+dtrigger_selector = 0;
+}
+
+
 /* End of debug.c */
index 664d5d7f1b6cf1b062725a37b1b1647f5761ff89..b59157286ea32bca0aca5cac0f1589c13ee4ba7e 100644 (file)
@@ -2655,21 +2655,36 @@ on the second character (the one after '-'), to save some effort. */
     #endif
     break;
 
-    /* -d: Set debug level (see also -v below) or set the drop_cr option.
-    The latter is now a no-op, retained for compatibility only. If -dd is used,
-    debugging subprocesses of the daemon is disabled. */
-
     case 'd':
+
+    /* -dropcr: Set this option.  Now a no-op, retained for compatibility only. */
+
     if (Ustrcmp(argrest, "ropcr") == 0)
       {
       /* drop_cr = TRUE; */
       }
 
-    /* Use an intermediate variable so that we don't set debugging while
-    decoding the debugging bits. */
+    /* -dp: Set up a debug pretrigger buffer with given size. */
+
+    else if (Ustrcmp(argrest, "p") == 0)
+      if (++i >= argc)
+       badarg = TRUE;
+      else
+       debug_pretrigger_setup(argv[i]);
+
+    /* -dt: Set a debug trigger selector */
+
+    else if (Ustrncmp(argrest, "t=", 2) == 0)
+      dtrigger_selector = (unsigned int) Ustrtol(argrest + 2, NULL, 0);
+
+    /* -d: Set debug level (see also -v below).
+    If -dd is used, debugging subprocesses of the daemon is disabled. */
 
     else
       {
+      /* Use an intermediate variable so that we don't set debugging while
+      decoding the debugging bits. */
+
       unsigned int selector = D_default;
       debug_selector = 0;
       debug_file = NULL;
index d27c23baa1ac31fd715d6c142d6d6ac2f395ec6b..4b4ff5e14cb5059b08f3a08abceb4d5f31804ed4 100644 (file)
@@ -193,7 +193,10 @@ extern void    debug_printf_indent(const char *, ...) PRINTF_FUNCTION(1,2);
 extern void    debug_print_string(uschar *);
 extern void    debug_print_tree(const char *, tree_node *);
 extern void    debug_vprintf(int, const char *, va_list);
+extern void    debug_pretrigger_setup(const uschar *);
+extern void    debug_pretrigger_discard(void);
 extern void    debug_print_socket(int);
+extern void    debug_trigger_fire(void);
 
 extern void    decode_bits(unsigned int *, size_t, int *,
                   uschar *, bit_table *, int, uschar *, int);
index 7f7ceac0085e581c854f0b5445badb38ae56437e..7e50867b2ecf502859c0191f92df82ef6534e9d3 100644 (file)
@@ -815,8 +815,10 @@ bit_table debug_options[]      = { /* must be in alphabetical order and use
   BIT_TABLE(D, verify),
 };
 int     debug_options_count    = nelem(debug_options);
-
+unsigned debug_pretrigger_bsize= 0;
+uschar * debug_pretrigger_buf  = NULL;
 unsigned int debug_selector    = 0;
+
 int     delay_warning[DELAY_WARNING_SIZE] = { DELAY_WARNING_SIZE, 1, 24*60*60 };
 uschar *delay_warning_condition=
   US"${if or {"
@@ -897,6 +899,7 @@ uschar *dnslist_value          = NULL;
 tree_node *domainlist_anchor   = NULL;
 int     domainlist_count       = 0;
 uschar *dsn_from               = US DEFAULT_DSN_FROM;
+unsigned int dtrigger_selector = 0;
 
 int     errno_quota            = ERRNO_QUOTA;
 uschar *errors_copy            = NULL;
index 10dd3effcc5bd3136228e48564bb02c090297f89..de4670a81f617c7c15a8d7b110deef3e94addb5d 100644 (file)
@@ -487,6 +487,8 @@ extern FILE   *debug_file;             /* Where to write debugging info */
 extern int     debug_notall[];         /* Debug options excluded from +all */
 extern bit_table debug_options[];      /* Table of debug options */
 extern int     debug_options_count;    /* Size of table */
+extern unsigned debug_pretrigger_bsize;
+extern uschar *debug_pretrigger_buf;   /* circular buffer for precapture */
 extern BOOL    debug_store;           /* Do extra checks on store_reset */
 extern int     delay_warning[];        /* Times between warnings */
 extern uschar *delay_warning_condition; /* Condition string for warnings */
@@ -576,6 +578,8 @@ extern int     domainlist_count;       /* Number defined */
 /* This option is now a no-opt, retained for compatibility */
 extern BOOL    drop_cr;                /* For broken local MUAs */
 
+extern unsigned int dtrigger_selector; /* when to start debug */
+
 extern uschar *dsn_from;               /* From: string for DSNs */
 
 extern BOOL    envelope_to_remove;     /* Remove envelope_to_headers */
index fe9bd0c9f2700516b592d16ef339e3ca381bb82a..8bdb244bd385396b8e63986c807143129642c9b5 100644 (file)
@@ -905,6 +905,11 @@ if (!path_inspected)
       "More than one path given in log_file_path: using %s", file_path);
   }
 
+/* Optionally trigger debug */
+
+if (flags & LOG_PANIC && dtrigger_selector & BIT(DTi_panictrigger))
+  debug_trigger_fire();
+
 /* If debugging, show all log entries, but don't show headers. Do it all
 in one go so that it doesn't get split when multi-processing. */
 
@@ -1470,7 +1475,11 @@ misconfiguration.
 
 The first use of this is in ACL logic, "control = debug/tag=foo/opts=+expand"
 which can be combined with conditions, etc, to activate extra logging only
-for certain sources. The second use is inetd wait mode debug preservation. */
+for certain sources. The second use is inetd wait mode debug preservation.
+
+It might be nice, in ACL-initiated pretrigger mode, to not create the file
+immediately but only upon a trigger - but we'd need another cmdline option
+to pass the name through child_exxec_exim(). */
 
 void
 debug_logging_activate(uschar *tag_name, uschar *opts)
@@ -1482,7 +1491,7 @@ if (debug_file)
   return;
   }
 
-if (tag_name != NULL && (Ustrchr(tag_name, '/') != NULL))
+if (tag_name && (Ustrchr(tag_name, '/') != NULL))
   {
   log_write(0, LOG_MAIN|LOG_PANIC, "debug tag may not contain a '/' in: %s",
       tag_name);
@@ -1512,11 +1521,13 @@ else
 void
 debug_logging_stop(BOOL kill)
 {
+debug_pretrigger_discard();
 if (!debug_file || !debuglog_name[0]) return;
 
 debug_selector = 0;
 fclose(debug_file);
 debug_file = NULL;
+debug_fd = -1;
 if (kill) unlink_log(lt_debug);
 }
 
index 80e0ecbe172f7b957bca1bf96b19c9900dabb83d..5e26a7bcea0f8a24f84e9ee67018763eb969fe45 100644 (file)
@@ -106,7 +106,7 @@ don't make the file descriptors two-way. */
 /* Debugging control */
 
 #define DEBUG(x)      if (debug_selector & (x))
-#define HDEBUG(x)     if (host_checking || (debug_selector & (x)))
+#define HDEBUG(x)     if (host_checking || debug_selector & (x))
 
 /* The default From: text for DSNs */
 
@@ -422,6 +422,13 @@ enum {
                                          D_timestamp   | \
                                          D_resolver))
 
+/* Bits for debug triggers */
+
+enum {
+  DTi_panictrigger,
+  DTi_pretrigger,
+};
+
 /* Options bits for logging. Those that have values < BITWORDSIZE can be used
 in calls to log_write(). The others are put into later words in log_selector
 and are only ever tested independently, so they do not need bit mask
diff --git a/test/confs/0574 b/test/confs/0574
deleted file mode 100644 (file)
index 8703c02..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-# Exim test configuration 0574
-
-.include DIR/aux-var/std_conf_prefix
-
-primary_hostname = myhost.test.ex
-
-# ----- Main settings -----
-
-acl_smtp_mail = chk_mail
-acl_smtp_rcpt = chk_rcpt
-acl_smtp_data = chk_data
-
-# ----- ACL -----
-
-begin acl
-
-chk_mail:
-  accept control = debug/tag=_1
-
-chk_rcpt:
-  accept control = debug/kill
-
-chk_data:
-  accept control = debug/tag=_2/opts=+all
-
-# ----- Routers -----
-
-begin routers
-
-r1:
-       driver = redirect
-       data = :blackhole:
-# End
diff --git a/test/confs/0628 b/test/confs/0628
new file mode 100644 (file)
index 0000000..4369f5a
--- /dev/null
@@ -0,0 +1,34 @@
+# Exim test configuration 0628
+
+.include DIR/aux-var/std_conf_prefix
+
+primary_hostname = myhost.test.ex
+
+# ----- Main settings -----
+
+acl_smtp_mail = chk_mail
+acl_smtp_rcpt = chk_rcpt
+acl_smtp_data = chk_data
+
+# ----- ACL -----
+
+begin acl
+
+chk_mail:
+  accept control =             debug/tag=_1
+
+chk_rcpt:
+  accept control =             debug/kill
+
+chk_data:
+  accept control =             debug/tag=_2/opts=+all
+
+
+# ----- Routers -----
+
+begin routers
+
+r1:
+       driver = redirect
+       data = :blackhole:
+# End
diff --git a/test/confs/0629 b/test/confs/0629
new file mode 100644 (file)
index 0000000..15ae731
--- /dev/null
@@ -0,0 +1,22 @@
+# Exim test configuration 0629
+
+.include DIR/aux-var/std_conf_prefix
+
+primary_hostname = myhost.test.ex
+
+# ----- Main settings -----
+
+acl_smtp_mail = chk_mail
+acl_smtp_rcpt = chk_rcpt
+
+# ----- ACL -----
+
+begin acl
+
+chk_mail:
+  accept control =             debug/tag=_rcpt/pretrigger=1024/trigger=paniclog
+
+chk_rcpt:
+  deny   log_reject_target =   panic
+
+# End
diff --git a/test/confs/0630 b/test/confs/0630
new file mode 100644 (file)
index 0000000..b83790f
--- /dev/null
@@ -0,0 +1,32 @@
+# Exim test configuration 0630
+
+.include DIR/aux-var/std_conf_prefix
+
+primary_hostname = myhost.test.ex
+
+# ----- Main settings -----
+
+acl_smtp_mail = chk_mail
+acl_smtp_rcpt = chk_rcpt
+
+# ----- ACL -----
+
+begin acl
+
+chk_mail:
+  accept control =             debug/tag=_router/opts=+all/pretrigger=2040/trigger=paniclog
+
+chk_rcpt:
+  accept
+
+# ----- Routers -----
+
+begin routers
+
+r0:
+       # cause paniclog write (by using a tainted filename)
+       driver =        redirect
+       local_parts =   $spool_directory/$local_part
+       data =          :blackhole:
+#
+# End
diff --git a/test/confs/0631 b/test/confs/0631
new file mode 100644 (file)
index 0000000..89f2827
--- /dev/null
@@ -0,0 +1,40 @@
+# Exim test configuration 0631
+
+.include DIR/aux-var/std_conf_prefix
+
+primary_hostname = myhost.test.ex
+
+# ----- Main settings -----
+
+acl_smtp_mail = chk_mail
+acl_smtp_rcpt = chk_rcpt
+acl_smtp_data = chk_data
+
+# ----- ACL -----
+
+begin acl
+
+chk_mail:
+  accept control = debug/tag=_acl/opts=-all+acl/pretrigger=270
+        message = yes1
+        message = yes2
+        message = yes3
+        message = yes4
+        message = yes5
+        message = yes6
+
+chk_rcpt:
+  accept control = debug/trigger=now
+
+chk_data:
+  accept control = debug/stop
+
+# ----- Routers -----
+
+begin routers
+
+r0:
+    driver =   redirect
+    data =     :blackhole:
+#
+# End
diff --git a/test/log/0574 b/test/log/0574
deleted file mode 100644 (file)
index 1b544f9..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-
-******** SERVER ********
-1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port PORT_D
-1999-03-02 09:44:33 10HmaX-0005vi-00 <= tester@test.ex H=(test.ex) [127.0.0.1] P=esmtp S=sss
-1999-03-02 09:44:33 10HmaX-0005vi-00 => :blackhole: <dest@test.ex> R=r1
-1999-03-02 09:44:33 10HmaX-0005vi-00 Completed
diff --git a/test/log/0628 b/test/log/0628
new file mode 100644 (file)
index 0000000..1b544f9
--- /dev/null
@@ -0,0 +1,6 @@
+
+******** SERVER ********
+1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port PORT_D
+1999-03-02 09:44:33 10HmaX-0005vi-00 <= tester@test.ex H=(test.ex) [127.0.0.1] P=esmtp S=sss
+1999-03-02 09:44:33 10HmaX-0005vi-00 => :blackhole: <dest@test.ex> R=r1
+1999-03-02 09:44:33 10HmaX-0005vi-00 Completed
diff --git a/test/log/0629 b/test/log/0629
new file mode 100644 (file)
index 0000000..6161c31
--- /dev/null
@@ -0,0 +1,3 @@
+
+******** SERVER ********
+1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port PORT_D
diff --git a/test/log/0630 b/test/log/0630
new file mode 100644 (file)
index 0000000..86dfe44
--- /dev/null
@@ -0,0 +1,6 @@
+
+******** SERVER ********
+1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port PORT_D
+1999-03-02 09:44:33 10HmaX-0005vi-00 <= test_3@paniclogrouter H=(test.ex) [127.0.0.1] P=esmtp S=sss
+1999-03-02 09:44:33 10HmaX-0005vi-00 Tainted filename 'TESTSUITE/spool/dest3'
+1999-03-02 09:44:33 10HmaX-0005vi-00 failed to open TESTSUITE/spool/dest3 when checking "$spool_directory/$local_part": Permission denied (euid=uuuu egid=EXIM_GID)
diff --git a/test/log/0631 b/test/log/0631
new file mode 100644 (file)
index 0000000..d7e5e70
--- /dev/null
@@ -0,0 +1,6 @@
+
+******** SERVER ********
+1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port PORT_D
+1999-03-02 09:44:33 10HmaX-0005vi-00 <= test_3@paniclogrouter H=(test.ex) [127.0.0.1] P=esmtp S=sss
+1999-03-02 09:44:33 10HmaX-0005vi-00 => :blackhole: <dest3@test.ex> R=r0
+1999-03-02 09:44:33 10HmaX-0005vi-00 Completed
diff --git a/test/paniclog/0629 b/test/paniclog/0629
new file mode 100644 (file)
index 0000000..b51843e
--- /dev/null
@@ -0,0 +1,3 @@
+
+******** SERVER ********
+1999-03-02 09:44:33 H=(test.ex) [127.0.0.1] F=<test_2@paniclogrcpt> rejected RCPT <dest2@test.ex>
diff --git a/test/paniclog/0630 b/test/paniclog/0630
new file mode 100644 (file)
index 0000000..6e72b86
--- /dev/null
@@ -0,0 +1,4 @@
+
+******** SERVER ********
+1999-03-02 09:44:33 10HmaX-0005vi-00 Tainted filename 'TESTSUITE/spool/dest3'
+1999-03-02 09:44:33 10HmaX-0005vi-00 failed to open TESTSUITE/spool/dest3 when checking "$spool_directory/$local_part": Permission denied (euid=uuuu egid=EXIM_GID)
index 8e3a1f42caefe897fa24fa2bff3167963e8fb07c..051508eca32e1c7f43807a4e98facd382c7a692a 100755 (executable)
@@ -1929,12 +1929,6 @@ $munges =
     { 'mainlog'   => 's/^(.* SMTP protocol synchronization error .* next input=.{8}).*$/$1<suppressed>/',
       'rejectlog' => 's/^(.* SMTP protocol synchronization error .* next input=.{8}).*$/$1<suppressed>/'},
 
-    'debuglog_stdout' =>
-    { 'stdout' => 's/^\d\d:\d\d:\d\d\s+\d+ //;
-                  s/Process \d+ is ready for new message/Process pppp is ready for new message/;
-                 s/^(?:daemon-accept forked for daemon-accept-delivery:|forked delivery process) \K\d+$/pppp/;'
-    },
-
     'timeout_errno' =>         # actual errno differs Solaris vs. Linux
     { 'mainlog' => 's/((?:host|message) deferral .* errno) <\d+> /$1 <EEE> /' },
 
diff --git a/test/scripts/0000-Basic/0574 b/test/scripts/0000-Basic/0574
deleted file mode 100644 (file)
index d227b5a..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-# debug logging ACL modifier
-munge debuglog_stdout
-#
-exim -DSERVER=server -bd -oX PORT_D
-****
-#
-client 127.0.0.1 PORT_D
-??? 220
-EHLO test.ex
-??? 250-
-??? 250-
-??? 250-
-??? 250-
-??? 250 
-MAIL FROM:<tester@test.ex>
-??? 250
-RCPT TO:<dest@test.ex>
-??? 250
-DATA
-??? 354
-Subject: test
-
-body
-.
-??? 250
-QUIT
-??? 221
-****
-#
-killdaemon
-#
-1
-cat DIR/spool/log/serverdebuglog_1
-#
-cp DIR/spool/log/serverdebuglog_2 /dev/stderr
-#
-no_msglog_check
diff --git a/test/scripts/0000-Basic/0628 b/test/scripts/0000-Basic/0628
new file mode 100644 (file)
index 0000000..d227b5a
--- /dev/null
@@ -0,0 +1,37 @@
+# debug logging ACL modifier
+munge debuglog_stdout
+#
+exim -DSERVER=server -bd -oX PORT_D
+****
+#
+client 127.0.0.1 PORT_D
+??? 220
+EHLO test.ex
+??? 250-
+??? 250-
+??? 250-
+??? 250-
+??? 250 
+MAIL FROM:<tester@test.ex>
+??? 250
+RCPT TO:<dest@test.ex>
+??? 250
+DATA
+??? 354
+Subject: test
+
+body
+.
+??? 250
+QUIT
+??? 221
+****
+#
+killdaemon
+#
+1
+cat DIR/spool/log/serverdebuglog_1
+#
+cp DIR/spool/log/serverdebuglog_2 /dev/stderr
+#
+no_msglog_check
diff --git a/test/scripts/0000-Basic/0629 b/test/scripts/0000-Basic/0629
new file mode 100644 (file)
index 0000000..758b7b1
--- /dev/null
@@ -0,0 +1,26 @@
+# debug logging ACL modifier, pretrigger
+#
+exim -DSERVER=server -bd -oX PORT_D
+****
+#
+client 127.0.0.1 PORT_D
+??? 220
+EHLO test.ex
+??? 250-
+??? 250-
+??? 250-
+??? 250-
+??? 250 
+MAIL FROM:<test_2@paniclogrcpt>
+??? 250
+RCPT TO:<dest2@test.ex>
+??? 550
+QUIT
+??? 221
+****
+#
+killdaemon
+#
+cp DIR/spool/log/serverdebuglog_rcpt /dev/stderr
+#
+no_msglog_check
diff --git a/test/scripts/0000-Basic/0630 b/test/scripts/0000-Basic/0630
new file mode 100644 (file)
index 0000000..55a5290
--- /dev/null
@@ -0,0 +1,30 @@
+# debug logging ACL modifier, trigger in router
+#
+exim -DSERVER=server -bd -oX PORT_D
+****
+#
+client 127.0.0.1 PORT_D
+??? 220
+EHLO test.ex
+??? 250-
+??? 250-
+??? 250-
+??? 250-
+??? 250 
+MAIL FROM:<test_3@paniclogrouter>
+??? 250
+RCPT TO:<dest3@test.ex>
+??? 250
+DATA
+??? 354
+.
+??? 250
+QUIT
+??? 221
+****
+#
+killdaemon
+#
+cp DIR/spool/log/serverdebuglog_router /dev/stderr
+#
+no_msglog_check
diff --git a/test/scripts/0000-Basic/0631 b/test/scripts/0000-Basic/0631
new file mode 100644 (file)
index 0000000..75cf31f
--- /dev/null
@@ -0,0 +1,30 @@
+# debug logging ACL modifier, pretrigger, trigger by ACL command
+#
+exim -DSERVER=server -bd -oX PORT_D
+****
+#
+client 127.0.0.1 PORT_D
+??? 220
+EHLO test.ex
+??? 250-
+??? 250-
+??? 250-
+??? 250-
+??? 250 
+MAIL FROM:<test_3@paniclogrouter>
+??? 250
+RCPT TO:<dest3@test.ex>
+??? 250
+DATA
+??? 354
+.
+??? 250
+QUIT
+??? 221
+****
+#
+killdaemon
+#
+cp DIR/spool/log/serverdebuglog_acl /dev/stderr
+#
+no_msglog_check
diff --git a/test/stderr/0574 b/test/stderr/0574
deleted file mode 100644 (file)
index ab3ddcb..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-01:01:01 1234 accept: condition test succeeded in ACL "chk_data"
-01:01:01 1234 end of ACL "chk_data": ACCEPT
-01:01:01 1234  ╭considering: ${tod_full}
-01:01:01 1234  ├──expanding: ${tod_full}
-01:01:01 1234  ╰─────result: Tue, 2 Mar 1999 09:44:33 +0000
-01:01:01 1234 Writing spool header file: TESTSUITE/spool//input//hdr.10HmaX-0005vi-00
-01:01:01 1234 DSN: **** SPOOL_OUT - address: <dest@test.ex> errorsto: <NULL> orcpt: <NULL> dsn_flags: 0x0
-01:01:01 1234 Renaming spool header file: TESTSUITE/spool//input//10HmaX-0005vi-00-H
-01:01:01 1234 Size of headers = sss
-01:01:01 1234 LOG: MAIN
-01:01:01 1234   <= tester@test.ex H=(test.ex) [127.0.0.1] P=esmtp S=sss
-01:01:01 1234 SMTP>> 250 OK id=10HmaX-0005vi-00
-01:01:01 1234 search_tidyup called
-01:01:01 1234 Sender: tester@test.ex
-01:01:01 1234 Recipients:
-01:01:01 1234   dest@test.ex
-01:01:01 1234 forked delivery process1235 
-01:01:01 1234 Process1236  is ready for new message
-01:01:01 1234 smtp_setup_msg entered
-01:01:01 1234 SMTP<< QUIT
-01:01:01 1234 SMTP>> 221 myhost.test.ex closing connection
-01:01:01 1234 LOG: smtp_connection MAIN
-01:01:01 1234   SMTP connection from (test.ex) [127.0.0.1] closed by QUIT
-01:01:01 1237 Exim version x.yz uid=EXIM_UID gid=EXIM_GID pid=pppp D=fff9ffff
-01:01:01 1237 macros_trusted overridden to true by whitelisting
-01:01:01 1237 changed uid/gid: forcing real = effective
-01:01:01 1237   uid=uuuu gid=EXIM_GID pid=pppp
-01:01:01 1237 adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys
-01:01:01 1237 configuration file is TESTSUITE/test-config
-01:01:01 1237 trusted user
-01:01:01 1237 admin user
-01:01:01 1237 dropping to exim gid; retaining priv uid
-01:01:01 1237 set_process_info: pppp delivering specified messages
-01:01:01 1237 set_process_info: pppp delivering 10HmaX-0005vi-00
-01:01:01 1237 Trying spool file TESTSUITE/spool//input//10HmaX-0005vi-00-D
-01:01:01 1237 reading spool file 10HmaX-0005vi-00-H
-01:01:01 1237 user=EXIMUSER uid=EXIM_UID gid=EXIM_GID sender=tester@test.ex
-01:01:01 1237 sender_fullhost = (test.ex) [127.0.0.1]
-01:01:01 1237 sender_rcvhost = [127.0.0.1] (helo=test.ex)
-01:01:01 1237 sender_local=0 ident=unset
-01:01:01 1237 Non-recipients:
-01:01:01 1237  Empty Tree
-01:01:01 1237 ---- End of tree ----
-01:01:01 1237 recipients_count=1
-01:01:01 1237 **** SPOOL_IN - No additional fields
-01:01:01 1237 body_linecount=1 message_linecount=7
-01:01:01 1237 DSN: set orcpt:   flags: 0x0
-01:01:01 1237 Delivery address list:
-01:01:01 1237   dest@test.ex 
-01:01:01 1237  locking TESTSUITE/spool/db/retry.lockfile
-01:01:01 1237  locked  TESTSUITE/spool/db/retry.lockfile
-01:01:01 1237  EXIM_DBOPEN: file <TESTSUITE/spool/db/retry> dir <TESTSUITE/spool/db> flags=O_RDONLY
-01:01:01 1237  returned from EXIM_DBOPEN: (nil)
-01:01:01 1237  failed to open DB file TESTSUITE/spool/db/retry: No such file or directory
-01:01:01 1237 no retry data available
-01:01:01 1237 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-01:01:01 1237 Considering: dest@test.ex
-01:01:01 1237 unique = dest@test.ex
-01:01:01 1237 no   domain  retry record
-01:01:01 1237 no   address retry record
-01:01:01 1237 dest@test.ex: queued for routing
-01:01:01 1237 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-01:01:01 1237 routing dest@test.ex
-01:01:01 1237 --------> r1 router <--------
-01:01:01 1237 local_part=dest domain=test.ex
-01:01:01 1237 calling r1 router
-01:01:01 1237 rda_interpret (string): ':blackhole:'
-01:01:01 1237 expanded: ':blackhole:'
-01:01:01 1237 file is not a filter file
-01:01:01 1237 parse_forward_list: :blackhole:
-01:01:01 1237 extract item: :blackhole:
-01:01:01 1237 address :blackhole:d
-01:01:01 1237 LOG: MAIN
-01:01:01 1237   => :blackhole: <dest@test.ex> R=r1
-01:01:01 1237 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-01:01:01 1237 After routing:
-01:01:01 1237   Local deliveries:
-01:01:01 1237   Remote deliveries:
-01:01:01 1237   Failed addresses:
-01:01:01 1237   Deferred addresses:
-01:01:01 1237 search_tidyup called
-01:01:01 1237 >>>>>>>>>>>>>>>> deliveries are done >>>>>>>>>>>>>>>>
-01:01:01 1237 changed uid/gid: post-delivery tidying
-01:01:01 1237   uid=EXIM_UID gid=EXIM_GID pid=pppp
-01:01:01 1237 set_process_info: pppp tidying up after delivering 10HmaX-0005vi-00
-01:01:01 1237 Processing retry items
-01:01:01 1237 Succeeded addresses:
-01:01:01 1237  dest@test.ex: no retry items
-01:01:01 1237 Failed addresses:
-01:01:01 1237 Deferred addresses:
-01:01:01 1237 end of retry processing
-01:01:01 1237 DSN: processing router : r1
-01:01:01 1237 DSN: processing successful delivery address: dest@test.ex
-01:01:01 1237 DSN: Sender_address: tester@test.ex
-01:01:01 1237 DSN: orcpt: NULL  flags: 0x0
-01:01:01 1237 DSN: envid: NULL  ret: 0
-01:01:01 1237 DSN: Final recipient: dest@test.ex
-01:01:01 1237 DSN: Remote SMTP server supports DSN: 0
-01:01:01 1237 DSN: not sending DSN success message
-01:01:01 1237 LOG: MAIN
-01:01:01 1237   Completed
-01:01:01 1237 end delivery of 10HmaX-0005vi-00
-01:01:01 1237 search_tidyup called
-01:01:01 1237 search_tidyup called
-01:01:01 1237 >>>>>>>>>>>>>>>> Exim pid=pppp (daemon-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
-01:01:01 1234 search_tidyup called
-01:01:01 1234 SMTP>>(close on process exit)
-01:01:01 1234 >>>>>>>>>>>>>>>> Exim pid=pppp (daemon-accept) terminating with rc=0 >>>>>>>>>>>>>>>>
-
-******** SERVER ********
diff --git a/test/stderr/0628 b/test/stderr/0628
new file mode 100644 (file)
index 0000000..ab3ddcb
--- /dev/null
@@ -0,0 +1,110 @@
+01:01:01 1234 accept: condition test succeeded in ACL "chk_data"
+01:01:01 1234 end of ACL "chk_data": ACCEPT
+01:01:01 1234  ╭considering: ${tod_full}
+01:01:01 1234  ├──expanding: ${tod_full}
+01:01:01 1234  ╰─────result: Tue, 2 Mar 1999 09:44:33 +0000
+01:01:01 1234 Writing spool header file: TESTSUITE/spool//input//hdr.10HmaX-0005vi-00
+01:01:01 1234 DSN: **** SPOOL_OUT - address: <dest@test.ex> errorsto: <NULL> orcpt: <NULL> dsn_flags: 0x0
+01:01:01 1234 Renaming spool header file: TESTSUITE/spool//input//10HmaX-0005vi-00-H
+01:01:01 1234 Size of headers = sss
+01:01:01 1234 LOG: MAIN
+01:01:01 1234   <= tester@test.ex H=(test.ex) [127.0.0.1] P=esmtp S=sss
+01:01:01 1234 SMTP>> 250 OK id=10HmaX-0005vi-00
+01:01:01 1234 search_tidyup called
+01:01:01 1234 Sender: tester@test.ex
+01:01:01 1234 Recipients:
+01:01:01 1234   dest@test.ex
+01:01:01 1234 forked delivery process1235 
+01:01:01 1234 Process1236  is ready for new message
+01:01:01 1234 smtp_setup_msg entered
+01:01:01 1234 SMTP<< QUIT
+01:01:01 1234 SMTP>> 221 myhost.test.ex closing connection
+01:01:01 1234 LOG: smtp_connection MAIN
+01:01:01 1234   SMTP connection from (test.ex) [127.0.0.1] closed by QUIT
+01:01:01 1237 Exim version x.yz uid=EXIM_UID gid=EXIM_GID pid=pppp D=fff9ffff
+01:01:01 1237 macros_trusted overridden to true by whitelisting
+01:01:01 1237 changed uid/gid: forcing real = effective
+01:01:01 1237   uid=uuuu gid=EXIM_GID pid=pppp
+01:01:01 1237 adding SSLKEYLOGFILE=TESTSUITE/spool/sslkeys
+01:01:01 1237 configuration file is TESTSUITE/test-config
+01:01:01 1237 trusted user
+01:01:01 1237 admin user
+01:01:01 1237 dropping to exim gid; retaining priv uid
+01:01:01 1237 set_process_info: pppp delivering specified messages
+01:01:01 1237 set_process_info: pppp delivering 10HmaX-0005vi-00
+01:01:01 1237 Trying spool file TESTSUITE/spool//input//10HmaX-0005vi-00-D
+01:01:01 1237 reading spool file 10HmaX-0005vi-00-H
+01:01:01 1237 user=EXIMUSER uid=EXIM_UID gid=EXIM_GID sender=tester@test.ex
+01:01:01 1237 sender_fullhost = (test.ex) [127.0.0.1]
+01:01:01 1237 sender_rcvhost = [127.0.0.1] (helo=test.ex)
+01:01:01 1237 sender_local=0 ident=unset
+01:01:01 1237 Non-recipients:
+01:01:01 1237  Empty Tree
+01:01:01 1237 ---- End of tree ----
+01:01:01 1237 recipients_count=1
+01:01:01 1237 **** SPOOL_IN - No additional fields
+01:01:01 1237 body_linecount=1 message_linecount=7
+01:01:01 1237 DSN: set orcpt:   flags: 0x0
+01:01:01 1237 Delivery address list:
+01:01:01 1237   dest@test.ex 
+01:01:01 1237  locking TESTSUITE/spool/db/retry.lockfile
+01:01:01 1237  locked  TESTSUITE/spool/db/retry.lockfile
+01:01:01 1237  EXIM_DBOPEN: file <TESTSUITE/spool/db/retry> dir <TESTSUITE/spool/db> flags=O_RDONLY
+01:01:01 1237  returned from EXIM_DBOPEN: (nil)
+01:01:01 1237  failed to open DB file TESTSUITE/spool/db/retry: No such file or directory
+01:01:01 1237 no retry data available
+01:01:01 1237 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+01:01:01 1237 Considering: dest@test.ex
+01:01:01 1237 unique = dest@test.ex
+01:01:01 1237 no   domain  retry record
+01:01:01 1237 no   address retry record
+01:01:01 1237 dest@test.ex: queued for routing
+01:01:01 1237 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+01:01:01 1237 routing dest@test.ex
+01:01:01 1237 --------> r1 router <--------
+01:01:01 1237 local_part=dest domain=test.ex
+01:01:01 1237 calling r1 router
+01:01:01 1237 rda_interpret (string): ':blackhole:'
+01:01:01 1237 expanded: ':blackhole:'
+01:01:01 1237 file is not a filter file
+01:01:01 1237 parse_forward_list: :blackhole:
+01:01:01 1237 extract item: :blackhole:
+01:01:01 1237 address :blackhole:d
+01:01:01 1237 LOG: MAIN
+01:01:01 1237   => :blackhole: <dest@test.ex> R=r1
+01:01:01 1237 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+01:01:01 1237 After routing:
+01:01:01 1237   Local deliveries:
+01:01:01 1237   Remote deliveries:
+01:01:01 1237   Failed addresses:
+01:01:01 1237   Deferred addresses:
+01:01:01 1237 search_tidyup called
+01:01:01 1237 >>>>>>>>>>>>>>>> deliveries are done >>>>>>>>>>>>>>>>
+01:01:01 1237 changed uid/gid: post-delivery tidying
+01:01:01 1237   uid=EXIM_UID gid=EXIM_GID pid=pppp
+01:01:01 1237 set_process_info: pppp tidying up after delivering 10HmaX-0005vi-00
+01:01:01 1237 Processing retry items
+01:01:01 1237 Succeeded addresses:
+01:01:01 1237  dest@test.ex: no retry items
+01:01:01 1237 Failed addresses:
+01:01:01 1237 Deferred addresses:
+01:01:01 1237 end of retry processing
+01:01:01 1237 DSN: processing router : r1
+01:01:01 1237 DSN: processing successful delivery address: dest@test.ex
+01:01:01 1237 DSN: Sender_address: tester@test.ex
+01:01:01 1237 DSN: orcpt: NULL  flags: 0x0
+01:01:01 1237 DSN: envid: NULL  ret: 0
+01:01:01 1237 DSN: Final recipient: dest@test.ex
+01:01:01 1237 DSN: Remote SMTP server supports DSN: 0
+01:01:01 1237 DSN: not sending DSN success message
+01:01:01 1237 LOG: MAIN
+01:01:01 1237   Completed
+01:01:01 1237 end delivery of 10HmaX-0005vi-00
+01:01:01 1237 search_tidyup called
+01:01:01 1237 search_tidyup called
+01:01:01 1237 >>>>>>>>>>>>>>>> Exim pid=pppp (daemon-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
+01:01:01 1234 search_tidyup called
+01:01:01 1234 SMTP>>(close on process exit)
+01:01:01 1234 >>>>>>>>>>>>>>>> Exim pid=pppp (daemon-accept) terminating with rc=0 >>>>>>>>>>>>>>>>
+
+******** SERVER ********
diff --git a/test/stderr/0629 b/test/stderr/0629
new file mode 100644 (file)
index 0000000..ad96aa7
--- /dev/null
@@ -0,0 +1,22 @@
+accept: condition test succeeded in ACL "chk_mail"
+end of ACL "chk_mail": ACCEPT
+SMTP>> 250 OK
+SMTP<< RCPT TO:<dest2@test.ex>
+using ACL "chk_rcpt"
+processing "deny" (TESTSUITE/test-config 20)
+check log_reject_target = panic
+deny: condition test succeeded in ACL "chk_rcpt"
+end of ACL "chk_rcpt": DENY
+SMTP>> 550 Administrative prohibition
+LOG: PANIC
+  H=(test.ex) [127.0.0.1] F=<test_2@paniclogrcpt> rejected RCPT <dest2@test.ex>
+SMTP<< QUIT
+SMTP>> 221 myhost.test.ex closing connection
+LOG: smtp_connection MAIN
+  SMTP connection from (test.ex) [127.0.0.1] closed by QUIT
+search_tidyup called
+SMTP>>(close on process exit)
+>>>>>>>>>>>>>>>> Exim pid=pppp (daemon-accept) terminating with rc=0 >>>>>>>>>>>>>>>>
+
+******** SERVER ********
+1999-03-02 09:44:33 H=(test.ex) [127.0.0.1] F=<test_2@paniclogrcpt> rejected RCPT <dest2@test.ex>
diff --git a/test/stderr/0630 b/test/stderr/0630
new file mode 100644 (file)
index 0000000..271f449
--- /dev/null
@@ -0,0 +1,46 @@
+01:01:01 1234 reading spool file 10HmaX-0005vi-00-H
+01:01:01 1234 user=EXIMUSER uid=EXIM_UID gid=EXIM_GID sender=test_3@paniclogrouter
+01:01:01 1234 sender_fullhost = (test.ex) [127.0.0.1]
+01:01:01 1234 sender_rcvhost = [127.0.0.1] (helo=test.ex)
+01:01:01 1234 sender_local=0 ident=unset
+01:01:01 1234 Non-recipients:
+01:01:01 1234  Empty Tree
+01:01:01 1234 ---- End of tree ----
+01:01:01 1234 recipients_count=1
+01:01:01 1234 **** SPOOL_IN - No additional fields
+01:01:01 1234 body_linecount=0 message_linecount=6
+01:01:01 1234 DSN: set orcpt:   flags: 0x0
+01:01:01 1234 Delivery address list:
+01:01:01 1234   dest3@test.ex 
+01:01:01 1234  locking TESTSUITE/spool/db/retry.lockfile
+01:01:01 1234  locked  TESTSUITE/spool/db/retry.lockfile
+01:01:01 1234  EXIM_DBOPEN: file <TESTSUITE/spool/db/retry> dir <TESTSUITE/spool/db> flags=O_RDONLY
+01:01:01 1234  returned from EXIM_DBOPEN: (nil)
+01:01:01 1234  failed to open DB file TESTSUITE/spool/db/retry: No such file or directory
+01:01:01 1234 no retry data available
+01:01:01 1234 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+01:01:01 1234 Considering: dest3@test.ex
+01:01:01 1234 unique = dest3@test.ex
+01:01:01 1234 no   domain  retry record
+01:01:01 1234 no   address retry record
+01:01:01 1234 dest3@test.ex: queued for routing
+01:01:01 1234 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+01:01:01 1234 routing dest3@test.ex
+01:01:01 1234 --------> r0 router <--------
+01:01:01 1234 local_part=dest3 domain=test.ex
+01:01:01 1234 checking local_parts
+01:01:01 1234  ╭considering: $spool_directory/$local_part
+01:01:01 1234  ├considering: /$local_part
+01:01:01 1234  ├───────text: /
+01:01:01 1234  ├considering: $local_part
+01:01:01 1234  ├──expanding: $spool_directory/$local_part
+01:01:01 1234  ╰─────result: TESTSUITE/spool/dest3
+01:01:01 1234             ╰──(tainted)
+01:01:01 1234 LOG: MAIN PANIC
+01:01:01 1234   Tainted filename 'TESTSUITE/spool/dest3'
+01:01:01 1234 LOG: MAIN PANIC DIE
+01:01:01 1234   failed to open TESTSUITE/spool/dest3 when checking "$spool_directory/$local_part": Permission denied (euid=uuuu egid=EXIM_GID)
+01:01:01 1234 search_tidyup called
+01:01:01 1234 >>>>>>>>>>>>>>>> Exim pid=pppp (daemon-accept-delivery) terminating with rc=1 >>>>>>>>>>>>>>>>
+
+******** SERVER ********
diff --git a/test/stderr/0631 b/test/stderr/0631
new file mode 100644 (file)
index 0000000..f0dc930
--- /dev/null
@@ -0,0 +1,16 @@
+  message: yes3
+  message: yes4
+  message: yes5
+  message: yes6
+accept: condition test succeeded in ACL "chk_mail"
+end of ACL "chk_mail": ACCEPT
+using ACL "chk_rcpt"
+processing "accept" (TESTSUITE/test-config 27)
+check control = debug/trigger=now
+accept: condition test succeeded in ACL "chk_rcpt"
+end of ACL "chk_rcpt": ACCEPT
+using ACL "chk_data"
+processing "accept" (TESTSUITE/test-config 30)
+check control = debug/stop
+
+******** SERVER ********
diff --git a/test/stdout/0574 b/test/stdout/0574
deleted file mode 100644 (file)
index 7311e2d..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-Connecting to 127.0.0.1 port 1225 ... connected
-??? 220
-<<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
->>> EHLO test.ex
-??? 250-
-<<< 250-myhost.test.ex Hello test.ex [127.0.0.1]
-??? 250-
-<<< 250-SIZE 52428800
-??? 250-
-<<< 250-8BITMIME
-??? 250-
-<<< 250-PIPELINING
-??? 250 
-<<< 250 HELP
->>> MAIL FROM:<tester@test.ex>
-??? 250
-<<< 250 OK
->>> RCPT TO:<dest@test.ex>
-??? 250
-<<< 250 Accepted
->>> DATA
-??? 354
-<<< 354 Enter message, ending with "." on a line by itself
->>> Subject: test
->>> 
->>> body
->>> .
-??? 250
-<<< 250 OK id=10HmaX-0005vi-00
->>> QUIT
-??? 221
-<<< 221 myhost.test.ex closing connection
-End of script
diff --git a/test/stdout/0628 b/test/stdout/0628
new file mode 100644 (file)
index 0000000..7311e2d
--- /dev/null
@@ -0,0 +1,33 @@
+Connecting to 127.0.0.1 port 1225 ... connected
+??? 220
+<<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+>>> EHLO test.ex
+??? 250-
+<<< 250-myhost.test.ex Hello test.ex [127.0.0.1]
+??? 250-
+<<< 250-SIZE 52428800
+??? 250-
+<<< 250-8BITMIME
+??? 250-
+<<< 250-PIPELINING
+??? 250 
+<<< 250 HELP
+>>> MAIL FROM:<tester@test.ex>
+??? 250
+<<< 250 OK
+>>> RCPT TO:<dest@test.ex>
+??? 250
+<<< 250 Accepted
+>>> DATA
+??? 354
+<<< 354 Enter message, ending with "." on a line by itself
+>>> Subject: test
+>>> 
+>>> body
+>>> .
+??? 250
+<<< 250 OK id=10HmaX-0005vi-00
+>>> QUIT
+??? 221
+<<< 221 myhost.test.ex closing connection
+End of script
diff --git a/test/stdout/0629 b/test/stdout/0629
new file mode 100644 (file)
index 0000000..eaa8463
--- /dev/null
@@ -0,0 +1,24 @@
+Connecting to 127.0.0.1 port 1225 ... connected
+??? 220
+<<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+>>> EHLO test.ex
+??? 250-
+<<< 250-myhost.test.ex Hello test.ex [127.0.0.1]
+??? 250-
+<<< 250-SIZE 52428800
+??? 250-
+<<< 250-8BITMIME
+??? 250-
+<<< 250-PIPELINING
+??? 250 
+<<< 250 HELP
+>>> MAIL FROM:<test_2@paniclogrcpt>
+??? 250
+<<< 250 OK
+>>> RCPT TO:<dest2@test.ex>
+??? 550
+<<< 550 Administrative prohibition
+>>> QUIT
+??? 221
+<<< 221 myhost.test.ex closing connection
+End of script
diff --git a/test/stdout/0630 b/test/stdout/0630
new file mode 100644 (file)
index 0000000..8aec059
--- /dev/null
@@ -0,0 +1,30 @@
+Connecting to 127.0.0.1 port 1225 ... connected
+??? 220
+<<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+>>> EHLO test.ex
+??? 250-
+<<< 250-myhost.test.ex Hello test.ex [127.0.0.1]
+??? 250-
+<<< 250-SIZE 52428800
+??? 250-
+<<< 250-8BITMIME
+??? 250-
+<<< 250-PIPELINING
+??? 250 
+<<< 250 HELP
+>>> MAIL FROM:<test_3@paniclogrouter>
+??? 250
+<<< 250 OK
+>>> RCPT TO:<dest3@test.ex>
+??? 250
+<<< 250 Accepted
+>>> DATA
+??? 354
+<<< 354 Enter message, ending with "." on a line by itself
+>>> .
+??? 250
+<<< 250 OK id=10HmaX-0005vi-00
+>>> QUIT
+??? 221
+<<< 221 myhost.test.ex closing connection
+End of script
diff --git a/test/stdout/0631 b/test/stdout/0631
new file mode 100644 (file)
index 0000000..5ca8747
--- /dev/null
@@ -0,0 +1,30 @@
+Connecting to 127.0.0.1 port 1225 ... connected
+??? 220
+<<< 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000
+>>> EHLO test.ex
+??? 250-
+<<< 250-myhost.test.ex Hello test.ex [127.0.0.1]
+??? 250-
+<<< 250-SIZE 52428800
+??? 250-
+<<< 250-8BITMIME
+??? 250-
+<<< 250-PIPELINING
+??? 250 
+<<< 250 HELP
+>>> MAIL FROM:<test_3@paniclogrouter>
+??? 250
+<<< 250 yes6
+>>> RCPT TO:<dest3@test.ex>
+??? 250
+<<< 250 Accepted
+>>> DATA
+??? 354
+<<< 354 Enter message, ending with "." on a line by itself
+>>> .
+??? 250
+<<< 250 OK id=10HmaX-0005vi-00
+>>> QUIT
+??? 221
+<<< 221 myhost.test.ex closing connection
+End of script