diff options
| author | Victor Kareh <[email protected]> | 2025-10-09 09:41:37 -0400 |
|---|---|---|
| committer | Victor Kareh <[email protected]> | 2025-10-15 14:50:37 +0000 |
| commit | 6df44358e1e1688a32c63d840ea50e21491ffc0a (patch) | |
| tree | 09953dd712b34a5e69661d2d10fbb99f66082a4c | |
| parent | 7258f4630cd15e74278e7dd5cbd6c9170c748ddb (diff) | |
| download | mate-session-manager-6df44358e1e1688a32c63d840ea50e21491ffc0a.tar.bz2 mate-session-manager-6df44358e1e1688a32c63d840ea50e21491ffc0a.tar.xz | |
This loosens mate-session's env var value restrictions to match
systemd's modern restrictions.
Backported from https://gitlab.gnome.org/GNOME/gnome-session/-/commit/cbc5e5de421359ee5642e44fa9ab670d705d23ea
| -rw-r--r-- | configure.ac | 6 | ||||
| -rw-r--r-- | mate-session/gsm-util.c | 14 |
2 files changed, 17 insertions, 3 deletions
diff --git a/configure.ac b/configure.ac index fd7f6a0..0bf02ca 100644 --- a/configure.ac +++ b/configure.ac @@ -120,6 +120,12 @@ if test "x$with_systemd" != "xno" ; then AC_DEFINE(HAVE_SYSTEMD, 1, [systemd support]) AC_SUBST(SYSTEMD_CFLAGS) AC_SUBST(SYSTEMD_LIBS) + PKG_CHECK_EXISTS([libsystemd], + [systemd_pkgconfig=libsystemd], + [systemd_pkgconfig=libsystemd-login]) + PKG_CHECK_EXISTS([$systemd_pkgconfig >= 248],, + [AC_DEFINE([SYSTEMD_STRICT_ENV], [1], + [Use strict environment variable validation for systemd < 248])]) fi fi AM_CONDITIONAL(HAVE_SYSTEMD, test "x$use_systemd" = "xyes") diff --git a/mate-session/gsm-util.c b/mate-session/gsm-util.c index 6b7f7db..5da30d2 100644 --- a/mate-session/gsm-util.c +++ b/mate-session/gsm-util.c @@ -501,6 +501,13 @@ gsm_util_update_activation_environment (const char *variable, return environment_updated; } +#define ENV_NAME_PATTERN "[a-zA-Z_][a-zA-Z0-9_]*" +#ifdef SYSTEMD_STRICT_ENV +#define ENV_VALUE_PATTERN "(?:[ \t\n]|[^[:cntrl:]])*" +#else +#define ENV_VALUE_PATTERN ".*" +#endif + gboolean gsm_util_export_activation_environment (GError **error) { @@ -519,13 +526,14 @@ gsm_util_export_activation_environment (GError **error) return FALSE; } - name_regex = g_regex_new ("^[a-zA-Z_][a-zA-Z0-9_]*$", G_REGEX_OPTIMIZE, 0, error); + name_regex = g_regex_new ("^" ENV_NAME_PATTERN "$", G_REGEX_OPTIMIZE, 0, error); if (name_regex == NULL) { return FALSE; } - value_regex = g_regex_new ("^(?:[ \t\n]|[^[:cntrl:]])*$", G_REGEX_OPTIMIZE, 0, error); + + value_regex = g_regex_new ("^" ENV_VALUE_PATTERN "$", G_REGEX_OPTIMIZE, 0, error); if (value_regex == NULL) { return FALSE; @@ -597,7 +605,7 @@ gsm_util_export_user_environment (GError **error) return FALSE; } - regex = g_regex_new ("^[a-zA-Z_][a-zA-Z0-9_]*=(?:[ \t\n]|[^[:cntrl:]])*$", G_REGEX_OPTIMIZE, 0, error); + regex = g_regex_new ("^" ENV_NAME_PATTERN "=" ENV_VALUE_PATTERN "$", G_REGEX_OPTIMIZE, 0, error); if (regex == NULL) { return FALSE; |
