From 0624f95de639a41e8a47c264cdb7387a386a4dcd Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Mon, 13 Aug 2018 22:06:34 +0200 Subject: usyslogd: cleanup log file filename handling Signed-off-by: David Oberhollenzer --- syslogd/main.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'syslogd/main.c') diff --git a/syslogd/main.c b/syslogd/main.c index 263c87d..b98c414 100644 --- a/syslogd/main.c +++ b/syslogd/main.c @@ -121,9 +121,10 @@ static void signal_setup(void) static int print_to_log(const syslog_msg_t *msg) { const char *fac_name, *lvl_str; - char timebuf[32]; + char timebuf[32], *filename; logfile_t *log; struct tm tm; + size_t len; fac_name = enum_to_name(facilities, msg->facility); if (fac_name == NULL) @@ -133,17 +134,29 @@ static int print_to_log(const syslog_msg_t *msg) if (lvl_str == NULL) return -1; + if (msg->ident) { + len = strlen(msg->ident) + 1 + strlen(fac_name) + 1; + filename = alloca(len); + sprintf(filename, "%s/%s", msg->ident, fac_name); + } else { + filename = (char *)fac_name; + } + for (log = logfiles; log != NULL; log = log->next) { if (log->facility != msg->facility) continue; - if (msg->ident == NULL && log->ident[0] == '\0') - break; - if (msg->ident != NULL && strcmp(msg->ident, log->ident) == 0) + if (strcmp(filename, log->filename) == 0) break; } if (log == NULL) { - log = logfile_create(msg->ident, fac_name, msg->facility); + if (msg->ident != NULL && mkdir(msg->ident, 0750) != 0 && + errno != EEXIST) { + perror(msg->ident); + return -1; + } + + log = logfile_create(filename, msg->facility); if (log == NULL) return -1; log->next = logfiles; -- cgit v1.2.3