summaryrefslogtreecommitdiff
path: root/x11/XFree86-4/files/patch-xdm
blob: 36fcc1035e522bafb259bd3ffd7421d59404026f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
--- programs/xdm/session.c.orig	Tue Feb 19 23:36:19 2002
+++ programs/xdm/session.c	Tue Feb 19 23:51:21 2002
@@ -573,11 +573,13 @@
 #ifdef USE_PAM
 	/* pass in environment variables set by libpam and modules it called */
 	if (pamh) {
-	    long i;
+	    int i;
 	    char **pam_env = pam_getenvlist(pamh);
 	    for(i = 0; pam_env && pam_env[i]; i++) {
 		verify->userEnviron = putEnv(pam_env[i], verify->userEnviron);
+		free(pam_env[i]);
 	    }
+	    free(pam_env);
 	}
 #endif
 
@@ -623,12 +625,19 @@
 	pwd = getpwnam(name);
 	if (pwd)
 	{
+	    extern char **environ;
+	    char **saved_environ = environ;
+
+	    environ = verify->userEnviron;
 	    if (setusercontext(NULL, pwd, pwd->pw_uid, LOGIN_SETALL) < 0)
 	    {
+		environ = saved_environ;
 		LogError("setusercontext for \"%s\" failed, errno=%d\n", name,
 		    errno);
 		return (0);
 	    }
+	    verify->userEnviron = environ;
+	    environ = saved_environ;
 	    endpwent();
 	}
 	else