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

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