diff -ruN cfengine-2.0.5b1-old/src/cfenvd.c cfengine-2.0.5b1/src/cfenvd.c --- cfengine-2.0.5b1-old/src/cfenvd.c 2003-02-13 23:14:27.000000000 +0000 +++ cfengine-2.0.5b1/src/cfenvd.c 2003-02-14 20:31:57.000000000 +0000 @@ -553,7 +553,7 @@ if (!NO_FORK) { - ActAsDaemon(); + ActAsDaemon(0); } signal (SIGTERM,HandleSignal); /* Signal Handler */ diff -ruN cfengine-2.0.5b1-old/src/cfexecd.c cfengine-2.0.5b1/src/cfexecd.c --- cfengine-2.0.5b1-old/src/cfexecd.c 2003-02-13 23:14:27.000000000 +0000 +++ cfengine-2.0.5b1/src/cfexecd.c 2003-02-14 20:32:14.000000000 +0000 @@ -250,7 +250,7 @@ if (!NO_FORK) { - ActAsDaemon(); + ActAsDaemon(0); } signal(SIGINT,(void *)ExitCleanly); diff -ruN cfengine-2.0.5b1-old/src/cfservd.c cfengine-2.0.5b1/src/cfservd.c --- cfengine-2.0.5b1-old/src/cfservd.c 2003-02-13 23:14:27.000000000 +0000 +++ cfengine-2.0.5b1/src/cfservd.c 2003-02-14 21:12:51.000000000 +0000 @@ -545,28 +545,16 @@ struct sockaddr_in cin; #endif -if ((!NO_FORK) && (fork() != 0)) +if ((sd = OpenReceiverChannel()) == -1) { - snprintf(OUTPUT,bufsize*2,"cfservd starting %.24s\n",ctime(&CFDSTARTTIME)); - CfLog(cfinform,OUTPUT,""); - exit(0); + CfLog(cferror,"Unable to start server",""); + exit(1); } -if (!NO_FORK) - { - ActAsDaemon(); - } - signal(SIGINT,(void*)ExitCleanly); signal(SIGTERM,(void*)ExitCleanly); signal(SIGHUP,SIG_IGN); signal(SIGPIPE,SIG_IGN); - -if ((sd = OpenReceiverChannel()) == -1) - { - CfLog(cferror,"Unable to start server",""); - exit(1); - } if (listen(sd,queuesize) == -1) { @@ -576,6 +564,18 @@ Verbose("Listening for connections ...\n"); +if ((!NO_FORK) && (fork() != 0)) + { + snprintf(OUTPUT,bufsize*2,"cfservd starting %.24s\n",ctime(&CFDSTARTTIME)); + CfLog(cfinform,OUTPUT,""); + exit(0); + } + +if (!NO_FORK) + { + ActAsDaemon(sd); + } + ageing = 0; FD_ZERO(&rset); FD_SET(sd,&rset); @@ -590,7 +590,11 @@ CheckFileChanges(argc,argv,sd); } - select((sd+1),&rset,NULL,NULL,NULL); + if ((select((sd+1),&rset,NULL,NULL,NULL) == -1) && (errno != EINTR)) + { + CfLog(cferror, "select failed", "select"); + exit(1); + } if ((sd_reply = accept(sd,(struct sockaddr *)&cin,&addrlen)) != -1) { diff -ruN cfengine-2.0.5b1-old/src/init.c cfengine-2.0.5b1/src/init.c --- cfengine-2.0.5b1-old/src/init.c 2003-02-13 23:14:27.000000000 +0000 +++ cfengine-2.0.5b1/src/init.c 2003-02-14 20:32:46.000000000 +0000 @@ -128,7 +128,7 @@ /**********************************************************************/ -void ActAsDaemon(void) +void ActAsDaemon(int preserve) { int fd, maxfd; #ifdef HAVE_SETSID @@ -157,6 +157,6 @@ for (fd=STDERR_FILENO+1; fd