[1205] in Kerberos-V5-bugs
krb5b4pl3: slave/kpropd.c: don't ignore SIGCHLD
daemon@ATHENA.MIT.EDU (Jonathan I. Kamens)
Sun Mar 19 20:55:51 1995
From: "Jonathan I. Kamens" <jik@cam.ov.com>
Date: Sun, 19 Mar 1995 20:59:06 -0500
To: krb5-bugs@MIT.EDU
kpropd shouldn't signal(SIGCHLD, SIG_IGN) in the parent. Instead, it
should wait() until the child exits. This was causing problems
because setting SIGCHLD to SIG_IGN under SYSV causes child processes
to get reaped automatically, so the wait() for kdb5_edit was failing.
--- slave/kpropd.c 1995/03/13 21:16:54 1.2
+++ slave/kpropd.c 1995/03/13 21:21:49 1.3
@@ -173,6 +173,8 @@
exit(1);
}
while (1) {
+ int child_pid;
+
memset((char *)&frominet, 0, sizeof(frominet));
fromlen = sizeof(frominet);
s = accept(finet, (struct sockaddr *) &frominet, &fromlen);
@@ -183,15 +185,24 @@
"from accept system call");
continue;
}
- if (debug || fork() == 0) {
- (void) signal(SIGCHLD, SIG_IGN);
+ if (debug)
+ child_pid = 0;
+ else
+ child_pid = fork();
+ switch (child_pid) {
+ case -1:
+ com_err(progname, errno, "while forking");
+ exit(1);
+ case 0:
(void) close(finet);
doit(s);
close(s);
exit(0);
+ default:
+ wait(0);
+ close(s);
}
- close(s);
}
}