Browse Source

gdm package update

Signed-off-by: guibuilder_pel7x64builder0 <guibuilder@powerel.org>
master
guibuilder_pel7x64builder0 6 years ago
parent
commit
e234c37a95
  1. 210
      SOURCES/0001-Honor-initial-setup-being-disabled-by-distro-install.patch
  2. 212
      SOURCES/0001-Revert-data-Add-gnome-login.session.patch
  3. 86
      SOURCES/0001-Revert-gdm-sessions-force-a-session-bus-for-non-seat.patch
  4. 103
      SOURCES/0001-Revert-session-don-t-call-gdm_session_defaults_chang.patch
  5. 280
      SOURCES/0001-Revert-session-forward-is-initial-from-display-to-wo.patch
  6. 45
      SOURCES/0001-data-drop-pam_gdm-reintroduce-pam_env-postlogin.patch
  7. 33
      SOURCES/0001-gdm.conf-custom.in-strip-out-reference-to-wayland.patch
  8. 104
      SOURCES/0001-worker-add-compat-patch-to-make-new-worker-work-with.patch
  9. 147
      SOURCES/audit-4.patch
  10. 195
      SOURCES/classic-session.patch
  11. 53
      SOURCES/clear-screen.patch
  12. 3
      SOURCES/org.gnome.login-screen.gschema.override
  13. 24
      SOURCES/system-dconf.patch
  14. 2995
      SPECS/gdm.spec

210
SOURCES/0001-Honor-initial-setup-being-disabled-by-distro-install.patch

@ -0,0 +1,210 @@ @@ -0,0 +1,210 @@
From d4f6b620c4c1b56e7e6421cc470eb711d7faa0eb Mon Sep 17 00:00:00 2001
From: Rui Matos <tiagomatos@gmail.com>
Date: Mon, 23 Jan 2017 20:19:51 +0100
Subject: [PATCH] Honor initial setup being disabled by distro installer

Sysadmins might want to disable any kind of initial setup for their
users, perhaps because they pre-configure their environments. We
already provide a configuration file option for this but distro
installers might have their own way of requesting this.

At least the anaconda installer provides an option to skip any kind
post-install setup tools so, for now we're only adding support for
that but more might be added in the future.

https://bugzilla.gnome.org/show_bug.cgi?id=777708
---
daemon/Makefile.am | 1 +
daemon/gdm-display.c | 29 +++++++++++++++++++++++++++++
2 files changed, 30 insertions(+)

diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index 5e9eb5e0..3b1b1512 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -1,47 +1,48 @@
NULL =
AM_CPPFLAGS = \
-I. \
-I.. \
-I$(top_srcdir)/common \
-I$(top_srcdir)/pam-extensions \
-I$(top_builddir)/common \
-DBINDIR=\"$(bindir)\" \
-DDATADIR=\"$(datadir)\" \
-DDMCONFDIR=\"$(dmconfdir)\" \
-DGDMCONFDIR=\"$(gdmconfdir)\" \
-DLIBDIR=\"$(libdir)\" \
-DLIBEXECDIR=\"$(libexecdir)\" \
-DLOCALSTATEDIR=\"$(localstatedir)\" \
-DLOGDIR=\"$(logdir)\" \
-DSBINDIR=\"$(sbindir)\" \
+ -DSYSCONFDIR=\"$(sysconfdir)\" \
-DGNOMELOCALEDIR=\""$(datadir)/locale"\" \
-DGDM_RUN_DIR=\"$(GDM_RUN_DIR)\" \
-DGDM_XAUTH_DIR=\"$(GDM_XAUTH_DIR)\" \
-DGDM_SCREENSHOT_DIR=\"$(GDM_SCREENSHOT_DIR)\" \
-DGDM_CACHE_DIR=\""$(localstatedir)/cache/gdm"\" \
-DGDM_SESSION_DEFAULT_PATH=\"$(GDM_SESSION_DEFAULT_PATH)\" \
$(DISABLE_DEPRECATED_CFLAGS) \
$(DAEMON_CFLAGS) \
$(XLIB_CFLAGS) \
$(WARN_CFLAGS) \
$(DEBUG_CFLAGS) \
$(SYSTEMD_CFLAGS) \
$(JOURNALD_CFLAGS) \
$(LIBSELINUX_CFLAGS) \
-DLANG_CONFIG_FILE=\"$(LANG_CONFIG_FILE)\" \
$(NULL)
BUILT_SOURCES = \
gdm-display-glue.h \
gdm-manager-glue.h \
gdm-local-display-glue.h \
gdm-local-display-factory-glue.h \
gdm-session-glue.h \
gdm-session-worker-glue.h \
gdm-session-enum-types.h \
$(NULL)
gdm-session-enum-types.h: gdm-session-enum-types.h.in gdm-session.h
$(AM_V_GEN) glib-mkenums --template $^ > $@
diff --git a/daemon/gdm-display.c b/daemon/gdm-display.c
index 6a3984a9..30723da0 100644
--- a/daemon/gdm-display.c
+++ b/daemon/gdm-display.c
@@ -1522,100 +1522,129 @@ kernel_cmdline_initial_setup_force_state (gboolean *force_state)
GError *error = NULL;
gchar *contents = NULL;
gchar *setup_argument = NULL;
g_return_val_if_fail (force_state != NULL, FALSE);
if (!g_file_get_contents ("/proc/cmdline", &contents, NULL, &error)) {
g_debug ("GdmDisplay: Could not check kernel parameters, not forcing initial setup: %s",
error->message);
g_clear_error (&error);
return FALSE;
}
g_debug ("GdmDisplay: Checking kernel command buffer %s", contents);
if (!kernel_cmdline_initial_setup_argument (contents, &setup_argument, &error)) {
g_debug ("GdmDisplay: Failed to read kernel commandline: %s", error->message);
g_clear_pointer (&contents, g_free);
return FALSE;
}
g_clear_pointer (&contents, g_free);
/* Poor-man's check for truthy or falsey values */
*force_state = setup_argument[0] == '1';
g_free (setup_argument);
return TRUE;
}
+static gboolean
+initial_setup_disabled_by_anaconda (void)
+{
+ GKeyFile *key_file;
+ const gchar *file_name = SYSCONFDIR "/sysconfig/anaconda";
+ gboolean disabled = FALSE;
+ GError *error = NULL;
+
+ key_file = g_key_file_new ();
+ if (!g_key_file_load_from_file (key_file, file_name, G_KEY_FILE_NONE, &error)) {
+ if (!g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT) &&
+ !g_error_matches (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND)) {
+ g_warning ("Could not read %s: %s", file_name, error->message);
+ }
+ g_error_free (error);
+ goto out;
+ }
+
+ disabled = g_key_file_get_boolean (key_file, "General",
+ "post_install_tools_disabled", NULL);
+ out:
+ g_key_file_unref (key_file);
+ return disabled;
+}
+
static gboolean
wants_initial_setup (GdmDisplay *self)
{
gboolean enabled = FALSE;
gboolean forced = FALSE;
if (already_done_initial_setup_on_this_boot ()) {
return FALSE;
}
if (kernel_cmdline_initial_setup_force_state (&forced)) {
if (forced) {
g_debug ("GdmDisplay: Forcing gnome-initial-setup");
return TRUE;
}
g_debug ("GdmDisplay: Forceing no gnome-initial-setup");
return FALSE;
}
/* don't run initial-setup on remote displays
*/
if (!self->priv->is_local) {
return FALSE;
}
/* don't run if the system has existing users */
if (self->priv->have_existing_user_accounts) {
return FALSE;
}
/* don't run if initial-setup is unavailable */
if (!can_create_environment ("gnome-initial-setup")) {
return FALSE;
}
if (!gdm_settings_direct_get_boolean (GDM_KEY_INITIAL_SETUP_ENABLE, &enabled)) {
return FALSE;
}
+ if (initial_setup_disabled_by_anaconda ()) {
+ return FALSE;
+ }
+
return enabled;
}
void
gdm_display_start_greeter_session (GdmDisplay *self)
{
GdmSession *session;
char *display_name;
char *seat_id;
char *hostname;
char *auth_file = NULL;
g_return_if_fail (g_strcmp0 (self->priv->session_class, "greeter") == 0);
g_debug ("GdmDisplay: Running greeter");
display_name = NULL;
seat_id = NULL;
hostname = NULL;
g_object_get (self,
"x11-display-name", &display_name,
"seat-id", &seat_id,
"remote-hostname", &hostname,
NULL);
if (self->priv->access_file != NULL) {
auth_file = gdm_display_access_file_get_path (self->priv->access_file);
}
g_debug ("GdmDisplay: Creating greeter for %s %s", display_name, hostname);
--
2.14.2

212
SOURCES/0001-Revert-data-Add-gnome-login.session.patch

@ -0,0 +1,212 @@ @@ -0,0 +1,212 @@
From cbddcc7c8cc8dcccc8c9a616e1decf8a3ed1cb87 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Fri, 13 Oct 2017 13:56:22 -0400
Subject: [PATCH] Revert "data: Add gnome-login.session"

This reverts commit 1073f0e792d9d5bf9d53bddb6e51177c8024c2b3.
---
data/Makefile.am | 12 ------------
data/dconf/defaults/00-upstream-settings | 2 +-
data/gnome-login.session.in | 3 ---
3 files changed, 1 insertion(+), 16 deletions(-)
delete mode 100644 data/gnome-login.session.in

diff --git a/data/Makefile.am b/data/Makefile.am
index c10c9151..f2875fcb 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -59,74 +59,63 @@ schemas_in_files = gdm.schemas.in
schemas_DATA = $(schemas_in_files:.schemas.in=.schemas)
gdm.schemas.in: $(srcdir)/gdm.schemas.in.in
sed -e 's,[@]GDMPREFETCHCMD[@],$(GDMPREFETCHCMD),g' \
-e 's,[@]GDM_CUSTOM_CONF[@],$(GDM_CUSTOM_CONF),g' \
-e 's,[@]GDM_USER_PATH[@],$(GDM_USER_PATH),g' \
-e 's,[@]GDM_USERNAME[@],$(GDM_USERNAME),g' \
-e 's,[@]GDM_GROUPNAME[@],$(GDM_GROUPNAME),g' \
-e 's,[@]HALT_COMMAND[@],$(HALT_COMMAND),g' \
-e 's,[@]REBOOT_COMMAND[@],$(REBOOT_COMMAND),g' \
-e 's,[@]SOUND_PROGRAM[@],$(SOUND_PROGRAM),g' \
-e 's,[@]SUSPEND_COMMAND[@],$(SUSPEND_COMMAND),g' \
-e 's,[@]XEVIE_OPTION[@],$(XEVIE_OPTION),g' \
-e 's,[@]ALWAYS_RESTART_SERVER[@],$(ALWAYS_RESTART_SERVER),g' \
-e 's,[@]X_CONFIG_OPTIONS[@],$(X_CONFIG_OPTIONS),g' \
-e 's,[@]X_SERVER[@],$(X_SERVER),g' \
-e 's,[@]X_XNEST_CMD[@],$(X_XNEST_CMD),g' \
-e 's,[@]X_XNEST_CONFIG_OPTIONS[@],$(X_XNEST_CONFIG_OPTIONS),g' \
-e 's,[@]X_XNEST_UNSCALED_FONTPATH[@],$(X_XNEST_UNSCALED_FONTPATH),g' \
-e 's,[@]GDM_RBAC_SYSCMD_KEYS[@],$(GDM_RBAC_SYSCMD_KEYS),g' \
-e 's,[@]datadir[@],$(datadir),g' \
-e 's,[@]gdmconfdir[@],$(gdmconfdir),g' \
-e 's,[@]libdir[@],$(libdir),g' \
-e 's,[@]libexecdir[@],$(libexecdir),g' \
-e 's,[@]gdmlocaledir[@],$(gdmlocaledir),g' \
-e 's,[@]logdir[@],$(logdir),g' \
-e 's,[@]pixmapdir[@],$(pixmapdir),g' \
-e 's,[@]sbindir[@],$(sbindir),g' \
<$(srcdir)/gdm.schemas.in.in >gdm.schemas.in
-
-EXTRA_DIST += gnome-login.session.in
-
-gnome-login.session: $(srcdir)/gnome-login.session.in
- sed -e 's,[@]libexecdir[@],$(libexecdir),g' \
- -e 's,[@]CHECK_ACCELERATED_DIR[@],$(CHECK_ACCELERATED_DIR),g' \
- < $< > $@.tmp && mv $@.tmp $@
-
localealiasdir = $(datadir)/gdm
localealias_DATA = locale.alias
-sessiondir = $(datadir)/gnome-session/sessions
-session_DATA = gnome-login.session
-
pam_redhat_files = \
pam-redhat/gdm-autologin.pam \
pam-redhat/gdm-launch-environment.pam \
pam-redhat/gdm-fingerprint.pam \
pam-redhat/gdm-smartcard.pam \
pam-redhat/gdm-password.pam \
pam-redhat/gdm-pin.pam \
$(NULL)
EXTRA_DIST += $(pam_redhat_files)
pam_openembedded_files = pam-openembedded/gdm-password.pam \
pam-openembedded/gdm-autologin.pam \
pam-openembedded/gdm-launch-environment.pam \
pam-openembedded/gdm-pin.pam \
$(NULL)
EXTRA_DIST += $(pam_openembedded_files)
pam_exherbo_files = pam-exherbo/gdm-autologin.pam \
pam-exherbo/gdm-launch-environment.pam \
pam-exherbo/gdm-fingerprint.pam \
pam-exherbo/gdm-smartcard.pam \
pam-exherbo/gdm-password.pam \
pam-exherbo/gdm-pin.pam \
$(NULL)
EXTRA_DIST += $(pam_exherbo_files)
pam_lfs_files = \
pam-lfs/gdm-autologin.pam \
pam-lfs/gdm-launch-environment.pam \
pam-lfs/gdm-fingerprint.pam \
@@ -163,61 +152,60 @@ endif
EXTRA_DIST += \
$(dconf_db_files) \
$(schemas_in_files) \
$(schemas_DATA) \
$(dbusconf_in_files) \
$(localealias_DATA) \
gdm.schemas.in.in \
gdm.conf-custom.in \
Xsession.in \
Init.in \
PreSession.in \
PostSession.in \
PostLogin \
org.gnome.login-screen.gschema.xml.in \
$(NULL)
CLEANFILES = \
Xsession \
gdm.conf-custom \
Init \
PreSession \
PostSession \
$(gsettings_SCHEMAS) \
greeter-dconf-defaults \
$(NULL)
DISTCLEANFILES = \
$(dbusconf_DATA) \
gdm.schemas \
- gnome-login.session \
$(NULL)
MAINTAINERCLEANFILES = \
*~ \
Makefile.in
systemdsystemunit =
gdm.service: $(srcdir)/gdm.service.in
$(AM_V_GEN)sed \
-e 's,[@]sbindir[@],$(sbindir),g' \
-e 's,[@]GDM_INITIAL_VT[@],$(GDM_INITIAL_VT),g' \
-e 's,[@]LANG_CONFIG_FILE[@],$(LANG_CONFIG_FILE),g' \
-e 's,[@]PLYMOUTH_QUIT_SERVICE[@],$(PLYMOUTH_QUIT_SERVICE),g' \
-e 's, *$$,,g' \
< $< > $@
systemdsystemunit += gdm.service
CLEANFILES += gdm.service
if INSTALL_SYSTEMD_UNITS
systemdsystemunit_DATA=$(systemdsystemunit)
systemdsystemunitdir=$(SYSTEMD_SYSTEM_UNIT_DIR)
endif
Xsession_files =
if ENABLE_GDM_XSESSION
Xsession: $(srcdir)/Xsession.in
sed -e 's,[@]XSESSION_SHELL[@],$(XSESSION_SHELL),g' \
-e 's,[@]libexecdir[@],$(libexecdir),g' \
diff --git a/data/dconf/defaults/00-upstream-settings b/data/dconf/defaults/00-upstream-settings
index 603903e6..f109e0a9 100644
--- a/data/dconf/defaults/00-upstream-settings
+++ b/data/dconf/defaults/00-upstream-settings
@@ -1,40 +1,40 @@
# This file is part of the GDM packaging and should not be changed.
#
# Instead create your own file next to it with a higher numbered prefix,
# and run
#
# dconf update
#
[org/gnome/desktop/session]
-session-name='gnome-login'
+session-name='gnome'
[org/gnome/desktop/a11y]
always-show-universal-access-status=true
[org/gnome/desktop/background]
show-desktop-icons=false
[org/gnome/desktop/default-applications/terminal]
exec='true'
[org/gnome/desktop/lockdown]
disable-application-handlers=true
disable-command-line=true
disable-lock-screen=true
disable-log-out=false
disable-printing=true
disable-print-setup=true
disable-save-to-disk=true
disable-user-switching=true
[org/gnome/desktop/sound]
event-sounds=true
[org/gnome/settings-daemon/plugins/media-keys]
calculator=''
eject=''
email=''
help=''
home=''
media=''
diff --git a/data/gnome-login.session.in b/data/gnome-login.session.in
deleted file mode 100644
index 764afd15..00000000
--- a/data/gnome-login.session.in
+++ /dev/null
@@ -1,3 +0,0 @@
-[GNOME Session]
-Name=Display Manager
-RequiredComponents=org.gnome.Shell;org.gnome.SettingsDaemon.A11yKeyboard;org.gnome.SettingsDaemon.A11ySettings;org.gnome.SettingsDaemon.Clipboard;org.gnome.SettingsDaemon.Color;org.gnome.SettingsDaemon.Datetime;org.gnome.SettingsDaemon.Housekeeping;org.gnome.SettingsDaemon.Keyboard;org.gnome.SettingsDaemon.MediaKeys;org.gnome.SettingsDaemon.Mouse;org.gnome.SettingsDaemon.Power;org.gnome.SettingsDaemon.PrintNotifications;org.gnome.SettingsDaemon.Rfkill;org.gnome.SettingsDaemon.ScreensaverProxy;org.gnome.SettingsDaemon.Sharing;org.gnome.SettingsDaemon.Smartcard;org.gnome.SettingsDaemon.Sound;org.gnome.SettingsDaemon.Wacom;org.gnome.SettingsDaemon.XSettings;
--
2.14.2

86
SOURCES/0001-Revert-gdm-sessions-force-a-session-bus-for-non-seat.patch

@ -0,0 +1,86 @@ @@ -0,0 +1,86 @@
From 5c86f9731ed715bcf603c9dd93dced002f11b996 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Tue, 17 Oct 2017 10:06:22 -0400
Subject: [PATCH] Revert "gdm-sessions: force a session bus for non-seat0
session"

This reverts commit 2b52d8933c8ab38e7ee83318da2363d00d8c5581.
---
daemon/gdm-session.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
index 3e71ad2f..3a1b7f23 100644
--- a/daemon/gdm-session.c
+++ b/daemon/gdm-session.c
@@ -2870,66 +2870,61 @@ gdm_session_start_session (GdmSession *self,
allow_remote_connections = TRUE;
}
if (run_launcher) {
if (is_x11) {
program = g_strdup_printf (LIBEXECDIR "/gdm-x-session %s %s\"%s\"",
run_xsession_script? "--run-script " : "",
allow_remote_connections? "--allow-remote-connections " : "",
command);
} else {
program = g_strdup_printf (LIBEXECDIR "/gdm-wayland-session \"%s\"",
command);
}
} else if (run_xsession_script) {
program = g_strdup_printf (GDMCONFDIR "/Xsession \"%s\"", command);
} else {
program = g_strdup (command);
}
g_free (command);
} else {
if (run_launcher) {
if (is_x11) {
program = g_strdup_printf (LIBEXECDIR "/gdm-x-session \"%s\"",
self->priv->selected_program);
} else {
program = g_strdup_printf (LIBEXECDIR "/gdm-wayland-session \"%s\"",
self->priv->selected_program);
}
} else {
- if (g_strcmp0 (self->priv->display_seat_id, "seat0") != 0) {
- program = g_strdup_printf ("dbus-run-session -- %s",
- self->priv->selected_program);
- } else {
- program = g_strdup (self->priv->selected_program);
- }
+ program = g_strdup (self->priv->selected_program);
}
}
set_up_session_environment (self);
send_environment (self, conversation);
gdm_dbus_worker_call_start_program (conversation->worker_proxy,
program,
conversation->worker_cancellable,
(GAsyncReadyCallback) on_start_program_cb,
conversation);
g_free (program);
}
static void
stop_all_conversations (GdmSession *self)
{
stop_all_other_conversations (self, NULL, TRUE);
}
static void
do_reset (GdmSession *self)
{
stop_all_conversations (self);
g_list_free_full (self->priv->pending_worker_connections, g_object_unref);
self->priv->pending_worker_connections = NULL;
g_free (self->priv->selected_user);
self->priv->selected_user = NULL;
--
2.14.2

103
SOURCES/0001-Revert-session-don-t-call-gdm_session_defaults_chang.patch

@ -0,0 +1,103 @@ @@ -0,0 +1,103 @@
From 0012497171500090b55e4c8e967809a5b2daaa94 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Wed, 14 Feb 2018 16:07:15 -0500
Subject: [PATCH] Revert "session: don't call gdm_session_defaults_changed from
setup"

This reverts commit 572a19324b75cc1f1b2db4908e2d7c9f06e4e335.

It turns out we need this call for more than just the session type,
we also need to it to inform the greeter about the default session
to use.
---
daemon/gdm-session.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
index 3a1b7f23..e9cbd0ec 100644
--- a/daemon/gdm-session.c
+++ b/daemon/gdm-session.c
@@ -2368,78 +2368,80 @@ initialize (GdmSession *self,
g_variant_builder_add_parsed (&details, "{'seat-id', <%s>}", self->priv->display_seat_id);
if (self->priv->display_x11_authority_file != NULL)
g_variant_builder_add_parsed (&details, "{'x11-authority-file', <%s>}", self->priv->display_x11_authority_file);
g_debug ("GdmSession: Beginning initialization");
conversation = find_conversation_by_name (self, service_name);
if (conversation != NULL) {
gdm_dbus_worker_call_initialize (conversation->worker_proxy,
g_variant_builder_end (&details),
conversation->worker_cancellable,
(GAsyncReadyCallback) on_initialization_complete_cb,
conversation);
}
g_free (extensions);
}
void
gdm_session_setup (GdmSession *self,
const char *service_name)
{
g_return_if_fail (GDM_IS_SESSION (self));
update_session_type (self);
initialize (self, service_name, NULL, NULL);
+ gdm_session_defaults_changed (self);
}
void
gdm_session_setup_for_user (GdmSession *self,
const char *service_name,
const char *username)
{
g_return_if_fail (GDM_IS_SESSION (self));
g_return_if_fail (username != NULL);
update_session_type (self);
gdm_session_select_user (self, username);
self->priv->is_program_session = FALSE;
initialize (self, service_name, self->priv->selected_user, NULL);
+ gdm_session_defaults_changed (self);
}
void
gdm_session_setup_for_program (GdmSession *self,
const char *service_name,
const char *username,
const char *log_file)
{
g_return_if_fail (GDM_IS_SESSION (self));
self->priv->is_program_session = TRUE;
initialize (self, service_name, username, log_file);
}
void
gdm_session_authenticate (GdmSession *self,
const char *service_name)
{
GdmSessionConversation *conversation;
g_return_if_fail (GDM_IS_SESSION (self));
conversation = find_conversation_by_name (self, service_name);
if (conversation != NULL) {
gdm_dbus_worker_call_authenticate (conversation->worker_proxy,
conversation->worker_cancellable,
(GAsyncReadyCallback) on_authenticate_cb,
conversation);
}
--
2.14.3

280
SOURCES/0001-Revert-session-forward-is-initial-from-display-to-wo.patch

@ -0,0 +1,280 @@ @@ -0,0 +1,280 @@
From 0522f061f30baeecff958e0deee89934baff3776 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Fri, 12 May 2017 10:11:09 -0400
Subject: [PATCH] Revert "session: forward is-initial from display to worker"
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This reverts commit 7a4e34049c79e907d1a027390c5d3a8dcdc11977.

It breaks login screen until reboot on 7.3→7.4 upgrade.
---
daemon/gdm-session-worker.c | 10 ++--------
daemon/gdm-session-worker.xml | 3 ---
2 files changed, 2 insertions(+), 11 deletions(-)

diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c
index 34b3bf7f..10ecccb0 100644
--- a/daemon/gdm-session-worker.c
+++ b/daemon/gdm-session-worker.c
@@ -3033,166 +3033,160 @@ gdm_session_worker_handle_initialize (GdmDBusWorker *object,
if (worker->priv->username) {
wait_for_settings = !gdm_session_settings_load (worker->priv->user_settings,
worker->priv->username);
}
}
if (wait_for_settings) {
/* Load settings from accounts daemon before continuing
*/
g_signal_connect (G_OBJECT (worker->priv->user_settings),
"notify::is-loaded",
G_CALLBACK (on_settings_is_loaded_changed),
worker);
} else {
queue_state_change (worker);
}
return TRUE;
}
static gboolean
gdm_session_worker_handle_setup (GdmDBusWorker *object,
GDBusMethodInvocation *invocation,
const char *service,
const char *x11_display_name,
const char *x11_authority_file,
const char *console,
const char *seat_id,
const char *hostname,
- gboolean display_is_local,
- gboolean display_is_initial)
+ gboolean display_is_local)
{
GdmSessionWorker *worker = GDM_SESSION_WORKER (object);
validate_and_queue_state_change (worker, invocation, GDM_SESSION_WORKER_STATE_SETUP_COMPLETE);
worker->priv->service = g_strdup (service);
worker->priv->x11_display_name = g_strdup (x11_display_name);
worker->priv->x11_authority_file = g_strdup (x11_authority_file);
worker->priv->display_device = g_strdup (console);
worker->priv->display_seat_id = g_strdup (seat_id);
worker->priv->hostname = g_strdup (hostname);
worker->priv->display_is_local = display_is_local;
- worker->priv->display_is_initial = display_is_initial;
worker->priv->username = NULL;
g_signal_connect_swapped (worker->priv->user_settings,
"notify::language-name",
G_CALLBACK (on_saved_language_name_read),
worker);
g_signal_connect_swapped (worker->priv->user_settings,
"notify::session-name",
G_CALLBACK (on_saved_session_name_read),
worker);
return TRUE;
}
static gboolean
gdm_session_worker_handle_setup_for_user (GdmDBusWorker *object,
GDBusMethodInvocation *invocation,
const char *service,
const char *username,
const char *x11_display_name,
const char *x11_authority_file,
const char *console,
const char *seat_id,
const char *hostname,
- gboolean display_is_local,
- gboolean display_is_initial)
+ gboolean display_is_local)
{
GdmSessionWorker *worker = GDM_SESSION_WORKER (object);
if (!validate_state_change (worker, invocation, GDM_SESSION_WORKER_STATE_SETUP_COMPLETE))
return TRUE;
worker->priv->service = g_strdup (service);
worker->priv->x11_display_name = g_strdup (x11_display_name);
worker->priv->x11_authority_file = g_strdup (x11_authority_file);
worker->priv->display_device = g_strdup (console);
worker->priv->display_seat_id = g_strdup (seat_id);
worker->priv->hostname = g_strdup (hostname);
worker->priv->display_is_local = display_is_local;
- worker->priv->display_is_initial = display_is_initial;
worker->priv->username = g_strdup (username);
g_signal_connect_swapped (worker->priv->user_settings,
"notify::language-name",
G_CALLBACK (on_saved_language_name_read),
worker);
g_signal_connect_swapped (worker->priv->user_settings,
"notify::session-name",
G_CALLBACK (on_saved_session_name_read),
worker);
/* Load settings from accounts daemon before continuing
*/
worker->priv->pending_invocation = invocation;
if (gdm_session_settings_load (worker->priv->user_settings, username)) {
queue_state_change (worker);
} else {
g_signal_connect (G_OBJECT (worker->priv->user_settings),
"notify::is-loaded",
G_CALLBACK (on_settings_is_loaded_changed),
worker);
}
return TRUE;
}
static gboolean
gdm_session_worker_handle_setup_for_program (GdmDBusWorker *object,
GDBusMethodInvocation *invocation,
const char *service,
const char *username,
const char *x11_display_name,
const char *x11_authority_file,
const char *console,
const char *seat_id,
const char *hostname,
gboolean display_is_local,
- gboolean display_is_initial,
const char *log_file)
{
GdmSessionWorker *worker = GDM_SESSION_WORKER (object);
validate_and_queue_state_change (worker, invocation, GDM_SESSION_WORKER_STATE_SETUP_COMPLETE);
worker->priv->service = g_strdup (service);
worker->priv->x11_display_name = g_strdup (x11_display_name);
worker->priv->x11_authority_file = g_strdup (x11_authority_file);
worker->priv->display_device = g_strdup (console);
worker->priv->display_seat_id = g_strdup (seat_id);
worker->priv->hostname = g_strdup (hostname);
worker->priv->display_is_local = display_is_local;
- worker->priv->display_is_initial = display_is_initial;
worker->priv->username = g_strdup (username);
worker->priv->log_file = g_strdup (log_file);
worker->priv->is_program_session = TRUE;
return TRUE;
}
static gboolean
gdm_session_worker_handle_start_program (GdmDBusWorker *object,
GDBusMethodInvocation *invocation,
const char *text)
{
GdmSessionWorker *worker = GDM_SESSION_WORKER (object);
GError *parse_error = NULL;
validate_state_change (worker, invocation, GDM_SESSION_WORKER_STATE_SESSION_STARTED);
if (worker->priv->is_reauth_session) {
g_dbus_method_invocation_return_error (invocation,
GDM_SESSION_WORKER_ERROR,
GDM_SESSION_WORKER_ERROR_IN_REAUTH_SESSION,
"Cannot start a program while in a reauth session");
return TRUE;
}
g_debug ("GdmSessionWorker: start program: %s", text);
g_clear_pointer (&worker->priv->arguments, (GDestroyNotify) g_strfreev);
if (! g_shell_parse_argv (text, NULL, &worker->priv->arguments, &parse_error)) {
g_dbus_method_invocation_take_error (invocation, parse_error);
return TRUE;
diff --git a/daemon/gdm-session-worker.xml b/daemon/gdm-session-worker.xml
index 4280fe09..bc055973 100644
--- a/daemon/gdm-session-worker.xml
+++ b/daemon/gdm-session-worker.xml
@@ -8,83 +8,80 @@
<arg name="session_id" direction="out" type="s"/>
</method>
<method name="SetLanguageName">
<arg name="language" direction="in" type="s"/>
</method>
<method name="SetSessionName">
<arg name="session_name" direction="in" type="s" />
</method>
<method name="SetSessionDisplayMode">
<arg name="mode" direction="in" type="s"/>
</method>
<method name="SetEnvironmentVariable">
<arg name="name" direction="in" type="s"/>
<arg name="value" direction="in" type="s"/>
</method>
<method name="StartProgram">
<arg name="command" direction="in" type="s"/>
<arg name="child_pid" direction="out" type="i"/>
</method>
<method name="Initialize">
<arg name="details" direction="in" type="a{sv}"/>
</method>
<method name="Setup">
<arg name="service_name" direction="in" type="s"/>
<arg name="x11_display_name" direction="in" type="s"/>
<arg name="x11_authority_file" direction="in" type="s"/>
<arg name="display_device" direction="in" type="s"/>
<arg name="display_seat" direction="in" type="s"/>
<arg name="hostname" direction="in" type="s"/>
<arg name="display_is_local" direction="in" type="b"/>
- <arg name="display_is_initial" direction="in" type="b"/>
</method>
<method name="SetupForUser">
<arg name="service_name" direction="in" type="s"/>
<arg name="user_name" direction="in" type="s"/>
<arg name="x11_display_name" direction="in" type="s"/>
<arg name="x11_authority_file" direction="in" type="s"/>
<arg name="display_device" direction="in" type="s"/>
<arg name="display_seat" direction="in" type="s"/>
<arg name="hostname" direction="in" type="s"/>
<arg name="display_is_local" direction="in" type="b"/>
- <arg name="display_is_initial" direction="in" type="b"/>
</method>
<method name="SetupForProgram">
<arg name="service_name" direction="in" type="s"/>
<arg name="user_name" direction="in" type="s"/>
<arg name="x11_display_name" direction="in" type="s"/>
<arg name="x11_authority_file" direction="in" type="s"/>
<arg name="display_device" direction="in" type="s"/>
<arg name="display_seat" direction="in" type="s"/>
<arg name="hostname" direction="in" type="s"/>
<arg name="display_is_local" direction="in" type="b"/>
- <arg name="display_is_initial" direction="in" type="b"/>
<arg name="log_file" direction="in" type="s"/>
</method>
<method name="StartReauthentication">
<arg name="pid_of_caller" direction="in" type="i"/>
<arg name="uid_of_caller" direction="in" type="i"/>
<arg name="address" direction="out" type="s"/>
</method>
<signal name="SessionExited">
<arg name="service_name" type="s" />
<!-- This is a combination of exit code and exit
signal. Use macros in sys/wait.h to handle it. -->
<arg name="status" type="i" />
</signal>
<signal name="SavedLanguageNameRead">
<arg name="language_name" type="s"/>
</signal>
<signal name="SavedSessionNameRead">
<arg name="session_name" type="s"/>
</signal>
<signal name="UsernameChanged">
<arg name="new_username" type="s"/>
</signal>
<signal name="Reauthenticated">
<arg name="service_name" type="s"/>
</signal>
<signal name="CancelPendingQuery">
</signal>
</interface>
</node>
--
2.14.2

45
SOURCES/0001-data-drop-pam_gdm-reintroduce-pam_env-postlogin.patch

@ -0,0 +1,45 @@ @@ -0,0 +1,45 @@
From 6effb1671a917adb3ed8f77f5e13324e8b455c32 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Tue, 30 Jan 2018 10:32:08 -0500
Subject: [PATCH] data: drop pam_gdm, reintroduce pam_env/postlogin

The current upstream pam configuration upstream doesn't really
make sense in RHEL.

systemd doesn't handle /etc/environment on its own in RHEL and it
doesn't populate the kernel keyring with disk encrypt passwords,
so pam_gdm is not useful.

This commit restores the pam configuration to something closer to
what was shipped in 7.3
---
data/pam-redhat/gdm-autologin.pam | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/data/pam-redhat/gdm-autologin.pam b/data/pam-redhat/gdm-autologin.pam
index c31ff27a..aa99e1b0 100644
--- a/data/pam-redhat/gdm-autologin.pam
+++ b/data/pam-redhat/gdm-autologin.pam
@@ -1,16 +1,15 @@
#%PAM-1.0
-auth [success=ok default=1] pam_gdm.so
--auth optional pam_gnome_keyring.so
-auth sufficient pam_permit.so
+auth required pam_env.so
+auth required pam_permit.so
+auth include postlogin
account required pam_nologin.so
account include system-auth
password include system-auth
session required pam_selinux.so close
session required pam_loginuid.so
session optional pam_console.so
session required pam_selinux.so open
session optional pam_keyinit.so force revoke
session required pam_namespace.so
session include system-auth
-session optional pam_gnome_keyring.so auto_start
session include postlogin
--
2.14.3

33
SOURCES/0001-gdm.conf-custom.in-strip-out-reference-to-wayland.patch

@ -0,0 +1,33 @@ @@ -0,0 +1,33 @@
From e21c8b8fcdd3365ac19ae4024c0f615526358072 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Thu, 16 Mar 2017 10:52:41 -0400
Subject: [PATCH] gdm.conf-custom.in: strip out reference to wayland

---
data/gdm.conf-custom.in | 2 --
1 file changed, 2 deletions(-)

diff --git a/data/gdm.conf-custom.in b/data/gdm.conf-custom.in
index 67ebca39..73d0b5f4 100644
--- a/data/gdm.conf-custom.in
+++ b/data/gdm.conf-custom.in
@@ -1,16 +1,14 @@
# GDM configuration storage
[daemon]
-# Uncoment the line below to force the login screen to use Xorg
-#WaylandEnable=false
[security]
[xdmcp]
[chooser]
[debug]
# Uncomment the line below to turn on debugging
#Enable=true
--
2.14.2

104
SOURCES/0001-worker-add-compat-patch-to-make-new-worker-work-with.patch

@ -0,0 +1,104 @@ @@ -0,0 +1,104 @@
From be25f936f6568af9019bf446c3cf2a19de5e167f Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@localhost.localdomain>
Date: Fri, 12 May 2017 15:20:14 -0400
Subject: [PATCH] worker: add compat patch to make new worker work with old
daemon

---
daemon/gdm-session-worker.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)

diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c
index 10ecccb0..f71594c2 100644
--- a/daemon/gdm-session-worker.c
+++ b/daemon/gdm-session-worker.c
@@ -3140,69 +3140,86 @@ gdm_session_worker_handle_setup_for_user (GdmDBusWorker *object,
static gboolean
gdm_session_worker_handle_setup_for_program (GdmDBusWorker *object,
GDBusMethodInvocation *invocation,
const char *service,
const char *username,
const char *x11_display_name,
const char *x11_authority_file,
const char *console,
const char *seat_id,
const char *hostname,
gboolean display_is_local,
const char *log_file)
{
GdmSessionWorker *worker = GDM_SESSION_WORKER (object);
validate_and_queue_state_change (worker, invocation, GDM_SESSION_WORKER_STATE_SETUP_COMPLETE);
worker->priv->service = g_strdup (service);
worker->priv->x11_display_name = g_strdup (x11_display_name);
worker->priv->x11_authority_file = g_strdup (x11_authority_file);
worker->priv->display_device = g_strdup (console);
worker->priv->display_seat_id = g_strdup (seat_id);
worker->priv->hostname = g_strdup (hostname);
worker->priv->display_is_local = display_is_local;
worker->priv->username = g_strdup (username);
worker->priv->log_file = g_strdup (log_file);
worker->priv->is_program_session = TRUE;
return TRUE;
}
+static void
+fix_environment_if_old_gdm_daemon_running (GdmSessionWorker *worker)
+{
+ const char *daemon_version;
+ const char *username;
+
+ daemon_version = gdm_session_worker_get_environment_variable (worker, "GDM_VERSION");
+ username = gdm_session_worker_get_environment_variable (worker, "USERNAME");
+
+ if (g_strcmp0 (daemon_version, "3.14.2") == 0 &&
+ g_strcmp0 (username, "gdm") == 0) {
+ gdm_session_worker_set_environment_variable (worker, "GNOME_SHELL_SESSION_MODE", "gdm");
+ }
+}
+
static gboolean
gdm_session_worker_handle_start_program (GdmDBusWorker *object,
GDBusMethodInvocation *invocation,
const char *text)
{
GdmSessionWorker *worker = GDM_SESSION_WORKER (object);
GError *parse_error = NULL;
validate_state_change (worker, invocation, GDM_SESSION_WORKER_STATE_SESSION_STARTED);
+ fix_environment_if_old_gdm_daemon_running (worker);
+
if (worker->priv->is_reauth_session) {
g_dbus_method_invocation_return_error (invocation,
GDM_SESSION_WORKER_ERROR,
GDM_SESSION_WORKER_ERROR_IN_REAUTH_SESSION,
"Cannot start a program while in a reauth session");
return TRUE;
}
g_debug ("GdmSessionWorker: start program: %s", text);
g_clear_pointer (&worker->priv->arguments, (GDestroyNotify) g_strfreev);
if (! g_shell_parse_argv (text, NULL, &worker->priv->arguments, &parse_error)) {
g_dbus_method_invocation_take_error (invocation, parse_error);
return TRUE;
}
worker->priv->pending_invocation = invocation;
queue_state_change (worker);
return TRUE;
}
static void
on_reauthentication_client_connected (GdmSession *session,
GCredentials *credentials,
GPid pid_of_client,
ReauthenticationRequest *request)
{
g_debug ("GdmSessionWorker: client connected to reauthentication server");
}
--
2.14.2

147
SOURCES/audit-4.patch

@ -0,0 +1,147 @@ @@ -0,0 +1,147 @@
From a17354e67eab4a294c30ec3e8b407057c6fb5f80 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Fri, 3 Jul 2015 14:39:33 -0400
Subject: [PATCH 4/8] server: add -audit 4 to default flags

---
daemon/gdm-server.c | 2 +-
daemon/gdm-x-session.c | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/daemon/gdm-server.c b/daemon/gdm-server.c
index 83fba99c..5bd9725c 100644
--- a/daemon/gdm-server.c
+++ b/daemon/gdm-server.c
@@ -191,61 +191,61 @@ gdm_server_launch_sigusr1_thread_if_needed (void)
static GThread *sigusr1_thread;
if (sigusr1_thread == NULL) {
sigusr1_thread = g_thread_new ("gdm SIGUSR1 catcher", sigusr1_thread_main, NULL);
g_mutex_lock (&sigusr1_thread_mutex);
while (!sigusr1_thread_running)
g_cond_wait (&sigusr1_thread_cond, &sigusr1_thread_mutex);
g_mutex_unlock (&sigusr1_thread_mutex);
}
}
static void
gdm_server_init_command (GdmServer *server)
{
gboolean debug = FALSE;
const char *debug_options;
const char *verbosity = "";
if (server->priv->command != NULL) {
return;
}
gdm_settings_direct_get_boolean (GDM_KEY_DEBUG, &debug);
if (debug) {
debug_options = " -logverbose 7 -core ";
} else {
debug_options = "";
}
-#define X_SERVER_ARG_FORMAT " -background none -noreset -verbose %s%s"
+#define X_SERVER_ARG_FORMAT " -background none -noreset -audit 4 -verbose %s%s"
/* This is a temporary hack to work around the fact that XOrg
* currently lacks support for multi-seat hotplugging for
* display devices. This bit should be removed as soon as XOrg
* gains native support for automatically enumerating usb
* based graphics adapters at start-up via udev. */
/* systemd ships an X server wrapper tool which simply invokes
* the usual X but ensures it only uses the display devices of
* the seat. */
/* We do not rely on this wrapper server if, a) the machine
* wasn't booted using systemd, or b) the wrapper tool is
* missing, or c) we are running for the main seat 'seat0'. */
#ifdef ENABLE_SYSTEMD_JOURNAL
/* For systemd, we don't have a log file but instead log to stdout,
so set it to the xserver's built-in default verbosity */
if (debug)
verbosity = "7 -logfile /dev/null";
else
verbosity = "3 -logfile /dev/null";
#endif
if (g_access (SYSTEMD_X_SERVER, X_OK) < 0) {
goto fallback;
}
if (server->priv->display_seat_id == NULL ||
strcmp (server->priv->display_seat_id, "seat0") == 0) {
diff --git a/daemon/gdm-x-session.c b/daemon/gdm-x-session.c
index 88fe96f4..a499a342 100644
--- a/daemon/gdm-x-session.c
+++ b/daemon/gdm-x-session.c
@@ -247,60 +247,62 @@ spawn_x_server (State *state,
}
g_ptr_array_add (arguments, "-displayfd");
g_ptr_array_add (arguments, display_fd_string);
g_ptr_array_add (arguments, "-auth");
g_ptr_array_add (arguments, auth_file);
/* If we were compiled with Xserver >= 1.17 we need to specify
* '-listen tcp' as the X server dosen't listen on tcp sockets
* by default anymore. In older versions we need to pass
* -nolisten tcp to disable listening on tcp sockets.
*/
#ifdef HAVE_XSERVER_THAT_DEFAULTS_TO_LOCAL_ONLY
if (allow_remote_connections) {
g_ptr_array_add (arguments, "-listen");
g_ptr_array_add (arguments, "tcp");
}
#else
if (!allow_remote_connections) {
g_ptr_array_add (arguments, "-nolisten");
g_ptr_array_add (arguments, "tcp");
}
#endif
g_ptr_array_add (arguments, "-background");
g_ptr_array_add (arguments, "none");
g_ptr_array_add (arguments, "-noreset");
g_ptr_array_add (arguments, "-keeptty");
+ g_ptr_array_add (arguments, "-audit");
+ g_ptr_array_add (arguments, "4");
g_ptr_array_add (arguments, "-verbose");
if (state->debug_enabled) {
g_ptr_array_add (arguments, "7");
} else {
g_ptr_array_add (arguments, "3");
}
if (state->debug_enabled) {
g_ptr_array_add (arguments, "-core");
}
g_ptr_array_add (arguments, NULL);
subprocess = g_subprocess_launcher_spawnv (launcher,
(const char * const *) arguments->pdata,
&error);
g_free (display_fd_string);
g_clear_object (&launcher);
g_ptr_array_free (arguments, TRUE);
if (subprocess == NULL) {
g_debug ("could not start X server: %s", error->message);
goto out;
}
input_stream = g_unix_input_stream_new (pipe_fds[0], TRUE);
data_stream = g_data_input_stream_new (input_stream);
g_clear_object (&input_stream);
display_number = g_data_input_stream_read_line (data_stream,
--
2.14.2

195
SOURCES/classic-session.patch

@ -0,0 +1,195 @@ @@ -0,0 +1,195 @@
From 45848cf2625eaec34a07c03fdee624c8a2cb76de Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Wed, 3 Apr 2013 10:28:09 -0400
Subject: [PATCH 8/8] session: change default session

We default to gnome-classic in rhel, unless overridden
by /etc/sysconfig/desktop
---
daemon/gdm-session.c | 100 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 100 insertions(+)

diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
index f62f77d0..d6f1e121 100644
--- a/daemon/gdm-session.c
+++ b/daemon/gdm-session.c
@@ -495,76 +495,176 @@ get_session_command_for_name (GdmSession *self,
{
gboolean res;
char *filename;
filename = g_strdup_printf ("%s.desktop", name);
res = get_session_command_for_file (self, filename, command);
g_free (filename);
return res;
}
static const char *
get_default_language_name (GdmSession *self)
{
const char *default_language;
if (self->priv->saved_language != NULL) {
return self->priv->saved_language;
}
default_language = g_hash_table_lookup (self->priv->environment,
"LANG");
if (default_language != NULL) {
return default_language;
}
return setlocale (LC_MESSAGES, NULL);
}
+static const char *
+get_configured_default_session_name (GdmSession *self)
+{
+ static const char *config_file = "/etc/sysconfig/desktop";
+ const char *session_name = "gnome-classic";
+ gchar *contents = NULL;
+ gchar *p;
+ gsize length;
+ GError *error;
+ GString *line;
+ GRegex *re;
+
+ if (!g_file_test (config_file, G_FILE_TEST_EXISTS)) {
+ g_debug ("Cannot access '%s'", config_file);
+ return session_name;
+ }
+
+ error = NULL;
+ if (!g_file_get_contents (config_file, &contents, &length, &error)) {
+ g_debug ("Failed to parse '%s': %s",
+ config_file,
+ (error && error->message) ? error->message : "(null)");
+ g_error_free (error);
+ return session_name;
+ }
+
+ if (!g_utf8_validate (contents, length, NULL)) {
+ g_warning ("Invalid UTF-8 in '%s'", config_file);
+ g_free (contents);
+ return session_name;
+ }
+
+ re = g_regex_new ("DESKTOP=\"?KDE\"?[ \t]*", 0, 0, &error);
+ if (re == NULL) {
+ g_warning ("Failed to regex: %s",
+ (error && error->message) ? error->message : "(null)");
+ g_error_free (error);
+ g_free (contents);
+ return session_name;
+ }
+
+ line = g_string_new ("");
+ for (p = contents; p && *p; p = g_utf8_find_next_char (p, NULL)) {
+ gunichar ch;
+ GMatchInfo *match_info = NULL;
+
+ ch = g_utf8_get_char (p);
+ if ((ch != '\n') && (ch != '\0')) {
+ g_string_append_unichar (line, ch);
+ continue;
+ }
+
+ if (line->str && g_utf8_get_char (line->str) == '#') {
+ goto next_line;
+ }
+
+ if (!g_regex_match (re, line->str, 0, &match_info)) {
+ goto next_line;
+ }
+
+ if (!g_match_info_matches (match_info)) {
+ goto next_line;
+ }
+
+ session_name = "1-kde-plasma-standard";
+ break;
+
+next_line:
+ g_match_info_free (match_info);
+ g_string_set_size (line, 0);
+ }
+
+ g_string_free (line, TRUE);
+ g_regex_unref (re);
+ g_free (contents);
+
+ return session_name;
+}
+
static const char *
get_fallback_session_name (GdmSession *self)
{
char **search_dirs;
+ const char *configured_session;
int i;
char *name;
GSequence *sessions;
GSequenceIter *session;
if (self->priv->fallback_session_name != NULL) {
/* verify that the cached version still exists */
if (get_session_command_for_name (self, self->priv->fallback_session_name, NULL)) {
goto out;
}
}
+ configured_session = get_configured_default_session_name (self);
+
+ name = g_strdup (configured_session);
+ if (get_session_command_for_name (self, name, NULL)) {
+ g_free (self->priv->fallback_session_name);
+ self->priv->fallback_session_name = name;
+ goto out;
+ }
+ g_free (name);
+
+ if (g_strcmp0 (configured_session, "gnome-classic") != 0) {
+ name = g_strdup ("gnome-classic");
+ if (get_session_command_for_name (self, name, NULL)) {
+ g_free (self->priv->fallback_session_name);
+ self->priv->fallback_session_name = name;
+ goto out;
+ }
+ g_free (name);
+ }
+
name = g_strdup ("gnome");
if (get_session_command_for_name (self, name, NULL)) {
g_free (self->priv->fallback_session_name);
self->priv->fallback_session_name = name;
goto out;
}
g_free (name);
sessions = g_sequence_new (g_free);
search_dirs = get_system_session_dirs (self);
for (i = 0; search_dirs[i] != NULL; i++) {
GDir *dir;
const char *base_name;
dir = g_dir_open (search_dirs[i], 0, NULL);
if (dir == NULL) {
continue;
}
do {
base_name = g_dir_read_name (dir);
if (base_name == NULL) {
break;
}
if (!g_str_has_suffix (base_name, ".desktop")) {
continue;
--
2.14.2

53
SOURCES/clear-screen.patch

@ -0,0 +1,53 @@ @@ -0,0 +1,53 @@
From 5337f1094ecedf50bcfb9a000ac6b99bd95ffea2 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Fri, 14 Mar 2014 11:04:49 -0400
Subject: [PATCH 5/8] systemd: clear terminal after starting

This helps with flicker when the X server shuts down.
---
data/gdm.service.in | 1 +
1 file changed, 1 insertion(+)

diff --git a/data/gdm.service.in b/data/gdm.service.in
index 72201c1f..b58f4c61 100644
--- a/data/gdm.service.in
+++ b/data/gdm.service.in
@@ -1,34 +1,35 @@
[Unit]
Description=GNOME Display Manager
# replaces the getty
Conflicts=getty@tty@GDM_INITIAL_VT@.service
After=getty@tty@GDM_INITIAL_VT@.service
# replaces plymouth-quit since it quits plymouth on its own
Conflicts=@PLYMOUTH_QUIT_SERVICE@
After=@PLYMOUTH_QUIT_SERVICE@
# Needs all the dependencies of the services it's replacing
# pulled from getty@.service and @PLYMOUTH_QUIT_SERVICE@
# (except for plymouth-quit-wait.service since it waits until
# plymouth is quit, which we do)
After=rc-local.service plymouth-start.service systemd-user-sessions.service
# GDM takes responsibility for stopping plymouth, so if it fails
# for any reason, make sure plymouth still stops
OnFailure=plymouth-quit.service
[Service]
ExecStart=@sbindir@/gdm
+ExecStartPost=-/bin/bash -c "TERM=linux /usr/bin/clear > /dev/tty1"
KillMode=mixed
Restart=always
IgnoreSIGPIPE=no
BusName=org.gnome.DisplayManager
StandardOutput=syslog
StandardError=inherit
EnvironmentFile=-@LANG_CONFIG_FILE@
ExecReload=/bin/kill -SIGHUP $MAINPID
[Install]
Alias=display-manager.service
--
2.14.2

3
SOURCES/org.gnome.login-screen.gschema.override

@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
[org.gnome.login-screen]
logo='/usr/share/pixmaps/fedora-gdm-logo.png'
enable-smartcard-authentication=true

24
SOURCES/system-dconf.patch

@ -0,0 +1,24 @@ @@ -0,0 +1,24 @@
From 2cd39fafe8109a41d1e87b8ba89a2c3229d71a01 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Wed, 31 Jul 2013 17:32:55 -0400
Subject: [PATCH 7/8] data: add system dconf databases to gdm profile

This way system settings can affect the login screen.
---
data/dconf/gdm.in | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/data/dconf/gdm.in b/data/dconf/gdm.in
index 4d8bf174..9694078f 100644
--- a/data/dconf/gdm.in
+++ b/data/dconf/gdm.in
@@ -1,2 +1,6 @@
user-db:user
+system-db:gdm
+system-db:local
+system-db:site
+system-db:distro
file-db:@DATADIR@/@PACKAGE@/greeter-dconf-defaults
--
2.14.2

2995
SPECS/gdm.spec

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save