Terminate the child before closing the PAM session.
* src/su.c: Terminate the child (if needed) before closing the PAM session. This is probably more correct, and avoid reporting termination from signals possibly sent by PAM modules (e.g. former versions of pam_systemd). Debian#670132
This commit is contained in:
parent
a5e3dbb0e3
commit
8781aff637
@ -1,3 +1,10 @@
|
|||||||
|
2013-08-13 Nicolas François <nicolas.francois@centraliens.net>
|
||||||
|
|
||||||
|
* src/su.c: Terminate the child (if needed) before closing the PAM
|
||||||
|
session. This is probably more correct, and avoid reporting
|
||||||
|
termination from signals possibly sent by PAM modules (e.g. former
|
||||||
|
versions of pam_systemd). Debian#670132
|
||||||
|
|
||||||
2013-08-13 Nicolas François <nicolas.francois@centraliens.net>
|
2013-08-13 Nicolas François <nicolas.francois@centraliens.net>
|
||||||
|
|
||||||
* src/su.c: When a SIGTSTP is caught, reset caught to 0. There is
|
* src/su.c: When a SIGTSTP is caught, reset caught to 0. There is
|
||||||
|
14
src/su.c
14
src/su.c
@ -372,6 +372,12 @@ static void prepare_pam_close_session (void)
|
|||||||
(void) fputs (_("Session terminated, terminating shell..."),
|
(void) fputs (_("Session terminated, terminating shell..."),
|
||||||
stderr);
|
stderr);
|
||||||
(void) kill (-pid_child, caught);
|
(void) kill (-pid_child, caught);
|
||||||
|
|
||||||
|
(void) signal (SIGALRM, kill_child);
|
||||||
|
(void) alarm (2);
|
||||||
|
|
||||||
|
(void) wait (&status);
|
||||||
|
(void) fputs (_(" ...terminated.\n"), stderr);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = pam_close_session (pamh, 0);
|
ret = pam_close_session (pamh, 0);
|
||||||
@ -384,14 +390,6 @@ static void prepare_pam_close_session (void)
|
|||||||
(void) pam_setcred (pamh, PAM_DELETE_CRED);
|
(void) pam_setcred (pamh, PAM_DELETE_CRED);
|
||||||
(void) pam_end (pamh, PAM_SUCCESS);
|
(void) pam_end (pamh, PAM_SUCCESS);
|
||||||
|
|
||||||
if (0 != caught) {
|
|
||||||
(void) signal (SIGALRM, kill_child);
|
|
||||||
(void) alarm (2);
|
|
||||||
|
|
||||||
(void) wait (&status);
|
|
||||||
(void) fputs (_(" ...terminated.\n"), stderr);
|
|
||||||
}
|
|
||||||
|
|
||||||
exit ((0 != WIFEXITED (status)) ? WEXITSTATUS (status)
|
exit ((0 != WIFEXITED (status)) ? WEXITSTATUS (status)
|
||||||
: WTERMSIG (status) + 128);
|
: WTERMSIG (status) + 128);
|
||||||
/* Only the child returns. See above. */
|
/* Only the child returns. See above. */
|
||||||
|
Loading…
Reference in New Issue
Block a user