Avoid terminating the PAM library in the forked child. This is done later

in the parent after closing the PAM session.
This fixes http://bugs.debian.org/412061.
Debian patch 405_su_no_pam_end_before_exec.
This commit is contained in:
nekral-guest 2007-11-17 17:19:44 +00:00
parent 7503c8a029
commit 0fd1ed4517
3 changed files with 15 additions and 1 deletions

View File

@ -1,3 +1,10 @@
2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
* NEWS, src/su.c: Avoid terminating the PAM library in the forked
child. This is done later in the parent after closing the PAM
session. This fixes http://bugs.debian.org/412061.
Debian patch 405_su_no_pam_end_before_exec.
2007-11-17 Nicolas François <nicolas.francois@centraliens.net> 2007-11-17 Nicolas François <nicolas.francois@centraliens.net>
* man/newgrp.1.xml: Mention sg in the newgrp manpage. * man/newgrp.1.xml: Mention sg in the newgrp manpage.

2
NEWS
View File

@ -39,6 +39,8 @@ shadow-4.0.18.1 -> shadow-4.0.18.2 UNRELEASED
addition* to editing the password field. Debian patch 494_passwd_lock. addition* to editing the password field. Debian patch 494_passwd_lock.
- pwck: Remove the SHADOWPWD preprocessor check. Some check for /etc/shadow - pwck: Remove the SHADOWPWD preprocessor check. Some check for /etc/shadow
were always missing. were always missing.
- su: Avoid terminating the PAM library in the forked child. This is done
later in the parent after closing the PAM session.
shadow-4.0.18.1 -> shadow-4.0.18.2 28-10-2007 shadow-4.0.18.1 -> shadow-4.0.18.2 28-10-2007

View File

@ -183,7 +183,12 @@ static void run_shell (const char *shellstr, char *args[], int doshell,
child = fork (); child = fork ();
if (child == 0) { /* child shell */ if (child == 0) { /* child shell */
pam_end (pamh, PAM_SUCCESS); /*
* PAM_DATA_SILENT is not supported by some modules, and
* there is no strong need to clean up the process space's
* memory since we will either call exec or exit.
pam_end (pamh, PAM_SUCCESS | PAM_DATA_SILENT);
*/
if (doshell) if (doshell)
(void) shell (shellstr, (char *) args[0], envp); (void) shell (shellstr, (char *) args[0], envp);