summaryrefslogtreecommitdiff
path: root/source/nsswitch/winbindd.c
diff options
context:
space:
mode:
authorRichard Sharpe <sharpe@samba.org>2004-07-21 04:24:30 +0000
committerRichard Sharpe <sharpe@samba.org>2004-07-21 04:24:30 +0000
commit337d345ba83684f21b943d2ec1d51f7cd130aeac (patch)
treec9cdafdce5c8d04963abff6730fabf8fcdcff167 /source/nsswitch/winbindd.c
parent180b30db293f853565046f689298bd0c1c0b6dea (diff)
downloadsamba-337d345ba83684f21b943d2ec1d51f7cd130aeac.tar.gz
r1557: Add sigchld handling to winbindd. Next step is to have the child restarted if
need be. We should also make sure the main line know we no longer have a child.
Diffstat (limited to 'source/nsswitch/winbindd.c')
-rw-r--r--source/nsswitch/winbindd.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/source/nsswitch/winbindd.c b/source/nsswitch/winbindd.c
index 50b6f0a87fb..d08aa84face 100644
--- a/source/nsswitch/winbindd.c
+++ b/source/nsswitch/winbindd.c
@@ -188,6 +188,17 @@ static void sighup_handler(int signum)
sys_select_signal();
}
+static void sigchld_handler(int signum)
+{
+ pid_t pid;
+ int status;
+
+ while ((pid = wait(&status)) != -1 || errno == EINTR) {
+ continue; /* Reap children */
+ }
+ sys_select_signal();
+}
+
/* React on 'smbcontrol winbindd reload-config' in the same way as on SIGHUP*/
static void msg_reload_services(int msg_type, pid_t src, void *buf, size_t len)
{
@@ -888,12 +899,14 @@ int main(int argc, char **argv)
BlockSignals(False, SIGUSR1);
BlockSignals(False, SIGUSR2);
BlockSignals(False, SIGHUP);
+ BlockSignals(False, SIGCHLD);
/* Setup signal handlers */
CatchSignal(SIGINT, termination_handler); /* Exit on these sigs */
CatchSignal(SIGQUIT, termination_handler);
CatchSignal(SIGTERM, termination_handler);
+ CatchSignal(SIGCHLD, sigchld_handler);
CatchSignal(SIGPIPE, SIG_IGN); /* Ignore sigpipe */