summaryrefslogtreecommitdiff
path: root/src/login/pam-module.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2012-01-13 20:51:58 +0100
committerLennart Poettering <lennart@poettering.net>2012-01-13 20:51:58 +0100
commitfc7985ed678f2f07cfe941715544e6184981e019 (patch)
tree4f7d3cda21573cc347771b9d7eb758904c8d76d0 /src/login/pam-module.c
parentd3f2bdbfee94a4cd124b66e610f4b926b749e192 (diff)
pam: work correctly if a seat is specified but not vtnr
Diffstat (limited to 'src/login/pam-module.c')
-rw-r--r--src/login/pam-module.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/login/pam-module.c b/src/login/pam-module.c
index 82594c30d5..1c3a7437f8 100644
--- a/src/login/pam-module.c
+++ b/src/login/pam-module.c
@@ -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";