[gnome-initial-setup/wip/kalev/anaconda-disable] Exit gracefully if we are disabled systemwide




commit 538a8fa09a02f682496f98bda8f4f4a5566eee86
Author: Rui Matos <tiagomatos gmail com>
Date:   Mon Jan 23 19:42:44 2017 +0100

    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 | 28 ++++++++++++++++++++++++++++
 meson.build                               |  1 +
 2 files changed, 29 insertions(+)
---
diff --git a/gnome-initial-setup/gnome-initial-setup.c b/gnome-initial-setup/gnome-initial-setup.c
index 107be55b..0ab987af 100644
--- a/gnome-initial-setup/gnome-initial-setup.c
+++ b/gnome-initial-setup/gnome-initial-setup.c
@@ -240,6 +240,24 @@ get_mode (void)
     return GIS_DRIVER_MODE_NEW_USER;
 }
 
+static gboolean
+initial_setup_disabled_by_anaconda (void)
+{
+  const gchar *file_name = SYSCONFDIR "/sysconfig/anaconda";
+  g_autoptr(GError) error = NULL;
+  g_autoptr(GKeyFile) 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);
+    }
+    return FALSE;
+  }
+
+  return g_key_file_get_boolean (key_file, "General", "post_install_tools_disabled", NULL);
+}
+
 int
 main (int argc, char *argv[])
 {
@@ -289,6 +307,16 @@ main (int argc, char *argv[])
     gis_ensure_login_keyring ();
 
   driver = gis_driver_new (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 (driver);
+    exit (EXIT_SUCCESS);
+  }
+
   g_signal_connect (driver, "rebuild-pages", G_CALLBACK (rebuild_pages_cb), NULL);
   status = g_application_run (G_APPLICATION (driver), argc, argv);
 
diff --git a/meson.build b/meson.build
index 0fd952f8..13986ac5 100644
--- a/meson.build
+++ b/meson.build
@@ -25,6 +25,7 @@ conf.set_quoted('GNOMELOCALEDIR', locale_dir)
 conf.set_quoted('PKGDATADIR', pkgdata_dir)
 conf.set_quoted('DATADIR', data_dir)
 conf.set_quoted('PKGSYSCONFDIR', pkgsysconf_dir)
+conf.set_quoted('SYSCONFDIR', sysconf_dir)
 conf.set('SECRET_API_SUBJECT_TO_CHANGE', true)
 conf.set_quoted('G_LOG_DOMAIN', 'InitialSetup')
 conf.set('GLIB_VERSION_MIN_REQUIRED', 'GLIB_VERSION_2_64')


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]