Blame SOURCES/0218-logind-Save-the-user-s-state-when-a-session-enters-S.patch

17b0f1
From a01e2476f0421026d12384292b34f303fc01c43c Mon Sep 17 00:00:00 2001
17b0f1
From: Philip Withnall <philip.withnall@collabora.co.uk>
17b0f1
Date: Tue, 2 Jun 2015 14:17:10 +0100
17b0f1
Subject: [PATCH] =?UTF-8?q?logind:=20Save=20the=20user=E2=80=99s=20state?=
17b0f1
 =?UTF-8?q?=20when=20a=20session=20enters=20SESSION=5FACTIVE?=
17b0f1
MIME-Version: 1.0
17b0f1
Content-Type: text/plain; charset=UTF-8
17b0f1
Content-Transfer-Encoding: 8bit
17b0f1
17b0f1
When (for example) switching from X11 to a new VT and logging in there,
17b0f1
creating a new session, the user state file (/run/systemd/users/$uid) is
17b0f1
not updated after the session becomes active. The latest time it is
17b0f1
saved is when the session is in SESSION_OPENING.
17b0f1
17b0f1
This results in a /run/systemd/users/$uid file which contains
17b0f1
STATE=online for the current user on the current active VT, which is
17b0f1
obviously wrong.
17b0f1
17b0f1
As functions like sd_uid_get_state() use this file to get the user’s
17b0f1
state, this could result in things like PolicyKit making incorrect
17b0f1
decisions about the user’s state. (See
17b0f1
https://bugs.freedesktop.org/show_bug.cgi?id=76358.)
17b0f1
17b0f1
Fix this by re-saving the state for a session’s user after completing
17b0f1
the state_job for that session.
17b0f1
17b0f1
https://bugs.freedesktop.org/show_bug.cgi?id=90818
17b0f1
(cherry picked from commit 41dfeaa194c18de49706b5cecf4e53accd12b7f6)
17b0f1
17b0f1
Cherry-picked from: 41dfeaa
17b0f1
Resolves: #1222517
17b0f1
---
17b0f1
 src/login/logind-dbus.c | 1 +
17b0f1
 1 file changed, 1 insertion(+)
17b0f1
17b0f1
diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
17b0f1
index 8b0bafd49e..fb84e92e5d 100644
17b0f1
--- a/src/login/logind-dbus.c
17b0f1
+++ b/src/login/logind-dbus.c
17b0f1
@@ -2124,6 +2124,7 @@ int match_job_removed(sd_bus *bus, sd_bus_message *message, void *userdata, sd_b
17b0f1
                 session_jobs_reply(session, unit, result);
17b0f1
 
17b0f1
                 session_save(session);
17b0f1
+                user_save(session->user);
17b0f1
                 session_add_to_gc_queue(session);
17b0f1
         }
17b0f1