From cfa7925f70ec44a976f6d0426133e3b8ba589142 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 --- meson.build | 2 ++ gnome-initial-setup/gnome-initial-setup.c | 34 +++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/gnome-initial-setup/gnome-initial-setup.c b/gnome-initial-setup/gnome-initial-setup.c index 414ea94..989827b 100644 --- a/gnome-initial-setup/gnome-initial-setup.c +++ b/gnome-initial-setup/gnome-initial-setup.c @@ -247,6 +247,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[]) { @@ -281,6 +306,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 -- 2.19.0.rc0 diff --git a/meson.build b/meson.build index 4950bed..6e91f2b 100644 --- a/meson.build +++ b/meson.build @@ -1,59 +1,61 @@ project('gnome-initial-setup', ['c'], version: '3.32.0', license: 'GPLv2', meson_version: '>= 0.47.0', ) cc = meson.get_compiler('c') gnome = import('gnome') 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')) source_root = join_paths(meson.source_root(), 'gnome-initial-setup') pkgdata_dir = join_paths(prefix, meson.project_name()) vendor_conf_file = get_option('vendor-conf-file') if vendor_conf_file == '' vendor_conf_file = join_paths(data_dir, 'gnome-initial-setup', 'vendor.conf') endif conf = configuration_data() 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) # Needed for the 'account' page cheese_dep = dependency ('cheese', version: '>= 3.3.5', required: get_option('cheese')) cheese_gtk_dep = dependency ('cheese-gtk', version: '>= 3.3.5', required: get_option('cheese')) conf.set('HAVE_CHEESE', cheese_dep.found() and cheese_gtk_dep.found()) # Needed for the 'software' page pkgkit_dep = dependency ('packagekit-glib2', version: '>= 1.1.4', required: get_option('software-sources')) conf.set('ENABLE_SOFTWARE_SOURCES', pkgkit_dep.found()) # Needed for the 'keyboard' page ibus_dep = dependency ('ibus-1.0', version: '>= 1.4.99', required: get_option('ibus')) conf.set('HAVE_IBUS', ibus_dep.found()) configure_file(output: 'config.h', configuration: conf) config_h_dir = include_directories('.') subdir('data') subdir('gnome-initial-setup') -- 2.20.1