Blob Blame History Raw
From d16992c2a18a623113b0de2d0c3e869dbca17821 Mon Sep 17 00:00:00 2001
From: Rui Matos <tiagomatos@gmail.com>
Date: Mon, 23 Jan 2017 19:42:44 +0100
Subject: [PATCH] Exit gracefully if we are disabled systemwide

Sysadmins might want to disable any kind of initial setup for their
users, perhaps because they pre-configure their environments. We
should provide an easy way to do it.

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=777707
---
 gnome-initial-setup/gnome-initial-setup.c | 34 +++++++++++++++++++++++
 meson.build                               |  2 ++
 2 files changed, 36 insertions(+)

diff --git a/gnome-initial-setup/gnome-initial-setup.c b/gnome-initial-setup/gnome-initial-setup.c
index e2136de..280bd53 100644
--- a/gnome-initial-setup/gnome-initial-setup.c
+++ b/gnome-initial-setup/gnome-initial-setup.c
@@ -246,6 +246,31 @@ get_mode (void)
     return GIS_DRIVER_MODE_NEW_USER;
 }
 
+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;
+}
+
 int
 main (int argc, char *argv[])
 {
@@ -280,6 +305,15 @@ main (int argc, char *argv[])
   skipped_pages = g_ptr_array_new_with_free_func ((GDestroyNotify) gtk_widget_destroy);
   mode = get_mode ();
 
+  /* We only do this in existing-user mode, because if gdm launches us
+   * in new-user mode and we just exit, gdm's special g-i-s session
+   * never terminates. */
+  if (initial_setup_disabled_by_anaconda () &&
+      mode == GIS_DRIVER_MODE_EXISTING_USER) {
+    gis_ensure_stamp_files ();
+    exit (EXIT_SUCCESS);
+  }
+
   /* When we are running as the gnome-initial-setup user we
    * dont have a normal user session and need to initialize
    * the keyring manually so that we can pass the credentials
diff --git a/meson.build b/meson.build
index 4bad799..952c69e 100644
--- a/meson.build
+++ b/meson.build
@@ -11,6 +11,7 @@ i18n = import('i18n')
 
 prefix = get_option('prefix')
 po_dir = join_paths(meson.source_root(), 'po')
+sysconf_dir = join_paths(prefix, get_option('sysconfdir'))
 data_dir = join_paths(prefix, get_option('datadir'))
 locale_dir = join_paths(prefix, get_option('localedir'))
 libexec_dir = join_paths(prefix, get_option('libexecdir'))
@@ -27,6 +28,7 @@ conf.set_quoted('VENDOR_CONF_FILE', vendor_conf_file)
 conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
 conf.set_quoted('GNOMELOCALEDIR', locale_dir)
 conf.set_quoted('PKGDATADIR', pkgdata_dir)
+conf.set_quoted('SYSCONFDIR', sysconf_dir)
 conf.set('ENABLE_REGION_PAGE', get_option('region-page'))
 conf.set('SECRET_API_SUBJECT_TO_CHANGE', true)
 conf.set_quoted('G_LOG_DOMAIN', 'InitialSetup')
-- 
2.21.0