debian/patches: Add 0006_util-Blacklist-some-session-specific-variables.patch. Fix systemd-logind originated problems when unlocking screen saver. (Closes: #986100).

This commit is contained in:
Mike Gabriel 2021-05-17 00:11:28 +02:00
parent 86508ceb95
commit 09d3bf1742
2 changed files with 74 additions and 0 deletions

View File

@ -0,0 +1,73 @@
From 29bd7ce251aa617d9f93c8ed95ee7ab49c8684ef Mon Sep 17 00:00:00 2001
From: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
Date: Mon, 17 May 2021 00:05:16 +0200
Forwarded: https://github.com/mate-desktop/mate-session-manager/pull/282
Subject: [PATCH] util: Blacklist some session-specific variables
Things like XDG_SESSION_ID should not be uploaded to the environment.
For example this is broken currently:
1. SSH to your machine
2. Log in to MATE Shell
3. Log out
4. Log in again
5. Lock the screen
6. Try to unlock
You can't, and this is because the XDG_SESSION_ID from the first session
(step 2) has leaked through to the second one (step 4), and so MATE
Shell is listening to the `logind` `UnlockSession` signal for the wrong
session. The SSH session established in step 1 serves to keep the
`systemd --user` instance alive, so that the state is not torn down
between logins.
Original patch for GNOME by Iain Lane <iainl@gnome.org>.
Patch ported over to MATE's session manager by Mike Gabriel
<sunweaver@debian.org>.
---
mate-session/gsm-util.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
--- a/mate-session/gsm-util.c
+++ b/mate-session/gsm-util.c
@@ -38,6 +38,13 @@
static gchar *_saved_session_dir = NULL;
+static const char * const variable_blacklist[] = {
+ "XDG_SEAT",
+ "XDG_SESSION_ID",
+ "XDG_VTNR",
+ NULL
+};
+
char *
gsm_util_find_desktop_file_for_app_name (const char *name,
char **autostart_dirs)
@@ -509,6 +516,9 @@
const char *entry_name = entry_names[i];
const char *entry_value = g_getenv (entry_name);
+ if (g_strv_contains (variable_blacklist, entry_name))
+ continue;
+
if (!g_utf8_validate (entry_name, -1, NULL))
continue;
@@ -576,8 +586,13 @@
return FALSE;
}
+ entries = g_get_environ ();
+
+ for (; variable_blacklist[i] != NULL; i++)
+ entries = g_environ_unsetenv (entries, variable_blacklist[i]);
+
g_variant_builder_init (&builder, G_VARIANT_TYPE ("as"));
- for (entries = g_get_environ (); entries[i] != NULL; i++) {
+ for (i = 0; entries[i] != NULL; i++) {
const char *entry = entries[i];
if (!g_utf8_validate (entry, -1, NULL))

View File

@ -1 +1,2 @@
0005_lock-session-before-user-switch.patch
0006_util-Blacklist-some-session-specific-variables.patch