From 194dba5ef55e868ded636a48fe8596685bab1657 Mon Sep 17 00:00:00 2001 From: Mike Yuan Date: Wed, 29 May 2024 00:42:07 +0800 Subject: [PATCH 1/2] logind-user: add missing assertion for user_check_linger_file Also make the function take const User* --- src/login/logind-user.c | 7 +++++-- src/login/logind-user.h | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/login/logind-user.c b/src/login/logind-user.c index 1c2ac81353..e51ab1cd19 100644 --- a/src/login/logind-user.c +++ b/src/login/logind-user.c @@ -669,9 +669,12 @@ int user_get_idle_hint(User *u, dual_timestamp *t) { return idle_hint; } -int user_check_linger_file(User *u) { +int user_check_linger_file(const User *u) { _cleanup_free_ char *cc = NULL; - char *p = NULL; + const char *p; + + assert(u); + assert(u->user_record); cc = cescape(u->user_record->user_name); if (!cc) diff --git a/src/login/logind-user.h b/src/login/logind-user.h index 7b10c4fd60..5c82f490f2 100644 --- a/src/login/logind-user.h +++ b/src/login/logind-user.h @@ -82,7 +82,7 @@ int user_get_idle_hint(User *u, dual_timestamp *t); int user_save(User *u); int user_load(User *u); int user_kill(User *u, int signo); -int user_check_linger_file(User *u); +int user_check_linger_file(const User *u); void user_elect_display(User *u); void user_update_last_session_timer(User *u); From e4174159961cccb1710d2e98849e25dc4f971c22 Mon Sep 17 00:00:00 2001 From: Mike Yuan Date: Wed, 29 May 2024 00:43:06 +0800 Subject: [PATCH 2/2] logind-user: check linger file in user_wants_service_manager too Follow-up for 5099a50d4398e190387d204f5df81cc176bd33e2 Fixes #33005 --- src/login/logind-user.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/login/logind-user.c b/src/login/logind-user.c index e51ab1cd19..c63d214146 100644 --- a/src/login/logind-user.c +++ b/src/login/logind-user.c @@ -371,13 +371,16 @@ static int user_start_runtime_dir(User *u) { return 0; } -static bool user_wants_service_manager(User *u) { +static bool user_wants_service_manager(const User *u) { assert(u); LIST_FOREACH(sessions_by_user, s, u->sessions) if (SESSION_CLASS_WANTS_SERVICE_MANAGER(s->class)) return true; + if (user_check_linger_file(u) > 0) + return true; + return false; }