Verify default SIGCHLD handling.
The SIGCHLD handler could have been ignored by parent process. Make sure that we have default handling activated. Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
This commit is contained in:
parent
f2e8294bdb
commit
c0e4ccd032
19
src/su.c
19
src/su.c
@ -295,6 +295,21 @@ static void prepare_pam_close_session (void)
|
||||
sigset_t ourset;
|
||||
int status;
|
||||
int ret;
|
||||
struct sigaction action;
|
||||
|
||||
/* reset SIGCHLD handling to default */
|
||||
action.sa_handler = SIG_DFL;
|
||||
sigemptyset (&action.sa_mask);
|
||||
action.sa_flags = 0;
|
||||
if (0 == caught && sigaction (SIGCHLD, &action, NULL) != 0) {
|
||||
fprintf (stderr,
|
||||
_("%s: signal masking malfunction\n"),
|
||||
Prog);
|
||||
SYSLOG ((LOG_WARN, "Will not execute %s", shellstr));
|
||||
closelog ();
|
||||
exit (1);
|
||||
/* Only the child returns. See above. */
|
||||
}
|
||||
|
||||
pid_child = fork ();
|
||||
if (pid_child == 0) { /* child shell */
|
||||
@ -318,11 +333,7 @@ static void prepare_pam_close_session (void)
|
||||
caught = SIGTERM;
|
||||
}
|
||||
if (0 == caught) {
|
||||
struct sigaction action;
|
||||
|
||||
action.sa_handler = catch_signals;
|
||||
sigemptyset (&action.sa_mask);
|
||||
action.sa_flags = 0;
|
||||
sigemptyset (&ourset);
|
||||
|
||||
if ( (sigaddset (&ourset, SIGTERM) != 0)
|
||||
|
Loading…
Reference in New Issue
Block a user