From 538a8fa09a02f682496f98bda8f4f4a5566eee86 Mon Sep 17 00:00:00 2001 From: Rui Matos 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 | 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 107be55..0ab987a 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 0fd952f..13986ac 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') -- 2.26.2