]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
loginctl: list-sessions: minor modernization
authorMike Yuan <me@yhndnzj.com>
Thu, 11 May 2023 05:17:59 +0000 (13:17 +0800)
committerMike Yuan <me@yhndnzj.com>
Tue, 16 May 2023 10:09:15 +0000 (18:09 +0800)
src/login/loginctl.c

index 4559b83e506622c0dba15258dcca952e00ea3ecc..8f1a5a06decbcf4812ba9ea5433ac78a0ad6e03d 100644 (file)
@@ -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,