chiark / gitweb /
pam: check environ[] for XDG_SEAT as fallback
authorLennart Poettering <lennart@poettering.net>
Mon, 1 Oct 2012 18:50:00 +0000 (14:50 -0400)
committerLennart Poettering <lennart@poettering.net>
Mon, 1 Oct 2012 18:50:05 +0000 (14:50 -0400)
This is useful for systems such as kmscon which want to invoke classic
/sbin/login but use it on multiple seats.

src/login/pam-module.c

index 0d387918c7eac328a63fa6d932ca6c82728f399f..af108c46d59aa4f9babf61b96f0efa7596610aea 100644 (file)
@@ -428,8 +428,14 @@ _public_ PAM_EXTERN int pam_sm_open_session(
         pam_get_item(handle, PAM_TTY, (const void**) &tty);
         pam_get_item(handle, PAM_RUSER, (const void**) &remote_user);
         pam_get_item(handle, PAM_RHOST, (const void**) &remote_host);
         pam_get_item(handle, PAM_TTY, (const void**) &tty);
         pam_get_item(handle, PAM_RUSER, (const void**) &remote_user);
         pam_get_item(handle, PAM_RHOST, (const void**) &remote_host);
+
         seat = pam_getenv(handle, "XDG_SEAT");
         seat = pam_getenv(handle, "XDG_SEAT");
+        if (isempty(seat))
+                seat = getenv("XDG_SEAT");
+
         cvtnr = pam_getenv(handle, "XDG_VTNR");
         cvtnr = pam_getenv(handle, "XDG_VTNR");
+        if (isempty(cvtnr))
+                cvtnr = getenv("XDG_VTNR");
 
         service = strempty(service);
         tty = strempty(tty);
 
         service = strempty(service);
         tty = strempty(tty);
@@ -467,6 +473,8 @@ _public_ PAM_EXTERN int pam_sm_open_session(
                    !isempty(tty) ? "tty" : "unspecified";
 
         class = pam_getenv(handle, "XDG_SESSION_CLASS");
                    !isempty(tty) ? "tty" : "unspecified";
 
         class = pam_getenv(handle, "XDG_SESSION_CLASS");
+        if (isempty(class))
+                class = getenv("XDG_SESSION_CLASS");
         if (isempty(class))
                 class = "user";
 
         if (isempty(class))
                 class = "user";