chiark / gitweb /
pam: work correctly if a seat is specified but not vtnr
authorLennart Poettering <lennart@poettering.net>
Fri, 13 Jan 2012 19:51:58 +0000 (20:51 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 13 Jan 2012 19:51:58 +0000 (20:51 +0100)
src/login/pam-module.c

index 82594c30d5f543773804df22de4738ec0e324b9a..1c3a7437f80c96f3129b18c12c1f87130e78d6e6 100644 (file)
@@ -260,7 +260,6 @@ static int get_seat_from_display(const char *display, const char **seat, uint32_
         int v;
 
         assert(display);
-        assert(seat);
         assert(vtnr);
 
         /* We deduce the X11 socket from the display name, then use
@@ -308,7 +307,8 @@ static int get_seat_from_display(const char *display, const char **seat, uint32_
         else if (v == 0)
                 return -ENOENT;
 
-        *seat = "seat0";
+        if (seat)
+                *seat = "seat0";
         *vtnr = (uint32_t) v;
 
         return 0;
@@ -455,8 +455,12 @@ _public_ PAM_EXTERN int pam_sm_open_session(
         if (!isempty(cvtnr))
                 safe_atou32(cvtnr, &vtnr);
 
-        if (!isempty(display) && isempty(seat) && vtnr <= 0)
-                get_seat_from_display(display, &seat, &vtnr);
+        if (!isempty(display) && vtnr <= 0) {
+                if (isempty(seat))
+                        get_seat_from_display(handle, display, &seat, &vtnr);
+                else if (streq(seat, "seat0"))
+                        get_seat_from_display(handle, display, NULL, &vtnr);
+        }
 
         type = !isempty(display) ? "x11" :
                    !isempty(tty) ? "tty" : "unspecified";