diff options
author | Lennart Poettering <lennart@poettering.net> | 2012-01-13 20:51:58 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2012-01-13 20:51:58 +0100 |
commit | fc7985ed678f2f07cfe941715544e6184981e019 (patch) | |
tree | 4f7d3cda21573cc347771b9d7eb758904c8d76d0 /src/login/pam-module.c | |
parent | d3f2bdbfee94a4cd124b66e610f4b926b749e192 (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.c | 12 |
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"; |