1
0
mirror of https://github.com/systemd/systemd.git synced 2025-03-29 06:50:16 +03:00

Merge pull request #24047 from dtardon/list-users-linger

Add linger status to `loginctl list-users`
This commit is contained in:
Yu Watanabe 2022-07-18 15:05:25 +09:00 committed by GitHub
commit 5509518193
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 40 additions and 7 deletions

View File

@ -207,25 +207,38 @@ static int list_users(int argc, char *argv[], void *userdata) {
if (r < 0)
return bus_log_parse_error(r);
table = table_new("uid", "user");
table = table_new("uid", "user", "linger");
if (!table)
return log_oom();
(void) table_set_align_percent(table, TABLE_HEADER_CELL(0), 100);
for (;;) {
const char *user;
const char *user, *object;
uint32_t uid;
int linger;
r = sd_bus_message_read(reply, "(uso)", &uid, &user, NULL);
r = sd_bus_message_read(reply, "(uso)", &uid, &user, &object);
if (r < 0)
return bus_log_parse_error(r);
if (r == 0)
break;
r = sd_bus_get_property_trivial(bus,
"org.freedesktop.login1",
object,
"org.freedesktop.login1.User",
"Linger",
&error,
'b',
&linger);
if (r < 0)
return log_error_errno(r, "Failed to get linger status: %s", bus_error_message(&error, r));
r = table_add_many(table,
TABLE_UID, (uid_t) uid,
TABLE_STRING, user);
TABLE_STRING, user,
TABLE_BOOLEAN, linger);
if (r < 0)
return table_log_add_error(r);
}

View File

@ -225,6 +225,8 @@ cleanup_session() (
rm -rf /run/systemd/system/getty@tty2.service.d
systemctl daemon-reload
loginctl disable-linger logind-test-user
pkill -u "$(id -u logind-test-user)"
sleep 1
pkill -KILL -u "$(id -u logind-test-user)"
@ -260,7 +262,7 @@ check_session() (
return 1
fi
session=$(loginctl --no-legend | grep "logind-test-user" | awk '{ print $1 }')
session=$(loginctl --no-legend | awk '$3 == "logind-test-user" { print $1 }')
if [[ -z "$session" ]]; then
echo "no session found for user logind-test-user" >&2
return 1
@ -271,7 +273,7 @@ check_session() (
return 1
fi
leader_pid=$(loginctl session-status "$session" | grep "Leader:" | awk '{ print $2 }')
leader_pid=$(loginctl session-status "$session" | awk '$1 == "Leader:" { print $2 }')
if [[ -z "$leader_pid" ]]; then
echo "cannot found leader process for session $session" >&2
return 1
@ -351,7 +353,7 @@ EOF
udevadm info "$dev"
# trigger logind and activate session
loginctl activate "$(loginctl --no-legend | grep "logind-test-user" | awk '{ print $1 }')"
loginctl activate "$(loginctl --no-legend | awk '$3 == "logind-test-user" { print $1 }')"
# check ACL
sleep 1
@ -445,6 +447,23 @@ test_session_properties() {
/usr/lib/systemd/tests/manual/test-session-properties "/org/freedesktop/login1/session/_3${s?}"
}
test_list_users() {
if [[ ! -c /dev/tty2 ]]; then
echo "/dev/tty2 does not exist, skipping test ${FUNCNAME[0]}."
return
fi
trap cleanup_session RETURN
create_session
assert_eq "$(loginctl list-users --no-legend | awk '$2 == "logind-test-user" { print $1 }')" "$(id -ru logind-test-user)"
assert_eq "$(loginctl list-users --no-legend | awk '$2 == "logind-test-user" { print $3 }')" no
loginctl enable-linger logind-test-user
assert_eq "$(loginctl list-users --no-legend | awk '$2 == "logind-test-user" { print $3 }')" yes
}
: >/failed
setup_test_user
@ -456,6 +475,7 @@ test_shutdown
test_session
test_lock_idle_action
test_session_properties
test_list_users
touch /testok
rm /failed