diff options
Diffstat (limited to 'x11/wdm/files/patch-src__wdm__session.c')
-rw-r--r-- | x11/wdm/files/patch-src__wdm__session.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/x11/wdm/files/patch-src__wdm__session.c b/x11/wdm/files/patch-src__wdm__session.c new file mode 100644 index 000000000000..035205602185 --- /dev/null +++ b/x11/wdm/files/patch-src__wdm__session.c @@ -0,0 +1,50 @@ +--- src/wdm/session.c.orig Sat Mar 26 22:57:04 2005 ++++ src/wdm/session.c Sun Mar 27 09:22:42 2005 +@@ -533,6 +533,7 @@ + int pid; + #ifdef HAS_SETUSERCONTEXT + struct passwd* pwd; ++ extern char **environ; + #endif + #ifdef USE_PAM + pam_handle_t *pamh = thepamh(); +@@ -562,6 +563,7 @@ + /* Do system-dependent login setup here */ + + #ifndef AIXV3 ++#ifndef HAS_SETUSERCONTEXT + if (setgid(verify->gid) < 0) + { + WDMError("setgid %d (user \"%s\") failed, errno=%d\n", +@@ -609,6 +611,31 @@ + verify->uid, name, errno); + return (0); + } ++#else /* HAS_SETUSERCONTEXT */ ++ /* ++ * Set the user's credentials: uid, gid, groups, ++ * environment variables, resource limits, and umask. ++ */ ++ /* destroy user environment before calling setusercontext */ ++ environ = verify->userEnviron; ++ pwd = getpwnam(name); ++ if (pwd) ++ { ++ if (setusercontext(NULL, pwd, pwd->pw_uid, LOGIN_SETALL) < 0) ++ { ++ WDMError("setusercontext for \"%s\" failed, errno=%d\n", name, ++ errno); ++ return (0); ++ } ++ verify->userEnviron = environ; ++ endpwent(); ++ } ++ else ++ { ++ WDMError("getpwnam for \"%s\" failed, errno=%d\n", name, errno); ++ return (0); ++ } ++#endif /* HAS_SETUSERCONTEXT */ + #else /* AIXV3 */ + /* + * Set the user's credentials: uid, gid, groups, |