Add syslog_pid option.
authorHeiko Schlittermann (HS12-RIPE) <hs@schlittermann.de>
Fri, 4 Nov 2016 13:26:35 +0000 (14:26 +0100)
committerHeiko Schlittermann (HS12-RIPE) <hs@schlittermann.de>
Fri, 4 Nov 2016 13:26:35 +0000 (14:26 +0100)
This option suppresses the PID duplication to syslog. As syslog/systemd
add the PID of the logging process automatically.

doc/doc-docbook/spec.xfpt
src/src/globals.c
src/src/globals.h
src/src/log.c
src/src/readconf.c
test/confs/0001
test/scripts/0000-Basic/0001
test/stdout/0001

index 478b5e1..f9a8055 100644 (file)
@@ -13593,6 +13593,7 @@ listed in more than one group.
 .row &%slow_lookup_log%&             "control logging of slow DNS lookups"
 .row &%syslog_duplication%&          "controls duplicate log lines on syslog"
 .row &%syslog_facility%&             "set syslog &""facility""& field"
+.row &%syslog_pid%&                  "pid in syslog lines"
 .row &%syslog_processname%&          "set syslog &""ident""& field"
 .row &%syslog_timestamp%&            "timestamp syslog lines"
 .row &%write_rejectlog%&             "control use of message log"
@@ -16856,6 +16857,15 @@ If this option is unset, &"mail"& is used. See chapter &<<CHAPlog>>& for
 details of Exim's logging.
 
 
+.option syslog_pid main boolean true
+.cindex "syslog" "pid"
+If &%syslog_pid%& is set false, the PID on Exim's log lines are
+omitted when these lines are sent to syslog. (Syslog normally prefixes
+the log lines with the PID of the logging process automatically.) You need
+to enable the &`+pid`& log selector item, if you want Exim to write it's PID
+into the logs.) See chapter &<<CHAPlog>>& for details of Exim's logging.
+
+
 
 .option syslog_processname main string &`exim`&
 .cindex "syslog" "process name; setting"
index dcdd6f8..b862015 100644 (file)
@@ -1384,6 +1384,7 @@ BOOL    suppress_local_fixups_default = FALSE;
 BOOL    synchronous_delivery   = FALSE;
 BOOL    syslog_duplication     = TRUE;
 int     syslog_facility        = LOG_MAIL;
+BOOL    syslog_pid             = TRUE;
 uschar *syslog_processname     = US"exim";
 BOOL    syslog_timestamp       = TRUE;
 uschar *system_filter          = NULL;
index 3e91c42..b3747a8 100644 (file)
@@ -890,6 +890,7 @@ extern BOOL    suppress_local_fixups_default; /* former is reset to this; overri
 extern BOOL    synchronous_delivery;   /* TRUE if -odi is set */
 extern BOOL    syslog_duplication;     /* FALSE => no duplicate logging */
 extern int     syslog_facility;        /* As defined by Syslog.h */
+extern BOOL    syslog_pid;             /* TRUE if PID on syslogs */
 extern uschar *syslog_processname;     /* 'ident' param to openlog() */
 extern BOOL    syslog_timestamp;       /* TRUE if time on syslogs */
 extern uschar *system_filter;          /* Name of system filter file */
index 6eb57ca..081e47b 100644 (file)
@@ -47,6 +47,8 @@ static BOOL   path_inspected = FALSE;
 static int    logging_mode = LOG_MODE_FILE;
 static uschar *file_path = US"";
 
+static size_t pid_position[2];
+
 
 /* These should be kept in-step with the private delivery error
 number definitions in macros.h */
@@ -132,7 +134,7 @@ can get here if there is a failure to open the panic log.)
 
 Arguments:
   priority       syslog priority
-  s              the string to be written
+  s              the string to be written, the string may be modified!
 
 Returns:         nothing
 */
@@ -146,6 +148,8 @@ int linecount = 0;
 if (running_in_test_harness) return;
 
 if (!syslog_timestamp) s += log_timezone? 26 : 20;
+if (!syslog_pid && LOGGING(pid))
+    memmove(s + pid_position[0], s + pid_position[1], pid_position[1] - pid_position[0]);
 
 len = Ustrlen(s);
 
@@ -905,7 +909,9 @@ while(*ptr) ptr++;
 if (LOGGING(pid))
   {
   sprintf(CS ptr, "[%d] ", (int)getpid());
+  if (!syslog_pid) pid_position[0] = ptr - log_buffer; // remember begin …
   while (*ptr) ptr++;
+  if (!syslog_pid) pid_position[1] = ptr - log_buffer; // … and end+1 of the PID
   }
 
 if (really_exim && message_id[0] != 0)
index 9cbad84..27a834b 100644 (file)
@@ -445,6 +445,7 @@ static optionlist optionlist_config[] = {
   { "strip_trailing_dot",       opt_bool,        &strip_trailing_dot },
   { "syslog_duplication",       opt_bool,        &syslog_duplication },
   { "syslog_facility",          opt_stringptr,   &syslog_facility_str },
+  { "syslog_pid",               opt_bool,        &syslog_pid },
   { "syslog_processname",       opt_stringptr,   &syslog_processname },
   { "syslog_timestamp",         opt_bool,        &syslog_timestamp },
   { "system_filter",            opt_stringptr,   &system_filter },
index 1eb0e88..b0f8f61 100644 (file)
@@ -193,6 +193,7 @@ no_strip_excess_angle_brackets
 no_strip_trailing_dot
 no_syslog_duplication
 syslog_facility = uucp
+no_syslog_pid
 syslog_processname = mta-exim
 no_syslog_timestamp
 system_filter = /home/exim/test/filter
index 4b5f282..7868257 100644 (file)
@@ -26,5 +26,6 @@ exim -bP accept_8bitmime \
          tcp_nodelay \
          trusted_users \ 
          unknown_login \
-         warn_message_file
+         warn_message_file \
+         syslog_pid
 ****
index d9ce2f0..9238c91 100644 (file)
@@ -20,3 +20,4 @@ no_tcp_nodelay
 trusted_users = 1234:5678
 unknown_login = unknownlogin
 warn_message_file = /home/exim/test/warnmsg_file
+no_syslog_pid