diff options
author | Mike Yuan <me@yhndnzj.com> | 2023-05-11 13:17:59 +0800 |
---|---|---|
committer | Mike Yuan <me@yhndnzj.com> | 2023-05-16 18:09:15 +0800 |
commit | 486f61a8c908d63c47625c352e456d80c88b4687 (patch) | |
tree | 7efb60d70f784601527cd679c7b21c537e23fef1 | |
parent | bae05711b5d06f330423f69d4d6500c907b8d322 (diff) | |
download | systemd-486f61a8c908d63c47625c352e456d80c88b4687.tar.gz |
loginctl: list-sessions: minor modernization
-rw-r--r-- | src/login/loginctl.c | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/src/login/loginctl.c b/src/login/loginctl.c index 4559b83e50..8f1a5a06de 100644 --- a/src/login/loginctl.c +++ b/src/login/loginctl.c @@ -142,9 +142,9 @@ static int list_sessions(int argc, char *argv[], void *userdata) { (void) table_set_align_percent(table, TABLE_HEADER_CELL(1), 100); for (;;) { - _cleanup_(sd_bus_error_free) sd_bus_error error_tty = SD_BUS_ERROR_NULL; - _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply_tty = NULL; - const char *id, *user, *seat, *object, *tty = NULL; + _cleanup_(sd_bus_error_free) sd_bus_error error_property = SD_BUS_ERROR_NULL; + _cleanup_free_ char *tty = NULL; + const char *id, *user, *seat, *object; uint32_t uid; r = sd_bus_message_read(reply, "(susso)", &id, &uid, &user, &seat, &object); @@ -153,21 +153,22 @@ static int list_sessions(int argc, char *argv[], void *userdata) { if (r == 0) break; - r = sd_bus_get_property( - bus, - "org.freedesktop.login1", - object, - "org.freedesktop.login1.Session", - "TTY", - &error_tty, - &reply_tty, - "s"); - if (r < 0) - log_warning_errno(r, "Failed to get TTY for session %s: %s", id, bus_error_message(&error_tty, r)); - else { - r = sd_bus_message_read(reply_tty, "s", &tty); - if (r < 0) - return bus_log_parse_error(r); + r = sd_bus_get_property_string(bus, + "org.freedesktop.login1", + object, + "org.freedesktop.login1.Session", + "TTY", + &error_property, + &tty); + if (r < 0) { + if (sd_bus_error_has_name(&error_property, SD_BUS_ERROR_UNKNOWN_OBJECT)) + /* The session is already closed when we're querying the property */ + continue; + + log_warning_errno(r, "Failed to get TTY for session %s, ignoring: %s", + id, bus_error_message(&error_property, r)); + + sd_bus_error_free(&error_property); } r = table_add_many(table, |