]> arthur.barton.de Git - netatalk.git/blobdiff - libatalk/util/logger.c
logger, if filename is empty use syslog, make cnid_metad syslog work again
[netatalk.git] / libatalk / util / logger.c
index 7f18279bde21af38ba1a61246057613df3f48617..014e41e958458c5872c72c8a0591c619de9ed96c 100644 (file)
@@ -26,8 +26,10 @@ Netatalk 2001 (c)
 #include <sys/time.h>
 #include <time.h>
 #include <ctype.h>
+#include <errno.h>
 
 #include <atalk/boolean.h>
+#include <atalk/util.h>
 
 #define LOGGER_C
 #include <atalk/logger.h>
@@ -194,6 +196,7 @@ static void generate_message_details(char *message_details_buffer,
         templen = snprintf(ptr, len,  " (D%d:", loglevel - 1);
     else
         templen = snprintf(ptr, len, " (%c:", arr_loglevel_chars[loglevel]);
+
     if (templen == -1 || templen >= len)
         return;
     len -= templen;
@@ -207,9 +210,9 @@ static void generate_message_details(char *message_details_buffer,
         len -= templen;
         ptr += templen;
     }
-
+    
     strncat(ptr, "): ", len);
-    ptr[len] = 0;
+    ptr[len -1] = 0;
 }
 
 static int get_syslog_equivalent(enum loglevels loglevel)
@@ -294,13 +297,21 @@ void log_setup(const char *filename, enum loglevels loglevel, enum logtypes logt
 
     /* Open log file as OPEN_LOGS_AS_UID*/
     process_uid = geteuid();
-    if (process_uid)
-        seteuid(OPEN_LOGS_AS_UID);
+    if (process_uid) {
+        if (seteuid(OPEN_LOGS_AS_UID) == -1) {
+            /* XXX failing silently */
+            return;
+        }
+    }
     file_configs[logtype].fd = open( file_configs[logtype].filename,
                                      O_CREAT | O_WRONLY | O_APPEND,
                                      S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
-    if (process_uid)
-        seteuid(process_uid);
+    if (process_uid) {
+        if (seteuid(process_uid) == -1) {
+            LOG(log_error, logtype_logger, "can't seteuid back %s", strerror(errno));
+            exit(EXITERR_SYS);
+        }
+    }
 
     /* Check for error opening/creating logfile */
     if (-1 == file_configs[logtype].fd) {
@@ -485,6 +496,8 @@ void setuplog(const char *logstr)
                 ptr++;
         }
         filename = ptr;
+        if (*filename == 0)
+            filename = NULL;
     }
 
     /* finally call setuplog, filename can be NULL */