systemd/0048-logind-Save-the-user-s-state-when-a-session-enters-S.patch
2015-06-10 15:08:55 -04:00

45 lines
1.8 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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