Implement optional syslog logging using ordinary
[oweals/busybox.git] / networking / udhcp / common.c
index c2025e588b8c2976470258f0574581b64135e5e5..1ae65f75085c9dee64b103a59fa238811f75b225 100644 (file)
@@ -19,6 +19,7 @@
 #include <paths.h>
 #include <sys/socket.h>
 #include <stdarg.h>
+#include <syslog.h>
 
 #include "common.h"
 #include "pidfile.h"
@@ -33,7 +34,6 @@ long uptime(void)
        return info.uptime;
 }
 
-
 /*
  * This function makes sure our first socket calls
  * aren't going to fd 1 (printf badness...) and are
@@ -41,77 +41,32 @@ long uptime(void)
  */
 static inline void sanitize_fds(void)
 {
-       int zero;
-       if ((zero = open(bb_dev_null, O_RDWR, 0)) < 0)
+       int fd = open(bb_dev_null, O_RDWR, 0);
+       if (fd < 0)
                return;
-       while (zero < 3)
-               zero = dup(zero);
-       close(zero);
+       while (fd < 3)
+               fd = dup(fd);
+       close(fd);
 }
 
 
 void udhcp_background(const char *pidfile)
 {
 #ifdef __uClinux__
-       LOG(LOG_ERR, "Cannot background in uclinux (yet)");
+       bb_error_msg("Cannot background in uclinux (yet)");
 #else /* __uClinux__ */
        int pid_fd;
 
        /* hold lock during fork. */
        pid_fd = pidfile_acquire(pidfile);
+       setsid();
        xdaemon(0, 0);
        daemonized++;
+       logmode &= ~LOGMODE_STDIO;
        pidfile_write_release(pid_fd);
 #endif /* __uClinux__ */
 }
 
-
-#ifdef CONFIG_FEATURE_UDHCP_SYSLOG
-
-void udhcp_logging(int level, const char *fmt, ...)
-{
-       va_list p;
-       va_list p2;
-
-       va_start(p, fmt);
-       __va_copy(p2, p);
-       if (!daemonized) {
-               vprintf(fmt, p);
-               putchar('\n');
-       }
-       vsyslog(level, fmt, p2);
-       va_end(p);
-}
-
-#else
-
-
-static char *syslog_level_msg[] = {
-       [LOG_EMERG]   = "EMERGENCY!",
-       [LOG_ALERT]   = "ALERT!",
-       [LOG_CRIT]    = "critical!",
-       [LOG_WARNING] = "warning",
-       [LOG_ERR]     = "error",
-       [LOG_INFO]    = "info",
-       [LOG_DEBUG]   = "debug"
-};
-
-
-void udhcp_logging(int level, const char *fmt, ...)
-{
-       va_list p;
-
-       va_start(p, fmt);
-       if (!daemonized) {
-               printf("%s, ", syslog_level_msg[level]);
-               vprintf(fmt, p);
-               putchar('\n');
-       }
-       va_end(p);
-}
-#endif
-
-
 void udhcp_start_log_and_pid(const char *client_server, const char *pidfile)
 {
        int pid_fd;
@@ -126,8 +81,10 @@ void udhcp_start_log_and_pid(const char *client_server, const char *pidfile)
        /* equivelent of doing a fflush after every \n */
        setlinebuf(stdout);
 
-       if (ENABLE_FEATURE_UDHCP_SYSLOG)
-               openlog(client_server, LOG_PID | LOG_CONS, LOG_LOCAL0);
+       if (ENABLE_FEATURE_UDHCP_SYSLOG) {
+               openlog(client_server, LOG_PID, LOG_LOCAL0);
+               logmode |= LOGMODE_SYSLOG;
+       }
 
-       udhcp_logging(LOG_INFO, "%s (v%s) started", client_server, BB_VER);
+       bb_info_msg("%s (v%s) started", client_server, BB_VER);
 }