From 09d3bf1742f5e95f86e99ce4d74033d339f2bc9a Mon Sep 17 00:00:00 2001 From: Mike Gabriel Date: Mon, 17 May 2021 00:11:28 +0200 Subject: [PATCH] debian/patches: Add 0006_util-Blacklist-some-session-specific-variables.patch. Fix systemd-logind originated problems when unlocking screen saver. (Closes: #986100). --- ...list-some-session-specific-variables.patch | 73 +++++++++++++++++++ debian/patches/series | 1 + 2 files changed, 74 insertions(+) create mode 100644 debian/patches/0006_util-Blacklist-some-session-specific-variables.patch diff --git a/debian/patches/0006_util-Blacklist-some-session-specific-variables.patch b/debian/patches/0006_util-Blacklist-some-session-specific-variables.patch new file mode 100644 index 0000000..eb1b4c8 --- /dev/null +++ b/debian/patches/0006_util-Blacklist-some-session-specific-variables.patch @@ -0,0 +1,73 @@ +From 29bd7ce251aa617d9f93c8ed95ee7ab49c8684ef Mon Sep 17 00:00:00 2001 +From: Mike Gabriel +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 . + +Patch ported over to MATE's session manager by Mike Gabriel +. + +--- + 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)) diff --git a/debian/patches/series b/debian/patches/series index 9cf4102..7fc064c 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1 +1,2 @@ 0005_lock-session-before-user-switch.patch +0006_util-Blacklist-some-session-specific-variables.patch