summaryrefslogtreecommitdiff
path: root/sysdep/unix
diff options
context:
space:
mode:
authorOndrej Zajicek (work) <santiago@crfreenet.org>2016-11-01 11:37:49 +0100
committerOndrej Zajicek (work) <santiago@crfreenet.org>2016-11-01 11:37:49 +0100
commit17fe57d8dcc89aea520788914b252cf49cf060ff (patch)
treed31c0cdbd89d66cdc6de607252bf0915e563ea5e /sysdep/unix
parent3213273d8261c69a343fcd7d4c9607385dfdbb65 (diff)
Log: Fix broken syslog name
BIRD passed string from configuration to openlog(), which kept it internally. After reconfiguration the old string was freed, therefore openlog had invalid copy. Thanks to Chris Caputo for the original patch.
Diffstat (limited to 'sysdep/unix')
-rw-r--r--sysdep/unix/log.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/sysdep/unix/log.c b/sysdep/unix/log.c
index 1fd64426..b89e6b7a 100644
--- a/sysdep/unix/log.c
+++ b/sysdep/unix/log.c
@@ -288,18 +288,22 @@ log_switch(int debug, list *l, char *new_syslog_name)
current_log_list = l;
#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))
+ if (current_syslog_name && new_syslog_name &&
+ !strcmp(current_syslog_name, new_syslog_name))
return;
- if (old_syslog_name)
+ if (current_syslog_name)
+ {
closelog();
+ xfree(current_syslog_name);
+ current_syslog_name = NULL;
+ }
if (new_syslog_name)
- openlog(new_syslog_name, LOG_CONS | LOG_NDELAY, LOG_DAEMON);
+ {
+ current_syslog_name = xstrdup(new_syslog_name);
+ openlog(current_syslog_name, LOG_CONS | LOG_NDELAY, LOG_DAEMON);
+ }
#endif
}