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:
commit
5509518193
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user