chiark / gitweb /
loginctl: correctly show session IDs on session-status
authorDjalal Harouni <tixxdz@opendz.org>
Sat, 21 Dec 2013 14:49:46 +0000 (15:49 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 21 Dec 2013 23:35:27 +0000 (18:35 -0500)
Commit f8f14b3654bcd introduced a regression that makes
loginctl session-status to not show the correct session ID(s)

In print_session_status_info() the map[] array, element "Seat" receives
the offset of the "id" in "SessionStatusInfo" struct instead of the
offset of the "seat" member.

This will cause prop_map_first_of_struct() function to overwrite the
SessionStatusInfo.id memory with seats if there are any.

Fix this typo by using the "seat" member.

Before:
 - tixxdz (1000)
          Since: Sat 2013-12-21 10:07:23 CET; 5h 26min ago
         Leader: 1265 (sshd)

After:
1 - tixxdz (1000)
           Since: Sat 2013-12-21 10:07:23 CET; 5h 26min ago
          Leader: 1265 (sshd)

src/login/loginctl.c

index 7e64066479f0ad3241d22457d07205bc12c24294..914f3169989551dd8c54de0ef6537b2efca7b6fd 100644 (file)
@@ -372,7 +372,7 @@ static int print_session_status_info(sd_bus *bus, const char *path, bool *new_li
                 { "Remote",     "b", NULL, offsetof(SessionStatusInfo, remote) },
                 { "Timestamp",  "t", NULL, offsetof(SessionStatusInfo, timestamp) },
                 { "User",       "(uo)", prop_map_first_of_struct, offsetof(SessionStatusInfo, uid) },
                 { "Remote",     "b", NULL, offsetof(SessionStatusInfo, remote) },
                 { "Timestamp",  "t", NULL, offsetof(SessionStatusInfo, timestamp) },
                 { "User",       "(uo)", prop_map_first_of_struct, offsetof(SessionStatusInfo, uid) },
-                { "Seat",       "(so)", prop_map_first_of_struct, offsetof(SessionStatusInfo, id) },
+                { "Seat",       "(so)", prop_map_first_of_struct, offsetof(SessionStatusInfo, seat) },
                 {}
         };
 
                 {}
         };
 
@@ -419,7 +419,7 @@ static int print_session_status_info(sd_bus *bus, const char *path, bool *new_li
                 printf("\n");
         }
 
                 printf("\n");
         }
 
-        if (i.seat) {
+        if (!isempty(i.seat)) {
                 printf("\t    Seat: %s", i.seat);
 
                 if (i.vtnr > 0)
                 printf("\t    Seat: %s", i.seat);
 
                 if (i.vtnr > 0)