/* Import locale variables LC_*= from configuration */
(void) locale_setup(&m->transient_environment);
} else {
- /* The user manager passes its own environment along to its children, except for $PATH. */
+ /* The user manager passes its own environment along to its children, except for $PATH and
+ * session envs. */
+
m->transient_environment = strv_copy(environ);
if (!m->transient_environment)
return log_oom();
r = strv_env_replace_strdup(&m->transient_environment, "PATH=" DEFAULT_USER_PATH);
if (r < 0)
return log_oom();
+
+ /* Envvars set for our 'manager' class session are private and should not be propagated
+ * to children. Also it's likely that the graphical session will set these on their own. */
+ strv_env_unset_many(m->transient_environment,
+ "XDG_SESSION_ID",
+ "XDG_SESSION_CLASS",
+ "XDG_SESSION_TYPE",
+ "XDG_SESSION_DESKTOP",
+ "XDG_SEAT",
+ "XDG_VTNR");
}
sanitize_environment(m->transient_environment);
"id=%s object_path=%s runtime_path=%s session_fd=%d seat=%s vtnr=%u original_uid=%u",
id, object_path, runtime_path, session_fd, seat, vtnr, original_uid);
+ /* Please update manager_default_environment() in core/manager.c accordingly if more session envvars
+ * shall be added. */
+
r = update_environment(handle, "XDG_SESSION_ID", id);
if (r != PAM_SUCCESS)
return r;