Tomáš Mráz 762e40
Index: auth-pam.c
Tomáš Mráz 762e40
===================================================================
Tomáš Mráz 762e40
RCS file: /usr/local/src/security/openssh/cvs/openssh_cvs/auth-pam.c,v
Tomáš Mráz 762e40
retrieving revision 1.134
Tomáš Mráz 762e40
diff -u -p -r1.134 auth-pam.c
Tomáš Mráz 762e40
--- auth-pam.c	15 May 2006 07:22:33 -0000	1.134
Tomáš Mráz 762e40
+++ auth-pam.c	22 May 2006 08:50:59 -0000
Tomáš Mráz 762e40
@@ -573,15 +573,17 @@ static struct pam_conv store_conv = { ss
Tomáš Mráz 762e40
 void
Tomáš Mráz 762e40
 sshpam_cleanup(void)
Tomáš Mráz 762e40
 {
Tomáš Mráz 762e40
-	debug("PAM: cleanup");
Tomáš Mráz 762e40
-	if (sshpam_handle == NULL)
Tomáš Mráz 762e40
+	if (sshpam_handle == NULL || (use_privsep && !mm_is_monitor()))
Tomáš Mráz 762e40
 		return;
Tomáš Mráz 762e40
+	debug("PAM: cleanup");
Tomáš Mráz 762e40
 	pam_set_item(sshpam_handle, PAM_CONV, (const void *)&null_conv);
Tomáš Mráz 762e40
 	if (sshpam_cred_established) {
Tomáš Mráz 762e40
+		debug("PAM: deleting credentials");
Tomáš Mráz 762e40
 		pam_setcred(sshpam_handle, PAM_DELETE_CRED);
Tomáš Mráz 762e40
 		sshpam_cred_established = 0;
Tomáš Mráz 762e40
 	}
Tomáš Mráz 762e40
 	if (sshpam_session_open) {
Tomáš Mráz 762e40
+		debug("PAM: closing session");
Tomáš Mráz 762e40
 		pam_close_session(sshpam_handle, PAM_SILENT);
Tomáš Mráz 762e40
 		sshpam_session_open = 0;
Tomáš Mráz 762e40
 	}
Tomáš Mráz 762e40
Index: monitor.c
Tomáš Mráz 762e40
===================================================================
Tomáš Mráz 762e40
RCS file: /usr/local/src/security/openssh/cvs/openssh_cvs/monitor.c,v
Tomáš Mráz 762e40
retrieving revision 1.104
Tomáš Mráz 762e40
diff -u -p -r1.104 monitor.c
Tomáš Mráz 762e40
--- monitor.c	21 May 2006 08:26:40 -0000	1.104
Tomáš Mráz 762e40
+++ monitor.c	22 May 2006 08:37:58 -0000
Tomáš Mráz 762e40
@@ -354,6 +354,10 @@ monitor_child_preauth(Authctxt *_authctx
Tomáš Mráz 762e40
 				    MONITOR_REQ_PAM_ACCOUNT, &m);
Tomáš Mráz 762e40
 				authenticated = mm_answer_pam_account(pmonitor->m_sendfd, &m);
Tomáš Mráz 762e40
 				buffer_free(&m);
Tomáš Mráz 762e40
+				if (authenticated) {
Tomáš Mráz 762e40
+					do_pam_session();
Tomáš Mráz 762e40
+					do_pam_setcred(0);
Tomáš Mráz 762e40
+				}
Tomáš Mráz 762e40
 			}
Tomáš Mráz 762e40
 #endif
Tomáš Mráz 762e40
 		}
Tomáš Mráz 762e40
@@ -1531,6 +1535,11 @@ mm_answer_term(int sock, Buffer *req)
Tomáš Mráz 762e40
 	/* The child is terminating */
Tomáš Mráz 762e40
 	session_destroy_all(&mm_session_close);
Tomáš Mráz 762e40
 
Tomáš Mráz 762e40
+#ifdef USE_PAM
Tomáš Mráz 762e40
+	if (options.use_pam)
Tomáš Mráz 762e40
+		sshpam_cleanup();
Tomáš Mráz 762e40
+#endif
Tomáš Mráz 762e40
+
Tomáš Mráz 762e40
 	while (waitpid(pmonitor->m_pid, &status, 0) == -1)
Tomáš Mráz 762e40
 		if (errno != EINTR)
Tomáš Mráz 762e40
 			exit(1);
Tomáš Mráz 762e40
Index: session.c
Tomáš Mráz 762e40
===================================================================
Tomáš Mráz 762e40
RCS file: /usr/local/src/security/openssh/cvs/openssh_cvs/session.c,v
Tomáš Mráz 762e40
retrieving revision 1.328
Tomáš Mráz 762e40
diff -u -p -r1.328 session.c
Tomáš Mráz 762e40
--- session.c	4 May 2006 06:24:34 -0000	1.328
Tomáš Mráz 762e40
+++ session.c	22 May 2006 08:14:24 -0000
Tomáš Mráz 762e40
@@ -541,7 +541,7 @@ do_exec_pty(Session *s, const char *comm
Tomáš Mráz 762e40
 	ttyfd = s->ttyfd;
Tomáš Mráz 762e40
 
Tomáš Mráz 762e40
 #if defined(USE_PAM)
Tomáš Mráz 762e40
-	if (options.use_pam) {
Tomáš Mráz 762e40
+	if (options.use_pam && !use_privsep) {
Tomáš Mráz 762e40
 		do_pam_set_tty(s->tty);
Tomáš Mráz 762e40
 		if (!use_privsep)
Tomáš Mráz 762e40
 			do_pam_setcred(1);
Tomáš Mráz 762e40
@@ -1284,7 +1284,7 @@ do_setusercontext(struct passwd *pw)
Tomáš Mráz 762e40
 		}
Tomáš Mráz 762e40
 #endif
Tomáš Mráz 762e40
 # ifdef USE_PAM
Tomáš Mráz 762e40
-		if (options.use_pam) {
Tomáš Mráz 762e40
+		if (options.use_pam && !use_privsep) {
Tomáš Mráz 762e40
 			do_pam_session();
Tomáš Mráz 762e40
 			do_pam_setcred(0);
Tomáš Mráz 762e40
 		}
Tomáš Mráz 762e40
@@ -1326,7 +1326,7 @@ do_setusercontext(struct passwd *pw)
Tomáš Mráz 762e40
 		 * These will have been wiped by the above initgroups() call.
Tomáš Mráz 762e40
 		 * Reestablish them here.
Tomáš Mráz 762e40
 		 */
Tomáš Mráz 762e40
-		if (options.use_pam) {
Tomáš Mráz 762e40
+		if (options.use_pam && !use_privsep) {
Tomáš Mráz 762e40
 			do_pam_session();
Tomáš Mráz 762e40
 			do_pam_setcred(0);
Tomáš Mráz 762e40
 		}