login: apply PAM environment
authorIan Wienand <ianw@vmware.com>
Mon, 20 Dec 2010 19:33:38 +0000 (11:33 -0800)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 27 Dec 2010 01:13:06 +0000 (02:13 +0100)
login should apply the PAM environment modified by plugins
such as pam_env.  Other 'login's do a similar thing.

I tested this by setting some env variables with pam_env which were
correctly applied.

Signed-off-by: Ian Wienand <ianw@vmware.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
loginutils/login.c

index 9a624df9af41a787802a13b753a4db3e08c2a6cc..c285b45a1279b5861fbd6fee9913d3979360ee35 100644 (file)
@@ -217,6 +217,7 @@ int login_main(int argc UNUSED_PARAM, char **argv)
        const char *failed_msg;
        struct passwd pwdstruct;
        char pwdbuf[256];
+       char **pamenv;
 #endif
 
        username[0] = '\0';
@@ -400,6 +401,16 @@ int login_main(int argc UNUSED_PARAM, char **argv)
                        (!(opt & LOGIN_OPT_p) * SETUP_ENV_CLEARENV) + SETUP_ENV_CHANGEENV,
                        pw);
 
+#if ENABLE_PAM
+       /* Modules such as pam_env will setup the PAM environment,
+        * which should be copied into the new environment. */
+       pamenv = pam_getenvlist(pamh);
+       if (pamenv) while (*pamenv) {
+               putenv(*pamenv);
+               pamenv++;
+       }
+#endif
+
        motd();
 
        if (pw->pw_uid == 0)