weston-launch: Clear environment and set it up from scratch
authorKristian Høgsberg <krh@bitplanet.net>
Tue, 29 Jan 2013 19:14:06 +0000 (14:14 -0500)
committerKristian Høgsberg <krh@bitplanet.net>
Thu, 14 Feb 2013 20:59:49 +0000 (15:59 -0500)
With recent systemd[1] XDG_VTNR will leak through to pam, which ends up
setting a vtnr pam argument with the wrong value.  The fix is to clear
XDG_VTNR first, but what we should have been doing all along is resetting
the environment.

Thanks to Ray Strode for helping debug this.

[1] http://cgit.freedesktop.org/systemd/systemd/commit/?id=a8573ccc35a4efe8900be5d48c6c803670540c2b

src/weston-launch.c

index 583e85a..bc7f8a2 100644 (file)
@@ -556,6 +556,12 @@ main(int argc, char *argv[])
        if (wl.pw == NULL)
                error(1, errno, "failed to get username");
 
+       clearenv();
+       setenv("USER", wl.pw->pw_name, 1);
+       setenv("LOGNAME", wl.pw->pw_name, 1);
+       setenv("HOME", wl.pw->pw_dir, 1);
+       setenv("SHELL", wl.pw->pw_shell, 1);
+
        if (!weston_launch_allowed(&wl))
                error(1, 0, "Permission denied. You should either:\n"
 #ifdef HAVE_SYSTEMD_LOGIN
@@ -605,12 +611,6 @@ main(int argc, char *argv[])
                        sleep(sleep_fork);
                }
 
-               if (new_user) {
-                       setenv("USER", wl.pw->pw_name, 1);
-                       setenv("LOGNAME", wl.pw->pw_name, 1);
-                       setenv("HOME", wl.pw->pw_dir, 1);
-                       setenv("SHELL", wl.pw->pw_shell, 1);
-               }
                env = pam_getenvlist(wl.ph);
                if (env) {
                        for (i = 0; env[i]; ++i) {