diff options
Diffstat (limited to 'src/login/pam_systemd.c')
-rw-r--r-- | src/login/pam_systemd.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/login/pam_systemd.c b/src/login/pam_systemd.c index 8447e1c555..84bea21ab7 100644 --- a/src/login/pam_systemd.c +++ b/src/login/pam_systemd.c @@ -219,11 +219,12 @@ static int socket_from_display(const char *display, char **path) { } static int get_seat_from_display(const char *display, const char **seat, uint32_t *vtnr) { - union sockaddr_union sa = {}; + union sockaddr_union sa; + socklen_t sa_len; _cleanup_free_ char *p = NULL, *sys_path = NULL, *tty = NULL; _cleanup_close_ int fd = -1; struct ucred ucred; - int v, r, salen; + int v, r; dev_t display_ctty; assert(display); @@ -238,15 +239,16 @@ static int get_seat_from_display(const char *display, const char **seat, uint32_ r = socket_from_display(display, &p); if (r < 0) return r; - salen = sockaddr_un_set_path(&sa.un, p); - if (salen < 0) - return salen; + r = sockaddr_un_set_path(&sa.un, p); + if (r < 0) + return r; + sa_len = r; fd = socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0); if (fd < 0) return -errno; - if (connect(fd, &sa.sa, salen) < 0) + if (connect(fd, &sa.sa, sa_len) < 0) return -errno; r = getpeercred(fd, &ucred); |