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

ca70cf
From d4f6b620c4c1b56e7e6421cc470eb711d7faa0eb Mon Sep 17 00:00:00 2001
ca70cf
From: Rui Matos <tiagomatos@gmail.com>
ca70cf
Date: Mon, 23 Jan 2017 20:19:51 +0100
ca70cf
Subject: [PATCH] Honor initial setup being disabled by distro installer
ca70cf
ca70cf
Sysadmins might want to disable any kind of initial setup for their
ca70cf
users, perhaps because they pre-configure their environments. We
ca70cf
already provide a configuration file option for this but distro
ca70cf
installers might have their own way of requesting this.
ca70cf
ca70cf
At least the anaconda installer provides an option to skip any kind
ca70cf
post-install setup tools so, for now we're only adding support for
ca70cf
that but more might be added in the future.
ca70cf
ca70cf
https://bugzilla.gnome.org/show_bug.cgi?id=777708
ca70cf
---
ca70cf
 daemon/Makefile.am   |  1 +
ca70cf
 daemon/gdm-display.c | 29 +++++++++++++++++++++++++++++
ca70cf
 2 files changed, 30 insertions(+)
ca70cf
ca70cf
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
ca70cf
index 5e9eb5e0..3b1b1512 100644
ca70cf
--- a/daemon/Makefile.am
ca70cf
+++ b/daemon/Makefile.am
ca70cf
@@ -1,47 +1,48 @@
ca70cf
 NULL =
ca70cf
 
ca70cf
 AM_CPPFLAGS = \
ca70cf
 	-I.						\
ca70cf
 	-I..						\
ca70cf
 	-I$(top_srcdir)/common				\
ca70cf
 	-I$(top_srcdir)/pam-extensions			\
ca70cf
 	-I$(top_builddir)/common			\
ca70cf
 	-DBINDIR=\"$(bindir)\"				\
ca70cf
 	-DDATADIR=\"$(datadir)\"			\
ca70cf
 	-DDMCONFDIR=\"$(dmconfdir)\"			\
ca70cf
 	-DGDMCONFDIR=\"$(gdmconfdir)\"			\
ca70cf
 	-DLIBDIR=\"$(libdir)\"				\
ca70cf
 	-DLIBEXECDIR=\"$(libexecdir)\"			\
ca70cf
 	-DLOCALSTATEDIR=\"$(localstatedir)\"		\
ca70cf
 	-DLOGDIR=\"$(logdir)\"				\
ca70cf
 	-DSBINDIR=\"$(sbindir)\"			\
ca70cf
+	-DSYSCONFDIR=\"$(sysconfdir)\"			\
ca70cf
 	-DGNOMELOCALEDIR=\""$(datadir)/locale"\"	\
ca70cf
 	-DGDM_RUN_DIR=\"$(GDM_RUN_DIR)\"		\
ca70cf
 	-DGDM_XAUTH_DIR=\"$(GDM_XAUTH_DIR)\"		\
ca70cf
 	-DGDM_SCREENSHOT_DIR=\"$(GDM_SCREENSHOT_DIR)\"		\
ca70cf
 	-DGDM_CACHE_DIR=\""$(localstatedir)/cache/gdm"\"	\
ca70cf
 	-DGDM_SESSION_DEFAULT_PATH=\"$(GDM_SESSION_DEFAULT_PATH)\" \
ca70cf
 	$(DISABLE_DEPRECATED_CFLAGS)			\
ca70cf
 	$(DAEMON_CFLAGS)				\
ca70cf
 	$(XLIB_CFLAGS)					\
ca70cf
 	$(WARN_CFLAGS)					\
ca70cf
 	$(DEBUG_CFLAGS)					\
ca70cf
 	$(SYSTEMD_CFLAGS)				\
ca70cf
 	$(JOURNALD_CFLAGS)				\
ca70cf
 	$(LIBSELINUX_CFLAGS)	 			\
ca70cf
 	-DLANG_CONFIG_FILE=\"$(LANG_CONFIG_FILE)\"	\
ca70cf
 	$(NULL)
ca70cf
 
ca70cf
 BUILT_SOURCES =					\
ca70cf
 	gdm-display-glue.h			\
ca70cf
 	gdm-manager-glue.h			\
ca70cf
 	gdm-local-display-glue.h		\
ca70cf
 	gdm-local-display-factory-glue.h	\
ca70cf
 	gdm-session-glue.h			\
ca70cf
 	gdm-session-worker-glue.h		\
ca70cf
 	gdm-session-enum-types.h		\
ca70cf
 	$(NULL)
ca70cf
 
ca70cf
 gdm-session-enum-types.h: gdm-session-enum-types.h.in gdm-session.h
ca70cf
 	$(AM_V_GEN) glib-mkenums --template $^ > $@
ca70cf
 
ca70cf
diff --git a/daemon/gdm-display.c b/daemon/gdm-display.c
ca70cf
index 6a3984a9..30723da0 100644
ca70cf
--- a/daemon/gdm-display.c
ca70cf
+++ b/daemon/gdm-display.c
ca70cf
@@ -1522,100 +1522,129 @@ kernel_cmdline_initial_setup_force_state (gboolean *force_state)
ca70cf
         GError *error = NULL;
ca70cf
         gchar *contents = NULL;
ca70cf
         gchar *setup_argument = NULL;
ca70cf
 
ca70cf
         g_return_val_if_fail (force_state != NULL, FALSE);
ca70cf
 
ca70cf
         if (!g_file_get_contents ("/proc/cmdline", &contents, NULL, &error)) {
ca70cf
                 g_debug ("GdmDisplay: Could not check kernel parameters, not forcing initial setup: %s",
ca70cf
                           error->message);
ca70cf
                 g_clear_error (&error);
ca70cf
                 return FALSE;
ca70cf
         }
ca70cf
 
ca70cf
         g_debug ("GdmDisplay: Checking kernel command buffer %s", contents);
ca70cf
 
ca70cf
         if (!kernel_cmdline_initial_setup_argument (contents, &setup_argument, &error)) {
ca70cf
                 g_debug ("GdmDisplay: Failed to read kernel commandline: %s", error->message);
ca70cf
                 g_clear_pointer (&contents, g_free);
ca70cf
                 return FALSE;
ca70cf
         }
ca70cf
 
ca70cf
         g_clear_pointer (&contents, g_free);
ca70cf
 
ca70cf
         /* Poor-man's check for truthy or falsey values */
ca70cf
         *force_state = setup_argument[0] == '1';
ca70cf
 
ca70cf
         g_free (setup_argument);
ca70cf
         return TRUE;
ca70cf
 }
ca70cf
 
ca70cf
+static gboolean
ca70cf
+initial_setup_disabled_by_anaconda (void)
ca70cf
+{
ca70cf
+        GKeyFile *key_file;
ca70cf
+        const gchar *file_name = SYSCONFDIR "/sysconfig/anaconda";
ca70cf
+        gboolean disabled = FALSE;
ca70cf
+        GError *error = NULL;
ca70cf
+
ca70cf
+        key_file = g_key_file_new ();
ca70cf
+        if (!g_key_file_load_from_file (key_file, file_name, G_KEY_FILE_NONE, &error)) {
ca70cf
+                if (!g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT) &&
ca70cf
+                    !g_error_matches (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND)) {
ca70cf
+                        g_warning ("Could not read %s: %s", file_name, error->message);
ca70cf
+                }
ca70cf
+                g_error_free (error);
ca70cf
+                goto out;
ca70cf
+        }
ca70cf
+
ca70cf
+        disabled = g_key_file_get_boolean (key_file, "General",
ca70cf
+                                           "post_install_tools_disabled", NULL);
ca70cf
+ out:
ca70cf
+        g_key_file_unref (key_file);
ca70cf
+        return disabled;
ca70cf
+}
ca70cf
+
ca70cf
 static gboolean
ca70cf
 wants_initial_setup (GdmDisplay *self)
ca70cf
 {
ca70cf
         gboolean enabled = FALSE;
ca70cf
         gboolean forced = FALSE;
ca70cf
 
ca70cf
         if (already_done_initial_setup_on_this_boot ()) {
ca70cf
                 return FALSE;
ca70cf
         }
ca70cf
 
ca70cf
         if (kernel_cmdline_initial_setup_force_state (&forced)) {
ca70cf
                 if (forced) {
ca70cf
                         g_debug ("GdmDisplay: Forcing gnome-initial-setup");
ca70cf
                         return TRUE;
ca70cf
                 }
ca70cf
 
ca70cf
                 g_debug ("GdmDisplay: Forceing no gnome-initial-setup");
ca70cf
                 return FALSE;
ca70cf
         }
ca70cf
 
ca70cf
         /* don't run initial-setup on remote displays
ca70cf
          */
ca70cf
         if (!self->priv->is_local) {
ca70cf
                 return FALSE;
ca70cf
         }
ca70cf
 
ca70cf
         /* don't run if the system has existing users */
ca70cf
         if (self->priv->have_existing_user_accounts) {
ca70cf
                 return FALSE;
ca70cf
         }
ca70cf
 
ca70cf
         /* don't run if initial-setup is unavailable */
ca70cf
         if (!can_create_environment ("gnome-initial-setup")) {
ca70cf
                 return FALSE;
ca70cf
         }
ca70cf
 
ca70cf
         if (!gdm_settings_direct_get_boolean (GDM_KEY_INITIAL_SETUP_ENABLE, &enabled)) {
ca70cf
                 return FALSE;
ca70cf
         }
ca70cf
 
ca70cf
+        if (initial_setup_disabled_by_anaconda ()) {
ca70cf
+                return FALSE;
ca70cf
+        }
ca70cf
+
ca70cf
         return enabled;
ca70cf
 }
ca70cf
 
ca70cf
 void
ca70cf
 gdm_display_start_greeter_session (GdmDisplay *self)
ca70cf
 {
ca70cf
         GdmSession    *session;
ca70cf
         char          *display_name;
ca70cf
         char          *seat_id;
ca70cf
         char          *hostname;
ca70cf
         char          *auth_file = NULL;
ca70cf
 
ca70cf
         g_return_if_fail (g_strcmp0 (self->priv->session_class, "greeter") == 0);
ca70cf
 
ca70cf
         g_debug ("GdmDisplay: Running greeter");
ca70cf
 
ca70cf
         display_name = NULL;
ca70cf
         seat_id = NULL;
ca70cf
         hostname = NULL;
ca70cf
 
ca70cf
         g_object_get (self,
ca70cf
                       "x11-display-name", &display_name,
ca70cf
                       "seat-id", &seat_id,
ca70cf
                       "remote-hostname", &hostname,
ca70cf
                       NULL);
ca70cf
         if (self->priv->access_file != NULL) {
ca70cf
                 auth_file = gdm_display_access_file_get_path (self->priv->access_file);
ca70cf
         }
ca70cf
 
ca70cf
         g_debug ("GdmDisplay: Creating greeter for %s %s", display_name, hostname);
ca70cf
-- 
ca70cf
2.14.2
ca70cf