X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/ccfdb010f92ffcd0e1598c8720049f55f7603215..0a49a7a4f1090b6f1ce1d0f9d969804c9226b53e:/src/src/log.c diff --git a/src/src/log.c b/src/src/log.c index 24418c5e6..a5cd10075 100644 --- a/src/src/log.c +++ b/src/src/log.c @@ -1,10 +1,10 @@ -/* $Cambridge: exim/src/src/log.c,v 1.7 2005/09/12 10:49:30 ph10 Exp $ */ +/* $Cambridge: exim/src/src/log.c,v 1.14 2009/11/16 19:50:37 nm4 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2005 */ +/* Copyright (c) University of Cambridge 1995 - 2009 */ /* See the file NOTICE for conditions of use and distribution. */ /* Functions for writing log files. The code for maintaining datestamped @@ -57,7 +57,9 @@ static uschar *file_path = US""; /* The given string is split into sections according to length, or at embedded newlines, and syslogged as a numbered sequence if it is overlong or if there is -more than one line. +more than one line. However, if we are running in the test harness, do not do +anything. (The test harness doesn't use syslog - for obvious reasons - but we +can get here if there is a failure to open the panic log.) Arguments: priority syslog priority @@ -72,6 +74,8 @@ write_syslog(int priority, uschar *s) int len, pass; int linecount = 0; +if (running_in_test_harness) return; + if (!syslog_timestamp) s += log_timezone? 26 : 20; len = Ustrlen(s); @@ -131,9 +135,11 @@ for (pass = 0; pass < 2; pass++) /* This is called when Exim is dying as a result of something going wrong in the logging, or after a log call with LOG_PANIC_DIE set. Optionally write a message to debug_file or a stderr file, if they exist. Then, if in the middle -of accepting a message, throw it away tidily; this will attempt to send an SMTP -response if appropriate. Otherwise, try to close down an outstanding SMTP call -tidily. +of accepting a message, throw it away tidily by calling receive_bomb_out(); +this will attempt to send an SMTP response if appropriate. Passing NULL as the +first argument stops it trying to run the NOTQUIT ACL (which might try further +logging and thus cause problems). Otherwise, try to close down an outstanding +SMTP call tidily. Arguments: s1 Error message to write to debug_file and/or stderr and syslog @@ -151,7 +157,7 @@ if (s1 != NULL) if (log_stderr != NULL && log_stderr != debug_file) fprintf(log_stderr, "%s\n", s1); } -if (receive_call_bombout) receive_bomb_out(s2); /* does not return */ +if (receive_call_bombout) receive_bomb_out(NULL, s2); /* does not return */ if (smtp_input) smtp_closedown(s2); exim_exit(EXIT_FAILURE); } @@ -720,15 +726,29 @@ if (disable_logging) return; } +/* Handle disabled reject log */ + +if (!write_rejectlog) flags &= ~LOG_REJECT; + /* Create the main message in the log buffer, including the message 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) - 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); @@ -854,11 +874,12 @@ if ((flags & LOG_MAIN) != 0 && } } -/* Handle the log for rejected messages. This can be globally disabled. If -there are any header lines (i.e. if the rejection is happening after the DATA -phase), log the recipients and the headers. */ +/* Handle the log for rejected messages. This can be globally disabled, in +which case the flags are altered above. If there are any header lines (i.e. if +the rejection is happening after the DATA phase), log the recipients and the +headers. */ -if (write_rejectlog && (flags & LOG_REJECT) != 0) +if ((flags & LOG_REJECT) != 0) { header_line *h;