On Mon, 31 Oct 2016, Ondrej Zajicek wrote: > On Sun, Oct 30, 2016 at 10:40:30PM +0000, Chris Caputo wrote: > > Fix bug with syslog using string passed to openlog() which is later > > stomped on, resulting in corrupted log messages. This happens when name > > is specified in a syslog log line, ala: > > Thanks, you are right. I will merge the patch. > > Note that there is a minor bug in the patch as the current_syslog_name > is not updated when new_syslog_name == NULL.
Ack - thank you for catching that. Is this better? Thanks, Chris diff --git a/sysdep/unix/log.c b/sysdep/unix/log.c index 1fd6442..89eae01 100644 --- a/sysdep/unix/log.c +++ b/sysdep/unix/log.c @@ -289,17 +289,27 @@ log_switch(int debug, list *l, char *new_syslog_name) #ifdef HAVE_SYSLOG char *old_syslog_name = current_syslog_name; - current_syslog_name = new_syslog_name; if (old_syslog_name && new_syslog_name && !strcmp(old_syslog_name, new_syslog_name)) return; if (old_syslog_name) - closelog(); + { + closelog(); + free(old_syslog_name); + } if (new_syslog_name) - openlog(new_syslog_name, LOG_CONS | LOG_NDELAY, LOG_DAEMON); + { + current_syslog_name = xmalloc(strlen(new_syslog_name) + 1); + strcpy(current_syslog_name, new_syslog_name); + openlog(current_syslog_name, LOG_CONS | LOG_NDELAY, LOG_DAEMON); + } + else + { + current_syslog_name = NULL; + } #endif }