50 lines
1.3 KiB
C
50 lines
1.3 KiB
C
--- 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,
|