From 513cf7da850ca84cae0fc7a1e889a4a9124458b8 Mon Sep 17 00:00:00 2001 From: Michal Sekletar Date: Wed, 13 Jul 2022 16:54:10 +0200 Subject: [PATCH] Revert "logind: don't start user@UID.service instance for background sessions" This reverts commit e73bf3425c0b5a6339388a3a459ce2bac497308b. --- src/core/execute.c | 12 +++++------- src/login/logind-dbus.c | 2 +- src/login/logind-session.c | 6 +++--- src/login/logind-user.c | 5 ++--- src/login/logind-user.h | 2 +- src/login/logind.c | 5 ++++- src/login/pam_systemd.c | 5 +---- 7 files changed, 17 insertions(+), 20 deletions(-) diff --git a/src/core/execute.c b/src/core/execute.c index 64b290d3e79..e68d2317393 100644 --- a/src/core/execute.c +++ b/src/core/execute.c @@ -1213,15 +1213,13 @@ static int setup_pam( if (getttyname_malloc(STDIN_FILENO, &q) >= 0) tty = strjoina("/dev/", q); - else - /* If everything else failed then let's just use value "systemd". This will cause that session - * isn't going to be marked as "background" and user manager will be started. */ - tty = "systemd"; } - pam_code = pam_set_item(handle, PAM_TTY, tty); - if (pam_code != PAM_SUCCESS) - goto fail; + if (tty) { + pam_code = pam_set_item(handle, PAM_TTY, tty); + if (pam_code != PAM_SUCCESS) + goto fail; + } STRV_FOREACH(nv, *env) { pam_code = pam_putenv(handle, *nv); diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c index e308e52af3b..a426842bbb3 100644 --- a/src/login/logind-dbus.c +++ b/src/login/logind-dbus.c @@ -1305,7 +1305,7 @@ static int method_set_user_linger(sd_bus_message *message, void *userdata, sd_bu return r; if (manager_add_user_by_uid(m, uid, &u) >= 0) - user_start(u, /* want_user_instance= */ true); + user_start(u); } else { User *u; diff --git a/src/login/logind-session.c b/src/login/logind-session.c index 31c37d4e2be..267d8af8525 100644 --- a/src/login/logind-session.c +++ b/src/login/logind-session.c @@ -667,7 +667,7 @@ static int session_start_scope(Session *s, sd_bus_message *properties, sd_bus_er after = strv_new("systemd-logind.service", s->user->runtime_dir_service, !uid_is_system(s->user->user_record->uid) ? "systemd-user-sessions.service" : STRV_IGNORE, - s->class != SESSION_BACKGROUND ? s->user->service : STRV_IGNORE); + s->user->service); if (!after) return log_oom(); @@ -679,7 +679,7 @@ static int session_start_scope(Session *s, sd_bus_message *properties, sd_bus_er description, /* These two have StopWhenUnneeded= set, hence add a dep towards them */ STRV_MAKE(s->user->runtime_dir_service, - s->class != SESSION_BACKGROUND ? s->user->service : NULL), + s->user->service), after, user_record_home_directory(s->user->user_record), properties, @@ -711,7 +711,7 @@ int session_start(Session *s, sd_bus_message *properties, sd_bus_error *error) { if (s->started) return 0; - r = user_start(s->user, /* want_user_instance= */ s->class != SESSION_BACKGROUND); + r = user_start(s->user); if (r < 0) return r; diff --git a/src/login/logind-user.c b/src/login/logind-user.c index 5f6cd590cea..3f1b8f610ba 100644 --- a/src/login/logind-user.c +++ b/src/login/logind-user.c @@ -442,7 +442,7 @@ static int user_update_slice(User *u) { return 0; } -int user_start(User *u, bool want_user_instance) { +int user_start(User *u) { assert(u); if (u->started && !u->stopping) @@ -465,8 +465,7 @@ int user_start(User *u, bool want_user_instance) { (void) user_update_slice(u); /* Start user@UID.service */ - if (want_user_instance) - user_start_service(u); + user_start_service(u); if (!u->started) { if (!dual_timestamp_is_set(&u->timestamp)) diff --git a/src/login/logind-user.h b/src/login/logind-user.h index a20775ae704..21b9f8f348e 100644 --- a/src/login/logind-user.h +++ b/src/login/logind-user.h @@ -57,7 +57,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(User *, user_free); bool user_may_gc(User *u, bool drop_not_started); void user_add_to_gc_queue(User *u); -int user_start(User *u, bool need_user_instance); +int user_start(User *u); int user_stop(User *u, bool force); int user_finalize(User *u); UserState user_get_state(User *u); diff --git a/src/login/logind.c b/src/login/logind.c index 2fdcd1d55ed..d14a17274bb 100644 --- a/src/login/logind.c +++ b/src/login/logind.c @@ -1041,6 +1041,7 @@ static int manager_startup(Manager *m) { int r; Seat *seat; Session *session; + User *user; Button *button; Inhibitor *inhibitor; @@ -1117,7 +1118,9 @@ static int manager_startup(Manager *m) { HASHMAP_FOREACH(seat, m->seats) (void) seat_start(seat); - /* Users are started by respective sessions */ + HASHMAP_FOREACH(user, m->users) + (void) user_start(user); + HASHMAP_FOREACH(session, m->sessions) (void) session_start(session, NULL, NULL); diff --git a/src/login/pam_systemd.c b/src/login/pam_systemd.c index 677a0140782..cb6a6fb5146 100644 --- a/src/login/pam_systemd.c +++ b/src/login/pam_systemd.c @@ -790,10 +790,7 @@ _public_ PAM_EXTERN int pam_sm_open_session( * does the PAM session registration early for new connections, and registers a pty only * much later (this is because it doesn't know yet if it needs one at all, as whether to * register a pty or not is negotiated much later in the protocol). */ - } else if (streq(tty, "systemd")) { - if (isempty(class)) - class = "user"; - tty = NULL; + } else /* Chop off leading /dev prefix that some clients specify, but others do not. */ tty = skip_dev_prefix(tty); -- 2.47.3