#include <sys/stat.h>
#include <sys/utsname.h>
+#include <sys/wait.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <pwd.h>
+#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
des_cblock session;
int uid = 0;
+void child_handler(int signal);
+
struct _dt {
char *str;
void (*proc)(int, char *);
struct _dt *d;
struct utsname name;
int s, conn;
+ struct sigaction sa;
whoami = strrchr(argv[0], '/');
if (whoami)
umask(0022);
mr_init();
+ sigemptyset(&sa.sa_mask);
+ sa.sa_flags = SA_RESTART;
+ sa.sa_handler = child_handler;
+ sigaction(SIGCHLD, &sa, NULL);
+
/* If the config file contains a line "user username", the
* daemon will run with that user's UID.
*/
close(conn);
exit(1);
}
+
+void child_handler(int signal)
+{
+ int status;
+
+ while (waitpid(-1, &status, WNOHANG) > 0)
+ ;
+}