- Write pidfile AFTER detaching...
[tinc] / src / process.c
index ca992dc..29e49fa 100644 (file)
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: process.c,v 1.1.2.6 2000/11/20 22:13:12 guus Exp $
+    $Id: process.c,v 1.1.2.10 2000/11/22 19:14:08 guus Exp $
 */
 
 #include "config.h"
@@ -145,12 +145,12 @@ int detach(void)
 cp
   setup_signals();
 
-  if(write_pidfile())
-    return -1;
-
   if(do_detach)
     daemon(0, 0);
 
+  if(write_pidfile())
+    return -1;
+
   openlog(identname, LOG_CONS | LOG_PID, LOG_DAEMON);
 
   if(debug_lvl > DEBUG_NOTHING)
@@ -174,6 +174,8 @@ void _execute_script(const char *name)
   int error = 0;
   char *scriptname;
   char *s;
+  int fd;
+  
 cp
   if(netname)
     {
@@ -207,14 +209,20 @@ cp
   fcloseall();
 
   /* Open standard input */
-  if(open("/dev/null", O_RDONLY) < 0)
+  if((fd = open("/dev/null", O_RDONLY)) < 0)
     {
       syslog(LOG_ERR, _("Opening `/dev/null' failed: %m"));
       error = 1;
     }
+  if(dup2(fd, 0) != 0)
+    {
+      syslog(LOG_ERR, _("Couldn't assign /dev/null to standard input: %m"));
+      error = 1;
+    }
 
   if(!error)
     {
+      close(1);  /* fd #1 should be the first available filedescriptor now. */
       /* Standard output directly goes to syslog */
       openlog(name, LOG_CONS | LOG_PID, LOG_DAEMON);
       /* Standard error as well */
@@ -252,12 +260,10 @@ cp
             "fork");
       return -1;
     }
-cp
+
   if(pid)
     {
-      syslog(LOG_DEBUG, "%p, %d (%p)", child_pids, pid, &pid);
       list_append(child_pids, &pid);
-cp
       return 0;
     }
 cp