Patch coming to fix login’s STATE tracking for users to be correct when starting a new session on a VT switch. This is important for PolicyKit decisions about whether the user is active or online, as it affects the return value of sd_uid_get_state(). See the commit message for full details. See also: bug #90769, bug #67728, bug #76358. --- The incorrect behaviour can be tested by: 1. In an X11 terminal, `cat /run/systemd/users/$uid` gives SESSIONS=1 STATE=active. 2. Switch VT, log in, `cat /run/systemd/users/$uid` gives SESSIONS="c2 1" STATE=online. 3. Switch back to X11 and cat again, gives SESSIONS="c2 1" STATE=active. 4. Switch back to VT and cat again, gives SESSIONS="c2 1" STATE=active. With some debugging logging added to logind, it seems that when switching to the VT (step #2 above): A. Session 1 is switched from SESSION_ACTIVE to SESSION_ONLINE because of the VT change. B. A new session (c2) is created, with initial state SESSION_OPENING. C. user_save() is called, which takes the maximum state of sessions 1 and c2, which is SESSION_ONLINE. D. user_save() is not called again after session c2 switches from SESSION_OPENING to SESSION_ACTIVE.
Created attachment 116244 [details] [review] logind: Save the user’s state when a session enters SESSION_ACTIVE 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 user’s state, this could result in things like PolicyKit making incorrect decisions about the user’s state. (See https://bugs.freedesktop.org/show_bug.cgi?id=76358.) Fix this by re-saving the state for a session’s user after completing the state_job for that session.
Applied, thanks!
(In reply to David Herrmann from comment #2) > Applied, thanks! (For posterity, the review is on https://github.com/systemd/systemd/pull/58.)
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.