summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Yuan <me@yhndnzj.com>2023-05-11 13:17:59 +0800
committerMike Yuan <me@yhndnzj.com>2023-05-16 18:09:15 +0800
commit486f61a8c908d63c47625c352e456d80c88b4687 (patch)
tree7efb60d70f784601527cd679c7b21c537e23fef1
parentbae05711b5d06f330423f69d4d6500c907b8d322 (diff)
downloadsystemd-486f61a8c908d63c47625c352e456d80c88b4687.tar.gz
loginctl: list-sessions: minor modernization
-rw-r--r--src/login/loginctl.c37
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,