Heiko Schlitterman's patch for log_selector=+pid, plus appropriate
authorPhilip Hazel <ph10@hermes.cam.ac.uk>
Wed, 31 Jan 2007 16:52:12 +0000 (16:52 +0000)
committerPhilip Hazel <ph10@hermes.cam.ac.uk>
Wed, 31 Jan 2007 16:52:12 +0000 (16:52 +0000)
patches for eximstats and eximon (his patch dealt with exigrep).

19 files changed:
doc/doc-txt/ChangeLog
doc/doc-txt/NewStuff
src/ACKNOWLEDGMENTS
src/exim_monitor/em_log.c
src/exim_monitor/em_version.c
src/src/exigrep.src
src/src/eximstats.src
src/src/globals.c
src/src/log.c
src/src/macros.h
test/README
test/confs/0551 [new file with mode: 0644]
test/log/0551 [new file with mode: 0644]
test/mail/0551.userx [new file with mode: 0644]
test/mail/0551.usery [new file with mode: 0644]
test/mail/0551.userz [new file with mode: 0644]
test/runtest
test/scripts/0000-Basic/0551 [new file with mode: 0644]
test/stdout/0551 [new file with mode: 0644]

index e36d4bb50df990f7a9ae5ac59fd5f28ecd824bc7..4cb842c6dcbf9a70f50cc6738d68256f887605d0 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.466 2007/01/31 11:30:08 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.467 2007/01/31 16:52:12 ph10 Exp $
 
 Change log file for Exim from version 4.21
 -------------------------------------------
 
 Change log file for Exim from version 4.21
 -------------------------------------------
@@ -69,6 +69,8 @@ PH/12 Added $sending_ip_address and $sending_port (mostly Magnus Holmgren's
 
 PH/13 Added ${rfc2047d: to decoded RFC 2047 strings.
 
 
 PH/13 Added ${rfc2047d: to decoded RFC 2047 strings.
 
+PH/14 Added log_selector = +pid.
+
 
 Exim version 4.66
 -----------------
 
 Exim version 4.66
 -----------------
index cfa846c4892797408fb2a9955d6bbd034817e555..ccd5989cbcd2704556554a73c30d1af57c7a3ac9 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/NewStuff,v 1.133 2007/01/31 11:30:08 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/NewStuff,v 1.134 2007/01/31 16:52:12 ph10 Exp $
 
 New Features in Exim
 --------------------
 
 New Features in Exim
 --------------------
@@ -228,6 +228,10 @@ Version 4.67
     headers_charset. Overlong RFC 2047 "words" are not recognized unless
     check_rfc2047_length is set false.
 
     headers_charset. Overlong RFC 2047 "words" are not recognized unless
     check_rfc2047_length is set false.
 
+10. There is a new log selector called "pid", which causes the current process
+    id to be added to every log line, in square brackets, immediately after the
+    time and date.
+
 
 Version 4.66
 ------------
 
 Version 4.66
 ------------
index a855be12cbea36a548fda02c82a0d5fe06423809..1a39046c3809b657da9a8dcbb0f8a8982d0b4945 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/src/ACKNOWLEDGMENTS,v 1.70 2007/01/31 11:30:08 ph10 Exp $
+$Cambridge: exim/src/ACKNOWLEDGMENTS,v 1.71 2007/01/31 16:52:12 ph10 Exp $
 
 EXIM ACKNOWLEDGEMENTS
 
 
 EXIM ACKNOWLEDGEMENTS
 
@@ -240,6 +240,7 @@ Jonathan Sambrook         Suggested patch for expanding uid and gid lists
 Peter Savitch             Diagnosis of FPE bug when statvfs() fails on spool
 Harald Schueler           Patch for dn_expand() failure on truncated data
 Heiko Schlichting         Diagnosis of intermittent daemon crash bug
 Peter Savitch             Diagnosis of FPE bug when statvfs() fails on spool
 Harald Schueler           Patch for dn_expand() failure on truncated data
 Heiko Schlichting         Diagnosis of intermittent daemon crash bug
+Heiko Schlitterman        Proposed patch for +pid
 Stephan Schulz            Patch for $host_data caching error
 Lai Zit Seng              Patch for radiusclient 0.4.9 interface bugs
 Tony Sheen                Log files with datestamped names and auto rollover
 Stephan Schulz            Patch for $host_data caching error
 Lai Zit Seng              Patch for radiusclient 0.4.9 interface bugs
 Tony Sheen                Log files with datestamped names and auto rollover
index e87d5207e21d0a339ab5a533e182504231856124..409f2daf6c2e8a28b3e88a053fb81479e1c96a39 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/exim_monitor/em_log.c,v 1.4 2007/01/08 10:50:17 ph10 Exp $ */
+/* $Cambridge: exim/src/exim_monitor/em_log.c,v 1.5 2007/01/31 16:52:12 ph10 Exp $ */
 
 /*************************************************
 *                 Exim Monitor                   *
 
 /*************************************************
 *                 Exim Monitor                   *
@@ -7,7 +7,7 @@
 /* Copyright (c) University of Cambridge 1995 - 2007 */
 /* See the file NOTICE for conditions of use and distribution. */
 
 /* Copyright (c) University of Cambridge 1995 - 2007 */
 /* See the file NOTICE for conditions of use and distribution. */
 
-/* This module contains code for scanning the smaill log,
+/* This module contains code for scanning the main log,
 extracting information from it, and displaying a "tail". */
 
 #include "em_hdr.h"
 extracting information from it, and displaying a "tail". */
 
 #include "em_hdr.h"
@@ -250,14 +250,20 @@ if (LOG != NULL)
       }
 
     /* Munge the log entry and display shortened form on one line.
       }
 
     /* Munge the log entry and display shortened form on one line.
-    We omit the date and show only the time. Remove any time zone offset. */
+    We omit the date and show only the time. Remove any time zone offset.
+    Take note of the presence of [pid]. */
 
     if (pcre_exec(yyyymmdd_regex,NULL,CS buffer,length,0,PCRE_EOPT,NULL,0) >= 0)
       {
 
     if (pcre_exec(yyyymmdd_regex,NULL,CS buffer,length,0,PCRE_EOPT,NULL,0) >= 0)
       {
+      int pidlength = 0;
       if ((buffer[20] == '+' || buffer[20] == '-') &&
           isdigit(buffer[21]) && buffer[25] == ' ')
         memmove(buffer + 20, buffer + 26, Ustrlen(buffer + 26) + 1);
       if ((buffer[20] == '+' || buffer[20] == '-') &&
           isdigit(buffer[21]) && buffer[25] == ' ')
         memmove(buffer + 20, buffer + 26, Ustrlen(buffer + 26) + 1);
-      id = string_copyn(buffer + 20, MESSAGE_ID_LENGTH);
+      if (buffer[20] == '[')
+        {
+        while (Ustrchr("[]0123456789", buffer[20+pidlength++]) != NULL);
+        }
+      id = string_copyn(buffer + 20 + pidlength, MESSAGE_ID_LENGTH);
       show_log("%s", buffer+11);
       }
     else
       show_log("%s", buffer+11);
       }
     else
index 871fbf199d72591eb969e11640fdbf93ff71e3a1..4a6f3ce4e8ec71e07c8098fa9345d44f60615937 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/exim_monitor/em_version.c,v 1.4 2007/01/08 10:50:17 ph10 Exp $ */
+/* $Cambridge: exim/src/exim_monitor/em_version.c,v 1.5 2007/01/31 16:52:12 ph10 Exp $ */
 
 /*************************************************
 *                  Exim Monitor                  *
 
 /*************************************************
 *                  Exim Monitor                  *
@@ -21,7 +21,7 @@ version_init(void)
 int i = 0;
 uschar today[20];
 
 int i = 0;
 uschar today[20];
 
-version_string = US"2.05";
+version_string = US"2.06";
 
 Ustrcpy(today, __DATE__);
 if (today[4] == ' ') i = 1;
 
 Ustrcpy(today, __DATE__);
 if (today[4] == ' ') i = 1;
index c6ccbfdc50e3d0115e74108f0fd6c0a241481f39..f888984b0c8b8805748d599f7321c1fb667b0a83 100644 (file)
@@ -1,9 +1,9 @@
 #! PERL_COMMAND -w
 #! PERL_COMMAND -w
-# $Cambridge: exim/src/src/exigrep.src,v 1.3 2005/08/01 13:28:30 ph10 Exp $
+# $Cambridge: exim/src/src/exigrep.src,v 1.4 2007/01/31 16:52:12 ph10 Exp $
 
 use strict;
 
 
 use strict;
 
-# Copyright (c) 2004 University of Cambridge.
+# Copyright (c) 2007 University of Cambridge.
 # See the file NOTICE for conditions of use and distribution.
 
 # Except when they appear in comments, the following placeholders in this
 # See the file NOTICE for conditions of use and distribution.
 
 # Except when they appear in comments, the following placeholders in this
@@ -68,9 +68,9 @@ return unless
 
 # Handle the case when the log line belongs to a specific message. We save
 # lines for specific messages until the message is complete. Then either print
 
 # Handle the case when the log line belongs to a specific message. We save
 # lines for specific messages until the message is complete. Then either print
-# discard.
+# or discard.
 
 
-if (my($id) = $entry =~ /^(\w{6}\-\w{6}\-\w{2})/)
+if (my($id) = $entry =~ /^(?:\[\d+\]\s)?(\w{6}\-\w{6}\-\w{2})/)
   {
   $saved{$id} = '' unless defined($saved{$id});
 
   {
   $saved{$id} = '' unless defined($saved{$id});
 
index 539c756d7aacb7327852e965fcd977b5095638b0..88eb69fe83b3d849b59d3c965cd5139704340f28 100644 (file)
@@ -1,5 +1,5 @@
 #!PERL_COMMAND -w
 #!PERL_COMMAND -w
-# $Cambridge: exim/src/src/eximstats.src,v 1.12 2007/01/22 15:14:01 steve Exp $
+# $Cambridge: exim/src/src/eximstats.src,v 1.13 2007/01/31 16:52:12 ph10 Exp $
 
 # Copyright (c) 2001 University of Cambridge.
 # See the file NOTICE for conditions of use and distribution.
 
 # Copyright (c) 2001 University of Cambridge.
 # See the file NOTICE for conditions of use and distribution.
 # 2006-11-27  V1.52 Steve Campbell
 #             Tally any reject message containing SpamAssassin.
 #
 # 2006-11-27  V1.52 Steve Campbell
 #             Tally any reject message containing SpamAssassin.
 #
+# 2007-01-31  V1.53 Philip Hazel
+#             Allow for [pid] after date in log lines
+#
 #
 #
 # For documentation on the logfile format, see
 #
 #
 # For documentation on the logfile format, see
@@ -558,7 +561,7 @@ use vars qw($WEEK $DAY $HOUR $MINUTE);
 
 @days_per_month = (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334);
 $gig     = 1024 * 1024 * 1024;
 
 @days_per_month = (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334);
 $gig     = 1024 * 1024 * 1024;
-$VERSION = '1.52';
+$VERSION = '1.53';
 
 # How much space do we allow for the Hosts/Domains/Emails/Edomains column headers?
 $COLUMN_WIDTHS = 8;
 
 # How much space do we allow for the Hosts/Domains/Emails/Edomains column headers?
 $COLUMN_WIDTHS = 8;
@@ -1821,7 +1824,7 @@ sub generate_parser {
 
     $length = length($_);
     next if ($length < 38);
 
     $length = length($_);
     next if ($length < 38);
-    next unless /^(\\d{4}\\-\\d\\d-\\d\\d\\s(\\d\\d):(\\d\\d):\\d\\d( [-+]\\d\\d\\d\\d)?)/o;
+    next unless /^(\\d{4}\\-\\d\\d-\\d\\d\\s(\\d\\d):(\\d\\d):\\d\\d( [-+]\\d\\d\\d\\d)?)( \\[\\d+\\])?/o;
 
     ($tod,$m_hour,$m_min) = ($1,$2,$3);
 
 
     ($tod,$m_hour,$m_min) = ($1,$2,$3);
 
@@ -1834,6 +1837,12 @@ sub generate_parser {
       $extra = 0;
     }
 
       $extra = 0;
     }
 
+    # PH - watch for PID added after the timestamp.
+    if (defined($5)) {
+      $extra += length($5);
+      next if ($length < 38 + $extra);
+    }
+
     $id   = substr($_, 20 + $extra, 16);
     $flag = substr($_, 37 + $extra, 2);
 
     $id   = substr($_, 20 + $extra, 16);
     $flag = substr($_, 37 + $extra, 2);
 
index 880b9998586fc7cba3a2bf5aed92ce5a20a16d73..b030c7f7b4a43add87d51239f8e606bd3f14a522 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/globals.c,v 1.66 2007/01/30 15:10:59 ph10 Exp $ */
+/* $Cambridge: exim/src/src/globals.c,v 1.67 2007/01/31 16:52:12 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -668,6 +668,8 @@ top bit). They are never used in calls to log_write(), but are tested
 independently. This separation became necessary when the number of log
 selectors was getting close to filling a 32-bit word. */
 
 independently. This separation became necessary when the number of log
 selectors was getting close to filling a 32-bit word. */
 
+/* Note that this list must be in alphabetical order. */
+
 bit_table log_options[]        = {
   { US"acl_warn_skipped",             LX_acl_warn_skipped },
   { US"address_rewrite",              L_address_rewrite },
 bit_table log_options[]        = {
   { US"acl_warn_skipped",             LX_acl_warn_skipped },
   { US"address_rewrite",              L_address_rewrite },
@@ -686,6 +688,7 @@ bit_table log_options[]        = {
   { US"incoming_port",                LX_incoming_port },
   { US"lost_incoming_connection",     L_lost_incoming_connection },
   { US"outgoing_port",                LX_outgoing_port },
   { US"incoming_port",                LX_incoming_port },
   { US"lost_incoming_connection",     L_lost_incoming_connection },
   { US"outgoing_port",                LX_outgoing_port },
+  { US"pid",                          LX_pid },
   { US"queue_run",                    L_queue_run },
   { US"queue_time",                   LX_queue_time },
   { US"queue_time_overall",           LX_queue_time_overall },
   { US"queue_run",                    L_queue_run },
   { US"queue_time",                   LX_queue_time },
   { US"queue_time_overall",           LX_queue_time_overall },
index 2757ee0b412837db796610f2e91606a20553a4da..5cc30928747c83ae0f0e1d740dccadb2ac479432 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/log.c,v 1.11 2007/01/08 10:50:18 ph10 Exp $ */
+/* $Cambridge: exim/src/src/log.c,v 1.12 2007/01/31 16:52:12 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -732,11 +732,21 @@ if (!write_rejectlog) flags &= ~LOG_REJECT;
 id except for the process log and when called by a utility. */
 
 ptr = log_buffer;
 id except for the process log and when called by a utility. */
 
 ptr = log_buffer;
+sprintf(CS ptr, "%s ", tod_stamp(tod_log));
+while(*ptr) ptr++;
+
+if ((log_extra_selector & LX_pid) != 0)
+  {
+  sprintf(CS ptr, "[%d] ", (int)getpid());
+  while (*ptr) ptr++;
+  }
+
 if (really_exim && (flags & LOG_PROCESS) == 0 && message_id[0] != 0)
 if (really_exim && (flags & LOG_PROCESS) == 0 && message_id[0] != 0)
-  sprintf(CS ptr, "%s %s ", tod_stamp(tod_log), message_id);
-else sprintf(CS ptr, "%s ", tod_stamp(tod_log));
+  {
+  sprintf(CS ptr, "%s ", message_id);
+  while(*ptr) ptr++;
+  }
 
 
-while(*ptr) ptr++;
 if ((flags & LOG_CONFIG) != 0) ptr = log_config_info(ptr, flags);
 
 va_start(ap, format);
 if ((flags & LOG_CONFIG) != 0) ptr = log_config_info(ptr, flags);
 
 va_start(ap, format);
index 7b317e42d3fc25200adc19fdaf9cc7622e438bfd..f73ce63ac8753eca9343251f185499dee8e68eb7 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/macros.h,v 1.30 2007/01/15 15:59:22 ph10 Exp $ */
+/* $Cambridge: exim/src/src/macros.h,v 1.31 2007/01/31 16:52:12 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -378,21 +378,22 @@ set all the bits in a multi-word selector. */
 #define LX_incoming_interface          0x80000020
 #define LX_incoming_port               0x80000040
 #define LX_outgoing_port               0x80000080
 #define LX_incoming_interface          0x80000020
 #define LX_incoming_port               0x80000040
 #define LX_outgoing_port               0x80000080
-#define LX_queue_time                  0x80000100
-#define LX_queue_time_overall          0x80000200
-#define LX_received_sender             0x80000400
-#define LX_received_recipients         0x80000800
-#define LX_rejected_header             0x80001000
-#define LX_return_path_on_delivery     0x80002000
-#define LX_sender_on_delivery          0x80004000
-#define LX_sender_verify_fail          0x80008000
-#define LX_smtp_confirmation           0x80010000
-#define LX_smtp_no_mail                0x80020000
-#define LX_subject                     0x80040000
-#define LX_tls_certificate_verified    0x80080000
-#define LX_tls_cipher                  0x80100000
-#define LX_tls_peerdn                  0x80200000
-#define LX_unknown_in_list             0x80400000
+#define LX_pid                         0x80000100
+#define LX_queue_time                  0x80000200
+#define LX_queue_time_overall          0x80000400
+#define LX_received_sender             0x80000800
+#define LX_received_recipients         0x80001000
+#define LX_rejected_header             0x80002000
+#define LX_return_path_on_delivery     0x80004000
+#define LX_sender_on_delivery          0x80008000
+#define LX_sender_verify_fail          0x80010000
+#define LX_smtp_confirmation           0x80020000
+#define LX_smtp_no_mail                0x80040000
+#define LX_subject                     0x80080000
+#define LX_tls_certificate_verified    0x80100000
+#define LX_tls_cipher                  0x80200000
+#define LX_tls_peerdn                  0x80400000
+#define LX_unknown_in_list             0x80800000
 
 #define L_default     (L_connection_reject        | \
                        L_delay_delivery           | \
 
 #define L_default     (L_connection_reject        | \
                        L_delay_delivery           | \
index e1f8048f79766659a730b70a76f461c468bba1ea..5c060974c136a783829d829188f78698c408dc3c 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/test/README,v 1.6 2007/01/23 11:01:10 ph10 Exp $
+$Cambridge: exim/test/README,v 1.7 2007/01/31 16:52:12 ph10 Exp $
 
 EXPORTABLE EXIM TEST SUITE
 --------------------------
 
 EXPORTABLE EXIM TEST SUITE
 --------------------------
@@ -6,7 +6,7 @@ EXPORTABLE EXIM TEST SUITE
 This document last updated for:
 
 Test Suite Version: 4.67
 This document last updated for:
 
 Test Suite Version: 4.67
-Date: 23 January 2007
+Date: 31 January 2007
 
 
 BACKGROUND
 
 
 BACKGROUND
@@ -637,6 +637,12 @@ The file remains locked with the following command (normally exim) is obeyed.
 This command runs the exinext utility with the given argument data.
 
 
 This command runs the exinext utility with the given argument data.
 
 
+  exigrep <data>
+
+This command runs the exigrep utility with the given data (the search pattern)
+on the current mainlog file.
+
+
   gnutls
 
 This command is present at the start of all but one of the tests that use
   gnutls
 
 This command is present at the start of all but one of the tests that use
diff --git a/test/confs/0551 b/test/confs/0551
new file mode 100644 (file)
index 0000000..cecaae4
--- /dev/null
@@ -0,0 +1,36 @@
+# Exim test configuration 0551
+
+LS=+pid
+
+exim_path = EXIM_PATH
+host_lookup_order = bydns
+primary_hostname = myhost.test.ex
+rfc1413_query_timeout = 0s
+spool_directory = DIR/spool
+log_file_path = DIR/spool/log/%slog
+gecos_pattern = ""
+gecos_name = CALLER_NAME
+
+# ----- Main settings -----
+
+log_selector = LS
+
+# ----- Routers -----
+
+begin routers
+
+r1:
+  driver = accept
+  transport = t1
+
+
+# ----- Transports -----
+
+begin transports
+
+t1:
+  driver = appendfile
+  user = CALLER
+  file = DIR/test-mail/$local_part
+
+# End
diff --git a/test/log/0551 b/test/log/0551
new file mode 100644 (file)
index 0000000..831e11a
--- /dev/null
@@ -0,0 +1,11 @@
+1999-03-02 09:44:33 [1234] 10HmaX-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss
+1999-03-02 09:44:33 [1235] 10HmaX-0005vi-00 => userx <userx@test.ex> R=r1 T=t1
+1999-03-02 09:44:33 [1235] 10HmaX-0005vi-00 => usery <usery@test.ex> R=r1 T=t1
+1999-03-02 09:44:33 [1235] 10HmaX-0005vi-00 Completed
+1999-03-02 09:44:33 [1236] 10HmaY-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss
+1999-03-02 09:44:33 [1237] 10HmaY-0005vi-00 => userx <userx@test.ex> R=r1 T=t1
+1999-03-02 09:44:33 [1237] 10HmaY-0005vi-00 => userz <userz@test.ex> R=r1 T=t1
+1999-03-02 09:44:33 [1237] 10HmaY-0005vi-00 Completed
+1999-03-02 09:44:33 10HmaZ-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss
+1999-03-02 09:44:33 10HmaZ-0005vi-00 => userx <userx@test.ex> R=r1 T=t1
+1999-03-02 09:44:33 10HmaZ-0005vi-00 Completed
diff --git a/test/mail/0551.userx b/test/mail/0551.userx
new file mode 100644 (file)
index 0000000..01ca394
--- /dev/null
@@ -0,0 +1,31 @@
+From CALLER@myhost.test.ex Tue Mar 02 09:44:33 1999
+Received: from CALLER by myhost.test.ex with local (Exim x.yz)
+       (envelope-from <CALLER@myhost.test.ex>)
+       id 10HmaX-0005vi-00; Tue, 2 Mar 1999 09:44:33 +0000
+Message-Id: <E10HmaX-0005vi-00@myhost.test.ex>
+From: CALLER_NAME <CALLER@myhost.test.ex>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+Message 1
+
+From CALLER@myhost.test.ex Tue Mar 02 09:44:33 1999
+Received: from CALLER by myhost.test.ex with local (Exim x.yz)
+       (envelope-from <CALLER@myhost.test.ex>)
+       id 10HmaY-0005vi-00; Tue, 2 Mar 1999 09:44:33 +0000
+Message-Id: <E10HmaY-0005vi-00@myhost.test.ex>
+From: CALLER_NAME <CALLER@myhost.test.ex>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+Message 2
+
+From CALLER@myhost.test.ex Tue Mar 02 09:44:33 1999
+Received: from CALLER by myhost.test.ex with local (Exim x.yz)
+       (envelope-from <CALLER@myhost.test.ex>)
+       id 10HmaZ-0005vi-00
+       for userx@test.ex; Tue, 2 Mar 1999 09:44:33 +0000
+Message-Id: <E10HmaZ-0005vi-00@myhost.test.ex>
+From: CALLER_NAME <CALLER@myhost.test.ex>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+Message 3
+
diff --git a/test/mail/0551.usery b/test/mail/0551.usery
new file mode 100644 (file)
index 0000000..e4d855b
--- /dev/null
@@ -0,0 +1,10 @@
+From CALLER@myhost.test.ex Tue Mar 02 09:44:33 1999
+Received: from CALLER by myhost.test.ex with local (Exim x.yz)
+       (envelope-from <CALLER@myhost.test.ex>)
+       id 10HmaX-0005vi-00; Tue, 2 Mar 1999 09:44:33 +0000
+Message-Id: <E10HmaX-0005vi-00@myhost.test.ex>
+From: CALLER_NAME <CALLER@myhost.test.ex>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+Message 1
+
diff --git a/test/mail/0551.userz b/test/mail/0551.userz
new file mode 100644 (file)
index 0000000..29b2f0d
--- /dev/null
@@ -0,0 +1,10 @@
+From CALLER@myhost.test.ex Tue Mar 02 09:44:33 1999
+Received: from CALLER by myhost.test.ex with local (Exim x.yz)
+       (envelope-from <CALLER@myhost.test.ex>)
+       id 10HmaY-0005vi-00; Tue, 2 Mar 1999 09:44:33 +0000
+Message-Id: <E10HmaY-0005vi-00@myhost.test.ex>
+From: CALLER_NAME <CALLER@myhost.test.ex>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+Message 2
+
index 0d5b105049b3d73694b5ac116c8dd31cca0e785c..328b8995868f96fd780acf2389bffdfe7000b422 100755 (executable)
@@ -1,6 +1,6 @@
 #! /usr/bin/perl -w
 
 #! /usr/bin/perl -w
 
-# $Cambridge: exim/test/runtest,v 1.22 2007/01/23 14:57:51 ph10 Exp $
+# $Cambridge: exim/test/runtest,v 1.23 2007/01/31 16:52:12 ph10 Exp $
 
 ###############################################################################
 # This is the controlling script for the "new" test suite for Exim. It should #
 
 ###############################################################################
 # This is the controlling script for the "new" test suite for Exim. It should #
@@ -432,6 +432,10 @@ while(<IN>)
   # Time on queue tolerance
   s/QT=1s/QT=0s/;
 
   # Time on queue tolerance
   s/QT=1s/QT=0s/;
 
+  # Eximstats heading
+  s/Exim\sstatistics\sfrom\s\d{4}-\d\d-\d\d\s\d\d:\d\d:\d\d\sto\s
+    \d{4}-\d\d-\d\d\s\d\d:\d\d:\d\d/Exim statistics from <time> to <time>/x;
+
 
   # ======== Caller's login, uid, gid, home ========
 
 
   # ======== Caller's login, uid, gid, home ========
 
@@ -497,6 +501,10 @@ while(<IN>)
   # Pid in temp file in appendfile transport
   s"test-mail/temp\.\d+\."test-mail/temp.pppp.";
 
   # Pid in temp file in appendfile transport
   s"test-mail/temp\.\d+\."test-mail/temp.pppp.";
 
+  # Optional pid in log lines
+  s/^(\d{4}-\d\d-\d\d\s\d\d:\d\d:\d\d)(\s[+-]\d\d\d\d|)(\s\[\d+\])/
+    "$1$2 [" . new_value($3, "%s", \$next_pid) . "]"/gxe;
+
   # Detect a daemon stderr line with a pid and save the pid for subsequent
   # removal from following lines.
   $spid = $1 if /^(\s*\d+) (?:listening|LOG: MAIN|(?:daemon_smtp_port|local_interfaces) overridden by)/;
   # Detect a daemon stderr line with a pid and save the pid for subsequent
   # removal from following lines.
   $spid = $1 if /^(\s*\d+) (?:listening|LOG: MAIN|(?:daemon_smtp_port|local_interfaces) overridden by)/;
@@ -590,6 +598,8 @@ while(<IN>)
   s/\+0100,\d+;/+0100,ddd;/;
   s/\(\d+ bytes written\)/(ddd bytes written)/;
   s/added '\d+ 1'/added 'ddd 1'/;
   s/\+0100,\d+;/+0100,ddd;/;
   s/\(\d+ bytes written\)/(ddd bytes written)/;
   s/added '\d+ 1'/added 'ddd 1'/;
+  s/Received\s+\d+/Received               nnn/;
+  s/Delivered\s+\d+/Delivered              nnn/;
 
 
   # ======== Values in spool space failure message ========
 
 
   # ======== Values in spool space failure message ========
@@ -1413,6 +1423,30 @@ if (/^exinext\s+(.*)/)
   }
 
 
   }
 
 
+# The "exigrep" command runs exigrep on the current mainlog
+
+if (/^exigrep\s+(.*)/)
+  {
+  run_system("(./eximdir/exigrep " .
+    "$1 $parm_cwd/spool/log/mainlog;" .
+    "echo exigrep exit code = \$?)" .
+    ">>test-stdout");
+  return 1;
+  }
+
+
+# The "eximstats" command runs eximstats on the current mainlog
+
+if (/^eximstats\s+(.*)/)
+  {
+  run_system("(./eximdir/eximstats " .
+    "$1 $parm_cwd/spool/log/mainlog;" .
+    "echo eximstats exit code = \$?)" .
+    ">>test-stdout");
+  return 1;
+  }
+
+
 # The "gnutls" command makes a copy of saved GnuTLS parameter data in the
 # spool directory, to save Exim from re-creating it each time.
 
 # The "gnutls" command makes a copy of saved GnuTLS parameter data in the
 # spool directory, to save Exim from re-creating it each time.
 
@@ -2535,6 +2569,16 @@ if (system("cp $parm_exim_dir/exinext eximdir") != 0)
   tests_exit(-1, "Failed to make a copy of exinext: $!");
   }
 
   tests_exit(-1, "Failed to make a copy of exinext: $!");
   }
 
+if (system("cp $parm_exim_dir/exigrep eximdir") != 0)
+  {
+  tests_exit(-1, "Failed to make a copy of exigrep: $!");
+  }
+
+if (system("cp $parm_exim_dir/eximstats eximdir") != 0)
+  {
+  tests_exit(-1, "Failed to make a copy of eximstats: $!");
+  }
+
 
 ##################################################
 #    Check that the Exim user can access stuff   #
 
 ##################################################
 #    Check that the Exim user can access stuff   #
@@ -2904,6 +2948,7 @@ foreach $test (@test_list)
 
   undef %cache;
   $next_msgid = "aX";
 
   undef %cache;
   $next_msgid = "aX";
+  $next_pid = 1234;
   $next_port = 1111;
   $message_skip = 0;
   $msglog_skip = 0;
   $next_port = 1111;
   $message_skip = 0;
   $msglog_skip = 0;
diff --git a/test/scripts/0000-Basic/0551 b/test/scripts/0000-Basic/0551
new file mode 100644 (file)
index 0000000..afd5c9b
--- /dev/null
@@ -0,0 +1,14 @@
+# log_selector = +pid
+#
+exim -odi userx@test.ex usery@test.ex
+Message 1
+****
+exim -odi userx@test.ex userz@test.ex
+Message 2
+****
+exim -DLS= -odi userx@test.ex
+Message 3
+****
+exigrep userx
+eximstats -ne -nr -nt -tnl -q0 -h0 -t0
+no_msglog_check
diff --git a/test/stdout/0551 b/test/stdout/0551
new file mode 100644 (file)
index 0000000..8af2815
--- /dev/null
@@ -0,0 +1,26 @@
+1999-03-02 09:44:33 [1234] 10HmaX-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss
+1999-03-02 09:44:33 [1235] 10HmaX-0005vi-00 => userx <userx@test.ex> R=r1 T=t1
+1999-03-02 09:44:33 [1235] 10HmaX-0005vi-00 => usery <usery@test.ex> R=r1 T=t1
+1999-03-02 09:44:33 [1235] 10HmaX-0005vi-00 Completed
+
+1999-03-02 09:44:33 [1236] 10HmaY-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss
+1999-03-02 09:44:33 [1237] 10HmaY-0005vi-00 => userx <userx@test.ex> R=r1 T=t1
+1999-03-02 09:44:33 [1237] 10HmaY-0005vi-00 => userz <userz@test.ex> R=r1 T=t1
+1999-03-02 09:44:33 [1237] 10HmaY-0005vi-00 Completed
+
+1999-03-02 09:44:33 10HmaZ-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss
+1999-03-02 09:44:33 10HmaZ-0005vi-00 => userx <userx@test.ex> R=r1 T=t1
+1999-03-02 09:44:33 10HmaZ-0005vi-00 Completed
+
+exigrep exit code = 0
+
+Exim statistics from <time> to <time>
+
+Grand total summary
+-------------------
+                                                                  At least one address
+  TOTAL               Volume   Messages Addresses     Hosts      Delayed       Failed
+  Received               nnn          3                   1       0  0.0%      0  0.0%
+  Delivered              nnn          5         5         1
+
+eximstats exit code = 0