summaryrefslogtreecommitdiff
path: root/daemon/gdmconfig.c
diff options
context:
space:
mode:
authorBrian Cameron <Brian.Cameron@sun.com>2005-11-22 07:49:43 +0000
committerBrian Cameron <bcameron@src.gnome.org>2005-11-22 07:49:43 +0000
commitb68ffea6d293f7c453fb9b42c6c8b637d17ea326 (patch)
treef352faccc11772611193fe7fec8e8fa5ceeea8a9 /daemon/gdmconfig.c
parentb370db3d95e3df789286f5c44b8c0014d1c653ca (diff)
downloadgdm-b68ffea6d293f7c453fb9b42c6c8b637d17ea326.tar.gz
This further improves GDM configuration so that now only the GDM daemon
2005-11-21 Brian Cameron <Brian.Cameron@sun.com> This further improves GDM configuration so that now only the GDM daemon parses and manages the configuration file. Most client programs use the GET_CONFIG command to access needed data. This simplifies the configuration logic and puts all configuration parsing in one place and gets rid of a lot of global variables that were making the code look messy. This also gets rid of several places where gnome_config deprecated functions were being used. I have cleaned up the code so that the vicious-extensions code is more localized in gui/gdmconfig.[ch]. Some work is left to do: gdmflexiserver still uses gnome_config functions and gdmconfig should use the new functions for reading from the configuration file. Some compile issues fixed as highlghted by dmacks@netspace.org to fix bug #322083. * NEWS: Fixed comment. * daemon/gdm.h: Further cleanup of #define's so that they better match the names of the config keys. * daemon/gdm.c: Now GET_CONFIG returns "OK" if the key is valid but has no value when it is a string. Now free return value from gdm_config_to_string. * daemon/Makefile.am, gui/greeter/Makefile.am: Now the daemon validates the greeter's theme directory, so pass the default value into the daemon and not the greeter. * daemon/gdmconfig.h: Added gdm_is_valid_key and corrected prototype for gdm_set_user_session_lang. * daemon/slave.c: Fix warning and compile errors. * daemon/gdmconfig.c: Further fleshed out. Now it supports a few additional keys I overlooked. It now validates all keys used by the slaves. Now handles translated string. Further refactored the code. * gui/Makefile.am: Added gdmconfig.[ch] to common library. * gui/gdmconfig.[ch]: New functions for accessing configuration data for slaves. * gui/gdmXnestchooser.c, gui/gdmlanguages.c, gui/gdmsession.h, gui/gdmuser.h, gui/gdmwm.c, gui/misc.c, gui/greeter/greeter_item_capslock.c: gui/greeter/greeter_item_pam.c: No longer include vicious.h/viciousui.h, instead gdmconfig.h. * gui/gdmcomm.c: Fix gdm_check_comm to no longer require passing in the config file name. * gui/gdmcommon.[ch]: Get rid of old gdm_common_*_same functions that are replaced with new gui/gdmconfig logic. Now functions that access config data use the new functions. * gui/gdmflexiserver.c: Now displays the localized string when you use GET_CONFIG to access a translatable string. * gui/gdmconfig.c: Now calls update_key in addition to update_greeters when updating greeter config data, since the daemon needs to update the values now when they change. * gui/gdmchooser.c, gui/gdmdynamic.c, gui/gdmlogin.c, gui/gdmphotosetup.c, gui/gdmsession.c, gui/gdmuser.c, gui/gdm/gdmXnestchooser.c, gui/greeter/greeter.c, gui/greeter/greeter_action_language.c, gui/greeter/greeter_canvas_item.c, gui/greeter/greeter_item.c, gui/greeter/greeter_item_customlist.c, gui/greeter/greeter_item_timed.c, gui/greeter/greeter_item_list.c, gui/greeter/greeter_parser.c, gui/greeter/greeter_session.c, gui/greeter/greeter_system.c: Updated to use new configuration functions. * vicious-extensions/glade-helper.c: Now include stdlib.h to avoid compiler warnings. * gui/greeter/greeter.c: Remove unused gdm_kill_thingies function.
Diffstat (limited to 'daemon/gdmconfig.c')
-rw-r--r--daemon/gdmconfig.c983
1 files changed, 548 insertions, 435 deletions
diff --git a/daemon/gdmconfig.c b/daemon/gdmconfig.c
index 35d86e59..8a963755 100644
--- a/daemon/gdmconfig.c
+++ b/daemon/gdmconfig.c
@@ -54,6 +54,7 @@
#include "misc.h"
#include "server.h"
#include "filecheck.h"
+#include "slave.h"
gchar *config_file = NULL;
static time_t config_file_mtime = 0;
@@ -72,11 +73,12 @@ typedef enum {
CONFIG_STRING
} GdmConfigType;
-static GHashTable *type_hash = NULL;
-static GHashTable *val_hash = NULL;
-static GdmConfigType bool_type = CONFIG_BOOL;
-static GdmConfigType int_type = CONFIG_INT;
-static GdmConfigType string_type = CONFIG_STRING;
+static GHashTable *type_hash = NULL;
+static GHashTable *val_hash = NULL;
+static GHashTable *realkey_hash = NULL;
+static GdmConfigType bool_type = CONFIG_BOOL;
+static GdmConfigType int_type = CONFIG_INT;
+static GdmConfigType string_type = CONFIG_STRING;
static uid_t GdmUserId; /* Userid under which gdm should run */
static gid_t GdmGroupId; /* Gruopid under which gdm should run */
@@ -125,7 +127,7 @@ static gchar *GdmTimedLogin = NULL;
static gchar *GdmStandardXserver = NULL;
static gchar *GdmXnest = NULL;
static gchar *GdmSoundProgram = NULL;
-static gchar *GdmSoundOnLoginReadyFile = NULL;
+static gchar *GdmSoundOnLoginFile = NULL;
static gchar *GdmSoundOnLoginSuccessFile = NULL;
static gchar *GdmSoundOnLoginFailureFile = NULL;
static gchar *GdmConsoleCannotHandle = NULL;
@@ -180,6 +182,7 @@ static gboolean GdmTimedLoginEnable = FALSE;
static gboolean GdmDynamicXservers = FALSE;
static gboolean GdmVTAllocation = TRUE;
static gboolean GdmDisallowTcp = TRUE;
+static gboolean GdmSoundOnLogin = TRUE;
static gboolean GdmSoundOnLoginSuccess = FALSE;
static gboolean GdmSoundOnLoginFailure = FALSE;
static gboolean GdmConsoleNotify = TRUE;
@@ -187,12 +190,11 @@ static gboolean GdmConsoleNotify = TRUE;
/* Config options used by slave */
/* ---------------------------- */
static gchar *GdmInitDir;
-static gchar *GdmFaceDir;
static gchar *GdmGtkRc;
static gchar *GdmGtkThemesToAllow;
static gchar *GdmInclude;
static gchar *GdmExclude;
-static gchar *GdmFace;
+static gchar *GdmDefaultFace;
static gchar *GdmLocaleFile;
static gchar *GdmLogo;
static gchar *GdmChooserButtonLogo;
@@ -214,11 +216,12 @@ static gchar *GdmGraphicalThemes;
static gint GdmPositionX;
static gint GdmPositionY;
static gint GdmMinimalUid;
-static gint GdmIconWidth;
-static gint GdmIconHeight;
+static gint GdmMaxIconWidth;
+static gint GdmMaxIconHeight;
static gint GdmBackgroundType;
static gint GdmScanTime;
static gint GdmMaxWait;
+static gint GdmFlexiReapDelayMinutes;
static gboolean GdmAllowGtkThemeChange;
static gboolean GdmTitleBar;
@@ -242,295 +245,277 @@ static gboolean GdmBroadcast;
static gboolean GdmAllowAdd;
/**
+ * gdm_config_add_hash
+ *
+ * Add config value to the val_hash and type_hash. Strip the key so
+ * it doesn't contain a default value. This function assumes the
+ * val_hash, type_hash, and realkey_hash have been initialized.
+ */
+static void
+gdm_config_add_hash (gchar *key, gpointer value, GdmConfigType *type)
+{
+ gchar *p;
+ gchar *newkey = g_strdup (key);
+
+ g_strstrip (newkey);
+ p = strchr (newkey, '=');
+ if (p != NULL)
+ *p = '\0';
+
+ g_hash_table_insert (val_hash, newkey, value);
+ g_hash_table_insert (type_hash, newkey, type);
+ g_hash_table_insert (realkey_hash, newkey, key);
+}
+
+/**
+ * gdm_config_hash_lookup
+ *
+ * Accesses hash with key, stripping it so it doesn't contain a default
+ * value.
+ */
+static gpointer
+gdm_config_hash_lookup (GHashTable *hash, gchar *key)
+{
+ gchar *p;
+ gpointer *ret;
+ gchar *newkey = g_strdup (key);
+
+ g_strstrip (newkey);
+ p = strchr (newkey, '=');
+ if (p != NULL)
+ *p = '\0';
+
+ ret = g_hash_table_lookup (hash, newkey);
+ g_free (newkey);
+ return (ret);
+}
+
+/**
+ * is_key
+ *
+ * Since GDM keys sometimes have default values defined in the gdm.h header
+ * file (e.g. key=value), this function strips off the "=value" from both
+ * keys passed and compares them, returning TRUE if they are the same,
+ * FALSE otherwise.
+ */
+static gboolean
+is_key (const gchar *key1, const gchar *key2)
+{
+ gchar *key1d, *key2d, *p;
+
+ key1d = g_strdup (key1);
+ key2d = g_strdup (key2);
+
+ g_strstrip (key1d);
+ p = strchr (key1d, '=');
+ if (p != NULL)
+ *p = '\0';
+
+ g_strstrip (key2d);
+ p = strchr (key2d, '=');
+ if (p != NULL)
+ *p = '\0';
+
+ if (strcmp (ve_sure_string (key1d), ve_sure_string (key2d)) == 0) {
+ g_free (key1d);
+ g_free (key2d);
+ return TRUE;
+ } else {
+ g_free (key1d);
+ g_free (key2d);
+ return FALSE;
+ }
+}
+
+/**
* gdm_config_init
*
* Sets up initial hashes used by configuration routines.
*/
-void
+static void
gdm_config_init (void)
{
- type_hash = g_hash_table_new (g_str_hash, g_str_equal);
- val_hash = g_hash_table_new (g_str_hash, g_str_equal);
-
- g_hash_table_insert (type_hash, GDM_KEY_ALLOW_REMOTE_ROOT, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_ALLOW_ROOT, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_ALLOW_REMOTE_AUTOLOGIN, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_PASSWORD_REQUIRED, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_AUTOMATIC_LOGIN_ENABLE, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_ALWAYS_RESTART_SERVER, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_ADD_GTK_MODULES, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_DOUBLE_LOGIN_WARNING, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_ALWAYS_LOGIN_CURRENT_SESSION, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_DISPLAY_LAST_LOGIN, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_KILL_INIT_CLIENTS, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_CONFIG_AVAILABLE, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_SYSTEM_MENU, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_CHOOSER_BUTTON, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_BROWSER, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_MULTICAST, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_NEVER_PLACE_COOKIES_ON_NFS, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_CONSOLE_NOTIFY, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_TIMED_LOGIN_ENABLE, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_ALLOW_ROOT, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_CHECK_DIR_OWNER, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_XDMCP, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_INDIRECT, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_XDMCP_PROXY, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_DYNAMIC_XSERVERS, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_VT_ALLOCATION, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_DISALLOW_TCP, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_SOUND_ON_LOGIN_SUCCESS, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_SOUND_ON_LOGIN_FAILURE, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_DEBUG, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_DEBUG_GESTURES, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_ALLOW_GTK_THEME_CHANGE, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_TITLE_BAR, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_INCLUDE_ALL, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_DEFAULT_WELCOME, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_DEFAULT_REMOTE_WELCOME, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_LOCK_POSITION, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_BACKGROUND_SCALE_TO_FIT, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_BACKGROUND_REMOTE_ONLY_COLOR, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_RUN_BACKGROUND_PROGRAM_ALWAYS, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_SET_POSITION, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_QUIVER, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_SHOW_GNOME_FAILSAFE, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_SHOW_XTERM_FAILSAFE, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_SHOW_LAST_SESSION, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_USE_24_CLOCK, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_ENTRY_CIRCLES, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_ENTRY_INVISIBLE, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_GRAPHICAL_THEME_RAND, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_BROADCAST, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_ALLOW_ADD, &bool_type);
- g_hash_table_insert (type_hash, GDM_KEY_PATH, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_ROOT_PATH, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_CONSOLE_CANNOT_HANDLE, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_CHOOSER, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_GREETER, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_CONFIGURATOR, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_POSTLOGIN, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_PRESESSION, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_POSTSESSION, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_FAILSAFE_XSERVER, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_X_KEEPS_CRASHING, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_BASE_XSESSION, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_REMOTE_GREETER, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_DISPLAY_INIT_DIR, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_AUTOMATIC_LOGIN, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_GTK_MODULES_LIST, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_REBOOT, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_HALT, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_SUSPEND, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_LOG_DIR, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_PID_FILE, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_FACE_DIR, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_SERV_AUTHDIR, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_USER_AUTHDIR, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_USER_AUTHFILE, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_USER_AUTHDIR_FALLBACK, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_SESSION_DESKTOP_DIR, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_DEFAULT_SESSION, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_MULTICAST_ADDR, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_USER, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_GROUP, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_GTKRC, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_GTK_THEME, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_TIMED_LOGIN, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_WILLING, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_XDMCP_PROXY_XSERVER, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_XDMCP_PROXY_RECONNECT, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_STANDARD_XSERVER, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_XNEST, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_SOUND_PROGRAM, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_SOUND_ON_LOGIN_READY_FILE, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_SOUND_ON_LOGIN_SUCCESS_FILE, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_SOUND_ON_LOGIN_FAILURE_FILE, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_GTK_THEMES_TO_ALLOW, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_INCLUDE, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_EXCLUDE, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_FACE, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_LOCALE_FILE, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_LOGO, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_CHOOSER_BUTTON_LOGO, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_WELCOME, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_REMOTE_WELCOME, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_BACKGROUND_PROGRAM, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_BACKGROUND_IMAGE, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_BACKGROUND_COLOR, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_GRAPHICAL_THEME, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_GRAPHICAL_THEME_DIR, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_GRAPHICAL_THEMES, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_GRAPHICAL_THEME_COLOR, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_INFO_MSG_FILE, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_INFO_MSG_FONT, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_DEFAULT_HOST_IMG, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_HOST_IMAGE_DIR, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_HOSTS, &string_type);
- g_hash_table_insert (type_hash, GDM_KEY_XINERAMA_SCREEN, &int_type);
- g_hash_table_insert (type_hash, GDM_KEY_RETRY_DELAY, &int_type);
- g_hash_table_insert (type_hash, GDM_KEY_TIMED_LOGIN_DELAY, &int_type);
- g_hash_table_insert (type_hash, GDM_KEY_RELAX_PERM, &int_type);
- g_hash_table_insert (type_hash, GDM_KEY_USER_MAX_FILE, &int_type);
- g_hash_table_insert (type_hash, GDM_KEY_DISPLAYS_PER_HOST, &int_type);
- g_hash_table_insert (type_hash, GDM_KEY_MAX_PENDING, &int_type);
- g_hash_table_insert (type_hash, GDM_KEY_MAX_WAIT, &int_type);
- g_hash_table_insert (type_hash, GDM_KEY_MAX_SESSIONS, &int_type);
- g_hash_table_insert (type_hash, GDM_KEY_UDP_PORT, &int_type);
- g_hash_table_insert (type_hash, GDM_KEY_MAX_INDIRECT, &int_type);
- g_hash_table_insert (type_hash, GDM_KEY_MAX_WAIT_INDIRECT, &int_type);
- g_hash_table_insert (type_hash, GDM_KEY_PING_INTERVAL, &int_type);
- g_hash_table_insert (type_hash, GDM_KEY_FLEXIBLE_XSERVERS, &int_type);
- g_hash_table_insert (type_hash, GDM_KEY_FIRST_VT, &int_type);
- g_hash_table_insert (type_hash, GDM_KEY_POSITION_X, &int_type);
- g_hash_table_insert (type_hash, GDM_KEY_POSITION_Y, &int_type);
- g_hash_table_insert (type_hash, GDM_KEY_MINIMAL_UID, &int_type);
- g_hash_table_insert (type_hash, GDM_KEY_ICON_WIDTH, &int_type);
- g_hash_table_insert (type_hash, GDM_KEY_ICON_HEIGHT, &int_type);
- g_hash_table_insert (type_hash, GDM_KEY_BACKGROUND_TYPE, &int_type);
- g_hash_table_insert (type_hash, GDM_KEY_SCAN_TIME, &int_type);
+ type_hash = g_hash_table_new (g_str_hash, g_str_equal);
+ val_hash = g_hash_table_new (g_str_hash, g_str_equal);
+ realkey_hash = g_hash_table_new (g_str_hash, g_str_equal);
/* boolean values */
- g_hash_table_insert (val_hash, GDM_KEY_ALLOW_REMOTE_ROOT, &GdmAllowRemoteRoot);
- g_hash_table_insert (val_hash, GDM_KEY_ALLOW_ROOT, &GdmAllowRoot);
- g_hash_table_insert (val_hash, GDM_KEY_ALLOW_REMOTE_AUTOLOGIN, &GdmAllowRemoteAutoLogin);
- g_hash_table_insert (val_hash, GDM_KEY_PASSWORD_REQUIRED, &GdmPasswordRequired);
- g_hash_table_insert (val_hash, GDM_KEY_AUTOMATIC_LOGIN_ENABLE, &GdmAutomaticLoginEnable);
- g_hash_table_insert (val_hash, GDM_KEY_ALWAYS_RESTART_SERVER, &GdmAlwaysRestartServer);
- g_hash_table_insert (val_hash, GDM_KEY_ADD_GTK_MODULES, &GdmAddGtkModules);
- g_hash_table_insert (val_hash, GDM_KEY_DOUBLE_LOGIN_WARNING, &GdmDoubleLoginWarning);
- g_hash_table_insert (val_hash, GDM_KEY_ALWAYS_LOGIN_CURRENT_SESSION, &GdmAlwaysLoginCurrentSession);
- g_hash_table_insert (val_hash, GDM_KEY_DISPLAY_LAST_LOGIN, &GdmDisplayLastLogin);
- g_hash_table_insert (val_hash, GDM_KEY_KILL_INIT_CLIENTS, &GdmKillInitClients);
- g_hash_table_insert (val_hash, GDM_KEY_CONFIG_AVAILABLE, &GdmConfigAvailable);
- g_hash_table_insert (val_hash, GDM_KEY_SYSTEM_MENU, &GdmSystemMenu);
- g_hash_table_insert (val_hash, GDM_KEY_CHOOSER_BUTTON, &GdmChooserButton);
- g_hash_table_insert (val_hash, GDM_KEY_BROWSER, &GdmBrowser);
- g_hash_table_insert (val_hash, GDM_KEY_MULTICAST, &GdmMulticast);
- g_hash_table_insert (val_hash, GDM_KEY_NEVER_PLACE_COOKIES_ON_NFS, &GdmNeverPlaceCookiesOnNfs);
- g_hash_table_insert (val_hash, GDM_KEY_CONSOLE_NOTIFY, &GdmConsoleNotify);
- g_hash_table_insert (val_hash, GDM_KEY_TIMED_LOGIN_ENABLE, &GdmTimedLoginEnable);
- g_hash_table_insert (val_hash, GDM_KEY_CHECK_DIR_OWNER, &GdmCheckDirOwner);
- g_hash_table_insert (val_hash, GDM_KEY_XDMCP, &GdmXdmcp);
- g_hash_table_insert (val_hash, GDM_KEY_INDIRECT, &GdmIndirect);
- g_hash_table_insert (val_hash, GDM_KEY_XDMCP_PROXY, &GdmXdmcpProxy);
- g_hash_table_insert (val_hash, GDM_KEY_DYNAMIC_XSERVERS, &GdmDynamicXservers);
- g_hash_table_insert (val_hash, GDM_KEY_VT_ALLOCATION, &GdmVTAllocation);
- g_hash_table_insert (val_hash, GDM_KEY_DISALLOW_TCP, &GdmDisallowTcp);
- g_hash_table_insert (val_hash, GDM_KEY_SOUND_ON_LOGIN_SUCCESS, &GdmSoundOnLoginSuccess);
- g_hash_table_insert (val_hash, GDM_KEY_SOUND_ON_LOGIN_FAILURE, &GdmSoundOnLoginFailure);
- g_hash_table_insert (val_hash, GDM_KEY_DEBUG, &GdmDebug);
- g_hash_table_insert (val_hash, GDM_KEY_DEBUG_GESTURES, &GdmDebugGestures);
- g_hash_table_insert (val_hash, GDM_KEY_ALLOW_GTK_THEME_CHANGE, &GdmAllowGtkThemeChange);
- g_hash_table_insert (val_hash, GDM_KEY_TITLE_BAR, &GdmTitleBar);
- g_hash_table_insert (val_hash, GDM_KEY_INCLUDE_ALL, &GdmIncludeAll);
- g_hash_table_insert (val_hash, GDM_KEY_DEFAULT_WELCOME, &GdmDefaultWelcome);
- g_hash_table_insert (val_hash, GDM_KEY_DEFAULT_REMOTE_WELCOME, &GdmDefaultRemoteWelcome);
- g_hash_table_insert (val_hash, GDM_KEY_LOCK_POSITION, &GdmLockPosition);
- g_hash_table_insert (val_hash, GDM_KEY_BACKGROUND_SCALE_TO_FIT, &GdmBackgroundScaleToFit);
- g_hash_table_insert (val_hash, GDM_KEY_BACKGROUND_REMOTE_ONLY_COLOR, &GdmBackgroundRemoteOnlyColor);
- g_hash_table_insert (val_hash, GDM_KEY_RUN_BACKGROUND_PROGRAM_ALWAYS, &GdmRunBackgroundProgramAlways);
- g_hash_table_insert (val_hash, GDM_KEY_SET_POSITION, &GdmSetPosition);
- g_hash_table_insert (val_hash, GDM_KEY_QUIVER, &GdmQuiver);
- g_hash_table_insert (val_hash, GDM_KEY_SHOW_GNOME_FAILSAFE, &GdmShowGnomeFailsafe);
- g_hash_table_insert (val_hash, GDM_KEY_SHOW_XTERM_FAILSAFE, &GdmShowXtermFailsafe);
- g_hash_table_insert (val_hash, GDM_KEY_SHOW_LAST_SESSION, &GdmShowLastSession);
- g_hash_table_insert (val_hash, GDM_KEY_USE_24_CLOCK, &GdmUse24Clock);
- g_hash_table_insert (val_hash, GDM_KEY_ENTRY_CIRCLES, &GdmEntryCircles);
- g_hash_table_insert (val_hash, GDM_KEY_ENTRY_INVISIBLE, &GdmEntryInvisible);
- g_hash_table_insert (val_hash, GDM_KEY_GRAPHICAL_THEME_RAND, &GdmGraphicalThemeRand);
- g_hash_table_insert (val_hash, GDM_KEY_BROADCAST, &GdmBroadcast);
- g_hash_table_insert (val_hash, GDM_KEY_ALLOW_ADD, &GdmAllowAdd);
+ gdm_config_add_hash (GDM_KEY_ALLOW_REMOTE_ROOT, &GdmAllowRemoteRoot, &bool_type);
+ gdm_config_add_hash (GDM_KEY_ALLOW_ROOT, &GdmAllowRoot, &bool_type);
+ gdm_config_add_hash (GDM_KEY_ALLOW_REMOTE_AUTOLOGIN,
+ &GdmAllowRemoteAutoLogin, &bool_type);
+ gdm_config_add_hash (GDM_KEY_PASSWORD_REQUIRED, &GdmPasswordRequired, &bool_type);
+ gdm_config_add_hash (GDM_KEY_AUTOMATIC_LOGIN_ENABLE,
+ &GdmAutomaticLoginEnable, &bool_type);
+ gdm_config_add_hash (GDM_KEY_ALWAYS_RESTART_SERVER,
+ &GdmAlwaysRestartServer, &bool_type);
+ gdm_config_add_hash (GDM_KEY_ADD_GTK_MODULES, &GdmAddGtkModules, &bool_type);
+ gdm_config_add_hash (GDM_KEY_DOUBLE_LOGIN_WARNING,
+ &GdmDoubleLoginWarning, &bool_type);
+ gdm_config_add_hash (GDM_KEY_ALWAYS_LOGIN_CURRENT_SESSION,
+ &GdmAlwaysLoginCurrentSession, &bool_type);
+ gdm_config_add_hash (GDM_KEY_DISPLAY_LAST_LOGIN, &GdmDisplayLastLogin, &bool_type);
+ gdm_config_add_hash (GDM_KEY_KILL_INIT_CLIENTS, &GdmKillInitClients, &bool_type);
+ gdm_config_add_hash (GDM_KEY_CONFIG_AVAILABLE, &GdmConfigAvailable, &bool_type);
+ gdm_config_add_hash (GDM_KEY_SYSTEM_MENU, &GdmSystemMenu, &bool_type);
+ gdm_config_add_hash (GDM_KEY_CHOOSER_BUTTON, &GdmChooserButton, &bool_type);
+ gdm_config_add_hash (GDM_KEY_BROWSER, &GdmBrowser, &bool_type);
+ gdm_config_add_hash (GDM_KEY_MULTICAST, &GdmMulticast, &bool_type);
+ gdm_config_add_hash (GDM_KEY_NEVER_PLACE_COOKIES_ON_NFS,
+ &GdmNeverPlaceCookiesOnNfs, &bool_type);
+ gdm_config_add_hash (GDM_KEY_CONSOLE_NOTIFY, &GdmConsoleNotify, &bool_type);
+ gdm_config_add_hash (GDM_KEY_TIMED_LOGIN_ENABLE, &GdmTimedLoginEnable, &bool_type);
+ gdm_config_add_hash (GDM_KEY_CHECK_DIR_OWNER, &GdmCheckDirOwner, &bool_type);
+ gdm_config_add_hash (GDM_KEY_XDMCP, &GdmXdmcp, &bool_type);
+ gdm_config_add_hash (GDM_KEY_INDIRECT, &GdmIndirect, &bool_type);
+ gdm_config_add_hash (GDM_KEY_XDMCP_PROXY, &GdmXdmcpProxy, &bool_type);
+ gdm_config_add_hash (GDM_KEY_DYNAMIC_XSERVERS, &GdmDynamicXservers, &bool_type);
+ gdm_config_add_hash (GDM_KEY_VT_ALLOCATION, &GdmVTAllocation, &bool_type);
+ gdm_config_add_hash (GDM_KEY_DISALLOW_TCP, &GdmDisallowTcp, &bool_type);
+ gdm_config_add_hash (GDM_KEY_SOUND_ON_LOGIN_SUCCESS,
+ &GdmSoundOnLoginSuccess, &bool_type);
+ gdm_config_add_hash (GDM_KEY_SOUND_ON_LOGIN_FAILURE,
+ &GdmSoundOnLoginFailure, &bool_type);
+ gdm_config_add_hash (GDM_KEY_DEBUG, &GdmDebug, &bool_type);
+ gdm_config_add_hash (GDM_KEY_DEBUG_GESTURES, &GdmDebugGestures, &bool_type);
+ gdm_config_add_hash (GDM_KEY_ALLOW_GTK_THEME_CHANGE,
+ &GdmAllowGtkThemeChange, &bool_type);
+ gdm_config_add_hash (GDM_KEY_TITLE_BAR, &GdmTitleBar, &bool_type);
+ gdm_config_add_hash (GDM_KEY_INCLUDE_ALL, &GdmIncludeAll, &bool_type);
+ gdm_config_add_hash (GDM_KEY_DEFAULT_WELCOME, &GdmDefaultWelcome, &bool_type);
+ gdm_config_add_hash (GDM_KEY_DEFAULT_REMOTE_WELCOME,
+ &GdmDefaultRemoteWelcome, &bool_type);
+ gdm_config_add_hash (GDM_KEY_LOCK_POSITION, &GdmLockPosition, &bool_type);
+ gdm_config_add_hash (GDM_KEY_BACKGROUND_SCALE_TO_FIT,
+ &GdmBackgroundScaleToFit, &bool_type);
+ gdm_config_add_hash (GDM_KEY_BACKGROUND_REMOTE_ONLY_COLOR,
+ &GdmBackgroundRemoteOnlyColor, &bool_type);
+ gdm_config_add_hash (GDM_KEY_RUN_BACKGROUND_PROGRAM_ALWAYS,
+ &GdmRunBackgroundProgramAlways, &bool_type);
+ gdm_config_add_hash (GDM_KEY_SET_POSITION, &GdmSetPosition, &bool_type);
+ gdm_config_add_hash (GDM_KEY_QUIVER, &GdmQuiver, &bool_type);
+ gdm_config_add_hash (GDM_KEY_SHOW_GNOME_FAILSAFE,
+ &GdmShowGnomeFailsafe, &bool_type);
+ gdm_config_add_hash (GDM_KEY_SHOW_XTERM_FAILSAFE,
+ &GdmShowXtermFailsafe, &bool_type);
+ gdm_config_add_hash (GDM_KEY_SHOW_LAST_SESSION,
+ &GdmShowLastSession, &bool_type);
+ gdm_config_add_hash (GDM_KEY_USE_24_CLOCK, &GdmUse24Clock, &bool_type);
+ gdm_config_add_hash (GDM_KEY_ENTRY_CIRCLES, &GdmEntryCircles, &bool_type);
+ gdm_config_add_hash (GDM_KEY_ENTRY_INVISIBLE, &GdmEntryInvisible, &bool_type);
+ gdm_config_add_hash (GDM_KEY_GRAPHICAL_THEME_RAND,
+ &GdmGraphicalThemeRand, &bool_type);
+ gdm_config_add_hash (GDM_KEY_BROADCAST, &GdmBroadcast, &bool_type);
+ gdm_config_add_hash (GDM_KEY_ALLOW_ADD, &GdmAllowAdd, &bool_type);
+ gdm_config_add_hash (GDM_KEY_SOUND_ON_LOGIN, &GdmSoundOnLogin, &bool_type);
/* string values */
- g_hash_table_insert (val_hash, GDM_KEY_PATH, &GdmPath);
- g_hash_table_insert (val_hash, GDM_KEY_ROOT_PATH, &GdmRootPath);
- g_hash_table_insert (val_hash, GDM_KEY_CONSOLE_CANNOT_HANDLE, &GdmConsoleCannotHandle);
- g_hash_table_insert (val_hash, GDM_KEY_CHOOSER, &GdmChooser);
- g_hash_table_insert (val_hash, GDM_KEY_GREETER, &GdmGreeter);
- g_hash_table_insert (val_hash, GDM_KEY_CONFIGURATOR, &GdmConfigurator);
- g_hash_table_insert (val_hash, GDM_KEY_POSTLOGIN, &GdmPostLogin);
- g_hash_table_insert (val_hash, GDM_KEY_PRESESSION, &GdmPreSession);
- g_hash_table_insert (val_hash, GDM_KEY_POSTSESSION, &GdmPostSession);
- g_hash_table_insert (val_hash, GDM_KEY_FAILSAFE_XSERVER, &GdmFailsafeXserver);
- g_hash_table_insert (val_hash, GDM_KEY_X_KEEPS_CRASHING, &GdmXKeepsCrashing);
- g_hash_table_insert (val_hash, GDM_KEY_BASE_XSESSION, &GdmBaseXsession);
- g_hash_table_insert (val_hash, GDM_KEY_REMOTE_GREETER, &GdmRemoteGreeter);
- g_hash_table_insert (val_hash, GDM_KEY_DISPLAY_INIT_DIR, &GdmInitDir);
- g_hash_table_insert (val_hash, GDM_KEY_AUTOMATIC_LOGIN, &GdmAutomaticLogin);
- g_hash_table_insert (val_hash, GDM_KEY_GTK_MODULES_LIST, &GdmGtkModulesList);
- g_hash_table_insert (val_hash, GDM_KEY_REBOOT, &GdmReboot);
- g_hash_table_insert (val_hash, GDM_KEY_HALT, &GdmHalt);
- g_hash_table_insert (val_hash, GDM_KEY_SUSPEND, &GdmSuspend);
- g_hash_table_insert (val_hash, GDM_KEY_LOG_DIR, &GdmLogDir);
- g_hash_table_insert (val_hash, GDM_KEY_PID_FILE, &GdmPidFile);
- g_hash_table_insert (val_hash, GDM_KEY_FACE_DIR, &GdmFaceDir);
- g_hash_table_insert (val_hash, GDM_KEY_SERV_AUTHDIR, &GdmServAuthDir);
- g_hash_table_insert (val_hash, GDM_KEY_USER_AUTHDIR, &GdmUserAuthDir);
- g_hash_table_insert (val_hash, GDM_KEY_USER_AUTHFILE, &GdmUserAuthFile);
- g_hash_table_insert (val_hash, GDM_KEY_USER_AUTHDIR_FALLBACK, &GdmUserAuthFallback);
- g_hash_table_insert (val_hash, GDM_KEY_SESSION_DESKTOP_DIR, &GdmSessDir);
- g_hash_table_insert (val_hash, GDM_KEY_DEFAULT_SESSION, &GdmDefaultSession);
- g_hash_table_insert (val_hash, GDM_KEY_MULTICAST_ADDR, &GdmMulticastAddr);
- g_hash_table_insert (val_hash, GDM_KEY_USER, &GdmUser);
- g_hash_table_insert (val_hash, GDM_KEY_GROUP, &GdmGroup);
- g_hash_table_insert (val_hash, GDM_KEY_GTKRC, &GdmGtkRc);
- g_hash_table_insert (val_hash, GDM_KEY_GTK_THEME, &GdmGtkTheme);
- g_hash_table_insert (val_hash, GDM_KEY_TIMED_LOGIN, &GdmTimedLogin);
- g_hash_table_insert (val_hash, GDM_KEY_WILLING, &GdmWilling);
- g_hash_table_insert (val_hash, GDM_KEY_XDMCP_PROXY_XSERVER, &GdmXdmcpProxyXserver);
- g_hash_table_insert (val_hash, GDM_KEY_XDMCP_PROXY_RECONNECT, &GdmXdmcpProxyReconnect);
- g_hash_table_insert (val_hash, GDM_KEY_STANDARD_XSERVER, &GdmStandardXserver);
- g_hash_table_insert (val_hash, GDM_KEY_XNEST, &GdmXnest);
- g_hash_table_insert (val_hash, GDM_KEY_SOUND_PROGRAM, &GdmSoundProgram);
- g_hash_table_insert (val_hash, GDM_KEY_SOUND_ON_LOGIN_READY_FILE, &GdmSoundOnLoginReadyFile);
- g_hash_table_insert (val_hash, GDM_KEY_SOUND_ON_LOGIN_SUCCESS_FILE, &GdmSoundOnLoginSuccessFile);
- g_hash_table_insert (val_hash, GDM_KEY_SOUND_ON_LOGIN_FAILURE_FILE, &GdmSoundOnLoginFailureFile);
- g_hash_table_insert (val_hash, GDM_KEY_GTK_THEMES_TO_ALLOW, &GdmGtkThemesToAllow);
- g_hash_table_insert (val_hash, GDM_KEY_INCLUDE, &GdmInclude);
- g_hash_table_insert (val_hash, GDM_KEY_EXCLUDE, &GdmExclude);
- g_hash_table_insert (val_hash, GDM_KEY_FACE, &GdmFace);
- g_hash_table_insert (val_hash, GDM_KEY_LOCALE_FILE, &GdmLocaleFile);
- g_hash_table_insert (val_hash, GDM_KEY_LOGO, &GdmLogo);
- g_hash_table_insert (val_hash, GDM_KEY_CHOOSER_BUTTON_LOGO, &GdmChooserButtonLogo);
- g_hash_table_insert (val_hash, GDM_KEY_WELCOME, &GdmWelcome);
- g_hash_table_insert (val_hash, GDM_KEY_REMOTE_WELCOME, &GdmRemoteWelcome);
- g_hash_table_insert (val_hash, GDM_KEY_BACKGROUND_PROGRAM, &GdmBackgroundProgram);
- g_hash_table_insert (val_hash, GDM_KEY_BACKGROUND_IMAGE, &GdmBackgroundImage);
- g_hash_table_insert (val_hash, GDM_KEY_BACKGROUND_COLOR, &GdmBackgroundColor);
- g_hash_table_insert (val_hash, GDM_KEY_GRAPHICAL_THEME, &GdmGraphicalTheme);
- g_hash_table_insert (val_hash, GDM_KEY_GRAPHICAL_THEME_DIR, &GdmGraphicalThemeDir);
- g_hash_table_insert (val_hash, GDM_KEY_GRAPHICAL_THEMES, &GdmGraphicalThemes);
- g_hash_table_insert (val_hash, GDM_KEY_GRAPHICAL_THEME_COLOR, &GdmGraphicalThemeColor);
- g_hash_table_insert (val_hash, GDM_KEY_INFO_MSG_FILE, &GdmInfoMsgFile);
- g_hash_table_insert (val_hash, GDM_KEY_INFO_MSG_FONT, &GdmInfoMsgFont);
- g_hash_table_insert (val_hash, GDM_KEY_DEFAULT_HOST_IMG, &GdmHost);
- g_hash_table_insert (val_hash, GDM_KEY_HOST_IMAGE_DIR, &GdmHostImageDir);
- g_hash_table_insert (val_hash, GDM_KEY_HOSTS, &GdmHosts);
+ gdm_config_add_hash (GDM_KEY_PATH, &GdmPath, &string_type);
+ gdm_config_add_hash (GDM_KEY_ROOT_PATH, &GdmRootPath, &string_type);
+ gdm_config_add_hash (GDM_KEY_CONSOLE_CANNOT_HANDLE,
+ &GdmConsoleCannotHandle, &string_type);
+ gdm_config_add_hash (GDM_KEY_CHOOSER, &GdmChooser, &string_type);
+ gdm_config_add_hash (GDM_KEY_GREETER, &GdmGreeter, &string_type);
+ gdm_config_add_hash (GDM_KEY_CONFIGURATOR, &GdmConfigurator, &string_type);
+ gdm_config_add_hash (GDM_KEY_POSTLOGIN, &GdmPostLogin, &string_type);
+ gdm_config_add_hash (GDM_KEY_PRESESSION, &GdmPreSession, &string_type);
+ gdm_config_add_hash (GDM_KEY_POSTSESSION, &GdmPostSession, &string_type);
+ gdm_config_add_hash (GDM_KEY_FAILSAFE_XSERVER, &GdmFailsafeXserver, &string_type);
+ gdm_config_add_hash (GDM_KEY_X_KEEPS_CRASHING, &GdmXKeepsCrashing, &string_type);
+ gdm_config_add_hash (GDM_KEY_BASE_XSESSION, &GdmBaseXsession, &string_type);
+ gdm_config_add_hash (GDM_KEY_REMOTE_GREETER, &GdmRemoteGreeter, &string_type);
+ gdm_config_add_hash (GDM_KEY_DISPLAY_INIT_DIR, &GdmInitDir, &string_type);
+ gdm_config_add_hash (GDM_KEY_AUTOMATIC_LOGIN, &GdmAutomaticLogin, &string_type);
+ gdm_config_add_hash (GDM_KEY_GTK_MODULES_LIST, &GdmGtkModulesList, &string_type);
+ gdm_config_add_hash (GDM_KEY_REBOOT, &GdmReboot, &string_type);
+ gdm_config_add_hash (GDM_KEY_HALT, &GdmHalt, &string_type);
+ gdm_config_add_hash (GDM_KEY_SUSPEND, &GdmSuspend, &string_type);
+ gdm_config_add_hash (GDM_KEY_LOG_DIR, &GdmLogDir, &string_type);
+ gdm_config_add_hash (GDM_KEY_PID_FILE, &GdmPidFile, &string_type);
+ gdm_config_add_hash (GDM_KEY_GLOBAL_FACE_DIR, &GdmGlobalFaceDir, &string_type);
+ gdm_config_add_hash (GDM_KEY_SERV_AUTHDIR, &GdmServAuthDir, &string_type);
+ gdm_config_add_hash (GDM_KEY_USER_AUTHDIR, &GdmUserAuthDir, &string_type);
+ gdm_config_add_hash (GDM_KEY_USER_AUTHFILE, &GdmUserAuthFile, &string_type);
+ gdm_config_add_hash (GDM_KEY_USER_AUTHDIR_FALLBACK,
+ &GdmUserAuthFallback, &string_type);
+ gdm_config_add_hash (GDM_KEY_SESSION_DESKTOP_DIR, &GdmSessDir, &string_type);
+ gdm_config_add_hash (GDM_KEY_DEFAULT_SESSION, &GdmDefaultSession, &string_type);
+ gdm_config_add_hash (GDM_KEY_MULTICAST_ADDR, &GdmMulticastAddr, &string_type);
+ gdm_config_add_hash (GDM_KEY_USER, &GdmUser, &string_type);
+ gdm_config_add_hash (GDM_KEY_GROUP, &GdmGroup, &string_type);
+ gdm_config_add_hash (GDM_KEY_GTKRC, &GdmGtkRc, &string_type);
+ gdm_config_add_hash (GDM_KEY_GTK_THEME, &GdmGtkTheme, &string_type);
+ gdm_config_add_hash (GDM_KEY_TIMED_LOGIN, &GdmTimedLogin, &string_type);
+ gdm_config_add_hash (GDM_KEY_WILLING, &GdmWilling, &string_type);
+ gdm_config_add_hash (GDM_KEY_XDMCP_PROXY_XSERVER,
+ &GdmXdmcpProxyXserver, &string_type);
+ gdm_config_add_hash (GDM_KEY_XDMCP_PROXY_RECONNECT,
+ &GdmXdmcpProxyReconnect, &string_type);
+ gdm_config_add_hash (GDM_KEY_STANDARD_XSERVER, &GdmStandardXserver, &string_type);
+ gdm_config_add_hash (GDM_KEY_XNEST, &GdmXnest, &string_type);
+ gdm_config_add_hash (GDM_KEY_SOUND_PROGRAM, &GdmSoundProgram, &string_type);
+ gdm_config_add_hash (GDM_KEY_SOUND_ON_LOGIN_FILE,
+ &GdmSoundOnLoginFile, &string_type);
+ gdm_config_add_hash (GDM_KEY_SOUND_ON_LOGIN_SUCCESS_FILE,
+ &GdmSoundOnLoginSuccessFile, &string_type);
+ gdm_config_add_hash (GDM_KEY_SOUND_ON_LOGIN_FAILURE_FILE,
+ &GdmSoundOnLoginFailureFile, &string_type);
+ gdm_config_add_hash (GDM_KEY_GTK_THEMES_TO_ALLOW,
+ &GdmGtkThemesToAllow, &string_type);
+ gdm_config_add_hash (GDM_KEY_INCLUDE, &GdmInclude, &string_type);
+ gdm_config_add_hash (GDM_KEY_EXCLUDE, &GdmExclude, &string_type);
+ gdm_config_add_hash (GDM_KEY_DEFAULT_FACE, &GdmDefaultFace, &string_type);
+ gdm_config_add_hash (GDM_KEY_LOCALE_FILE, &GdmLocaleFile, &string_type);
+ gdm_config_add_hash (GDM_KEY_LOGO, &GdmLogo, &string_type);
+ gdm_config_add_hash (GDM_KEY_CHOOSER_BUTTON_LOGO,
+ &GdmChooserButtonLogo, &string_type);
+ gdm_config_add_hash (GDM_KEY_WELCOME, &GdmWelcome, &string_type);
+ gdm_config_add_hash (GDM_KEY_REMOTE_WELCOME, &GdmRemoteWelcome, &string_type);
+ gdm_config_add_hash (GDM_KEY_BACKGROUND_PROGRAM,
+ &GdmBackgroundProgram, &string_type);
+ gdm_config_add_hash (GDM_KEY_BACKGROUND_IMAGE,
+ &GdmBackgroundImage, &string_type);
+ gdm_config_add_hash (GDM_KEY_BACKGROUND_COLOR,
+ &GdmBackgroundColor, &string_type);
+ gdm_config_add_hash (GDM_KEY_GRAPHICAL_THEME,
+ &GdmGraphicalTheme, &string_type);
+ gdm_config_add_hash (GDM_KEY_GRAPHICAL_THEME_DIR,
+ &GdmGraphicalThemeDir, &string_type);
+ gdm_config_add_hash (GDM_KEY_GRAPHICAL_THEMES,
+ &GdmGraphicalThemes, &string_type);
+ gdm_config_add_hash (GDM_KEY_GRAPHICAL_THEME_COLOR,
+ &GdmGraphicalThemeColor, &string_type);
+ gdm_config_add_hash (GDM_KEY_INFO_MSG_FILE, &GdmInfoMsgFile, &string_type);
+ gdm_config_add_hash (GDM_KEY_INFO_MSG_FONT, &GdmInfoMsgFont, &string_type);
+ gdm_config_add_hash (GDM_KEY_DEFAULT_HOST_IMG, &GdmHost, &string_type);
+ gdm_config_add_hash (GDM_KEY_HOST_IMAGE_DIR, &GdmHostImageDir, &string_type);
+ gdm_config_add_hash (GDM_KEY_HOSTS, &GdmHosts, &string_type);
/* int values */
- g_hash_table_insert (val_hash, GDM_KEY_XINERAMA_SCREEN, &GdmXineramaScreen);
- g_hash_table_insert (val_hash, GDM_KEY_RETRY_DELAY, &GdmRetryDelay);
- g_hash_table_insert (val_hash, GDM_KEY_TIMED_LOGIN_DELAY, &GdmTimedLoginDelay);
- g_hash_table_insert (val_hash, GDM_KEY_RELAX_PERM, &GdmRelaxPerm);
- g_hash_table_insert (val_hash, GDM_KEY_USER_MAX_FILE, &GdmUserMaxFile);
- g_hash_table_insert (val_hash, GDM_KEY_DISPLAYS_PER_HOST, &GdmDisplaysPerHost);
- g_hash_table_insert (val_hash, GDM_KEY_MAX_PENDING, &GdmMaxPending);
- g_hash_table_insert (val_hash, GDM_KEY_MAX_WAIT, &GdmMaxWait);
- g_hash_table_insert (val_hash, GDM_KEY_MAX_SESSIONS, &GdmMaxSessions);
- g_hash_table_insert (val_hash, GDM_KEY_UDP_PORT, &GdmUdpPort);
- g_hash_table_insert (val_hash, GDM_KEY_MAX_INDIRECT, &GdmMaxIndirect);
- g_hash_table_insert (val_hash, GDM_KEY_MAX_WAIT_INDIRECT, &GdmMaxWaitIndirect);
- g_hash_table_insert (val_hash, GDM_KEY_PING_INTERVAL, &GdmPingInterval);
- g_hash_table_insert (val_hash, GDM_KEY_FLEXIBLE_XSERVERS, &GdmFlexibleXservers);
- g_hash_table_insert (val_hash, GDM_KEY_FIRST_VT, &GdmFirstVt);
- g_hash_table_insert (val_hash, GDM_KEY_POSITION_X, &GdmPositionX);
- g_hash_table_insert (val_hash, GDM_KEY_POSITION_Y, &GdmPositionY);
- g_hash_table_insert (val_hash, GDM_KEY_MINIMAL_UID, &GdmMinimalUid);
- g_hash_table_insert (val_hash, GDM_KEY_ICON_WIDTH, &GdmIconWidth);
- g_hash_table_insert (val_hash, GDM_KEY_ICON_HEIGHT, &GdmIconHeight);
- g_hash_table_insert (val_hash, GDM_KEY_BACKGROUND_TYPE, &GdmBackgroundType);
- g_hash_table_insert (val_hash, GDM_KEY_SCAN_TIME, &GdmScanTime);
+ gdm_config_add_hash (GDM_KEY_XINERAMA_SCREEN, &GdmXineramaScreen, &int_type);
+ gdm_config_add_hash (GDM_KEY_RETRY_DELAY, &GdmRetryDelay, &int_type);
+ gdm_config_add_hash (GDM_KEY_TIMED_LOGIN_DELAY, &GdmTimedLoginDelay, &int_type);
+ gdm_config_add_hash (GDM_KEY_RELAX_PERM, &GdmRelaxPerm, &int_type);
+ gdm_config_add_hash (GDM_KEY_USER_MAX_FILE, &GdmUserMaxFile, &int_type);
+ gdm_config_add_hash (GDM_KEY_DISPLAYS_PER_HOST, &GdmDisplaysPerHost, &int_type);
+ gdm_config_add_hash (GDM_KEY_MAX_PENDING, &GdmMaxPending, &int_type);
+ gdm_config_add_hash (GDM_KEY_MAX_WAIT, &GdmMaxWait, &int_type);
+ gdm_config_add_hash (GDM_KEY_MAX_SESSIONS, &GdmMaxSessions, &int_type);
+ gdm_config_add_hash (GDM_KEY_UDP_PORT, &GdmUdpPort, &int_type);
+ gdm_config_add_hash (GDM_KEY_MAX_INDIRECT, &GdmMaxIndirect, &int_type);
+ gdm_config_add_hash (GDM_KEY_MAX_WAIT_INDIRECT, &GdmMaxWaitIndirect, &int_type);
+ gdm_config_add_hash (GDM_KEY_PING_INTERVAL, &GdmPingInterval, &int_type);
+ gdm_config_add_hash (GDM_KEY_FLEXIBLE_XSERVERS, &GdmFlexibleXservers, &int_type);
+ gdm_config_add_hash (GDM_KEY_FIRST_VT, &GdmFirstVt, &int_type);
+ gdm_config_add_hash (GDM_KEY_POSITION_X, &GdmPositionX, &int_type);
+ gdm_config_add_hash (GDM_KEY_POSITION_Y, &GdmPositionY, &int_type);
+ gdm_config_add_hash (GDM_KEY_MINIMAL_UID, &GdmMinimalUid, &int_type);
+ gdm_config_add_hash (GDM_KEY_MAX_ICON_WIDTH, &GdmMaxIconWidth, &int_type);
+ gdm_config_add_hash (GDM_KEY_MAX_ICON_HEIGHT, &GdmMaxIconHeight, &int_type);
+ gdm_config_add_hash (GDM_KEY_BACKGROUND_TYPE, &GdmBackgroundType, &int_type);
+ gdm_config_add_hash (GDM_KEY_SCAN_TIME, &GdmScanTime, &int_type);
+ gdm_config_add_hash (GDM_KEY_FLEXI_REAP_DELAY_MINUTES,
+ &GdmFlexiReapDelayMinutes, &int_type);
}
/**
@@ -568,8 +553,8 @@ gdm_get_config (struct stat *statbuf)
gint
gdm_get_value_int (char *key)
{
- GdmConfigType *type = g_hash_table_lookup (type_hash, key);
- gpointer val = g_hash_table_lookup (val_hash, key);
+ GdmConfigType *type = gdm_config_hash_lookup (type_hash, key);
+ gpointer val = gdm_config_hash_lookup (val_hash, key);
if (type == NULL || val == NULL) {
gdm_error ("Request for invalid configuration key %s", key);
@@ -592,8 +577,8 @@ gdm_get_value_int (char *key)
gchar *
gdm_get_value_string (char *key)
{
- GdmConfigType *type = g_hash_table_lookup (type_hash, key);
- gpointer val = g_hash_table_lookup (val_hash, key);
+ GdmConfigType *type = gdm_config_hash_lookup (type_hash, key);
+ gpointer val = gdm_config_hash_lookup (val_hash, key);
if (type == NULL || val == NULL) {
gdm_error ("Request for invalid configuration key %s", key);
@@ -616,8 +601,8 @@ gdm_get_value_string (char *key)
gboolean
gdm_get_value_bool (char *key)
{
- GdmConfigType *type = g_hash_table_lookup (type_hash, key);
- gpointer val = g_hash_table_lookup (val_hash, key);
+ GdmConfigType *type = gdm_config_hash_lookup (type_hash, key);
+ gpointer val = gdm_config_hash_lookup (val_hash, key);
if (type == NULL || val == NULL) {
gdm_error ("Request for invalid configuration key %s", key);
@@ -640,7 +625,7 @@ gdm_get_value_bool (char *key)
void
gdm_config_to_string (gchar *key, gchar **retval)
{
- GdmConfigType *type = g_hash_table_lookup (type_hash, key);
+ GdmConfigType *type = gdm_config_hash_lookup (type_hash, key);
*retval = NULL;
@@ -669,42 +654,6 @@ gdm_config_to_string (gchar *key, gchar **retval)
}
/**
- * is_key
- *
- * Since GDM keys sometimes have default values defined in the gdm.h header
- * file (e.g. key=value), this function strips off the "=value" from both
- * keys passed in to do a comparison.
- */
-static gboolean
-is_key (const gchar *key1, const gchar *key2)
-{
- gchar *key1d, *key2d, *p;
-
- key1d = g_strdup (key1);
- key2d = g_strdup (key2);
-
- g_strstrip (key1d);
- p = strchr (key1d, '=');
- if (p != NULL)
- *p = '\0';
-
- g_strstrip (key2d);
- p = strchr (key2d, '=');
- if (p != NULL)
- *p = '\0';
-
- if (strcmp (key1d, key2d) == 0) {
- g_free (key1d);
- g_free (key2d);
- return TRUE;
- } else {
- g_free (key1d);
- g_free (key2d);
- return FALSE;
- }
-}
-
-/**
* gdm_compare_displays
*
* Support function for loading displays from the gdm.conf file
@@ -750,26 +699,6 @@ notify_displays_int (const gchar *key, int val)
}
}
-/* If id == NULL, then get the first X server */
-GdmXserver *
-gdm_find_x_server (const gchar *id)
-{
- GSList *li;
-
- if (xservers == NULL)
- return NULL;
-
- if (id == NULL)
- return xservers->data;
-
- for (li = xservers; li != NULL; li = li->next) {
- GdmXserver *svr = li->data;
- if (strcmp (svr->id, id) == 0)
- return svr;
- }
- return NULL;
-}
-
static void
notify_displays_string (const gchar *key, const gchar *val)
{
@@ -788,79 +717,101 @@ notify_displays_string (const gchar *key, const gchar *val)
/* TODO - Need to fix so notification happens for TIMED_LOGIN */
/**
- * gdm_set_value_string
- * gdm_set_value_bool
- * gdm_set_value_int
+ * _gdm_set_value_string
+ * _gdm_set_value_bool
+ * _gdm_set_value_int
*
- * The following interfaces are used to set values. The private
- * static interfaces have a "doing_update" boolean argument which is
- * only set when GDM_UPDATE_CONFIG is called. If doing_update is
- * TRUE, then a notify is sent to slaves. When loading values
- * at other times (such as when first loading configuration options)
- * there is no need to notify the slaves. If there is a desire to
- * send a notify to the slaves, the gdm_update_config function
- * should be used.
+ * The following interfaces are used to set values. The "doing_update"
+ * boolean argument which is only set when GDM_UPDATE_CONFIG is called.
+ * If doing_update is TRUE, then a notify is sent to slaves. When
+ * loading values at other times (such as when first loading
+ * configuration options) there is no need to notify the slaves. If
+ * there is a desire to send a notify to the slaves, the
+ * gdm_update_config function should be used instead of calling these
+ * functions directly.
*/
static void
-_gdm_set_value_string (gchar *key, gchar *value, gboolean doing_update)
+_gdm_set_value_string (gchar *key, gchar *value_in, gboolean doing_update)
{
- gchar **setting = g_hash_table_lookup (val_hash, key);
- gchar *setting_copy;
+ gchar **setting = gdm_config_hash_lookup (val_hash, key);
+ gchar *setting_copy = NULL;
gchar *temp_string;
+ gchar *value;
+
+ if (! ve_string_empty (value_in))
+ value = value_in;
+ else
+ value = NULL;
if (setting == NULL) {
gdm_error ("Failure setting key %s to %s", key, value);
return;
}
- setting_copy = g_strdup (*setting);
- g_free (*setting);
+ if (*setting != NULL) {
+ /* Free old value */
+ setting_copy = g_strdup (*setting);
+ g_free (*setting);
+ }
+ /* User PATH */
if (is_key (key, GDM_KEY_PATH)) {
temp_string = gdm_read_default ("PATH=");
if (temp_string != NULL)
*setting = temp_string;
- else if (value == NULL)
- *setting = NULL;
- else
+ else if (value != NULL)
*setting = g_strdup (value);
+ else
+ *setting = NULL;
+ /* Root user PATH */
} else if (is_key (key, GDM_KEY_ROOT_PATH)) {
temp_string = gdm_read_default ("SUPATH=");
if (temp_string != NULL)
*setting = temp_string;
- else if (value == NULL)
- *setting = NULL;
- else
+ else if (value != NULL)
*setting = g_strdup (value);
+ else
+ *setting = NULL;
+ /* Location of Xsession script */
} else if (is_key (key, GDM_KEY_BASE_XSESSION)) {
- if (! ve_string_empty (value)) {
+ if (value != NULL) {
*setting = g_strdup (value);
} else {
gdm_info (_("%s: BaseXsession empty; using %s/gdm/Xsession"),
"gdm_config_parse",
EXPANDED_SYSCONFDIR);
- *setting = g_build_filename (EXPANDED_SYSCONFDIR, "gdm", "Xsession", NULL);
+ *setting = g_build_filename (EXPANDED_SYSCONFDIR,
+ "gdm", "Xsession", NULL);
}
+
+ /* Halt, Reboot, and Suspend commands */
} else if (is_key (key, GDM_KEY_HALT) ||
is_key (key, GDM_KEY_REBOOT) ||
is_key (key, GDM_KEY_SUSPEND)) {
- if (value == NULL)
- *setting = NULL;
+ if (value != NULL)
+ *setting = ve_get_first_working_command (value, FALSE);
else
- *setting = g_strdup (value);
+ *setting = NULL;
+
+ /* Console cannot handle these languages */
} else if (is_key (key, GDM_KEY_CONSOLE_CANNOT_HANDLE)) {
- if (value == NULL)
- *setting = "";
- else
+ if (value != NULL)
*setting = g_strdup (value);
+ else
+ *setting = "";
gdm_ok_console_language ();
+
+ /* Location of Xserver */
} else if (is_key (key, GDM_KEY_STANDARD_XSERVER)) {
- gchar *bin;
- bin = ve_first_word (value);
+ gchar *bin = NULL;
+
+ if (value != NULL)
+ bin = ve_first_word (value);
+
if G_UNLIKELY (ve_string_empty (bin) ||
access (bin, X_OK) != 0) {
gdm_info (_("%s: Standard X server not found; trying alternatives"),
@@ -869,13 +820,54 @@ _gdm_set_value_string (gchar *key, gchar *value, gboolean doing_update)
*setting = g_strdup ("/usr/X11R6/bin/X");
} else if (access ("/opt/X11R6/bin/X", X_OK) == 0) {
*setting = g_strdup ("/opt/X11R6/bin/X");
- } else if (ve_string_empty (GdmStandardXserver)) {
+ } else if (access ("/usr/bin/X11/X", X_OK) == 0) {
*setting = g_strdup ("/usr/bin/X11/X");
} else
*setting = g_strdup (value);
+ } else {
+ *setting = g_strdup (value);
}
+
+ /* Graphical Theme Directory */
+ } else if (is_key (key, GDM_KEY_GRAPHICAL_THEME_DIR)) {
+ if (value == NULL ||
+ ! g_file_test (value, G_FILE_TEST_IS_DIR))
+ {
+ *setting = g_strdup (GREETERTHEMEDIR);
+ } else {
+ *setting = g_strdup (value);
+ }
+
+ /* Graphical Theme */
+ } else if (is_key (key, GDM_KEY_GRAPHICAL_THEME)) {
+ if (value == NULL)
+ *setting = g_strdup ("circles");
+ else
+ *setting = g_strdup (value);
+
+ /* Default Welcome Message */
+ } else if (is_key (key, GDM_KEY_WELCOME)) {
+ if (value != NULL)
+ if (strcmp (ve_sure_string (value), GDM_DEFAULT_WELCOME_MSG) == 0)
+ *setting = g_strdup (_(GDM_DEFAULT_WELCOME_MSG));
+ else
+ *setting = g_strdup (value);
+ else
+ *setting = g_strdup (_(GDM_DEFAULT_WELCOME_MSG));
+
+ /* Default Remote Welcome Message */
+ } else if (is_key (key, GDM_KEY_REMOTE_WELCOME)) {
+ if (value != NULL)
+ if (strcmp (ve_sure_string (value), GDM_DEFAULT_REMOTE_WELCOME_MSG) == 0)
+ *setting = g_strdup (_(GDM_DEFAULT_REMOTE_WELCOME_MSG));
+ else
+ *setting = g_strdup (value);
+ else
+ *setting = g_strdup (_(GDM_DEFAULT_REMOTE_WELCOME_MSG));
+
+ /* All others */
} else {
- if (! ve_string_empty (value))
+ if (value != NULL)
*setting = g_strdup (value);
else {
if (is_key (key, GDM_KEY_GREETER))
@@ -889,21 +881,27 @@ _gdm_set_value_string (gchar *key, gchar *value, gboolean doing_update)
}
}
- if (doing_update == TRUE && strcmp (*setting, setting_copy) != 0) {
+ /* Handle update */
+ if (doing_update == TRUE &&
+ strcmp (ve_sure_string (*setting),
+ ve_sure_string (setting_copy)) != 0) {
+
if (is_key (key, GDM_KEY_GREETER))
notify_displays_string (GDM_NOTIFY_GREETER, *setting);
else if (is_key (key, GDM_KEY_REMOTE_GREETER))
notify_displays_string (GDM_NOTIFY_REMOTE_GREETER, *setting);
- else if (is_key (key, GDM_KEY_SOUND_ON_LOGIN_READY_FILE))
- notify_displays_string (GDM_NOTIFY_SOUND_ON_LOGIN_READY_FILE, *setting);
+ else if (is_key (key, GDM_KEY_SOUND_ON_LOGIN_FILE))
+ notify_displays_string (GDM_NOTIFY_SOUND_ON_LOGIN_FILE, *setting);
else if (is_key (key, GDM_KEY_SOUND_ON_LOGIN_SUCCESS_FILE))
notify_displays_string (GDM_NOTIFY_SOUND_ON_LOGIN_SUCCESS_FILE, *setting);
else if (is_key (key, GDM_KEY_SOUND_ON_LOGIN_FAILURE_FILE))
notify_displays_string (GDM_NOTIFY_SOUND_ON_LOGIN_FAILURE_FILE, *setting);
else if (is_key (key, GDM_KEY_GTK_MODULES_LIST))
notify_displays_string (GDM_NOTIFY_GTK_MODULES_LIST, *setting);
- }
+}
+
g_free (setting_copy);
+
if (*setting == NULL)
gdm_debug ("set config key %s to string <NULL>", key);
else
@@ -911,15 +909,15 @@ _gdm_set_value_string (gchar *key, gchar *value, gboolean doing_update)
}
void
-gdm_set_value_string (gchar *key, gchar *value)
+gdm_set_value_string (gchar *key, gchar *value_in)
{
- _gdm_set_value_string (key, value, FALSE);
+ _gdm_set_value_string (key, value_in, TRUE);
}
static void
_gdm_set_value_bool (gchar *key, gboolean value, gboolean doing_update)
{
- gboolean *setting = g_hash_table_lookup (val_hash, key);
+ gboolean *setting = gdm_config_hash_lookup (val_hash, key);
gboolean setting_copy = *setting;
gchar *temp_string;
@@ -931,6 +929,7 @@ _gdm_set_value_bool (gchar *key, gboolean value, gboolean doing_update)
return;
}
+ /* Password Required */
if (is_key (key, GDM_KEY_PASSWORD_REQUIRED)) {
temp_string = gdm_read_default ("PASSREQ=");
if (temp_string == NULL)
@@ -940,6 +939,8 @@ _gdm_set_value_bool (gchar *key, gboolean value, gboolean doing_update)
else
*setting = FALSE;
g_free (temp_string);
+
+ /* Allow root login */
} else if (is_key (key, GDM_KEY_ALLOW_REMOTE_ROOT)) {
temp_string = gdm_read_default ("CONSOLE=");
@@ -950,6 +951,8 @@ _gdm_set_value_bool (gchar *key, gboolean value, gboolean doing_update)
else
*setting = FALSE;
g_free (temp_string);
+
+ /* XDMCP */
#ifndef HAVE_LIBXDMCP
} else if (is_key (key, GDM_KEY_XMDCP)) {
if (value) {
@@ -961,6 +964,7 @@ _gdm_set_value_bool (gchar *key, gboolean value, gboolean doing_update)
*setting = value;
}
+ /* Handle update */
if (doing_update == TRUE && *setting != setting_copy) {
if (is_key (key, GDM_KEY_ALLOW_ROOT))
notify_displays_int (GDM_NOTIFY_ALLOW_ROOT, *setting);
@@ -989,13 +993,13 @@ _gdm_set_value_bool (gchar *key, gboolean value, gboolean doing_update)
void
gdm_set_value_bool (gchar *key, gboolean value)
{
- _gdm_set_value_bool (key, value, FALSE);
+ _gdm_set_value_bool (key, value, TRUE);
}
void
_gdm_set_value_int (gchar *key, gint value, gboolean doing_update)
{
- gint *setting = g_hash_table_lookup (val_hash, key);
+ gint *setting = gdm_config_hash_lookup (val_hash, key);
gint setting_copy = *setting;
if (setting == NULL) {
@@ -1003,21 +1007,35 @@ _gdm_set_value_int (gchar *key, gint value, gboolean doing_update)
return;
}
- if (is_key (key, GDM_KEY_TIMED_LOGIN_DELAY)) {
+ if (is_key (key, GDM_KEY_MAX_INDIRECT) ||
+ is_key (key, GDM_KEY_XINERAMA_SCREEN)) {
+ if (value < 0)
+ *setting = 0;
+ else
+ *setting = value;
+ } else if (is_key (key, GDM_KEY_TIMED_LOGIN_DELAY)) {
if (value < 5) {
gdm_info (_("%s: TimedLoginDelay is less than 5, defaulting to 5."), "gdm_config_parse");
*setting = 5;
} else
*setting = value;
- } else if (is_key (key, GDM_KEY_MAX_INDIRECT)) {
+ } else if (is_key (key, GDM_KEY_MAX_ICON_WIDTH) ||
+ is_key (key, GDM_KEY_MAX_ICON_HEIGHT)) {
if (value < 0)
- *setting = 0;
+ *setting = 128;
else
*setting = value;
- } else {
+ } else if (is_key (key, GDM_KEY_SCAN_TIME)) {
+ if (value < 1)
+ *setting = 1;
+ else
+ *setting = value;
+ }
+ else {
*setting = value;
}
+ /* Handle update */
if (doing_update == TRUE && *setting != setting_copy) {
if (is_key (key, GDM_KEY_RETRY_DELAY))
notify_displays_int (GDM_NOTIFY_RETRY_DELAY, *setting);
@@ -1031,7 +1049,86 @@ _gdm_set_value_int (gchar *key, gint value, gboolean doing_update)
void
gdm_set_value_int (gchar *key, gint value)
{
- _gdm_set_value_int (key, value, FALSE);
+ _gdm_set_value_int (key, value, TRUE);
+}
+
+/**
+ * gdm_set_value
+ *
+ * This functon is used to set the config values in the hash. This is called
+ * at initial config load time or when gdm_update_config is called to reload
+ * them. It adds translated strings to the hash with their proper keys
+ * (greeter/Welcome[cs] for example).
+ */
+static gboolean
+gdm_set_value (VeConfig *cfg, GdmConfigType *type, gchar *key, gboolean doing_update)
+{
+ gchar * realkey = gdm_config_hash_lookup (realkey_hash, key);
+ if (realkey == NULL)
+ return FALSE;
+
+ if (*type == CONFIG_BOOL) {
+ gboolean value = ve_config_get_bool (cfg, realkey);
+ _gdm_set_value_bool (key, value, doing_update);
+ return TRUE;
+ } else if (*type == CONFIG_INT) {
+ gint value = ve_config_get_int (cfg, realkey);
+ _gdm_set_value_int (key, value, doing_update);
+ return TRUE;
+ } else if (*type == CONFIG_STRING) {
+
+ /* Process translated strings */
+ if (is_key (key, GDM_KEY_WELCOME) ||
+ is_key (key, GDM_KEY_REMOTE_WELCOME)) {
+
+ GList *list = ve_config_get_keys (cfg, "greeter");
+ gchar *prefix, *basekey;
+
+ if (is_key (key, GDM_KEY_WELCOME)) {
+ basekey = g_strdup ("Welcome");
+ prefix = g_strdup ("Welcome[");
+ } else {
+ basekey = g_strdup ("RemoteWelcome");
+ prefix = g_strdup ("RemoteWelcome[");
+ }
+
+ /*
+ * Loop over translated keys and put all values into the hash
+ * Probably should loop through the hashs and delete any old values,
+ * but this just means that if a translation is deleted from the
+ * config, GDM won't forget about it until restart. I don't think
+ * this will happen, or be a real problem if it does.
+ */
+ while (list != NULL) {
+ if (g_str_has_prefix ((char *)list->data, prefix) &&
+ g_str_has_suffix ((char *)list->data, "]")) {
+
+ /* Build or reuse hash entry for each translated string */
+ gchar *transkey = g_strdup_printf ("greeter/%s", (char *)list->data);
+ gpointer transvalueptr = gdm_config_hash_lookup (val_hash, transkey);
+ gchar *transvalue;
+
+ if (transvalueptr == NULL) {
+ transvalueptr = g_new0 (gpointer, 1);
+ gdm_config_add_hash (transkey, transvalueptr, &string_type);
+ }
+ transvalue = ve_config_get_string (cfg, transkey);
+ _gdm_set_value_string (transkey, transvalue, TRUE);
+ }
+ list = list->next;
+ }
+ g_free (basekey);
+ g_free (prefix);
+
+ }
+
+ /* Handle non-translated strings as normal */
+ gchar *value = ve_config_get_string (cfg, realkey);
+ _gdm_set_value_string (key, value, doing_update);
+ return TRUE;
+ }
+
+ return FALSE;
}
/**
@@ -1051,7 +1148,7 @@ gdm_set_value_int (gchar *key, gint value)
gboolean
gdm_update_config (gchar* key)
{
- GdmConfigType *type = g_hash_table_lookup (type_hash, key);
+ GdmConfigType *type = gdm_config_hash_lookup (type_hash, key);
struct stat statbuf;
VeConfig* cfg;
int r;
@@ -1100,28 +1197,20 @@ gdm_update_config (gchar* key)
cfg = ve_config_new (config_file);
- if (*type == CONFIG_BOOL) {
- gboolean value = ve_config_get_bool (cfg, key);
- _gdm_set_value_bool (key, value, TRUE);
- } else if (*type == CONFIG_INT) {
- gint value = ve_config_get_int (cfg, key);
- _gdm_set_value_int (key, value, TRUE);
- } else if (*type == CONFIG_STRING) {
- gchar *value = ve_config_get_string (cfg, key);
- _gdm_set_value_string (key, value, TRUE);
- } else {
- ve_config_destroy (cfg);
- return FALSE;
- }
+ if (gdm_set_value (cfg, type, key, TRUE))
+ rc = TRUE;
+ else
+ rc = FALSE;
ve_config_destroy (cfg);
- return TRUE;
+ return rc;
}
/**
* check_logdir
* check_servauthdir
* display_exists
+ * gdm_find_x_server
*
* Support functions for gdm_config_parse.
*/
@@ -1190,6 +1279,26 @@ display_exists (int num)
return FALSE;
}
+/* If id == NULL, then get the first X server */
+GdmXserver *
+gdm_find_x_server (const gchar *id)
+{
+ GSList *li;
+
+ if (xservers == NULL)
+ return NULL;
+
+ if (id == NULL)
+ return xservers->data;
+
+ for (li = xservers; li != NULL; li = li->next) {
+ GdmXserver *svr = li->data;
+ if (strcmp (ve_sure_string (svr->id), ve_sure_string (id)) == 0)
+ return svr;
+ }
+ return NULL;
+}
+
/**
* gdm_load_config_option
*
@@ -1203,19 +1312,8 @@ gdm_load_config_option (gpointer key_in, gpointer value_in, gpointer data)
VeConfig *cfg = (VeConfig *)data;
if (type != NULL) {
- if (type != NULL && *type == CONFIG_BOOL) {
- gboolean value = ve_config_get_bool (cfg, key);
- gdm_set_value_bool (key, value);
- return;
- } else if (type != NULL && *type == CONFIG_INT) {
- gint value = ve_config_get_int (cfg, key);
- gdm_set_value_int (key, value);
- return;
- } else if (type != NULL && *type == CONFIG_STRING) {
- gchar *value = ve_config_get_string (cfg, key);
- gdm_set_value_string (key, value);
- return;
- }
+ if (gdm_set_value (cfg, type, key, FALSE))
+ return;
}
gdm_error ("Cannot set config option %s", key);
@@ -1615,6 +1713,21 @@ gdm_print_all_config (void)
}
/**
+ * gdm_is_valid_key
+ *
+ * Returns TRUE if the key is a valid key, FALSE otherwise.
+ */
+gboolean
+gdm_is_valid_key (gchar *key)
+{
+ GdmConfigType *type = gdm_config_hash_lookup (type_hash, key);
+ if (type == NULL)
+ return FALSE;
+
+ return TRUE;
+}
+
+/**
* gdm_signal_terminthup_was_notified
*
* returns TRUE if signal SIGTERM, SIGINT, or SIGHUP was received.
@@ -1784,11 +1897,11 @@ path_is_local (const char *path)
if (stat (path, &statbuf) == 0) {
char *type = filesystem_type ((char *)path, (char *)path, &statbuf);
- gboolean is_local = ((strcmp (type, "nfs") != 0) &&
- (strcmp (type, "afs") != 0) &&
- (strcmp (type, "autofs") != 0) &&
- (strcmp (type, "unknown") != 0) &&
- (strcmp (type, "ncpfs") != 0));
+ gboolean is_local = ((strcmp (ve_sure_string (type), "nfs") != 0) &&
+ (strcmp (ve_sure_string (type), "afs") != 0) &&
+ (strcmp (ve_sure_string (type), "autofs") != 0) &&
+ (strcmp (ve_sure_string (type), "unknown") != 0) &&
+ (strcmp (ve_sure_string (type), "ncpfs") != 0));
local = GINT_TO_POINTER (is_local ? 1 : -1);
g_hash_table_insert (fstype_hash, g_strdup (path), local);
}
@@ -1874,7 +1987,7 @@ gdm_get_facefile_from_global (const char *username,
guint uid)
{
char *picfile = NULL;
- char *facedir = gdm_get_value_string (GDM_KEY_FACE_DIR);
+ char *facedir = gdm_get_value_string (GDM_KEY_GLOBAL_FACE_DIR);
/* Try the global face directory */
@@ -1919,7 +2032,7 @@ gdm_get_session_exec (const char *session_name, gboolean check_try_exec)
return NULL;
}
- if (cached != NULL && strcmp (session_name, cached) == 0)
+ if (cached != NULL && strcmp (ve_sure_string (session_name), ve_sure_string (cached)) == 0)
return g_strdup (exec);
g_free (exec);
@@ -2038,8 +2151,8 @@ gdm_get_user_session_lang (char **usrsess, char **usrlang,
}
/* ugly workaround for migration */
- if ((strcmp (*usrsess, "Default.desktop") == 0 ||
- strcmp (*usrsess, "Default") == 0) &&
+ if ((strcmp (ve_sure_string (*usrsess), "Default.desktop") == 0 ||
+ strcmp (ve_sure_string (*usrsess), "Default") == 0) &&
! ve_is_prog_in_path ("Default.desktop",
gdm_get_value_string (GDM_KEY_SESSION_DESKTOP_DIR))) {
g_free (*usrsess);