changeset 995:893c86bbe452

Add daemonize function to lib for klogd and syslogd
author Felix Janda <felix.janda@posteo.de>
date Sat, 10 Aug 2013 20:18:18 +0200
parents 00c7b6f4104a
children bd8be96cd43d
files lib/lib.h lib/pending.c toys/pending/klogd.c toys/pending/syslogd.c
diffstat 4 files changed, 23 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/lib/lib.h	Sat Aug 10 19:35:11 2013 +0200
+++ b/lib/lib.h	Sat Aug 10 20:18:18 2013 +0200
@@ -202,3 +202,5 @@
 // grep helper functions
 char  *astrcat (char *, char *);
 char *xastrcat (char *, char *);
+
+void daemonize(void);
--- a/lib/pending.c	Sat Aug 10 19:35:11 2013 +0200
+++ b/lib/pending.c	Sat Aug 10 20:18:18 2013 +0200
@@ -102,3 +102,19 @@
   if (!x) error_exit ("xastrcat");
   return x;
 }
+
+void daemonize(void)
+{
+  int fd = open("/dev/null", O_RDWR);
+  if (fd < 0) fd = xcreate("/", O_RDONLY, 0666);
+
+  pid_t pid = fork();
+  if (pid < 0) perror_exit("DAEMON: failed to fork");
+  if (pid) exit(EXIT_SUCCESS);
+
+  setsid();
+  dup2(fd, 0);
+  dup2(fd, 1);
+  dup2(fd, 2);
+  if (fd > 2) close(fd);
+}
--- a/toys/pending/klogd.c	Sat Aug 10 19:35:11 2013 +0200
+++ b/toys/pending/klogd.c	Sat Aug 10 20:18:18 2013 +0200
@@ -67,19 +67,7 @@
 
   sigatexit(handle_signal);
   if (toys.optflags & FLAG_c) set_log_level(TT.level);    //set log level
-  if (!(toys.optflags & FLAG_n)) {                       //Make it daemon
-    pid_t pid;        
-    int fd = open("/dev/null", O_RDWR);
-    if (fd < 0) fd = open("/", O_RDONLY, 0666);
-    if((pid = fork()) < 0) perror_exit("DAEMON: fail to fork");
-    if (pid) exit(EXIT_SUCCESS);
-
-    setsid();      
-    dup2(fd, 0);   
-    dup2(fd, 1);   
-    dup2(fd, 2);   
-    if (fd > 2) close(fd);   
-  }
+  if (!(toys.optflags & FLAG_n)) daemonize();             //Make it daemon
 
   if (CFG_KLOGD_SOURCE_RING_BUFFER) {
     syslog(LOG_NOTICE, "KLOGD: started with Kernel ring buffer as log source\n");
--- a/toys/pending/syslogd.c	Sat Aug 10 19:35:11 2013 +0200
+++ b/toys/pending/syslogd.c	Sat Aug 10 20:18:18 2013 +0200
@@ -632,25 +632,6 @@
   signal(SIGQUIT, signal_handler);
 }
 
-static void syslog_daemon(void)
-{
-  int fd = open("/dev/null", O_RDWR);
-  if (fd < 0) fd = xcreate("/", O_RDONLY, 0666);
-
-  pid_t pid = fork();
-  if (pid < 0) perror_exit("DAEMON: failed to fork");
-  if (pid) exit(EXIT_SUCCESS);
-
-  setsid();
-  dup2(fd, 0);
-  dup2(fd, 1);
-  dup2(fd, 2);
-  if (fd > 2) close(fd);
-
-  //don't daemonize again if SIGHUP received.
-  toys.optflags |= FLAG_n;
-}
-
 void syslogd_main(void)
 {
   unsocks_t *tsd;
@@ -688,7 +669,10 @@
   setup_signal();
   if (parse_config_file() == -1) goto clean_and_exit;
   open_logfiles();
-  if (!flag_chk(FLAG_n)) syslog_daemon();
+  if (!flag_chk(FLAG_n)) {
+    //don't daemonize again if SIGHUP received.
+    toys.optflags |= FLAG_n;
+  }
   {
     int pid_fd = open("/var/run/syslogd.pid", O_CREAT | O_WRONLY | O_TRUNC, 0666);
     if (pid_fd > 0) {