]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Unix: Fix bug in syslog name handling
authorOndrej Zajicek (work) <santiago@crfreenet.org>
Thu, 11 Feb 2016 20:53:55 +0000 (21:53 +0100)
committerOndrej Zajicek (work) <santiago@crfreenet.org>
Thu, 11 Feb 2016 20:53:55 +0000 (21:53 +0100)
Pointer to current_log_name has to be changed even if the name is the
same, because the old one will be invalid/freed after reconfiguration.

sysdep/unix/log.c

index 7cb26360a520e0a587e123526112bbfe059329d1..b90bbbd26339447c9c500ce7fe335b4e98dfafe9 100644 (file)
@@ -284,17 +284,18 @@ log_switch(int debug, list *l, char *new_syslog_name)
   current_log_list = l;
 
 #ifdef HAVE_SYSLOG
-  if (current_syslog_name && new_syslog_name &&
-      !strcmp(current_syslog_name, new_syslog_name))
+  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 (current_syslog_name)
+  if (old_syslog_name)
     closelog();
 
   if (new_syslog_name)
     openlog(new_syslog_name, LOG_CONS | LOG_NDELAY, LOG_DAEMON);
-
-  current_syslog_name = new_syslog_name;
 #endif
 }