summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog36
-rw-r--r--daemon/Makefile.am2
-rw-r--r--daemon/auth.c72
-rw-r--r--daemon/auth.h2
-rw-r--r--daemon/choose.c8
-rw-r--r--daemon/choose.h2
-rw-r--r--daemon/cookie.c3
-rw-r--r--daemon/cookie.h2
-rw-r--r--daemon/display.c13
-rw-r--r--daemon/display.h2
-rw-r--r--daemon/errorgui.c62
-rw-r--r--daemon/errorgui.h2
-rw-r--r--daemon/filecheck.c14
-rw-r--r--daemon/filecheck.h2
-rw-r--r--daemon/gdm-net.c3
-rw-r--r--daemon/gdm-net.h2
-rw-r--r--daemon/gdm.c1634
-rw-r--r--daemon/gdm.h208
-rw-r--r--daemon/gdmconfig.c2056
-rw-r--r--daemon/gdmconfig.h68
-rw-r--r--daemon/gdmconfig.obin0 -> 233516 bytes
-rw-r--r--daemon/getvt.c19
-rw-r--r--daemon/getvt.h2
-rw-r--r--daemon/misc.c56
-rw-r--r--daemon/misc.h2
-rw-r--r--daemon/server.c66
-rw-r--r--daemon/server.h4
-rw-r--r--daemon/slave.c1032
-rw-r--r--daemon/slave.h3
-rw-r--r--daemon/verify-crypt.c2
-rw-r--r--daemon/verify-pam.c46
-rw-r--r--daemon/verify-shadow.c2
-rw-r--r--daemon/verify.h2
-rw-r--r--daemon/xdmcp.c116
-rw-r--r--daemon/xdmcp.h2
-rw-r--r--gui/gdmXnestchooser.c2
-rw-r--r--gui/gdmchooser.c34
-rw-r--r--gui/gdmcomm.c2
-rw-r--r--gui/gdmdynamic.c2
-rw-r--r--gui/gdmflexiserver.c6
-rw-r--r--gui/gdmlogin.c102
-rw-r--r--gui/gdmphotosetup.c8
-rw-r--r--gui/gdmsetup.c140
-rw-r--r--gui/greeter/greeter.c56
-rw-r--r--gui/greeter/greeter_item_capslock.c8
-rw-r--r--utils/gdm-dmx-reconnect-proxy.c4
46 files changed, 3132 insertions, 2779 deletions
diff --git a/ChangeLog b/ChangeLog
index 7c518c14..9349e629 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,39 @@
+2005-11-03 Brian Cameron <brian.cameron@sun.com>
+
+ Redesign of daemon configuraton. Now all vicious-extensions
+ logic is in gdmconfig.[ch]. This greatly simplifies how the
+ UPDATE_CONFIG, and GET_CONFIG commands work and makes it
+ easier to update the way GDM handles configuration. Changed
+ ve_setenv/ve_unsetenv to g_setenv/g_unsetenv since GDM requires
+ a newer version of GLIB than could possibly cause the old
+ ve versions to get used.
+
+ * daemon/gdmconfig.[ch]: New logic for interacting with
+ vicious-extensions.
+ * daemon/gdm.h: Updated comments and changed the #define
+ for many configuration options so the naming is more
+ consistant. Now the #defines more closely match the
+ keys in gdm.conf and more consistantly use the underscore.
+ * daemon/auth.c, daemon/choose.c, daemon/cookie.c,
+ daemon/display.c, daemon/errorgui.c, daemon/gdm-net.c,
+ daemon/gdm.c, daemon/getvt.c, daemon/misc.c,
+ daemon/server.c, daemon/slave.c, daemon/verify-crypt.c,
+ daemon/verify-pam.c, daemon/verify-shadow.c,
+ daemon/xdmcp.c: Reorganized configuration.
+ * daemon/auth.h, daemon/cookie.h, daemon/display.h,
+ daemon/errorgui.h, daemon/filecheck.h, daemon/gdm-net.h,
+ daemon/getvt.h, daemon/misc.h, daemon/server.h,
+ daemon/slave.h, daemon/verify.h, daemon/xdmcp.h:
+ Now include gdmconfig.h instead of vicious.h and changed
+ "Gnome" to "GNOME" in comment.
+ * daemon/Makefile.am: Added new gdmconfig.[ch]
+ * gui/gdmXnestChooser.c, gui/gdmchooser.c, gui/gdmcomm.c,
+ gui/gdmdynamic.c, gui/gdmflexiserver.c, gui/gdmlogin.c,
+ gui/gdmphotosetup.c, gui/gdmsetup.c, gui/greeter/greeter.c,
+ gui/greeter/greeter_item_capslock.c,
+ utils/gdm-dmx-reconnect-proxy.c: Updated to reflect the
+ new configuration #defines.
+
2005-10-27 Dennis Cranston <dennis_cranston@yahoo.com>
Fix bug #314685, "Gdmsetup UI fixes". Based on redesign mockups
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index 0fe3b905..efb699fd 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -27,6 +27,8 @@ sbin_PROGRAMS = gdm-binary
gdm_binary_SOURCES = \
gdm.c \
gdm.h \
+ gdmconfig.c \
+ gdmconfig.h \
display.c \
display.h \
fstype.c \
diff --git a/daemon/auth.c b/daemon/auth.c
index ae79602b..6c784cbe 100644
--- a/daemon/auth.c
+++ b/daemon/auth.c
@@ -20,23 +20,23 @@
* support other XAuth types and possibly DECnet... */
#include <config.h>
-#include <glib/gi18n.h>
-#include <sys/types.h>
-#include <sys/socket.h>
+#include <stdlib.h>
#include <unistd.h>
-#include <sys/stat.h>
#include <fcntl.h>
#include <netdb.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
#include <netinet/in.h>
#include <X11/Xauth.h>
-
-#include <vicious.h>
+#include <glib/gi18n.h>
#include "gdm.h"
#include "cookie.h"
#include "misc.h"
#include "filecheck.h"
#include "auth.h"
+#include "gdmconfig.h"
/* Ensure we know about FamilyInternetV6 even if what we're compiling
against doesn't */
@@ -49,16 +49,6 @@
/* Local prototypes */
static FILE *gdm_auth_purge (GdmDisplay *d, FILE *af, gboolean remove_when_empty);
-/* Configuration option variables */
-extern gchar *GdmServAuthDir;
-extern gchar *GdmUserAuthDir;
-extern gchar *GdmUserAuthFile;
-extern gchar *GdmUserAuthFB;
-extern gint GdmUserMaxFile;
-extern gint GdmRelaxPerms;
-extern gboolean GdmDebug;
-extern gboolean GdmNeverPlaceCookiesOnNFS;
-
static void
display_add_error (GdmDisplay *d)
{
@@ -191,10 +181,10 @@ gdm_auth_secure_display (GdmDisplay *d)
if (d->server_uid != 0) {
int authfd;
- /* Note, Xnest can't use the ServAuthDir unless running as
+ /* Note, Xnest can't use the GDM_KEY_SERV_AUTHDIR unless running as
* root, which is rare anyway, unless the user is a wanker */
- d->authfile = g_build_filename (GdmUserAuthFB, ".gdmXXXXXX", NULL);
+ d->authfile = g_build_filename (gdm_get_value_string (GDM_KEY_USER_AUTHDIR_FALLBACK), ".gdmXXXXXX", NULL);
umask (077);
authfd = g_mkstemp (d->authfile);
@@ -202,7 +192,7 @@ gdm_auth_secure_display (GdmDisplay *d)
if G_UNLIKELY (authfd == -1) {
gdm_error (_("%s: Could not make new cookie file in %s"),
- "gdm_auth_secure_display", GdmUserAuthFB);
+ "gdm_auth_secure_display", gdm_get_value_string (GDM_KEY_USER_AUTHDIR_FALLBACK));
g_free (d->authfile);
d->authfile = NULL;
return FALSE;
@@ -221,7 +211,7 @@ gdm_auth_secure_display (GdmDisplay *d)
/* Make another authfile since the greeter can't read the server/user
* readable file */
- d->authfile_gdm = gdm_make_filename (GdmServAuthDir, d->name, ".Xauth");
+ d->authfile_gdm = gdm_make_filename (gdm_get_value_string (GDM_KEY_SERV_AUTHDIR), d->name, ".Xauth");
af_gdm = gdm_safe_fopen_w (d->authfile_gdm);
if G_UNLIKELY (af_gdm == NULL) {
@@ -238,7 +228,7 @@ gdm_auth_secure_display (GdmDisplay *d)
}
} else {
/* gdm and xserver authfile can be the same, server will run as root */
- d->authfile = gdm_make_filename (GdmServAuthDir, d->name, ".Xauth");
+ d->authfile = gdm_make_filename (gdm_get_value_string (GDM_KEY_SERV_AUTHDIR), d->name, ".Xauth");
af = gdm_safe_fopen_w (d->authfile);
if G_UNLIKELY (af == NULL) {
@@ -298,9 +288,9 @@ gdm_auth_secure_display (GdmDisplay *d)
return FALSE;
}
}
- ve_setenv ("XAUTHORITY", GDM_AUTHFILE (d), TRUE);
+ g_setenv ("XAUTHORITY", GDM_AUTHFILE (d), TRUE);
- if G_UNLIKELY (GdmDebug)
+ if G_UNLIKELY (gdm_get_value_bool (GDM_KEY_DEBUG))
gdm_debug ("gdm_auth_secure_display: Setting up access for %s - %d entries",
d->name, g_slist_length (d->auths));
@@ -506,7 +496,7 @@ get_local_auths (GdmDisplay *d)
}
- if G_UNLIKELY (GdmDebug)
+ if G_UNLIKELY (gdm_get_value_bool (GDM_KEY_DEBUG))
gdm_debug ("get_local_auths: Setting up access for %s - %d entries",
d->name, g_slist_length (auths));
@@ -571,6 +561,8 @@ gdm_auth_user_add (GdmDisplay *d, uid_t user, const char *homedir)
gint authfd;
FILE *af;
GSList *auths = NULL;
+ gchar *userauthdir;
+ gchar *userauthfile;
gboolean ret = TRUE;
gboolean automatic_tmp_dir = FALSE;
gboolean authdir_is_tmp_dir = FALSE;
@@ -595,13 +587,16 @@ gdm_auth_user_add (GdmDisplay *d, uid_t user, const char *homedir)
gdm_debug ("gdm_auth_user_add: Adding cookie for %d", user);
+ userauthdir = gdm_get_value_string (GDM_KEY_USER_AUTHDIR);
+ userauthfile = gdm_get_value_string (GDM_KEY_USER_AUTHFILE);
+
/* Determine whether UserAuthDir is specified. Otherwise ~user is used */
- if ( ! ve_string_empty (GdmUserAuthDir) &&
- strcmp (GdmUserAuthDir, "~") != 0) {
- if (strncmp (GdmUserAuthDir, "~/", 2) == 0) {
- authdir = g_build_filename (homedir, &GdmUserAuthDir[2], NULL);
+ if ( ! ve_string_empty (userauthdir) &&
+ strcmp (userauthdir, "~") != 0) {
+ if (strncmp (userauthdir, "~/", 2) == 0) {
+ authdir = g_build_filename (homedir, &userauthdir[2], NULL);
} else {
- authdir = g_strdup (GdmUserAuthDir);
+ authdir = g_strdup (userauthdir);
automatic_tmp_dir = TRUE;
authdir_is_tmp_dir = TRUE;
}
@@ -618,7 +613,7 @@ try_user_add_again:
if (authdir == NULL)
d->userauth = NULL;
else
- d->userauth = g_build_filename (authdir, GdmUserAuthFile, NULL);
+ d->userauth = g_build_filename (authdir, userauthfile, NULL);
user_auth_exists = (d->userauth != NULL &&
access (d->userauth, F_OK) == 0);
@@ -631,8 +626,9 @@ try_user_add_again:
/* first the standard paranoia check (this checks the home dir
* too which is useful here) */
- ! gdm_file_check ("gdm_auth_user_add", user, authdir, GdmUserAuthFile,
- TRUE, FALSE, GdmUserMaxFile, GdmRelaxPerms) ||
+ ! gdm_file_check ("gdm_auth_user_add", user, authdir, userauthfile,
+ TRUE, FALSE, gdm_get_value_int (GDM_KEY_USER_MAX_FILE),
+ gdm_get_value_int (GDM_KEY_RELAX_PERM)) ||
/* now the auth file checking routine */
! gdm_auth_file_check ("gdm_auth_user_add", user, d->userauth, TRUE /* absentok */, NULL) ||
@@ -643,7 +639,8 @@ try_user_add_again:
/* try opening as root, if we can't open as root,
then this is a NFS mounted directory with root squashing,
and we don't want to write cookies over NFS */
- (GdmNeverPlaceCookiesOnNFS && ! try_open_read_as_root (d->userauth))) {
+ (gdm_get_value_bool (GDM_KEY_NEVER_PLACE_COOKIES_ON_NFS) &&
+ ! try_open_read_as_root (d->userauth))) {
/* if the userauth file didn't exist and we were looking at it,
it likely exists now but empty, so just whack it
@@ -653,14 +650,14 @@ try_user_add_again:
if ( ! user_auth_exists && d->userauth != NULL)
unlink (d->userauth);
- /* No go. Let's create a fallback file in GdmUserAuthFB (/tmp)
- * or perhaps GdmUserAuth directory (usually would be /tmp) */
+ /* No go. Let's create a fallback file in GDM_KEY_USER_AUTHDIR_FALLBACK (/tmp)
+ * or perhaps userauthfile directory (usually would be /tmp) */
d->authfb = TRUE;
g_free (d->userauth);
if (authdir_is_tmp_dir && authdir != NULL)
d->userauth = g_build_filename (authdir, ".gdmXXXXXX", NULL);
else
- d->userauth = g_build_filename (GdmUserAuthFB, ".gdmXXXXXX", NULL);
+ d->userauth = g_build_filename (gdm_get_value_string (GDM_KEY_USER_AUTHDIR_FALLBACK), ".gdmXXXXXX", NULL);
authfd = g_mkstemp (d->userauth);
if G_UNLIKELY (authfd < 0 && authdir_is_tmp_dir) {
@@ -845,7 +842,8 @@ gdm_auth_user_remove (GdmDisplay *d, uid_t user)
* to it. So we better play it safe... */
if G_UNLIKELY ( ! gdm_file_check ("gdm_auth_user_remove", user, authdir, authfile,
- TRUE, FALSE, GdmUserMaxFile, GdmRelaxPerms) ||
+ TRUE, FALSE, gdm_get_value_int (GDM_KEY_USER_MAX_FILE),
+ gdm_get_value_int (GDM_KEY_RELAX_PERM)) ||
/* be even paranoider with permissions */
! gdm_auth_file_check ("gdm_auth_user_remove", user, d->userauth, FALSE /* absentok */, NULL)) {
g_free (authdir);
diff --git a/daemon/auth.h b/daemon/auth.h
index 6c687a9c..f01ebcbf 100644
--- a/daemon/auth.h
+++ b/daemon/auth.h
@@ -1,4 +1,4 @@
-/* GDM - The Gnome Display Manager
+/* GDM - The GNOME Display Manager
* Copyright (C) 1998, 1999, 2000 Martin K. Petersen <mkp@mkp.net>
*
* This program is free software; you can redistribute it and/or modify
diff --git a/daemon/choose.c b/daemon/choose.c
index 0511af97..2410be6a 100644
--- a/daemon/choose.c
+++ b/daemon/choose.c
@@ -45,10 +45,6 @@
static gint ipending = 0;
static GSList *indirect = NULL;
-/* Tunables */
-extern gint GdmMaxIndirect; /* Maximum pending indirects, i.e. simultaneous choosing sessions */
-extern gint GdmMaxIndirectWait; /* Maximum age before a pending session is removed from the list */
-
static guint indirect_id = 1;
static gboolean
@@ -150,7 +146,7 @@ gdm_choose_data (const char *data)
GdmIndirectDisplay *idisp = li->data;
if (idisp->id == id) {
/* whack the oldest if more then allowed */
- while (ipending >= GdmMaxIndirect &&
+ while (ipending >= gdm_get_value_int (GDM_KEY_MAX_INDIRECT) &&
remove_oldest_pending ())
;
@@ -335,7 +331,7 @@ gdm_choose_indirect_lookup (struct sockaddr_in *clnt_sa)
continue;
if (id->acctime > 0 &&
- curtime > id->acctime + GdmMaxIndirectWait) {
+ curtime > id->acctime + gdm_get_value_int (GDM_KEY_MAX_WAIT_INDIRECT)) {
#ifdef ENABLE_IPV6
if (clnt_sa->ss_family == AF_INET6) {
char buffer6[INET6_ADDRSTRLEN];
diff --git a/daemon/choose.h b/daemon/choose.h
index 0c804316..625077de 100644
--- a/daemon/choose.h
+++ b/daemon/choose.h
@@ -1,4 +1,4 @@
-/* GDM - The Gnome Display Manager
+/* GDM - The GNOME Display Manager
* Copyright (C) 1998, 1999, 2000 Martin K. Petersen <mkp@mkp.net>
*
* This program is free software; you can redistribute it and/or modify
diff --git a/daemon/cookie.c b/daemon/cookie.c
index 0003067d..830534fa 100644
--- a/daemon/cookie.c
+++ b/daemon/cookie.c
@@ -35,11 +35,12 @@
#include <fcntl.h>
#include <sys/time.h>
#include <unistd.h>
-#include <vicious.h>
+#include <errno.h>
#include "gdm.h"
#include "md5.h"
#include "cookie.h"
+#include "gdmconfig.h"
#define MAXBUFFERSIZE 1024
diff --git a/daemon/cookie.h b/daemon/cookie.h
index 57722431..836d7162 100644
--- a/daemon/cookie.h
+++ b/daemon/cookie.h
@@ -1,4 +1,4 @@
-/* GDM - The Gnome Display Manager
+/* GDM - The GNOME Display Manager
* Copyright (C) 1998, 1999, 2000 Martin K. Petersen <mkp@mkp.net>
*
* This program is free software; you can redistribute it and/or modify
diff --git a/daemon/display.c b/daemon/display.c
index 29e5f76b..f75806c7 100644
--- a/daemon/display.c
+++ b/daemon/display.c
@@ -24,8 +24,7 @@
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
-
-#include <vicious.h>
+#include <errno.h>
#include "gdm.h"
#include "gdm-net.h"
@@ -37,9 +36,9 @@
#include "choose.h"
#include "auth.h"
#include "gdm-net.h"
+#include "gdmconfig.h"
/* External vars */
-extern gboolean GdmXdmcp;
extern gint xdmcp_sessions;
extern gint flexi_servers;
extern gint xdmcp_pending;
@@ -201,10 +200,8 @@ wait_again:
/* rekill the slave to tell it to
hurry up and die if we're getting
killed ourselves */
- if (ve_signal_was_notified (SIGTERM) ||
- ve_signal_was_notified (SIGINT) ||
- ve_signal_was_notified (SIGHUP) ||
- t + 10 <= time (NULL)) {
+ if ((gdm_signal_terminthup_was_notified()) ||
+ (t + 10 <= time (NULL))) {
gdm_debug ("whack_old_slave: GOT ANOTHER SIGTERM (or it was 10 secs already), killing slave again with SIGKILL");
t = time (NULL);
kill (d->slavepid, SIGKILL);
@@ -294,7 +291,7 @@ gdm_display_manage (GdmDisplay *d)
d->slavepid = getpid ();
/* Close XDMCP fd in slave process */
- if (GdmXdmcp)
+ if (gdm_get_value_bool (GDM_KEY_XDMCP))
gdm_xdmcp_close ();
gdm_connection_close (fifoconn);
diff --git a/daemon/display.h b/daemon/display.h
index 7d6200cc..07fa89a3 100644
--- a/daemon/display.h
+++ b/daemon/display.h
@@ -1,4 +1,4 @@
-/* GDM - The Gnome Display Manager
+/* GDM - The GNOME Display Manager
* Copyright (C) 1998, 1999, 2000 Martin K. Petersen <mkp@mkp.net>
*
* This program is free software; you can redistribute it and/or modify
diff --git a/daemon/errorgui.c b/daemon/errorgui.c
index e0769b5f..c8f49fda 100644
--- a/daemon/errorgui.c
+++ b/daemon/errorgui.c
@@ -20,9 +20,6 @@
* and the user's session scripts. */
#include <config.h>
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-#include <gdk/gdkx.h>
#include <unistd.h>
#include <syslog.h>
#include <grp.h>
@@ -34,12 +31,14 @@
#include <sys/types.h>
#include <signal.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkx.h>
+
#include "gdm.h"
#include "misc.h"
#include "auth.h"
-
-#include <vicious.h>
-
+#include "gdmconfig.h"
#include "errorgui.h"
/* set in the main function */
@@ -47,16 +46,6 @@ extern char **stored_argv;
extern int stored_argc;
extern char *stored_path;
-/* Configuration option variables */
-extern gchar *GdmUser;
-extern gchar *GdmServAuthDir;
-extern gchar *GdmGtkRC;
-extern gchar *GdmGtkTheme;
-extern uid_t GdmUserId;
-extern gid_t GdmGroupId;
-extern gboolean GdmAddGtkModules;
-extern gchar *GdmGtkModulesList;
-
static int screenx = 0;
static int screeny = 0;
static int screenwidth = 0;
@@ -213,9 +202,9 @@ setup_dialog (GdmDisplay *d, const char *name, int closefdexcept, gboolean set_g
gdm_open_dev_null (O_RDWR); /* open stderr - fd 2 */
if (set_gdm_ids) {
- setgid (GdmGroupId);
- initgroups (GdmUser, GdmGroupId);
- setuid (GdmUserId);
+ setgid (gdm_get_gdmgid());
+ initgroups (gdm_get_value_string (GDM_KEY_USER), gdm_get_gdmgid());
+ setuid (gdm_get_gdmuid());
pw = NULL;
} else {
pw = getpwuid (uid);
@@ -228,51 +217,52 @@ setup_dialog (GdmDisplay *d, const char *name, int closefdexcept, gboolean set_g
openlog ("gdm", LOG_PID, LOG_DAEMON);
- ve_setenv ("LOGNAME", GdmUser, TRUE);
- ve_setenv ("USER", GdmUser, TRUE);
- ve_setenv ("USERNAME", GdmUser, TRUE);
+ g_setenv ("LOGNAME", gdm_get_value_string (GDM_KEY_USER), TRUE);
+ g_setenv ("USER", gdm_get_value_string (GDM_KEY_USER), TRUE);
+ g_setenv ("USERNAME", gdm_get_value_string (GDM_KEY_USER), TRUE);
- ve_setenv ("DISPLAY", d->name, TRUE);
- ve_unsetenv ("XAUTHORITY");
+ g_setenv ("DISPLAY", d->name, TRUE);
+ g_unsetenv ("XAUTHORITY");
gdm_auth_set_local_auth (d);
/* sanity env stuff */
- ve_setenv ("SHELL", "/bin/sh", TRUE);
+ g_setenv ("SHELL", "/bin/sh", TRUE);
/* set HOME to /, we don't need no stinking HOME anyway */
if (pw == NULL ||
ve_string_empty (pw->pw_dir))
- ve_setenv ("HOME", ve_sure_string (GdmServAuthDir), TRUE);
+ g_setenv ("HOME", ve_sure_string (gdm_get_value_string (GDM_KEY_SERV_AUTHDIR)), TRUE);
else
- ve_setenv ("HOME", pw->pw_dir, TRUE);
+ g_setenv ("HOME", pw->pw_dir, TRUE);
argv = g_new0 (char *, 3);
argv[0] = (char *)name;
argc = 1;
if ( ! inhibit_gtk_modules &&
- GdmAddGtkModules &&
- ! ve_string_empty (GdmGtkModulesList)) {
- argv[1] = g_strdup_printf ("--gtk-module=%s", GdmGtkModulesList);
+ gdm_get_value_bool (GDM_KEY_ADD_GTK_MODULES) &&
+ ! ve_string_empty (gdm_get_value_string (GDM_KEY_GTK_MODULES_LIST))) {
+ argv[1] = g_strdup_printf ("--gtk-module=%s", gdm_get_value_string (GDM_KEY_GTK_MODULES_LIST));
argc = 2;
}
if (inhibit_gtk_modules) {
- ve_unsetenv ("GTK_MODULES");
+ g_unsetenv ("GTK_MODULES");
}
gtk_init (&argc, &argv);
if ( ! inhibit_gtk_themes) {
const char *theme_name;
+ gchar *gtkrc = gdm_get_value_string (GDM_KEY_GTKRC);
- if ( ! ve_string_empty (GdmGtkRC) &&
- access (GdmGtkRC, R_OK) == 0)
- gtk_rc_parse (GdmGtkRC);
+ if ( ! ve_string_empty (gtkrc) &&
+ access (gtkrc, R_OK) == 0)
+ gtk_rc_parse (gtkrc);
theme_name = d->theme_name;
if (ve_string_empty (theme_name))
- theme_name = GdmGtkTheme;
+ theme_name = gdm_get_value_string (GDM_KEY_GTK_THEME);
if ( ! ve_string_empty (theme_name)) {
gchar *theme_dir = gtk_rc_get_theme_dir ();
char *theme = g_strdup_printf ("%s/%s/gtk-2.0/gtkrc", theme_dir, theme_name);
@@ -396,7 +386,7 @@ gdm_error_box_full (GdmDisplay *d, GtkMessageType type, const char *error,
}
setup_dialog (d, "gtk-error-box", -1,
- (uid == 0 || uid == GdmUserId) /* set_gdm_ids */,
+ (uid == 0 || uid == gdm_get_gdmuid()) /* set_gdm_ids */,
uid);
loc = gdm_locale_to_utf8 (error);
diff --git a/daemon/errorgui.h b/daemon/errorgui.h
index ef2e20cd..65cf054b 100644
--- a/daemon/errorgui.h
+++ b/daemon/errorgui.h
@@ -1,4 +1,4 @@
-/* GDM - The Gnome Display Manager
+/* GDM - The GNOME Display Manager
* Copyright (C) 1998, 1999, 2000 Martin K. Petersen <mkp@mkp.net>
*
* This program is free software; you can redistribute it and/or modify
diff --git a/daemon/filecheck.c b/daemon/filecheck.c
index 0ceedacf..c51771c4 100644
--- a/daemon/filecheck.c
+++ b/daemon/filecheck.c
@@ -21,13 +21,9 @@
#include <syslog.h>
#include <sys/stat.h>
-#include <vicious.h>
-
#include "gdm.h"
#include "filecheck.h"
-
-extern int GdmUserMaxFile;
-extern gboolean GdmCheckDirOwner;
+#include "gdmconfig.h"
/**
* gdm_file_check:
@@ -67,12 +63,12 @@ gdm_file_check (const gchar *caller, uid_t user, const gchar *dir,
}
/* Check if dir is owned by the user ...
- Only, if GdmCheckDirOwner is true (default)
+ Only, if GDM_KEY_CHECK_DIR_OWNER is true (default)
This is a "hack" for directories not owned by
the user.
2004-06-22, Andreas Schubert, MATHEMA Software GmbH */
- if G_UNLIKELY (GdmCheckDirOwner && (statbuf.st_uid != user)) {
+ if G_UNLIKELY (gdm_get_value_bool (GDM_KEY_CHECK_DIR_OWNER) && (statbuf.st_uid != user)) {
syslog (LOG_WARNING, _("%s: %s is not owned by uid %d."), caller, dir, user);
return FALSE;
}
@@ -153,6 +149,7 @@ gboolean
gdm_auth_file_check (const gchar *caller, uid_t user, const gchar *authfile, gboolean absentok, struct stat *s)
{
struct stat statbuf;
+ gint usermaxfile;
int r;
if (ve_string_empty (authfile))
@@ -187,8 +184,9 @@ gdm_auth_file_check (const gchar *caller, uid_t user, const gchar *authfile, gbo
return FALSE;
}
+ usermaxfile = gdm_get_value_int (GDM_KEY_USER_MAX_FILE);
/* ... and smaller than sysadmin specified limit. */
- if G_UNLIKELY (GdmUserMaxFile && statbuf.st_size > GdmUserMaxFile) {
+ if G_UNLIKELY (usermaxfile && statbuf.st_size > usermaxfile) {
syslog (LOG_WARNING, _("%s: %s is bigger than sysadmin specified maximum file size."),
caller, authfile);
return FALSE;
diff --git a/daemon/filecheck.h b/daemon/filecheck.h
index 6a0b239b..7d71a691 100644
--- a/daemon/filecheck.h
+++ b/daemon/filecheck.h
@@ -1,4 +1,4 @@
-/* GDM - The Gnome Display Manager
+/* GDM - The GNOME Display Manager
* Copyright (C) 1998, 1999, 2000 Martin K. Petersen <mkp@mkp.net>
*
* This program is free software; you can redistribute it and/or modify
diff --git a/daemon/gdm-net.c b/daemon/gdm-net.c
index 1e22808a..a33ef703 100644
--- a/daemon/gdm-net.c
+++ b/daemon/gdm-net.c
@@ -32,11 +32,10 @@
#include <errno.h>
#include <syslog.h>
-#include <vicious.h>
-
#include "gdm.h"
#include "misc.h"
#include "gdm-net.h"
+#include "gdmconfig.h"
/* Kind of a weird setup, new connections whack old connections */
#define MAX_CONNECTIONS 10
diff --git a/daemon/gdm-net.h b/daemon/gdm-net.h
index d482473c..6999f0fb 100644
--- a/daemon/gdm-net.h
+++ b/daemon/gdm-net.h
@@ -1,4 +1,4 @@
-/* GDM - The Gnome Display Manager
+/* GDM - The GNOME Display Manager
* Copyright (C) 1998, 1999, 2000 Martin K. Petersen <mkp@mkp.net>
*
* This program is free software; you can redistribute it and/or modify
diff --git a/daemon/gdm.c b/daemon/gdm.c
index 66223056..bc962923 100644
--- a/daemon/gdm.c
+++ b/daemon/gdm.c
@@ -47,6 +47,7 @@
#include <X11/Xauth.h>
#include <glib/gi18n.h>
+/* Needed for signal handling */
#include <vicious.h>
#include "gdm.h"
@@ -61,6 +62,7 @@
#include "gdm-net.h"
#include "cookie.h"
#include "filecheck.h"
+#include "gdmconfig.h"
#define DYNAMIC_ADD 0
#define DYNAMIC_RELEASE 1
@@ -70,8 +72,9 @@
#include <libdevinfo.h>
#endif /* HAVE_LOGINDEVPERM */
+extern GSList *displays;
+
/* Local functions */
-static void gdm_config_parse (void);
static void gdm_handle_message (GdmConnection *conn,
const char *msg,
gpointer data);
@@ -93,14 +96,9 @@ static void handle_flexi_server (GdmConnection *conn,
const char *xnest_cookie);
/* Global vars */
-GSList *displays = NULL; /* List of displays managed */
-GSList *xservers = NULL; /* List of x server definitions */
-gint high_display_num = 0; /* Highest local non-flexi display */
gint xdmcp_sessions = 0; /* Number of remote sessions */
gint xdmcp_pending = 0; /* Number of pending remote sessions */
gint flexi_servers = 0; /* Number of flexi servers */
-uid_t GdmUserId; /* Userid under which gdm should run */
-gid_t GdmGroupId; /* Groupid under which gdm should run */
pid_t extra_process = 0; /* An extra process. Used for quickie
processes, so that they also get whacked */
int extra_status = 0; /* Last status from the last extra process */
@@ -142,117 +140,11 @@ gboolean gdm_in_final_cleanup = FALSE;
GdmLogoutAction safe_logout_action = GDM_LOGOUT_ACTION_NONE;
-/* Configuration options */
-gchar *GdmUser = NULL;
-gchar *GdmGroup = NULL;
-gchar *GdmGtkRC = NULL;
-gchar *GdmGtkTheme = NULL;
-gchar *GdmSessDir = NULL;
-gchar *GdmXsession = NULL;
-gchar *GdmDefaultSession = NULL;
-gchar *GdmAutomaticLogin = NULL;
-gboolean GdmAutomaticLoginEnable = FALSE;
-
-/* The SDTLOGIN feature is Solaris specific, and causes the Xserver to be
- * run with user permissionsinstead of as root, which adds security but
- * disables the AlwaysRestartServer option as highlighted in the gdm
- * documentation */
-#ifdef sun
-gboolean GdmAlwaysRestartServer = TRUE;
-#else
-gboolean GdmAlwaysRestartServer = FALSE;
-#endif
-gchar *GdmConfigurator = NULL;
-gboolean GdmConfigAvailable = FALSE;
-gboolean GdmSystemMenu = FALSE;
-gboolean GdmChooserButton = FALSE;
-gboolean GdmBrowser = FALSE;
-gboolean GdmAddGtkModules = FALSE;
-gboolean GdmDoubleLoginWarning = TRUE;
-gboolean GdmAlwaysLoginCurrentSession = FALSE;
-gboolean GdmDisplayLastLogin = TRUE;
-gchar *GdmGlobalFaceDir = NULL;
-gint GdmXineramaScreen = 0;
-gchar *GdmGreeter = NULL;
-gchar *GdmRemoteGreeter = NULL;
-gchar *GdmGtkModulesList = NULL;
-gchar *GdmChooser = NULL;
-gchar *GdmLogDir = NULL;
-gchar *GdmDisplayInit = NULL;
-gchar *GdmPostLogin = NULL;
-gchar *GdmPreSession = NULL;
-gchar *GdmPostSession = NULL;
-gchar *GdmFailsafeXServer = NULL;
-gchar *GdmXKeepsCrashing = NULL;
-gchar *GdmHalt = NULL;
-gchar *GdmHaltReal = NULL;
-gchar *GdmReboot = NULL;
-gchar *GdmRebootReal = NULL;
-gchar *GdmSuspend = NULL;
-gchar *GdmSuspendReal = NULL;
-gchar *GdmServAuthDir = NULL;
-gboolean GdmMulticast;
-gchar *GdmMulticastAddr;
-gchar *GdmUserAuthDir = NULL;
-gboolean GdmNeverPlaceCookiesOnNFS = TRUE;
-gboolean GdmPasswordRequired = FALSE;
-gchar *GdmUserAuthFile = NULL;
-gchar *GdmUserAuthFB = NULL;
-gchar *GdmPidFile = NULL;
-gchar *GdmDefaultPath = NULL;
-gchar *GdmRootPath = NULL;
-gboolean GdmKillInitClients = FALSE;
-gint GdmUserMaxFile = 0;
-gboolean GdmXdmcp = FALSE;
-gint GdmDispPerHost = 0;
-gint GdmMaxPending = 0;
-gint GdmMaxManageWait = 0;
-gint GdmMaxSessions = 0;
-gint GdmPort = 0;
-gboolean GdmIndirect = FALSE;
-gint GdmMaxIndirect = 0;
-gint GdmMaxIndirectWait = 0;
-gint GdmPingInterval = 0;
-gchar *GdmWilling = NULL;
-gboolean GdmXdmcpProxy = FALSE;
-gchar *GdmXdmcpProxyCommand = NULL;
-gchar *GdmXdmcpProxyReconnect = NULL;
-gboolean GdmDebug = FALSE;
-gboolean GdmDebugGestures = FALSE;
-gboolean GdmAllowRoot = FALSE;
-gboolean GdmAllowRemoteRoot = FALSE;
-gboolean GdmAllowRemoteAutoLogin = FALSE;
-gint GdmRelaxPerms = 0;
-gboolean GdmCheckDirOwner = TRUE;
-gint GdmRetryDelay = 0;
-gchar *GdmTimedLogin = NULL;
-gboolean GdmTimedLoginEnable = FALSE;
-gint GdmTimedLoginDelay = 0;
-gchar *GdmStandardXServer = NULL;
-gint GdmFlexibleXServers = 5;
-gboolean GdmDynamicXServers = FALSE;
-gchar *GdmXnest = NULL;
-int GdmFirstVT = 7;
-gboolean GdmVTAllocation = TRUE;
-gboolean GdmDisallowTCP = TRUE;
-gchar *GdmSoundProgram = NULL;
-gchar *GdmSoundOnLoginReadyFile = NULL;
-gboolean GdmSoundOnLoginSuccess = FALSE;
-gchar *GdmSoundOnLoginSuccessFile = NULL;
-gboolean GdmSoundOnLoginFailure = FALSE;
-gchar *GdmSoundOnLoginFailureFile = NULL;
-gchar *GdmConsoleCannotHandle = NULL;
-gboolean GdmConsoleNotify = TRUE;
-
/* set in the main function */
char **stored_argv = NULL;
int stored_argc = 0;
-static VeConfig *cfg;
-
-static gchar *config_file = NULL;
-static time_t config_file_mtime = 0;
-
+extern gchar *config_file;
static gboolean gdm_restart_mode = FALSE;
static GMainLoop *main_loop = NULL;
@@ -280,723 +172,6 @@ mark_display_exists (int num)
return FALSE;
}
-
-static gboolean
-display_exists (int num)
-{
- GSList *li;
-
- for (li = displays; li != NULL; li = li->next) {
- GdmDisplay *disp = li->data;
- if (disp->dispnum == num)
- return TRUE;
- }
- return FALSE;
-}
-
-static int
-compare_displays (gconstpointer a, gconstpointer b)
-{
- const GdmDisplay *d1 = a;
- const GdmDisplay *d2 = b;
- if (d1->dispnum < d2->dispnum)
- return -1;
- else if (d1->dispnum > d2->dispnum)
- return 1;
- else
- return 0;
-}
-
-static void
-check_servauthdir (struct stat *statbuf)
-{
- int r;
-
- /* Enter paranoia mode */
- VE_IGNORE_EINTR (r = stat (GdmServAuthDir, statbuf));
- if G_UNLIKELY (r < 0) {
- char *s = g_strdup_printf
- (C_(N_("Server Authorization directory "
- "(daemon/ServAuthDir) is set to %s "
- "but this does not exist. Please "
- "correct GDM configuration and "
- "restart GDM.")), GdmServAuthDir);
- if (GdmConsoleNotify)
- gdm_text_message_dialog (s);
- GdmPidFile = NULL;
- g_free (s);
- gdm_fail (_("%s: Authdir %s does not exist. Aborting."), "gdm_config_parse", GdmServAuthDir);
- }
-
- if G_UNLIKELY (! S_ISDIR (statbuf->st_mode)) {
- char *s = g_strdup_printf
- (C_(N_("Server Authorization directory "
- "(daemon/ServAuthDir) is set to %s "
- "but this is not a directory. Please "
- "correct GDM configuration and "
- "restart GDM.")), GdmServAuthDir);
- if (GdmConsoleNotify)
- gdm_text_message_dialog (s);
- GdmPidFile = NULL;
- g_free (s);
- gdm_fail (_("%s: Authdir %s is not a directory. Aborting."), "gdm_config_parse", GdmServAuthDir);
- }
-}
-
-static void
-check_logdir (void)
-{
- struct stat statbuf;
- int r;
-
- VE_IGNORE_EINTR (r = stat (GdmLogDir, &statbuf));
- if (r < 0 ||
- ! S_ISDIR (statbuf.st_mode)) {
- gdm_error (_("%s: Logdir %s does not exist or isn't a directory. Using ServAuthDir %s."), "gdm_config_parse",
- GdmLogDir, GdmServAuthDir);
- g_free (GdmLogDir);
- GdmLogDir = g_strdup (GdmServAuthDir);
- }
-}
-
-/**
- * gdm_get_config:
- *
- * Get config file. If GDM is configured with the --with-configdir option
- * then GDM will first look in the sysconfdir location. If the gdm.conf
- * file is not found, it will look in the location specified via
- * --with-configdir. This allows a configuration file to be placed on
- * a mounted directory on a network with multiple machines for a common
- * configuration file. The two directories will be the same if the
- * --with-configdir option is not specified. Checking the same directory
- * twice is a bit ugly, but will only happen in a rare error condition -
- * when the gdm.conf file can't be found.
- */
-static VeConfig *
-gdm_get_config (struct stat *statbuf)
-{
- int r;
-
- /* Not NULL if config_file was set by command-line option. */
- if (config_file != NULL) {
- VE_IGNORE_EINTR (r = stat (config_file, statbuf));
- } else {
- /* First check sysconfdir */
- VE_IGNORE_EINTR (r = stat (GDM_SYSCONFDIR_CONFIG_FILE, statbuf));
- if (r < 0) {
-
- /* If not found, then check directory for a multi system network */
- VE_IGNORE_EINTR (r = stat (GDM_INSTALL_CONFIG_FILE, statbuf));
- if (r < 0) {
- gdm_error (_("%s: No GDM configuration file: %s. Using defaults."),
- "gdm_config_parse", GDM_INSTALL_CONFIG_FILE);
- } else {
- config_file = GDM_INSTALL_CONFIG_FILE;
- }
- } else {
- config_file = GDM_SYSCONFDIR_CONFIG_FILE;
- }
- }
- return ve_config_new (config_file);
-}
-
-/**
- * gdm_config_parse:
- *
- * Parse the configuration file and warn about bad permissions etc.
- */
-
-static void
-gdm_config_parse (void)
-{
- struct passwd *pwent;
- struct group *grent;
- struct stat statbuf;
- gchar *bin;
- VeConfig *cfg;
- GList *list, *li;
- int r;
-
- displays = NULL;
- high_display_num = 0;
-
- cfg = gdm_get_config (&statbuf);
- config_file_mtime = statbuf.st_mtime;
-
- /* get and cache the OKness of a language */
- GdmConsoleCannotHandle = ve_config_get_string (cfg, GDM_KEY_CONSOLE_CANNOT_HANDLE);
- if (GdmConsoleCannotHandle == NULL)
- GdmConsoleCannotHandle = g_strdup ("");
- gdm_ok_console_language ();
-
- GdmChooser = ve_config_get_string (cfg, GDM_KEY_CHOOSER);
-
- GdmDefaultPath = NULL;
- GdmRootPath = NULL;
-
- /* First try to read values from /etc/default/login */
- VE_IGNORE_EINTR (r = stat ("/etc/default/login", &statbuf));
- if (r < 0) {
- GdmPasswordRequired = ve_config_get_bool (cfg, GDM_KEY_PASSWORDREQUIRED);
- GdmAllowRemoteRoot = ve_config_get_bool (cfg, GDM_KEY_ALLOWREMOTEROOT);
- } else {
- gchar *temp;
-
- GdmDefaultPath = gdm_read_default ("PATH=");
- GdmRootPath = gdm_read_default ("SUPATH=");
-
- temp = gdm_read_default ("PASSREQ=");
- if (temp == NULL)
- GdmPasswordRequired = ve_config_get_bool (cfg, GDM_KEY_PASSWORDREQUIRED);
- else if (g_ascii_strcasecmp (temp, "YES") == 0)
- GdmPasswordRequired = TRUE;
- else
- GdmPasswordRequired = FALSE;
-
- temp = gdm_read_default ("CONSOLE=");
- if (temp == NULL || g_ascii_strcasecmp (temp, "/dev/console") != 0)
- GdmAllowRemoteRoot = TRUE;
- else
- GdmAllowRemoteRoot = FALSE;
- g_free (temp);
- }
-
- if (GdmDefaultPath == NULL)
- GdmDefaultPath = ve_config_get_string (cfg, GDM_KEY_PATH);
- if (GdmRootPath == NULL)
- GdmRootPath = ve_config_get_string (cfg, GDM_KEY_ROOTPATH);
-
- GdmDisplayInit = ve_config_get_string (cfg, GDM_KEY_INITDIR);
- GdmAutomaticLoginEnable = ve_config_get_bool (cfg, GDM_KEY_AUTOMATICLOGIN_ENABLE);
- GdmAutomaticLogin = ve_config_get_string (cfg, GDM_KEY_AUTOMATICLOGIN);
-#ifdef sun
- GdmAlwaysRestartServer = TRUE;
-#else
- GdmAlwaysRestartServer = ve_config_get_bool (cfg, GDM_KEY_ALWAYSRESTARTSERVER);
-#endif
- GdmGreeter = ve_config_get_string (cfg, GDM_KEY_GREETER);
- GdmRemoteGreeter = ve_config_get_string (cfg, GDM_KEY_REMOTEGREETER);
- GdmAddGtkModules = ve_config_get_bool (cfg, GDM_KEY_ADD_GTK_MODULES);
- GdmDoubleLoginWarning = ve_config_get_bool (cfg, GDM_KEY_DOUBLELOGINWARNING);
- GdmAlwaysLoginCurrentSession = ve_config_get_bool (cfg, GDM_KEY_ALWAYS_LOGIN_CURRENT_SESSION);
- GdmDisplayLastLogin = ve_config_get_bool (cfg, GDM_KEY_DISPLAY_LAST_LOGIN);
- GdmGtkModulesList = ve_config_get_string (cfg, GDM_KEY_GTK_MODULES_LIST);
- GdmGroup = ve_config_get_string (cfg, GDM_KEY_GROUP);
- GdmHalt = ve_config_get_string (cfg, GDM_KEY_HALT);
- GdmKillInitClients = ve_config_get_bool (cfg, GDM_KEY_KILLIC);
- GdmLogDir= ve_config_get_string (cfg, GDM_KEY_LOGDIR);
- GdmPidFile = ve_config_get_string (cfg, GDM_KEY_PIDFILE);
- GdmPostLogin = ve_config_get_string (cfg, GDM_KEY_POSTLOGIN);
- GdmPreSession = ve_config_get_string (cfg, GDM_KEY_PRESESS);
- GdmPostSession = ve_config_get_string (cfg, GDM_KEY_POSTSESS);
- GdmFailsafeXServer = ve_config_get_string (cfg, GDM_KEY_FAILSAFE_XSERVER);
- GdmXKeepsCrashing = ve_config_get_string (cfg, GDM_KEY_XKEEPSCRASHING);
- GdmConfigurator = ve_config_get_string (cfg, GDM_KEY_CONFIGURATOR);
- GdmConfigAvailable = ve_config_get_bool (cfg, GDM_KEY_CONFIG_AVAILABLE);
- GdmSystemMenu = ve_config_get_bool (cfg, GDM_KEY_SYSMENU);
- GdmChooserButton = ve_config_get_bool (cfg, GDM_KEY_CHOOSER_BUTTON);
- GdmBrowser = ve_config_get_bool (cfg, GDM_KEY_BROWSER);
- GdmGlobalFaceDir = ve_config_get_string (cfg, GDM_KEY_FACEDIR);
- GdmXineramaScreen = ve_config_get_int (cfg, GDM_KEY_XINERAMASCREEN);
- GdmReboot = ve_config_get_string (cfg, GDM_KEY_REBOOT);
- GdmRetryDelay = ve_config_get_int (cfg, GDM_KEY_RETRYDELAY);
- GdmServAuthDir = ve_config_get_string (cfg, GDM_KEY_SERVAUTH);
-#ifdef ENABLE_IPV6
- GdmMulticast = ve_config_get_bool (cfg, GDM_KEY_MULTICAST);
- GdmMulticastAddr = ve_config_get_string (cfg, GDM_KEY_MULTICAST_ADDR);
-#endif
-
- GdmSessDir = ve_config_get_string (cfg, GDM_KEY_SESSDIR);
- GdmXsession = ve_config_get_string (cfg, GDM_KEY_BASEXSESSION);
- if (ve_string_empty (GdmXsession)) {
- gdm_info (_("%s: BaseXsession empty; using %s/gdm/Xsession"),
- "gdm_config_parse",
- EXPANDED_SYSCONFDIR);
- g_free (GdmXsession);
- GdmXsession = g_build_filename (EXPANDED_SYSCONFDIR,
- "gdm", "Xsession", NULL);
- }
- GdmDefaultSession = ve_config_get_string (cfg, GDM_KEY_DEFAULTSESSION);
- GdmSuspend = ve_config_get_string (cfg, GDM_KEY_SUSPEND);
- GdmUser = ve_config_get_string (cfg, GDM_KEY_USER);
- GdmUserAuthDir = ve_config_get_string (cfg, GDM_KEY_UAUTHDIR);
- GdmNeverPlaceCookiesOnNFS = ve_config_get_bool (cfg, GDM_KEY_NEVERPLACECOOKIESONNFS);
- GdmUserAuthFile = ve_config_get_string (cfg, GDM_KEY_UAUTHFILE);
- GdmUserAuthFB = ve_config_get_string (cfg, GDM_KEY_UAUTHFB);
- GdmConsoleNotify = ve_config_get_bool (cfg, GDM_KEY_CONSOLE_NOTIFY);
-
- GdmGtkRC = ve_config_get_string (cfg, GDM_KEY_GTKRC);
- GdmGtkTheme = ve_config_get_string (cfg, GDM_KEY_GTK_THEME);
-
- GdmTimedLoginEnable = ve_config_get_bool (cfg, GDM_KEY_TIMED_LOGIN_ENABLE);
- GdmTimedLogin = ve_config_get_string (cfg, GDM_KEY_TIMED_LOGIN);
- GdmTimedLoginDelay = ve_config_get_int (cfg, GDM_KEY_TIMED_LOGIN_DELAY);
-
- GdmAllowRoot = ve_config_get_bool (cfg, GDM_KEY_ALLOWROOT);
- GdmAllowRemoteAutoLogin = ve_config_get_bool (cfg, GDM_KEY_ALLOWREMOTEAUTOLOGIN);
- GdmRelaxPerms = ve_config_get_int (cfg, GDM_KEY_RELAXPERM);
- GdmCheckDirOwner = ve_config_get_bool (cfg, GDM_KEY_CHECKDIROWNER);
- GdmUserMaxFile = ve_config_get_int (cfg, GDM_KEY_MAXFILE);
-
- GdmXdmcp = ve_config_get_bool (cfg, GDM_KEY_XDMCP);
- GdmDispPerHost = ve_config_get_int (cfg, GDM_KEY_DISPERHOST);
- GdmMaxPending = ve_config_get_int (cfg, GDM_KEY_MAXPEND);
- GdmMaxManageWait = ve_config_get_int (cfg, GDM_KEY_MAXWAIT);
- GdmMaxSessions = ve_config_get_int (cfg, GDM_KEY_MAXSESS);
- GdmPort = ve_config_get_int (cfg, GDM_KEY_UDPPORT);
- GdmIndirect = ve_config_get_bool (cfg, GDM_KEY_INDIRECT);
- GdmMaxIndirect = ve_config_get_int (cfg, GDM_KEY_MAXINDIR);
- GdmMaxIndirectWait = ve_config_get_int (cfg, GDM_KEY_MAXINDWAIT);
- GdmPingInterval = ve_config_get_int (cfg, GDM_KEY_PINGINTERVAL);
- GdmWilling = ve_config_get_string (cfg, GDM_KEY_WILLING);
-
- GdmXdmcpProxy = ve_config_get_bool (cfg, GDM_KEY_XDMCP_PROXY);
- GdmXdmcpProxyCommand = ve_config_get_string (cfg, GDM_KEY_XDMCP_PROXY_XSERVER);
- if (ve_string_empty (GdmXdmcpProxyCommand))
- GdmXdmcpProxyCommand = NULL;
- GdmXdmcpProxyReconnect = ve_config_get_string (cfg, GDM_KEY_XDMCP_PROXY_RECONNECT);
- if (ve_string_empty (GdmXdmcpProxyReconnect))
- GdmXdmcpProxyReconnect = NULL;
-
- GdmStandardXServer = ve_config_get_string (cfg, GDM_KEY_STANDARD_XSERVER);
- bin = ve_first_word (GdmStandardXServer);
- if G_UNLIKELY (ve_string_empty (bin) ||
- access (bin, X_OK) != 0) {
- gdm_info (_("%s: Standard X server not found; trying alternatives"),
- "gdm_config_parse");
- if (access ("/usr/X11R6/bin/X", X_OK) == 0) {
- g_free (GdmStandardXServer);
- GdmStandardXServer = g_strdup ("/usr/X11R6/bin/X");
- } else if (access ("/opt/X11R6/bin/X", X_OK) == 0) {
- g_free (GdmStandardXServer);
- GdmStandardXServer = g_strdup ("/opt/X11R6/bin/X");
- } else if (ve_string_empty (GdmStandardXServer)) {
- g_free (GdmStandardXServer);
- GdmStandardXServer = g_strdup ("/usr/bin/X11/X");
- }
- }
- g_free (bin);
- GdmDynamicXServers = ve_config_get_bool (cfg, GDM_KEY_DYNAMIC_XSERVERS);
- GdmFlexibleXServers = ve_config_get_int (cfg, GDM_KEY_FLEXIBLE_XSERVERS);
- GdmXnest = ve_config_get_string (cfg, GDM_KEY_XNEST);
- if (ve_string_empty (GdmXnest))
- GdmXnest = NULL;
-
- GdmFirstVT = ve_config_get_int (cfg, GDM_KEY_FIRSTVT);
- GdmVTAllocation = ve_config_get_bool (cfg, GDM_KEY_VTALLOCATION);
- GdmDisallowTCP = ve_config_get_bool (cfg, GDM_KEY_DISALLOWTCP);
-
- GdmSoundProgram = ve_config_get_string (cfg, GDM_KEY_SOUND_PROGRAM);
- GdmSoundOnLoginReadyFile = ve_config_get_string (cfg,
- GDM_KEY_SOUND_ON_LOGIN_READY_FILE);
- GdmSoundOnLoginSuccess = ve_config_get_bool (cfg,
- GDM_KEY_SOUND_ON_LOGIN_SUCCESS);
- GdmSoundOnLoginSuccessFile = ve_config_get_string (cfg,
- GDM_KEY_SOUND_ON_LOGIN_SUCCESS_FILE);
- GdmSoundOnLoginFailure = ve_config_get_bool (cfg,
- GDM_KEY_SOUND_ON_LOGIN_FAILURE);
- GdmSoundOnLoginFailureFile = ve_config_get_string (cfg,
- GDM_KEY_SOUND_ON_LOGIN_FAILURE_FILE);
-
- GdmDebug = ve_config_get_bool (cfg, GDM_KEY_DEBUG);
- GdmDebugGestures = ve_config_get_bool (cfg, GDM_KEY_DEBUG_GESTURES);
-
- /* sanitize some values */
-
-#ifndef HAVE_LIBXDMCP
- if (GdmXdmcp) {
- gdm_info (_("%s: XDMCP was enabled while there is no XDMCP support; turning it off"), "gdm_config_parse");
- GdmXdmcp = FALSE;
- }
-#endif
-
- if ( ! GdmAutomaticLoginEnable ||
- ve_string_empty (GdmAutomaticLogin)) {
- g_free (GdmAutomaticLogin);
- GdmAutomaticLogin = NULL;
- }
-
- if (GdmAutomaticLogin != NULL &&
- strcmp (GdmAutomaticLogin, gdm_root_user ()) == 0) {
- gdm_info (_("%s: Root cannot be logged in automatically, turning off automatic login"), "gdm_config_parse");
- g_free (GdmAutomaticLogin);
- GdmAutomaticLogin = NULL;
- }
-
- if ( ! GdmTimedLoginEnable ||
- ve_string_empty (GdmTimedLogin)) {
- g_free (GdmTimedLogin);
- GdmTimedLogin = NULL;
- }
-
- if (GdmTimedLogin != NULL &&
- strcmp (GdmTimedLogin, gdm_root_user ()) == 0) {
- gdm_info (_("%s: Root cannot be logged in automatically, turning off timed login"), "gdm_config_parse");
- g_free (GdmTimedLogin);
- GdmTimedLogin = NULL;
- }
-
- if (GdmTimedLoginDelay < 5) {
- gdm_info (_("%s: TimedLoginDelay is less than 5, defaulting to 5."), "gdm_config_parse");
- GdmTimedLoginDelay = 5;
- }
-
- if (GdmMaxIndirect < 0) {
- GdmMaxIndirect = 0;
- }
-
- /* Prerequisites */
- if (ve_string_empty (GdmGreeter)) {
- gdm_error (_("%s: No greeter specified."), "gdm_config_parse");
- }
- if (ve_string_empty (GdmRemoteGreeter)) {
- gdm_error (_("%s: No remote greeter specified."), "gdm_config_parse");
- }
-
- if (ve_string_empty (GdmSessDir))
- gdm_error (_("%s: No sessions directory specified."), "gdm_config_parse");
-
- /* Find server definitions */
- list = ve_config_get_sections (cfg);
- for (li = list; li != NULL; li = li->next) {
- const char *sec = li->data;
- if (strncmp (sec, "server-", strlen ("server-")) == 0) {
- GdmXServer *svr = g_new0 (GdmXServer, 1);
- char buf[256];
-
- svr->id = g_strdup (sec + strlen ("server-"));
- g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_NAME, sec);
- svr->name = ve_config_get_string (cfg, buf);
- g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_COMMAND, sec);
- svr->command = ve_config_get_string (cfg, buf);
- g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_FLEXIBLE, sec);
- svr->flexible = ve_config_get_bool (cfg, buf);
- g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_CHOOSABLE, sec);
- svr->choosable = ve_config_get_bool (cfg, buf);
- g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_HANDLED, sec);
- svr->handled = ve_config_get_bool (cfg, buf);
- g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_CHOOSER, sec);
- svr->chooser = ve_config_get_bool (cfg, buf);
-
- if (ve_string_empty (svr->command)) {
- gdm_error (_("%s: Empty server command; "
- "using standard command."),
- "gdm_config_parse");
- g_free (svr->command);
- svr->command = g_strdup (GdmStandardXServer);
- }
-
- xservers = g_slist_append (xservers, svr);
- }
- }
- ve_config_free_list_of_strings (list);
-
- if (xservers == NULL ||
- gdm_find_x_server (GDM_STANDARD) == NULL) {
- GdmXServer *svr = g_new0 (GdmXServer, 1);
-
- svr->id = g_strdup (GDM_STANDARD);
- svr->name = g_strdup ("Standard server");
- svr->command = g_strdup (GdmStandardXServer);
- svr->flexible = TRUE;
- svr->choosable = TRUE;
- svr->handled = TRUE;
-
- xservers = g_slist_append (xservers, svr);
- }
-
- /* Find static X server definitions */
- list = ve_config_get_keys (cfg, GDM_KEY_SECTION_SERVERS);
- /* only read the list if no_console is FALSE
- at this stage */
- for (li = list; ! no_console && li != NULL; li = li->next) {
- const char *key = li->data;
- if (isdigit (*key)) {
- char *full;
- char *val;
- int disp_num = atoi (key);
- GdmDisplay *disp;
-
- while (display_exists (disp_num)) {
- disp_num++;
- }
-
- if (disp_num != atoi (key)) {
- gdm_error (_("%s: Display number %d in use! Defaulting to %d"),
- "gdm_config_parse", atoi (key), disp_num);
- }
-
- full = g_strdup_printf ("%s/%s", GDM_KEY_SECTION_SERVERS, key);
- val = ve_config_get_string (cfg, full);
- g_free (full);
-
- disp = gdm_server_alloc (disp_num, val);
- g_free (val);
-
- if (disp == NULL)
- continue;
- displays = g_slist_insert_sorted (displays,
- disp,
- compare_displays);
- if (disp_num > high_display_num)
- high_display_num = disp_num;
- } else {
- gdm_info (_("%s: Invalid server line in config file. Ignoring!"), "gdm_config_parse");
- }
- }
- ve_config_free_list_of_strings (list);
-
- if G_UNLIKELY ((displays == NULL) && (! GdmXdmcp) &&
- (!GdmDynamicXServers)) {
- char *server = NULL;
-
- /* if we requested no static servers (there is no console),
- then don't display errors in console messages */
- if (no_console) {
- gdm_fail (_("%s: XDMCP disabled and no static servers defined. Aborting!"), "gdm_config_parse");
- }
-
- bin = ve_first_word (GdmStandardXServer);
- if G_LIKELY (access (bin, X_OK) == 0) {
- server = GdmStandardXServer;
- } else if (access ("/usr/bin/X11/X", X_OK) == 0) {
- server = "/usr/bin/X11/X";
- } else if (access ("/usr/X11R6/bin/X", X_OK) == 0) {
- server = "/usr/X11R6/bin/X";
- } else if (access ("/opt/X11R6/bin/X", X_OK) == 0) {
- server = "/opt/X11R6/bin/X";
- }
- g_free (bin);
- /* yay, we can add a backup emergency server */
- if (server != NULL) {
- int num = gdm_get_free_display (0 /* start */,
- 0 /* server uid */);
- gdm_error (_("%s: XDMCP disabled and no static servers defined. Adding %s on :%d to allow configuration!"),
- "gdm_config_parse",
- server, num);
-
- gdm_emergency_server = TRUE;
- displays = g_slist_append
- (displays, gdm_server_alloc (num, server));
- /* ALWAYS run the greeter and don't log anyone in,
- * this is just an emergency session */
- g_free (GdmAutomaticLogin);
- GdmAutomaticLogin = NULL;
- g_free (GdmTimedLogin);
- GdmTimedLogin = NULL;
- } else {
- char *s = g_strdup_printf
- (C_(N_("XDMCP is disabled and GDM "
- "cannot find any static server "
- "to start. Aborting! Please "
- "correct the configuration "
- "and restart GDM.")));
- gdm_text_message_dialog (s);
- GdmPidFile = NULL;
- g_free (s);
- gdm_fail (_("%s: XDMCP disabled and no static servers defined. Aborting!"), "gdm_config_parse");
- }
- }
-
- /* If no displays were found, then obviously
- we're in a no console mode */
- if (displays == NULL)
- no_console = TRUE;
-
- if (no_console)
- GdmConsoleNotify = FALSE;
-
- /* Lookup user and groupid for the GDM user */
- pwent = getpwnam (GdmUser);
-
- if G_UNLIKELY (pwent == NULL) {
- char *s = g_strdup_printf
- (C_(N_("The GDM user '%s' does not exist. "
- "Please correct GDM configuration "
- "and restart GDM.")),
- GdmUser);
- if (GdmConsoleNotify)
- gdm_text_message_dialog (s);
- GdmPidFile = NULL;
- g_free (s);
- gdm_fail (_("%s: Can't find the GDM user '%s'. Aborting!"), "gdm_config_parse", GdmUser);
- } else {
- GdmUserId = pwent->pw_uid;
- }
-
- if G_UNLIKELY (GdmUserId == 0) {
- char *s = g_strdup_printf
- (C_(N_("The GDM user is set to be root, but "
- "this is not allowed since it can "
- "pose a security risk. Please "
- "correct GDM configuration and "
- "restart GDM.")));
- if (GdmConsoleNotify)
- gdm_text_message_dialog (s);
- GdmPidFile = NULL;
- g_free (s);
- gdm_fail (_("%s: The GDM user should not be root. Aborting!"), "gdm_config_parse");
- }
-
- grent = getgrnam (GdmGroup);
-
- if G_UNLIKELY (grent == NULL) {
- char *s = g_strdup_printf
- (C_(N_("The GDM group '%s' does not exist. "
- "Please correct GDM configuration "
- "and restart GDM.")),
- GdmGroup);
- if (GdmConsoleNotify)
- gdm_text_message_dialog (s);
- GdmPidFile = NULL;
- g_free (s);
- gdm_fail (_("%s: Can't find the GDM group '%s'. Aborting!"), "gdm_config_parse", GdmGroup);
- } else {
- GdmGroupId = grent->gr_gid;
- }
-
- if G_UNLIKELY (GdmGroupId == 0) {
- char *s = g_strdup_printf
- (C_(N_("The GDM group is set to be root, but "
- "this is not allowed since it can "
- "pose a security risk. Please "
- "correct GDM configuration and "
- "restart GDM.")));
- if (GdmConsoleNotify)
- gdm_text_message_dialog (s);
- GdmPidFile = NULL;
- g_free (s);
- gdm_fail (_("%s: The GDM group should not be root. Aborting!"), "gdm_config_parse");
- }
-
- /* get the actual commands to use */
- GdmHaltReal = ve_get_first_working_command (GdmHalt, FALSE);
- GdmRebootReal = ve_get_first_working_command (GdmReboot, FALSE);
- GdmSuspendReal = ve_get_first_working_command (GdmSuspend, FALSE);
-
- /* gid remains `gdm' */
- NEVER_FAILS_root_set_euid_egid (GdmUserId, GdmGroupId);
-
- /* Check that the greeter can be executed */
- bin = ve_first_word (GdmGreeter);
- if G_UNLIKELY (ve_string_empty (bin) ||
- access (bin, X_OK) != 0) {
- gdm_error (_("%s: Greeter not found or can't be executed by the GDM user"), "gdm_config_parse");
- }
- g_free (bin);
-
- bin = ve_first_word (GdmRemoteGreeter);
- if G_UNLIKELY (ve_string_empty (bin) ||
- access (bin, X_OK) != 0) {
- gdm_error (_("%s: Remote greeter not found or can't be executed by the GDM user"), "gdm_config_parse");
- }
- g_free (bin);
-
-
- /* Check that chooser can be executed */
- bin = ve_first_word (GdmChooser);
-
- if G_UNLIKELY (GdmIndirect &&
- (ve_string_empty (bin) ||
- access (bin, X_OK) != 0)) {
- gdm_error (_("%s: Chooser not found or it can't be executed by the GDM user"), "gdm_config_parse");
- }
-
- g_free (bin);
-
- /* Check the serv auth and log dirs */
- if G_UNLIKELY (ve_string_empty (GdmServAuthDir)) {
- if (GdmConsoleNotify)
- gdm_text_message_dialog
- (C_(N_("No daemon/ServAuthDir specified in the GDM configuration file")));
- GdmPidFile = NULL;
- gdm_fail (_("%s: No daemon/ServAuthDir specified."), "gdm_config_parse");
- }
-
- if (ve_string_empty (GdmLogDir)) {
- g_free (GdmLogDir);
- GdmLogDir = g_strdup (GdmServAuthDir);
- }
-
- /* Enter paranoia mode */
- check_servauthdir (&statbuf);
-
- NEVER_FAILS_root_set_euid_egid (0, 0);
-
- /* Now set things up for us as */
- chown (GdmServAuthDir, 0, GdmGroupId);
- chmod (GdmServAuthDir, (S_IRWXU|S_IRWXG|S_ISVTX));
-
- NEVER_FAILS_root_set_euid_egid (GdmUserId, GdmGroupId);
-
- /* again paranoid */
- check_servauthdir (&statbuf);
-
- if G_UNLIKELY (statbuf.st_uid != 0 || statbuf.st_gid != GdmGroupId) {
- char *s = g_strdup_printf
- (C_(N_("Server Authorization directory "
- "(daemon/ServAuthDir) is set to %s "
- "but is not owned by user %s and group "
- "%s. Please correct the ownership or "
- "GDM configuration and restart "
- "GDM.")),
- GdmServAuthDir, GdmUser, GdmGroup);
- if (GdmConsoleNotify)
- gdm_text_message_dialog (s);
- GdmPidFile = NULL;
- g_free (s);
- gdm_fail (_("%s: Authdir %s is not owned by user %s, group %s. Aborting."), "gdm_config_parse",
- GdmServAuthDir, gdm_root_user (), GdmGroup);
- }
-
- if G_UNLIKELY (statbuf.st_mode != (S_IFDIR|S_IRWXU|S_IRWXG|S_ISVTX)) {
- char *s = g_strdup_printf
- (C_(N_("Server Authorization directory "
- "(daemon/ServAuthDir) is set to %s "
- "but has the wrong permissions: it "
- "should have permissions of %o. "
- "Please correct the permissions or "
- "the GDM configuration and "
- "restart GDM.")),
- GdmServAuthDir, (S_IRWXU|S_IRWXG|S_ISVTX));
- if (GdmConsoleNotify)
- gdm_text_message_dialog (s);
- GdmPidFile = NULL;
- g_free (s);
- gdm_fail (_("%s: Authdir %s has wrong permissions %o. Should be %o. Aborting."), "gdm_config_parse",
- GdmServAuthDir, statbuf.st_mode, (S_IRWXU|S_IRWXG|S_ISVTX));
- }
-
- NEVER_FAILS_root_set_euid_egid (0, 0);
-
- check_logdir ();
-
- /* Check that user authentication is properly configured */
- gdm_verify_check ();
-
- ve_config_destroy (cfg);
-}
-
-/* If id == NULL, then get the first X server */
-GdmXServer *
-gdm_find_x_server (const char *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;
-}
-
/**
* gdm_daemonify:
*
@@ -1011,26 +186,27 @@ gdm_daemonify (void)
pid = fork ();
if (pid > 0) {
+ gchar *pidfile = gdm_get_value_string (GDM_KEY_PID_FILE);
errno = 0;
- if ((pf = gdm_safe_fopen_w (GdmPidFile)) != NULL) {
+ if ((pf = gdm_safe_fopen_w (pidfile)) != NULL) {
errno = 0;
VE_IGNORE_EINTR (fprintf (pf, "%d\n", (int)pid));
VE_IGNORE_EINTR (fclose (pf));
if G_UNLIKELY (errno != 0) {
/* FIXME: how to handle this? */
gdm_fdprintf (2, _("Cannot write PID file %s: possibly out of diskspace. Error: %s\n"),
- GdmPidFile, strerror (errno));
+ pidfile, strerror (errno));
gdm_error (_("Cannot write PID file %s: possibly out of diskspace. Error: %s"),
- GdmPidFile, strerror (errno));
+ pidfile, strerror (errno));
}
} else if G_UNLIKELY (errno != 0) {
/* FIXME: how to handle this? */
gdm_fdprintf (2, _("Cannot write PID file %s: possibly out of diskspace. Error: %s\n"),
- GdmPidFile, strerror (errno));
+ pidfile, strerror (errno));
gdm_error (_("Cannot write PID file %s: possibly out of diskspace. Error: %s"),
- GdmPidFile, strerror (errno));
+ pidfile, strerror (errno));
}
@@ -1045,7 +221,7 @@ gdm_daemonify (void)
gdm_fail (_("%s: setsid() failed: %s!"), "gdm_daemonify",
strerror(errno));
- VE_IGNORE_EINTR (chdir (GdmServAuthDir));
+ VE_IGNORE_EINTR (chdir (gdm_get_value_string (GDM_KEY_SERV_AUTHDIR)));
umask (022);
VE_IGNORE_EINTR (close (0));
@@ -1071,7 +247,7 @@ gdm_start_first_unborn_local (int delay)
if (d != NULL &&
d->type == TYPE_STATIC &&
d->dispstat == DISPLAY_UNBORN) {
- GdmXServer *svr;
+ GdmXserver *svr;
gdm_debug ("gdm_start_first_unborn_local: "
"Starting %s", d->name);
@@ -1113,6 +289,7 @@ void
gdm_final_cleanup (void)
{
GSList *list, *li;
+ gchar *pidfile;
gboolean first;
gdm_debug ("gdm_final_cleanup");
@@ -1179,13 +356,13 @@ gdm_final_cleanup (void)
/* Close stuff */
- if (GdmXdmcp)
+ if (gdm_get_value_bool (GDM_KEY_XDMCP))
gdm_xdmcp_close ();
if (fifoconn != NULL) {
char *path;
gdm_connection_close (fifoconn);
- path = g_build_filename (GdmServAuthDir, ".gdmfifo", NULL);
+ path = g_build_filename (gdm_get_value_string (GDM_KEY_SERV_AUTHDIR), ".gdmfifo", NULL);
VE_IGNORE_EINTR (unlink (path));
g_free (path);
fifoconn = NULL;
@@ -1209,8 +386,9 @@ gdm_final_cleanup (void)
closelog();
- if (GdmPidFile != NULL) {
- VE_IGNORE_EINTR (unlink (GdmPidFile));
+ pidfile = gdm_get_value_string (GDM_KEY_PID_FILE);
+ if (pidfile != NULL) {
+ VE_IGNORE_EINTR (unlink (pidfile));
}
#ifdef HAVE_LOGINDEVPERM
@@ -1222,20 +400,22 @@ static gboolean
deal_with_x_crashes (GdmDisplay *d)
{
gboolean just_abort = FALSE;
+ gchar* failsafe = gdm_get_value_string (GDM_KEY_FAILSAFE_XSERVER);
+ gchar* keepscrashing = gdm_get_value_string (GDM_KEY_X_KEEPS_CRASHING);
if ( ! d->failsafe_xserver &&
- ! ve_string_empty (GdmFailsafeXServer)) {
- char *bin = ve_first_word (GdmFailsafeXServer);
+ ! ve_string_empty (failsafe)) {
+ char *bin = ve_first_word (failsafe);
/* Yay we have a failsafe */
if ( ! ve_string_empty (bin) &&
access (bin, X_OK) == 0) {
gdm_info (_("%s: Trying failsafe X "
"server %s"),
"deal_with_x_crashes",
- GdmFailsafeXServer);
+ failsafe);
g_free (bin);
g_free (d->command);
- d->command = g_strdup (GdmFailsafeXServer);
+ d->command = g_strdup (failsafe);
d->failsafe_xserver = TRUE;
return TRUE;
}
@@ -1243,8 +423,8 @@ deal_with_x_crashes (GdmDisplay *d)
}
/* Eeek X keeps crashing, let's try the XKeepsCrashing script */
- if ( ! ve_string_empty (GdmXKeepsCrashing) &&
- access (GdmXKeepsCrashing, X_OK|R_OK) == 0) {
+ if ( ! ve_string_empty (keepscrashing) &&
+ access (keepscrashing, X_OK|R_OK) == 0) {
pid_t pid;
gdm_info (_("%s: Running the "
@@ -1257,7 +437,7 @@ deal_with_x_crashes (GdmDisplay *d)
if (pid == 0) {
char *argv[2];
- char *xlog = gdm_make_filename (GdmLogDir, d->name, ".log");
+ char *xlog = gdm_make_filename (gdm_get_value_string (GDM_KEY_LOG_DIR), d->name, ".log");
gdm_unset_signals ();
@@ -1266,7 +446,7 @@ deal_with_x_crashes (GdmDisplay *d)
* possible children */
setsid ();
- if (GdmXdmcp)
+ if (gdm_get_value_bool (GDM_KEY_XDMCP))
gdm_xdmcp_close ();
closelog ();
@@ -1279,33 +459,33 @@ deal_with_x_crashes (GdmDisplay *d)
gdm_open_dev_null (O_RDWR); /* open stdout - fd 1 */
gdm_open_dev_null (O_RDWR); /* open stderr - fd 2 */
- argv[0] = GdmXKeepsCrashing;
+ argv[0] = gdm_get_value_string (GDM_KEY_X_KEEPS_CRASHING);
argv[1] = NULL;
gdm_restoreenv ();
/* unset DISPLAY and XAUTHORITY if they exist
* so that gdialog (if used) doesn't get confused */
- ve_unsetenv ("DISPLAY");
- ve_unsetenv ("XAUTHORITY");
+ g_unsetenv ("DISPLAY");
+ g_unsetenv ("XAUTHORITY");
/* some promised variables */
- ve_setenv ("XLOG", xlog, TRUE);
- ve_setenv ("BINDIR", EXPANDED_BINDIR, TRUE);
- ve_setenv ("SBINDIR", EXPANDED_SBINDIR, TRUE);
- ve_setenv ("LIBEXECDIR", EXPANDED_LIBEXECDIR, TRUE);
- ve_setenv ("SYSCONFDIR", EXPANDED_SYSCONFDIR, TRUE);
+ g_setenv ("XLOG", xlog, TRUE);
+ g_setenv ("BINDIR", EXPANDED_BINDIR, TRUE);
+ g_setenv ("SBINDIR", EXPANDED_SBINDIR, TRUE);
+ g_setenv ("LIBEXECDIR", EXPANDED_LIBEXECDIR, TRUE);
+ g_setenv ("SYSCONFDIR", EXPANDED_SYSCONFDIR, TRUE);
/* To enable gettext stuff in the script */
- ve_setenv ("TEXTDOMAIN", GETTEXT_PACKAGE, TRUE);
- ve_setenv ("TEXTDOMAINDIR", GNOMELOCALEDIR, TRUE);
+ g_setenv ("TEXTDOMAIN", GETTEXT_PACKAGE, TRUE);
+ g_setenv ("TEXTDOMAINDIR", GNOMELOCALEDIR, TRUE);
if ( ! gdm_ok_console_language ()) {
- ve_unsetenv ("LANG");
- ve_unsetenv ("LC_ALL");
- ve_unsetenv ("LC_MESSAGES");
- ve_setenv ("LANG", "C", TRUE);
- ve_setenv ("UNSAFE_TO_TRANSLATE", "yes", TRUE);
+ g_unsetenv ("LANG");
+ g_unsetenv ("LC_ALL");
+ g_unsetenv ("LC_MESSAGES");
+ g_setenv ("LANG", "C", TRUE);
+ g_setenv ("UNSAFE_TO_TRANSLATE", "yes", TRUE);
}
VE_IGNORE_EINTR (execv (argv[0], argv));
@@ -1328,10 +508,7 @@ deal_with_x_crashes (GdmDisplay *d)
errno = 0;
ret = waitpid (extra_process, &status, WNOHANG);
storeerrno = errno;
- if (ret <= 0 &&
- (ve_signal_was_notified (SIGTERM) ||
- ve_signal_was_notified (SIGINT) ||
- ve_signal_was_notified (SIGHUP))) {
+ if ((ret <= 0) && gdm_signal_terminthup_was_notified()) {
kill (-(extra_process), killsignal);
killsignal = SIGKILL;
}
@@ -1387,17 +564,18 @@ deal_with_x_crashes (GdmDisplay *d)
static void
suspend_machine (void)
{
+ gchar *suspend = gdm_get_value_string (GDM_KEY_SUSPEND);
+
gdm_info (_("Master suspending..."));
- if (GdmSuspendReal != NULL &&
- fork () == 0) {
+ if (suspend != NULL && fork () == 0) {
char **argv;
/* sync everything to disk, just in case something goes
* wrong with the suspend */
sync ();
- if (GdmXdmcp)
+ if (gdm_get_value_bool (GDM_KEY_XDMCP))
gdm_xdmcp_close ();
/* In the child setup empty mask and set all signals to
* default values */
@@ -1411,7 +589,7 @@ suspend_machine (void)
/* short sleep to give some processing time to master */
usleep (1000);
- argv = ve_split (GdmSuspendReal);
+ argv = ve_split (suspend);
if (argv != NULL && argv[0] != NULL)
VE_IGNORE_EINTR (execv (argv[0], argv));
/* FIXME: what about fail */
@@ -1431,7 +609,7 @@ change_to_first_and_clear (gboolean reboot)
VE_IGNORE_EINTR (open ("/dev/tty1", O_WRONLY));
VE_IGNORE_EINTR (open ("/dev/tty1", O_WRONLY));
- ve_setenv ("TERM", "linux", TRUE);
+ g_setenv ("TERM", "linux", TRUE);
/* evil hack that will get the fonts right */
if (access ("/bin/bash", X_OK) == 0)
@@ -1463,7 +641,7 @@ halt_machine (void)
change_to_first_and_clear (FALSE /* reboot */);
#endif /* __linux */
- argv = ve_split (GdmHaltReal);
+ argv = ve_split (gdm_get_value_string (GDM_KEY_HALT));
if (argv != NULL && argv[0] != NULL)
VE_IGNORE_EINTR (execv (argv[0], argv));
@@ -1485,7 +663,7 @@ reboot_machine (void)
change_to_first_and_clear (TRUE /* reboot */);
#endif /* __linux */
- argv = ve_split (GdmRebootReal);
+ argv = ve_split (gdm_get_value_string (GDM_KEY_REBOOT));
if (argv != NULL && argv[0] != NULL)
VE_IGNORE_EINTR (execv (argv[0], argv));
@@ -1563,7 +741,7 @@ gdm_cleanup_children (void)
if (d->servpid > 1)
kill (d->servpid, SIGTERM);
d->servpid = 0;
- if (GdmDynamicXServers) /* XXX - This needs to be handled better */
+ if (gdm_get_value_bool (GDM_KEY_DYNAMIC_XSERVERS)) /* XXX - This needs to be handled better */
gdm_server_whack_lockfile (d);
/* race avoider */
@@ -1585,7 +763,7 @@ gdm_cleanup_children (void)
d->slavepid = 0;
d->dispstat = DISPLAY_DEAD;
- if ( ! GdmSystemMenu &&
+ if ( ! gdm_get_value_bool (GDM_KEY_SYSTEM_MENU) &&
(status == DISPLAY_RESTARTGDM ||
status == DISPLAY_REBOOT ||
status == DISPLAY_SUSPEND ||
@@ -1605,8 +783,8 @@ gdm_cleanup_children (void)
if (status == DISPLAY_RUN_CHOOSER) {
/* use the chooser on the next run (but only if allowed) */
- if (GdmSystemMenu &&
- GdmChooserButton)
+ if (gdm_get_value_bool (GDM_KEY_SYSTEM_MENU) &&
+ gdm_get_value_bool (GDM_KEY_CHOOSER_BUTTON))
d->use_chooser = TRUE;
status = DISPLAY_REMANAGE;
/* go around the display loop detection, these are short
@@ -1638,15 +816,15 @@ gdm_cleanup_children (void)
/* checkout if we can actually do stuff */
switch (status) {
case DISPLAY_REBOOT:
- if (GdmRebootReal == NULL)
+ if (gdm_get_value_string (GDM_KEY_REBOOT) == NULL)
status = DISPLAY_REMANAGE;
break;
case DISPLAY_HALT:
- if (GdmHaltReal == NULL)
+ if (gdm_get_value_string (GDM_KEY_HALT) == NULL)
status = DISPLAY_REMANAGE;
break;
case DISPLAY_SUSPEND:
- if (GdmSuspendReal == NULL)
+ if (gdm_get_value_string (GDM_KEY_SUSPEND) == NULL)
status = DISPLAY_REMANAGE;
break;
default:
@@ -1979,7 +1157,7 @@ create_connections (void)
int p[2];
gchar *path;
- path = g_build_filename (GdmServAuthDir, ".gdmfifo", NULL);
+ path = g_build_filename (gdm_get_value_string (GDM_KEY_SERV_AUTHDIR), ".gdmfifo", NULL);
fifoconn = gdm_connection_open_fifo (path, 0660);
g_free (path);
@@ -2162,7 +1340,7 @@ gdm_make_global_cookie (void)
gdm_global_cookie = faked.cookie;
gdm_global_bcookie = faked.bcookie;
- file = g_build_filename (GdmServAuthDir, ".cookie", NULL);
+ file = g_build_filename (gdm_get_value_string (GDM_KEY_SERV_AUTHDIR), ".cookie", NULL);
VE_IGNORE_EINTR (unlink (file));
oldmode = umask (077);
@@ -2190,10 +1368,11 @@ gdm_make_global_cookie (void)
int
main (int argc, char *argv[])
{
+ FILE *pf;
sigset_t mask;
struct sigaction sig, child, abrt;
- FILE *pf;
poptContext ctx;
+ gchar *pidfile;
int nextopt;
const char *charset;
@@ -2248,7 +1427,6 @@ main (int argc, char *argv[])
/* XDM compliant error message */
if G_UNLIKELY (getuid () != 0) {
/* make sure the pid file doesn't get wiped */
- GdmPidFile = NULL;
gdm_fail (_("Only root wants to run gdm\n"));
}
@@ -2278,20 +1456,23 @@ main (int argc, char *argv[])
/* Parse configuration file */
gdm_config_parse();
+ pidfile = gdm_get_value_string (GDM_KEY_PID_FILE);
+
/* Check if another gdm process is already running */
- if (access (GdmPidFile, R_OK) == 0) {
+ if (access (pidfile, R_OK) == 0) {
/* Check if the existing process is still alive. */
gint pidv;
- pf = fopen (GdmPidFile, "r");
+ pf = fopen (pidfile, "r");
if (pf != NULL &&
fscanf (pf, "%d", &pidv) == 1 &&
kill (pidv, 0) == 0 &&
linux_only_is_running (pidv)) {
/* make sure the pid file doesn't get wiped */
- GdmPidFile = NULL;
+ gdm_set_value_string (GDM_KEY_PID_FILE, NULL);
+ pidfile = NULL;
VE_IGNORE_EINTR (fclose (pf));
gdm_fail (_("gdm already running. Aborting!"));
}
@@ -2305,28 +1486,28 @@ main (int argc, char *argv[])
/* Write pid to pidfile */
errno = 0;
- if ((pf = gdm_safe_fopen_w (GdmPidFile)) != NULL) {
+ if ((pf = gdm_safe_fopen_w (pidfile)) != NULL) {
errno = 0;
VE_IGNORE_EINTR (fprintf (pf, "%d\n", (int)getpid()));
VE_IGNORE_EINTR (fclose (pf));
if (errno != 0) {
/* FIXME: how to handle this? */
gdm_fdprintf (2, _("Cannot write PID file %s: possibly out of diskspace. Error: %s\n"),
- GdmPidFile, strerror (errno));
+ pidfile, strerror (errno));
gdm_error (_("Cannot write PID file %s: possibly out of diskspace. Error: %s"),
- GdmPidFile, strerror (errno));
+ pidfile, strerror (errno));
}
} else if (errno != 0) {
/* FIXME: how to handle this? */
gdm_fdprintf (2, _("Cannot write PID file %s: possibly out of diskspace. Error: %s\n"),
- GdmPidFile, strerror (errno));
+ pidfile, strerror (errno));
gdm_error (_("Cannot write PID file %s: possibly out of diskspace. Error: %s"),
- GdmPidFile, strerror (errno));
+ pidfile, strerror (errno));
}
- VE_IGNORE_EINTR (chdir (GdmServAuthDir));
+ VE_IGNORE_EINTR (chdir (gdm_get_value_string (GDM_KEY_SERV_AUTHDIR)));
umask (022);
}
else
@@ -2430,11 +1611,11 @@ main (int argc, char *argv[])
gdm_debug ("gdm_main: Here we go...");
#ifdef HAVE_LOGINDEVPERM
- di_devperm_login("/dev/console", GdmUserId, GdmGroupId, NULL);
+ di_devperm_login("/dev/console", gdm_get_gdmuid(), gdm_get_gdmgid(), NULL);
#endif /* HAVE_LOGINDEVPERM */
/* Init XDMCP if applicable */
- if (GdmXdmcp && ! gdm_wait_for_go)
+ if (gdm_get_value_bool (GDM_KEY_XDMCP) && ! gdm_wait_for_go)
gdm_xdmcp_init();
create_connections ();
@@ -2450,7 +1631,7 @@ main (int argc, char *argv[])
gdm_start_first_unborn_local (0 /* delay */);
/* Accept remote connections */
- if (GdmXdmcp && ! gdm_wait_for_go) {
+ if (gdm_get_value_bool (GDM_KEY_XDMCP) && ! gdm_wait_for_go) {
gdm_debug ("Accepting XDMCP connections...");
gdm_xdmcp_run();
}
@@ -2501,7 +1682,7 @@ static void
write_x_servers (GdmDisplay *d)
{
FILE *fp;
- char *file = gdm_make_filename (GdmServAuthDir, d->name, ".Xservers");
+ char *file = gdm_make_filename (gdm_get_value_string (GDM_KEY_SERV_AUTHDIR), d->name, ".Xservers");
int i;
int bogusname;
@@ -2600,7 +1781,7 @@ static void
gdm_handle_message (GdmConnection *conn, const char *msg, gpointer data)
{
/* Evil!, all this for debugging? */
- if G_UNLIKELY (GdmDebug) {
+ if G_UNLIKELY (gdm_get_value_bool (GDM_KEY_DEBUG)) {
if (strncmp (msg, GDM_SOP_COOKIE " ",
strlen (GDM_SOP_COOKIE " ")) == 0) {
char *s = g_strndup
@@ -2859,7 +2040,7 @@ gdm_handle_message (GdmConnection *conn, const char *msg, gpointer data)
if (d->attached && di->attached && di->vt > 0)
migratable = TRUE;
- else if (GdmXdmcpProxyReconnect != NULL &&
+ else if (gdm_get_value_string (GDM_KEY_XDMCP_PROXY_RECONNECT) != NULL &&
d->type == TYPE_XDMCP_PROXY && di->type == TYPE_XDMCP_PROXY)
migratable = TRUE;
@@ -3086,7 +2267,7 @@ gdm_handle_message (GdmConnection *conn, const char *msg, gpointer data)
send_slave_command (d, GDM_NOTIFY_GO);
}
/* Init XDMCP if applicable */
- if (old_wait && GdmXdmcp) {
+ if (old_wait && gdm_get_value_bool (GDM_KEY_XDMCP)) {
if (gdm_xdmcp_init()) {
gdm_debug ("Accepting XDMCP connections...");
gdm_xdmcp_run();
@@ -3112,8 +2293,8 @@ gdm_handle_message (GdmConnection *conn, const char *msg, gpointer data)
}
} else if (strcmp (msg, GDM_SOP_SUSPEND_MACHINE) == 0) {
gdm_info (_("Master suspending..."));
- if (GdmSuspendReal != NULL &&
- GdmSystemMenu) {
+ if (gdm_get_value_string (GDM_KEY_SUSPEND) != NULL &&
+ gdm_get_value_string (GDM_KEY_SYSTEM_MENU)) {
suspend_machine ();
}
} else if (strncmp (msg, GDM_SOP_CHOSEN_THEME " ",
@@ -3147,7 +2328,7 @@ gdm_handle_message (GdmConnection *conn, const char *msg, gpointer data)
send_slave_ack (d, NULL);
}
} else if (strcmp(msg, GDM_SOP_FLEXI_XSERVER) == 0) {
- handle_flexi_server (NULL, TYPE_FLEXI, GdmStandardXServer,
+ handle_flexi_server (NULL, TYPE_FLEXI, gdm_get_value_string (GDM_KEY_STANDARD_XSERVER),
TRUE /* handled */,
FALSE /* chooser */,
NULL, 0, NULL, NULL);
@@ -3394,7 +2575,7 @@ handle_flexi_server (GdmConnection *conn, int type, const char *server,
NEVER_FAILS_seteuid (0);
if (setegid (pw->pw_gid) < 0)
- NEVER_FAILS_setegid (GdmGroupId);
+ NEVER_FAILS_setegid (gdm_get_gdmgid);
if (seteuid (xnest_uid) < 0) {
if (conn != NULL)
@@ -3433,7 +2614,7 @@ handle_flexi_server (GdmConnection *conn, int type, const char *server,
server_uid = xnest_uid;
}
- if (flexi_servers >= GdmFlexibleXServers) {
+ if (flexi_servers >= gdm_get_value_int (GDM_KEY_FLEXIBLE_XSERVERS)) {
if (conn != NULL)
gdm_connection_write (conn,
"ERROR 1 No more flexi servers\n");
@@ -3519,7 +2700,7 @@ handle_dynamic_server (GdmConnection *conn, int type, char *key)
char *full;
char *val;
- if (!(GdmDynamicXServers)) {
+ if (!(gdm_get_value_bool (GDM_KEY_DYNAMIC_XSERVERS))) {
gdm_connection_write (conn, "ERROR 200 Dynamic Displays not allowed\n");
return;
}
@@ -3560,13 +2741,13 @@ handle_dynamic_server (GdmConnection *conn, int type, char *key)
}
displays = g_slist_insert_sorted (displays,
disp,
- compare_displays);
+ gdm_compare_displays);
disp->dispstat = DISPLAY_CONFIG;
disp->removeconf = FALSE;
- if (disp_num > high_display_num)
- high_display_num = disp_num;
+ if (disp_num > gdm_get_high_display_num())
+ gdm_set_high_display_num (disp_num);
gdm_connection_write (conn, "OK\n");
return;
@@ -3616,412 +2797,6 @@ handle_dynamic_server (GdmConnection *conn, int type, char *key)
}
}
-static gboolean
-is_key (const char *key1, const char *key2)
-{
- char *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;
- }
-}
-
-static void
-notify_displays_int (const char *key, int val)
-{
- GSList *li;
- for (li = displays; li != NULL; li = li->next) {
- GdmDisplay *disp = li->data;
- if (disp->master_notify_fd >= 0) {
- gdm_fdprintf (disp->master_notify_fd,
- "%c%s %d\n",
- GDM_SLAVE_NOTIFY_KEY, key, val);
- if (disp->slavepid > 1)
- kill (disp->slavepid, SIGUSR2);
- }
- }
-}
-
-static void
-notify_displays_string (const char *key, const char *val)
-{
- GSList *li;
- for (li = displays; li != NULL; li = li->next) {
- GdmDisplay *disp = li->data;
- if (disp->master_notify_fd >= 0) {
- gdm_fdprintf (disp->master_notify_fd,
- "%c%s %s\n",
- GDM_SLAVE_NOTIFY_KEY, key, val);
- if (disp->slavepid > 1)
- kill (disp->slavepid, SIGUSR2);
- }
- }
-}
-
-static gboolean
-update_config (const char *key)
-{
- struct stat statbuf;
- VeConfig *cfg;
- int r;
-
- VE_IGNORE_EINTR (r = stat (config_file, &statbuf));
- if G_UNLIKELY (r < 0) {
- /* if the file didn't exist before either */
- if (config_file_mtime == 0)
- return TRUE;
- } else {
- if (config_file_mtime == statbuf.st_mtime)
- return TRUE;
- config_file_mtime = statbuf.st_mtime;
- }
-
- cfg = ve_config_new (config_file);
-
- if (is_key (key, GDM_KEY_ALLOWROOT)) {
- gboolean val = ve_config_get_bool (cfg, GDM_KEY_ALLOWROOT);
- if (ve_bool_equal (val, GdmAllowRoot))
- goto update_config_ok;
- GdmAllowRoot = val;
-
- notify_displays_int (GDM_NOTIFY_ALLOWROOT, val);
-
- goto update_config_ok;
- } else if (is_key (key, GDM_KEY_ALLOWREMOTEROOT)) {
- gchar *temp;
- gboolean val;
- struct stat statbuf;
- int r;
-
- /* First try to read values from /etc/default/login */
- VE_IGNORE_EINTR (r = stat ("/etc/default/login", &statbuf));
- if (r < 0) {
- gchar *temp = gdm_read_default ("CONSOLE=");
- if (temp == NULL || g_ascii_strcasecmp (temp, "/dev/console") != 0)
- val = TRUE;
- else
- val = FALSE;
- g_free (temp);
- } else {
- val = ve_config_get_bool (cfg, GDM_KEY_ALLOWREMOTEROOT);
- }
-
- if (ve_bool_equal (val, GdmAllowRemoteRoot))
- goto update_config_ok;
- GdmAllowRemoteRoot = val;
-
- notify_displays_int (GDM_NOTIFY_ALLOWREMOTEROOT, val);
-
- goto update_config_ok;
- } else if (is_key (key, GDM_KEY_ALLOWREMOTEAUTOLOGIN)) {
- gboolean val = ve_config_get_bool (cfg, GDM_KEY_ALLOWREMOTEAUTOLOGIN);
- if (ve_bool_equal (val, GdmAllowRemoteAutoLogin))
- goto update_config_ok;
- GdmAllowRemoteAutoLogin = val;
-
- notify_displays_int (GDM_NOTIFY_ALLOWREMOTEAUTOLOGIN, val);
-
- goto update_config_ok;
- } else if (is_key (key, GDM_KEY_SYSMENU)) {
- gboolean val = ve_config_get_bool (cfg, GDM_KEY_SYSMENU);
- if (ve_bool_equal (val, GdmSystemMenu))
- goto update_config_ok;
- GdmSystemMenu = val;
-
- notify_displays_int (GDM_NOTIFY_SYSMENU, val);
-
- goto update_config_ok;
- } else if (is_key (key, GDM_KEY_CONFIG_AVAILABLE)) {
- gboolean val = ve_config_get_bool (cfg, GDM_KEY_CONFIG_AVAILABLE);
- if (ve_bool_equal (val, GdmConfigAvailable))
- goto update_config_ok;
- GdmConfigAvailable = val;
-
- notify_displays_int (GDM_NOTIFY_CONFIG_AVAILABLE, val);
-
- goto update_config_ok;
- } else if (is_key (key, GDM_KEY_CHOOSER_BUTTON)) {
- gboolean val = ve_config_get_bool (cfg, GDM_KEY_CHOOSER_BUTTON);
- if (ve_bool_equal (val, GdmChooserButton))
- goto update_config_ok;
- GdmChooserButton = val;
-
- notify_displays_int (GDM_NOTIFY_CHOOSER_BUTTON, val);
-
- goto update_config_ok;
- } else if (is_key (key, GDM_KEY_RETRYDELAY)) {
- int val = ve_config_get_int (cfg, GDM_KEY_RETRYDELAY);
- if (val == GdmRetryDelay)
- goto update_config_ok;
- GdmRetryDelay = val;
-
- notify_displays_int (GDM_NOTIFY_RETRYDELAY, val);
-
- goto update_config_ok;
- } else if (is_key (key, GDM_KEY_DISALLOWTCP)) {
- gboolean val = ve_config_get_bool (cfg, GDM_KEY_DISALLOWTCP);
- if (ve_bool_equal (val, GdmDisallowTCP))
- goto update_config_ok;
- GdmDisallowTCP = val;
-
- notify_displays_int (GDM_NOTIFY_DISALLOWTCP, val);
-
- goto update_config_ok;
- } else if (is_key (key, GDM_KEY_GREETER)) {
- char *val = ve_config_get_string (cfg, GDM_KEY_GREETER);
- if (strcmp (ve_sure_string (val), ve_sure_string (GdmGreeter)) == 0) {
- g_free (val);
- goto update_config_ok;
- }
- g_free (GdmGreeter);
- GdmGreeter = val;
-
- notify_displays_string (GDM_NOTIFY_GREETER, val);
-
- goto update_config_ok;
- } else if (is_key (key, GDM_KEY_REMOTEGREETER)) {
- char *val = ve_config_get_string (cfg, GDM_KEY_REMOTEGREETER);
- if (strcmp (ve_sure_string (val), ve_sure_string (GdmRemoteGreeter)) == 0) {
- g_free (val);
- goto update_config_ok;
- }
- g_free (GdmRemoteGreeter);
- GdmRemoteGreeter = val;
-
- notify_displays_string (GDM_NOTIFY_REMOTEGREETER, val);
-
- goto update_config_ok;
- } else if (is_key (key, GDM_KEY_TIMED_LOGIN) ||
- is_key (key, GDM_KEY_TIMED_LOGIN_ENABLE)) {
- gboolean enable = ve_config_get_bool (cfg, GDM_KEY_TIMED_LOGIN_ENABLE);
- char *val;
-
- /* if not enabled, we just don't care */
- if ( ! enable && ! GdmTimedLoginEnable)
- goto update_config_ok;
-
- val = ve_config_get_string (cfg, GDM_KEY_TIMED_LOGIN);
- if (strcmp (ve_sure_string (val),
- ve_sure_string (GdmTimedLogin)) == 0 &&
- ve_bool_equal (enable, GdmTimedLoginEnable)) {
- g_free (val);
- goto update_config_ok;
- }
-
- GdmTimedLoginEnable = enable;
- g_free (GdmTimedLogin);
- if (GdmTimedLoginEnable) {
- GdmTimedLogin = val;
- } else {
- g_free (val);
- GdmTimedLogin = NULL;
- }
-
- notify_displays_string (GDM_NOTIFY_TIMED_LOGIN,
- ve_sure_string (GdmTimedLogin));
-
- goto update_config_ok;
- } else if (is_key (key, GDM_KEY_TIMED_LOGIN_DELAY)) {
- int val = ve_config_get_int (cfg, GDM_KEY_TIMED_LOGIN_DELAY);
- if (val == GdmTimedLoginDelay)
- goto update_config_ok;
- GdmTimedLoginDelay = val;
-
- notify_displays_int (GDM_NOTIFY_TIMED_LOGIN_DELAY, val);
-
- goto update_config_ok;
- } else if (is_key (key, GDM_KEY_XDMCP)) {
- gboolean val = ve_config_get_bool (cfg, GDM_KEY_XDMCP);
- if (ve_bool_equal (val, GdmXdmcp))
- goto update_config_ok;
- GdmXdmcp = val;
-
- if (GdmXdmcp) {
- if (gdm_xdmcp_init ()) {
- gdm_debug ("Accepting XDMCP connections...");
- gdm_xdmcp_run ();
- }
- } else {
- gdm_debug ("Turning off XDMCP connections...");
- gdm_xdmcp_close ();
- }
-
- goto update_config_ok;
- } else if (is_key (key, "xdmcp/PARAMETERS")) {
- GdmDispPerHost = ve_config_get_int (cfg, GDM_KEY_DISPERHOST);
- GdmMaxPending = ve_config_get_int (cfg, GDM_KEY_MAXPEND);
- GdmMaxManageWait = ve_config_get_int (cfg, GDM_KEY_MAXWAIT);
- GdmMaxSessions = ve_config_get_int (cfg, GDM_KEY_MAXSESS);
- GdmIndirect = ve_config_get_bool (cfg, GDM_KEY_INDIRECT);
- GdmMaxIndirect = ve_config_get_int (cfg, GDM_KEY_MAXINDIR);
- GdmMaxIndirectWait = ve_config_get_int (cfg, GDM_KEY_MAXINDWAIT);
- GdmPingInterval = ve_config_get_int (cfg, GDM_KEY_PINGINTERVAL);
- } else if (is_key (key, GDM_KEY_DEBUG)) {
- GdmDebug = ve_config_get_bool (cfg, GDM_KEY_DEBUG);
- } else if (is_key (key, GDM_KEY_DEBUG_GESTURES)) {
- GdmDebugGestures = ve_config_get_bool (cfg, GDM_KEY_DEBUG_GESTURES);
- } else if (is_key (key, GDM_KEY_UDPPORT)) {
- int val = ve_config_get_int (cfg, GDM_KEY_UDPPORT);
- if (GdmPort == val)
- goto update_config_ok;
- GdmPort = val;
-
- if (GdmXdmcp) {
- gdm_xdmcp_close ();
- if (gdm_xdmcp_init ())
- gdm_xdmcp_run ();
- }
- } else if (is_key (key, GDM_KEY_SOUND_ON_LOGIN_READY_FILE)) {
- char *val = ve_config_get_string (cfg, GDM_KEY_SOUND_ON_LOGIN_READY_FILE);
- if (strcmp (ve_sure_string (val), ve_sure_string (GdmSoundOnLoginReadyFile)) == 0) {
- g_free (val);
- goto update_config_ok;
- }
- g_free (GdmSoundOnLoginReadyFile);
- GdmSoundOnLoginReadyFile = val;
-
- notify_displays_string (GDM_NOTIFY_SOUND_ON_LOGIN_READY_FILE, val);
-
- goto update_config_ok;
- } else if (is_key (key, GDM_KEY_SOUND_ON_LOGIN_SUCCESS_FILE)) {
- char *val = ve_config_get_string (cfg, GDM_KEY_SOUND_ON_LOGIN_SUCCESS_FILE);
- if (strcmp (ve_sure_string (val), ve_sure_string (GdmSoundOnLoginSuccessFile)) == 0) {
- g_free (val);
- goto update_config_ok;
- }
- g_free (GdmSoundOnLoginSuccessFile);
- GdmSoundOnLoginSuccessFile = val;
-
- notify_displays_string (GDM_NOTIFY_SOUND_ON_LOGIN_SUCCESS_FILE, val);
-
- goto update_config_ok;
- } else if (is_key (key, GDM_KEY_SOUND_ON_LOGIN_FAILURE_FILE)) {
- char *val = ve_config_get_string (cfg, GDM_KEY_SOUND_ON_LOGIN_FAILURE_FILE);
- if (strcmp (ve_sure_string (val), ve_sure_string (GdmSoundOnLoginFailureFile)) == 0) {
- g_free (val);
- goto update_config_ok;
- }
- g_free (GdmSoundOnLoginFailureFile);
- GdmSoundOnLoginFailureFile = val;
-
- notify_displays_string (GDM_NOTIFY_SOUND_ON_LOGIN_FAILURE_FILE, val);
-
- goto update_config_ok;
- } else if (is_key (key, GDM_KEY_GTK_MODULES_LIST)) {
- char *val = ve_config_get_string (cfg, GDM_KEY_GTK_MODULES_LIST);
- if (strcmp (ve_sure_string (val), ve_sure_string (GdmGtkModulesList)) == 0) {
- g_free (val);
- goto update_config_ok;
- }
- g_free (GdmGtkModulesList);
- GdmGtkModulesList = val;
-
- notify_displays_string (GDM_NOTIFY_GTK_MODULES_LIST, val);
-
- goto update_config_ok;
- } else if (is_key (key, GDM_KEY_ADD_GTK_MODULES)) {
- gboolean val = ve_config_get_bool (cfg, GDM_KEY_ADD_GTK_MODULES);
- if (ve_bool_equal (val, GdmAddGtkModules))
- goto update_config_ok;
- GdmAddGtkModules = val;
-
- notify_displays_int (GDM_NOTIFY_ADD_GTK_MODULES, val);
-
- goto update_config_ok;
- }
-
- ve_config_destroy (cfg);
- return FALSE;
-
-update_config_ok:
-
- ve_config_destroy (cfg);
- return TRUE;
-}
-
-/*
- * These fuctions print out the runtime value if present, else print out the #define key
- * which include compiled-in default settings if there isn't a setting in the gdm.conf
- * file.
- */
-static gboolean
-print_defaultbool_if_key (VeConfig *cfg, GdmConnection *conn, const char *checkkey, char *key, gboolean *runtime_val)
-{
- gboolean val;
-
- if (is_key (checkkey, key)) {
- if (runtime_val != NULL)
- val = *runtime_val;
- else
- val = ve_config_get_bool (cfg, key);
-
- if (val)
- gdm_connection_printf (conn, "OK true\n");
- else
- gdm_connection_printf (conn, "OK false\n");
- return TRUE;
- }
-
- return FALSE;
-}
-
-static gboolean
-print_defaultstring_if_key (VeConfig *cfg, GdmConnection *conn, const char *checkkey, char *key, char *runtime_val)
-{
- char *val;
-
- if (is_key (checkkey, key)) {
- if (runtime_val != NULL)
- val = runtime_val;
- else
- val = ve_config_get_string (cfg, key);
-
- if (val != NULL) {
- gdm_connection_printf (conn, "OK %s\n", val);
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-static gboolean
-print_defaultint_if_key (VeConfig *cfg, GdmConnection *conn, const char *checkkey, char *key, int *runtime_val)
-{
- int val;
-
- if (is_key (checkkey, key)) {
- if (runtime_val != NULL)
- val = *runtime_val;
- else
- val = ve_config_get_int (cfg, key);
-
- gdm_connection_printf (conn, "OK %d\n", val);
- return TRUE;
- }
-
- return FALSE;
-}
-
static void
gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
{
@@ -4088,7 +2863,7 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
"ERROR 100 Not authenticated\n");
return;
}
- handle_flexi_server (conn, TYPE_FLEXI, GdmStandardXServer,
+ handle_flexi_server (conn, TYPE_FLEXI, gdm_get_value_string (GDM_KEY_STANDARD_XSERVER),
TRUE /* handled */,
FALSE /* chooser */,
NULL, 0, NULL, NULL);
@@ -4096,7 +2871,7 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
strlen (GDM_SUP_FLEXI_XSERVER " ")) == 0) {
char *name;
const char *command = NULL;
- GdmXServer *svr;
+ GdmXserver *svr;
/* Only allow locally authenticated connections */
if ( ! GDM_CONN_AUTHENTICATED(conn)) {
@@ -4120,12 +2895,12 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
* long and dangerous */
gdm_error (_("Unknown server type requested; using "
"standard server."));
- command = GdmStandardXServer;
+ command = gdm_get_value_string (GDM_KEY_STANDARD_XSERVER);
} else if G_UNLIKELY ( ! svr->flexible) {
gdm_error (_("Requested server %s not allowed to be "
"used for flexible servers; using "
"standard server."), name);
- command = GdmStandardXServer;
+ command = gdm_get_value_string (GDM_KEY_STANDARD_XSERVER);
} else {
command = svr->command;
}
@@ -4164,7 +2939,7 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
return;
}
- handle_flexi_server (conn, TYPE_FLEXI_XNEST, GdmXnest,
+ handle_flexi_server (conn, TYPE_FLEXI_XNEST, gdm_get_value_string (GDM_KEY_XNEST),
TRUE /* handled */,
FALSE /* chooser */,
dispname, uid, xauthfile, cookie);
@@ -4251,167 +3026,22 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
strlen (GDM_SUP_UPDATE_CONFIG " ")) == 0) {
const char *key =
&msg[strlen (GDM_SUP_UPDATE_CONFIG " ")];
+ char *val;
- if ( ! update_config (key)) {
+ if (! gdm_update_config (key))
gdm_connection_printf (conn, "ERROR 50 Unsupported key <%s>\n", key);
- } else {
+ else
gdm_connection_write (conn, "OK\n");
- }
} else if (strncmp (msg, GDM_SUP_GET_CONFIG " ",
strlen (GDM_SUP_GET_CONFIG " ")) == 0) {
- VeConfig *cfg = ve_config_get (config_file);
- const char *key =
- &msg[strlen (GDM_SUP_GET_CONFIG " ")];
-
- /* If the value is loaded by the daemon, print out value from memory.
- * This is more useful than checking the config file, since the config
- * file may have changed since GDM was started, and may not be
- * currently used.
- */
- if (!(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_ALLOWREMOTEROOT, &GdmAllowRemoteRoot)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_ALLOWROOT, &GdmAllowRoot)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_ALLOWREMOTEAUTOLOGIN, &GdmAllowRemoteAutoLogin)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_PASSWORDREQUIRED, &GdmPasswordRequired)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_AUTOMATICLOGIN_ENABLE, &GdmAutomaticLoginEnable)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_ALWAYSRESTARTSERVER, &GdmAlwaysRestartServer)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_ADD_GTK_MODULES, &GdmAddGtkModules)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_DOUBLELOGINWARNING, &GdmDoubleLoginWarning)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_ALWAYS_LOGIN_CURRENT_SESSION, &GdmAlwaysLoginCurrentSession)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_DISPLAY_LAST_LOGIN, &GdmDisplayLastLogin)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_KILLIC, &GdmKillInitClients)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_CONFIG_AVAILABLE, &GdmConfigAvailable)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_SYSMENU, &GdmSystemMenu)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_CHOOSER_BUTTON, &GdmChooserButton)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_BROWSER, &GdmBrowser)) &&
-#ifdef ENABLE_IPV6
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_MULTICAST, &GdmMulticast)) &&
-#endif
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_NEVERPLACECOOKIESONNFS, &GdmNeverPlaceCookiesOnNFS)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_CONSOLE_NOTIFY, &GdmConsoleNotify)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_TIMED_LOGIN_ENABLE, &GdmTimedLoginEnable)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_ALLOWROOT, &GdmAllowRoot)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_CHECKDIROWNER, &GdmCheckDirOwner)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_XDMCP, &GdmXdmcp)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_INDIRECT, &GdmIndirect)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_XDMCP_PROXY, &GdmXdmcpProxy)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_DYNAMIC_XSERVERS, &GdmDynamicXServers)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_VTALLOCATION, &GdmVTAllocation)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_DISALLOWTCP, &GdmDisallowTCP)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_SOUND_ON_LOGIN_SUCCESS, &GdmSoundOnLoginSuccess)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_SOUND_ON_LOGIN_FAILURE, &GdmSoundOnLoginFailure)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_DEBUG, &GdmDebug)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_DEBUG_GESTURES, &GdmDebugGestures)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_ALLOW_GTK_THEME_CHANGE, NULL)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_TITLE_BAR, NULL)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_INCLUDEALL, NULL)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_DEFAULT_WELCOME, NULL)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_DEFAULT_REMOTEWELCOME, NULL)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_LOCK_POSITION, NULL)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_BACKGROUNDSCALETOFIT, NULL)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_BACKGROUNDREMOTEONLYCOLOR, NULL)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_RUNBACKGROUNDPROGALWAYS, NULL)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_SET_POSITION, NULL)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_QUIVER, NULL)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_SHOW_GNOME_FAILSAFE, NULL)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_SHOW_XTERM_FAILSAFE, NULL)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_SHOW_LAST_SESSION, NULL)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_USE_24_CLOCK, NULL)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_ENTRY_CIRCLES, NULL)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_ENTRY_INVISIBLE, NULL)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_GRAPHICAL_THEME_RAND, NULL)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_BROADCAST, NULL)) &&
- !(print_defaultbool_if_key (cfg, conn, key, GDM_KEY_ALLOWADD, NULL)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_PATH, GdmDefaultPath)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_ROOTPATH, GdmRootPath)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_CONSOLE_CANNOT_HANDLE, GdmConsoleCannotHandle)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_CHOOSER, GdmChooser)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_GREETER, GdmGreeter)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_CONFIGURATOR, GdmConfigurator)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_POSTLOGIN, GdmPostLogin)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_PRESESS, GdmPreSession)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_POSTSESS, GdmPostSession)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_FAILSAFE_XSERVER, GdmFailsafeXServer)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_XKEEPSCRASHING, GdmXKeepsCrashing)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_BASEXSESSION, GdmXsession)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_REMOTEGREETER, GdmRemoteGreeter)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_INITDIR, GdmDisplayInit)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_AUTOMATICLOGIN, GdmAutomaticLogin)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_GTK_MODULES_LIST, GdmGtkModulesList)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_REBOOT, GdmReboot)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_HALT, GdmHalt)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_SUSPEND, GdmSuspend)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_LOGDIR, GdmLogDir)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_PIDFILE, GdmPidFile)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_FACEDIR, GdmGlobalFaceDir)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_SERVAUTH, GdmServAuthDir)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_UAUTHDIR, GdmUserAuthDir)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_UAUTHFILE, GdmUserAuthFile)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_UAUTHFB, GdmUserAuthFB)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_SESSDIR, GdmSessDir)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_DEFAULTSESSION, GdmDefaultSession)) &&
-#ifdef ENABLE_IPV6
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_MULTICAST_ADDR, GdmMulticastAddr)) &&
-#endif
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_USER, GdmUser)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_GROUP, GdmGroup)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_GTKRC, GdmGtkRC)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_GTK_THEME, GdmGtkTheme)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_TIMED_LOGIN, GdmTimedLogin)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_WILLING, GdmWilling)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_XDMCP_PROXY_XSERVER, GdmXdmcpProxyCommand)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_XDMCP_PROXY_RECONNECT, GdmXdmcpProxyReconnect)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_STANDARD_XSERVER, GdmStandardXServer)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_XNEST, GdmXnest)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_SOUND_PROGRAM, GdmSoundProgram)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_SOUND_ON_LOGIN_SUCCESS_FILE, GdmSoundOnLoginSuccessFile)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_SOUND_ON_LOGIN_FAILURE_FILE, GdmSoundOnLoginFailureFile)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_GTK_THEMES_TO_ALLOW, NULL)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_INCLUDE, NULL)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_EXCLUDE, NULL)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_FACE, NULL)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_LOCFILE, NULL)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_LOGO, NULL)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_CHOOSER_BUTTON_LOGO, NULL)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_WELCOME, NULL)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_REMOTEWELCOME, NULL)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_BACKGROUNDPROG, NULL)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_BACKGROUNDIMAGE, NULL)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_BACKGROUNDCOLOR, NULL)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_GRAPHICAL_THEME, NULL)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_GRAPHICAL_THEME_DIR, NULL)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_GRAPHICAL_THEMES, NULL)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_GRAPHICAL_THEME_COLOR, NULL)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_INFO_MSG_FILE, NULL)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_INFO_MSG_FONT, NULL)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_INFO_MSG_FONT, NULL)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_HOST, NULL)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_HOSTDIR, NULL)) &&
- !(print_defaultstring_if_key (cfg, conn, key, GDM_KEY_HOSTS, NULL)) &&
- !(print_defaultint_if_key (cfg, conn, key, GDM_KEY_XINERAMASCREEN, &GdmXineramaScreen)) &&
- !(print_defaultint_if_key (cfg, conn, key, GDM_KEY_RETRYDELAY, &GdmRetryDelay)) &&
- !(print_defaultint_if_key (cfg, conn, key, GDM_KEY_TIMED_LOGIN_DELAY, &GdmTimedLoginDelay)) &&
- !(print_defaultint_if_key (cfg, conn, key, GDM_KEY_RELAXPERM, &GdmRelaxPerms)) &&
- !(print_defaultint_if_key (cfg, conn, key, GDM_KEY_MAXFILE, &GdmUserMaxFile)) &&
- !(print_defaultint_if_key (cfg, conn, key, GDM_KEY_DISPERHOST, &GdmDispPerHost)) &&
- !(print_defaultint_if_key (cfg, conn, key, GDM_KEY_MAXPEND, &GdmMaxPending)) &&
- !(print_defaultint_if_key (cfg, conn, key, GDM_KEY_MAXWAIT, &GdmMaxManageWait)) &&
- !(print_defaultint_if_key (cfg, conn, key, GDM_KEY_MAXSESS, &GdmMaxSessions)) &&
- !(print_defaultint_if_key (cfg, conn, key, GDM_KEY_UDPPORT, &GdmPort)) &&
- !(print_defaultint_if_key (cfg, conn, key, GDM_KEY_MAXINDIR, &GdmMaxIndirect)) &&
- !(print_defaultint_if_key (cfg, conn, key, GDM_KEY_MAXINDWAIT, &GdmMaxIndirectWait)) &&
- !(print_defaultint_if_key (cfg, conn, key, GDM_KEY_PINGINTERVAL, &GdmPingInterval)) &&
- !(print_defaultint_if_key (cfg, conn, key, GDM_KEY_FLEXIBLE_XSERVERS, &GdmFlexibleXServers)) &&
- !(print_defaultint_if_key (cfg, conn, key, GDM_KEY_FIRSTVT, &GdmFirstVT)) &&
- !(print_defaultint_if_key (cfg, conn, key, GDM_KEY_POSITIONX, NULL)) &&
- !(print_defaultint_if_key (cfg, conn, key, GDM_KEY_POSITIONY, NULL)) &&
- !(print_defaultint_if_key (cfg, conn, key, GDM_KEY_MINIMALUID, NULL)) &&
- !(print_defaultint_if_key (cfg, conn, key, GDM_KEY_ICONWIDTH, NULL)) &&
- !(print_defaultint_if_key (cfg, conn, key, GDM_KEY_ICONHEIGHT, NULL)) &&
- !(print_defaultint_if_key (cfg, conn, key, GDM_KEY_BACKGROUNDTYPE, NULL)) &&
- !(print_defaultint_if_key (cfg, conn, key, GDM_KEY_SCAN, NULL))) {
-
- gdm_connection_printf (conn, "ERROR 50 Unsupported key <%s>\n", key);
- }
+ const char *key = &msg[strlen (GDM_SUP_GET_CONFIG " ")];
+ char *retval;
+
+ gdm_config_to_string (key, &retval);
+ if (retval != NULL)
+ gdm_connection_printf (conn, "OK %s", retval);
+ else
+ gdm_connection_printf (conn, "ERROR 50 Unsupported key <%s>\n", key);
} else if (strcmp (msg, GDM_SUP_GET_CONFIG_FILE) == 0) {
GString *msg;
GSList *li;
@@ -4426,6 +3056,7 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
GdmDisplay *disp;
GdmLogoutAction logout_action;
GString *msg;
+ gboolean sysmenu = gdm_get_value_bool (GDM_KEY_SYSTEM_MENU);
disp = gdm_connection_get_display (conn);
@@ -4445,25 +3076,22 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
if (logout_action == GDM_LOGOUT_ACTION_NONE)
logout_action = safe_logout_action;
- if (GdmSystemMenu &&
- disp->attached &&
- ! ve_string_empty (GdmHaltReal)) {
+ if (sysmenu && disp->attached &&
+ ! ve_string_empty (gdm_get_value_string (GDM_KEY_HALT))) {
g_string_append_printf (msg, "%s%s", sep, GDM_SUP_LOGOUT_ACTION_HALT);
if (logout_action == GDM_LOGOUT_ACTION_HALT)
g_string_append (msg, "!");
sep = ";";
}
- if (GdmSystemMenu &&
- disp->attached &&
- ! ve_string_empty (GdmRebootReal)) {
+ if (sysmenu && disp->attached &&
+ ! ve_string_empty (gdm_get_value_string (GDM_KEY_REBOOT))) {
g_string_append_printf (msg, "%s%s", sep, GDM_SUP_LOGOUT_ACTION_REBOOT);
if (logout_action == GDM_LOGOUT_ACTION_REBOOT)
g_string_append (msg, "!");
sep = ";";
}
- if (GdmSystemMenu &&
- disp->attached &&
- ! ve_string_empty (GdmSuspendReal)) {
+ if (sysmenu && disp->attached &&
+ ! ve_string_empty (gdm_get_value_string (GDM_KEY_SUSPEND))) {
g_string_append_printf (msg, "%s%s", sep, GDM_SUP_LOGOUT_ACTION_SUSPEND);
if (logout_action == GDM_LOGOUT_ACTION_SUSPEND)
g_string_append (msg, "!");
@@ -4478,6 +3106,7 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
&msg[strlen (GDM_SUP_SET_LOGOUT_ACTION " ")];
GdmDisplay *disp;
gboolean was_ok = FALSE;
+ gboolean sysmenu = gdm_get_value_bool (GDM_KEY_SYSTEM_MENU);
disp = gdm_connection_get_display (conn);
@@ -4496,25 +3125,22 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
disp->logout_action = GDM_LOGOUT_ACTION_NONE;
was_ok = TRUE;
} else if (strcmp (action, GDM_SUP_LOGOUT_ACTION_HALT) == 0) {
- if (GdmSystemMenu &&
- disp->attached &&
- ! ve_string_empty (GdmHaltReal)) {
+ if (sysmenu && disp->attached &&
+ ! ve_string_empty (gdm_get_value_string (GDM_KEY_HALT))) {
disp->logout_action =
GDM_LOGOUT_ACTION_HALT;
was_ok = TRUE;
}
} else if (strcmp (action, GDM_SUP_LOGOUT_ACTION_REBOOT) == 0) {
- if (GdmSystemMenu &&
- disp->attached &&
- ! ve_string_empty (GdmRebootReal)) {
+ if (sysmenu && disp->attached &&
+ ! ve_string_empty (gdm_get_value_string (GDM_KEY_REBOOT))) {
disp->logout_action =
GDM_LOGOUT_ACTION_REBOOT;
was_ok = TRUE;
}
} else if (strcmp (action, GDM_SUP_LOGOUT_ACTION_SUSPEND) == 0) {
- if (GdmSystemMenu &&
- disp->attached &&
- ! ve_string_empty (GdmSuspendReal)) {
+ if (sysmenu && disp->attached &&
+ ! ve_string_empty (gdm_get_value_string (GDM_KEY_SUSPEND))) {
disp->logout_action =
GDM_LOGOUT_ACTION_SUSPEND;
was_ok = TRUE;
@@ -4532,6 +3158,7 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
&msg[strlen (GDM_SUP_SET_SAFE_LOGOUT_ACTION " ")];
GdmDisplay *disp;
gboolean was_ok = FALSE;
+ gboolean sysmenu = gdm_get_value_bool (GDM_KEY_SYSTEM_MENU);
disp = gdm_connection_get_display (conn);
@@ -4550,25 +3177,22 @@ gdm_handle_user_message (GdmConnection *conn, const char *msg, gpointer data)
safe_logout_action = GDM_LOGOUT_ACTION_NONE;
was_ok = TRUE;
} else if (strcmp (action, GDM_SUP_LOGOUT_ACTION_HALT) == 0) {
- if (GdmSystemMenu &&
- disp->attached &&
- ! ve_string_empty (GdmHaltReal)) {
+ if (sysmenu && disp->attached &&
+ ! ve_string_empty (gdm_get_value_string (GDM_KEY_HALT))) {
safe_logout_action =
GDM_LOGOUT_ACTION_HALT;
was_ok = TRUE;
}
} else if (strcmp (action, GDM_SUP_LOGOUT_ACTION_REBOOT) == 0) {
- if (GdmSystemMenu &&
- disp->attached &&
- ! ve_string_empty (GdmRebootReal)) {
+ if (sysmenu && disp->attached &&
+ ! ve_string_empty (gdm_get_value_string (GDM_KEY_REBOOT))) {
safe_logout_action =
GDM_LOGOUT_ACTION_REBOOT;
was_ok = TRUE;
}
} else if (strcmp (action, GDM_SUP_LOGOUT_ACTION_SUSPEND) == 0) {
- if (GdmSystemMenu &&
- disp->attached &&
- ! ve_string_empty (GdmSuspendReal)) {
+ if (sysmenu && disp->attached &&
+ ! ve_string_empty (gdm_get_value_string (GDM_KEY_SUSPEND))) {
safe_logout_action =
GDM_LOGOUT_ACTION_SUSPEND;
was_ok = TRUE;
diff --git a/daemon/gdm.h b/daemon/gdm.h
index 93b07882..78ac2131 100644
--- a/daemon/gdm.h
+++ b/daemon/gdm.h
@@ -1,4 +1,4 @@
-/* GDM - The Gnome Display Manager
+/* GDM - The GNOME Display Manager
* Copyright (C) 1998, 1999, 2000 Martin K. Petersen <mkp@mkp.net>
*
* This program is free software; you can redistribute it and/or modify
@@ -136,34 +136,45 @@ enum {
#define FIELD_SIZE 256
#define PIPE_SIZE 4096
-
/*
* The following section contains keys used by the gdm.conf configuration file.
* Options exposed in this file are Stable, and should not change in ways that
- * are not backwards incompatible. Note the GDM_KEY_DEFAULTWELCOME_BACKTEST
- * to see how backwards compatibility can be handled.
+ * are not backwards incompatible. Note how GDM_KEY_DEFAULTWELCOME_BACKTEST
+ * works to see how backwards compatibility can be handled.
*
* Developers who add new configuration options should ensure that they do the
* following:
*
* + Specify the same default in this file as in the config/gdm.conf.in file.
- * + Update the GET_CONFIG logic in the gdm_handle_user_message() function in
- * daemon/gdm.c to handle the new option.
- * + Update the SET_CONFIG logic in the gdm_handle_user_message() function in
- * daemon/gdm.c to handle the new option if appropriate.
- * + The gui/gdmsetup.c program should be updated to support the new option.
- * If the option affects the greeter program, make sure update_greeters() is
- * called. For this to work, the update_config() logic in daemon/gdm.c
- * should be updated to call notify_displays_*() upon noticing the
- * configuration change. The gdm_reread_config() in gui/gdmlogin.c and
- * gui/greeter/greeter.c will also need to be updated to notice the new
- * configuration option.
+ *
+ * + Update the val_hash and type_hash settings in gdm_config_init function
+ * in daemon/gdmconfig.c to add the new options.
+ *
+ * + Add any validation to the _gdm_set_value_string, _gdm_set_value_int,
+ * and/or _gdm_set_value_bool functions in gdmconfig.c, if needed.
+ *
+ * + The gui/gdmsetup.c program should be updated to support the new option
+ * unless there's a good reason not to.
+ *
+ * + If GDM_UPDATE_CONFIG should not respond to this configuration setting,
+ * update the update_config function in gdmconfig.c to return FALSE for
+ * this key. Examples include changing the PidFile, ServAuthDir, or
+ * other values that GDM shouldn't change until it is restarted. If
+ * this is true, the next bullet can be ignored.
+ *
+ * + If the option should cause the greeter (gdmlogin/gdmgreeter) program to
+ * be updated immediately, make sure to update the appropriate
+ * _gdm_set_value_* function in gdmconfig.c to cause a call to
+ * notify_displays_*() when this value is changed. Supporting logic will
+ * also be needed in the gdm_slave_handle_notify function in slave.c.
+ * It should be simple to see how to do this from the other examples.
+ *
* + Update the docs/C/gdm.xml file to include information about the new
* option. Include information about any other interfaces (such as
* ENVIRONMENT variables) that may affect the configuration option.
*
- * Please do this work *before* submitting an enhancement request via
- * bugzilla.
+ * Please do this work *before* submitting an patch. Patches that are not
+ * complete will not likely be accepted.
*/
/* Configuration constants */
@@ -171,40 +182,48 @@ enum {
/* This defaults to true for backward compatibility,
* it will not actually do automatic login since the AutomaticLogin defaults
* to nothing */
-#define GDM_KEY_AUTOMATICLOGIN_ENABLE "daemon/AutomaticLoginEnable=true"
-#define GDM_KEY_AUTOMATICLOGIN "daemon/AutomaticLogin="
-#define GDM_KEY_ALWAYSRESTARTSERVER "daemon/AlwaysRestartServer=false"
+#define GDM_KEY_AUTOMATIC_LOGIN_ENABLE "daemon/AutomaticLoginEnable=true"
+#define GDM_KEY_AUTOMATIC_LOGIN "daemon/AutomaticLogin="
+/* The SDTLOGIN feature is Solaris specific, and causes the Xserver to be
+ * run with user permissionsinstead of as root, which adds security but
+ * disables the AlwaysRestartServer option as highlighted in the gdm
+ * documentation */
+#ifdef sun
+#define GDM_KEY_ALWAYS_RESTART_SERVER "daemon/AlwaysRestartServer=true"
+#else
+#define GDM_KEY_ALWAYS_RESTART_SERVER "daemon/AlwaysRestartServer=false"
+#endif
#define GDM_KEY_GREETER "daemon/Greeter=" EXPANDED_LIBEXECDIR "/gdmlogin"
-#define GDM_KEY_REMOTEGREETER "daemon/RemoteGreeter=" EXPANDED_LIBEXECDIR "/gdmlogin"
+#define GDM_KEY_REMOTE_GREETER "daemon/RemoteGreeter=" EXPANDED_LIBEXECDIR "/gdmlogin"
#define GDM_KEY_ADD_GTK_MODULES "daemon/AddGtkModules=false"
#define GDM_KEY_GTK_MODULES_LIST "daemon/GtkModulesList="
#define GDM_KEY_GROUP "daemon/Group=gdm"
#define GDM_KEY_HALT "daemon/HaltCommand=" HALT_COMMAND
-#define GDM_KEY_INITDIR "daemon/DisplayInitDir=" EXPANDED_SYSCONFDIR "/gdm/Init"
-#define GDM_KEY_KILLIC "daemon/KillInitClients=true"
-#define GDM_KEY_LOGDIR "daemon/LogDir=" EXPANDED_LOGDIR
+#define GDM_KEY_DISPLAY_INIT_DIR "daemon/DisplayInitDir=" EXPANDED_SYSCONFDIR "/gdm/Init"
+#define GDM_KEY_KILL_INIT_CLIENTS "daemon/KillInitClients=true"
+#define GDM_KEY_LOG_DIR "daemon/LogDir=" EXPANDED_LOGDIR
#define GDM_KEY_PATH "daemon/DefaultPath=" GDM_USER_PATH
-#define GDM_KEY_PIDFILE "daemon/PidFile=/var/run/gdm.pid"
-#define GDM_KEY_POSTSESS "daemon/PostSessionScriptDir=" EXPANDED_SYSCONFDIR "/gdm/PostSession/"
-#define GDM_KEY_PRESESS "daemon/PreSessionScriptDir=" EXPANDED_SYSCONFDIR "/gdm/PreSession/"
+#define GDM_KEY_PID_FILE "daemon/PidFile=/var/run/gdm.pid"
+#define GDM_KEY_POSTSESSION "daemon/PostSessionScriptDir=" EXPANDED_SYSCONFDIR "/gdm/PostSession/"
+#define GDM_KEY_PRESESSION "daemon/PreSessionScriptDir=" EXPANDED_SYSCONFDIR "/gdm/PreSession/"
#define GDM_KEY_POSTLOGIN "daemon/PostLoginScriptDir=" EXPANDED_SYSCONFDIR "/gdm/PreSession/"
#define GDM_KEY_FAILSAFE_XSERVER "daemon/FailsafeXServer="
-#define GDM_KEY_XKEEPSCRASHING "daemon/XKeepsCrashing=" EXPANDED_SYSCONFDIR "/gdm/XKeepsCrashing"
+#define GDM_KEY_X_KEEPS_CRASHING "daemon/XKeepsCrashing=" EXPANDED_SYSCONFDIR "/gdm/XKeepsCrashing"
#define GDM_KEY_REBOOT "daemon/RebootCommand=" REBOOT_COMMAND
-#define GDM_KEY_ROOTPATH "daemon/RootPath=/sbin:/usr/sbin:" GDM_USER_PATH
-#define GDM_KEY_SERVAUTH "daemon/ServAuthDir=" EXPANDED_AUTHDIR
-#define GDM_KEY_SESSDIR "daemon/SessionDesktopDir=/etc/X11/sessions/:" EXPANDED_SYSCONFDIR "/dm/Sessions/:" EXPANDED_DATADIR "/gdm/BuiltInSessions/:" EXPANDED_DATADIR "/xsessions/"
-#define GDM_KEY_BASEXSESSION "daemon/BaseXsession=" EXPANDED_SYSCONFDIR "/gdm/Xsession"
-#define GDM_KEY_DEFAULTSESSION "daemon/DefaultSession=gnome.desktop"
+#define GDM_KEY_ROOT_PATH "daemon/RootPath=/sbin:/usr/sbin:" GDM_USER_PATH
+#define GDM_KEY_SERV_AUTHDIR "daemon/ServAuthDir=" EXPANDED_AUTHDIR
+#define GDM_KEY_SESSION_DESKTOP_DIR "daemon/SessionDesktopDir=/etc/X11/sessions/:" EXPANDED_SYSCONFDIR "/dm/Sessions/:" EXPANDED_DATADIR "/gdm/BuiltInSessions/:" EXPANDED_DATADIR "/xsessions/"
+#define GDM_KEY_BASE_XSESSION "daemon/BaseXsession=" EXPANDED_SYSCONFDIR "/gdm/Xsession"
+#define GDM_KEY_DEFAULT_SESSION "daemon/DefaultSession=gnome.desktop"
#define GDM_KEY_SUSPEND "daemon/SuspendCommand=" SUSPEND_COMMAND
-#define GDM_KEY_UAUTHDIR "daemon/UserAuthDir="
-#define GDM_KEY_UAUTHFB "daemon/UserAuthFBDir=/tmp"
-#define GDM_KEY_UAUTHFILE "daemon/UserAuthFile=.Xauthority"
+#define GDM_KEY_USER_AUTHDIR "daemon/UserAuthDir="
+#define GDM_KEY_USER_AUTHDIR_FALLBACK "daemon/UserAuthFBDir=/tmp"
+#define GDM_KEY_USER_AUTHFILE "daemon/UserAuthFile=.Xauthority"
#define GDM_KEY_USER "daemon/User=gdm"
#define GDM_KEY_CONSOLE_NOTIFY "daemon/ConsoleNotify=true"
-#define GDM_KEY_DOUBLELOGINWARNING "daemon/DoubleLoginWarning=true"
+#define GDM_KEY_DOUBLE_LOGIN_WARNING "daemon/DoubleLoginWarning=true"
#define GDM_KEY_ALWAYS_LOGIN_CURRENT_SESSION "daemon/AlwaysLoginCurrentSession=false"
#define GDM_KEY_DISPLAY_LAST_LOGIN "daemon/DisplayLastLogin=false"
@@ -224,8 +243,8 @@ enum {
#define GDM_KEY_XNEST "daemon/Xnest=" X_SERVER_PATH "/Xnest -name Xnest"
/* Keys for automatic VT allocation rather then letting it up to the
* X server */
-#define GDM_KEY_FIRSTVT "daemon/FirstVT=7"
-#define GDM_KEY_VTALLOCATION "daemon/VTAllocation=true"
+#define GDM_KEY_FIRST_VT "daemon/FirstVT=7"
+#define GDM_KEY_VT_ALLOCATION "daemon/VTAllocation=true"
#define GDM_KEY_CONSOLE_CANNOT_HANDLE "daemon/ConsoleCannotHandle=am,ar,az,bn,el,fa,gu,hi,ja,ko,ml,mr,pa,ta,zh"
@@ -242,28 +261,28 @@ enum {
/* Instead of the greeter run the chooser */
#define GDM_KEY_SERVER_CHOOSER "chooser=false"
-#define GDM_KEY_ALLOWROOT "security/AllowRoot=true"
-#define GDM_KEY_ALLOWREMOTEROOT "security/AllowRemoteRoot=true"
-#define GDM_KEY_ALLOWREMOTEAUTOLOGIN "security/AllowRemoteAutoLogin=false"
-#define GDM_KEY_MAXFILE "security/UserMaxFile=65536"
-#define GDM_KEY_RELAXPERM "security/RelaxPermissions=0"
-#define GDM_KEY_CHECKDIROWNER "security/CheckDirOwner=true"
-#define GDM_KEY_RETRYDELAY "security/RetryDelay=1"
-#define GDM_KEY_DISALLOWTCP "security/DisallowTCP=true"
+#define GDM_KEY_ALLOW_ROOT "security/AllowRoot=true"
+#define GDM_KEY_ALLOW_REMOTE_ROOT "security/AllowRemoteRoot=true"
+#define GDM_KEY_ALLOW_REMOTE_AUTOLOGIN "security/AllowRemoteAutoLogin=false"
+#define GDM_KEY_USER_MAX_FILE "security/UserMaxFile=65536"
+#define GDM_KEY_RELAX_PERM "security/RelaxPermissions=0"
+#define GDM_KEY_CHECK_DIR_OWNER "security/CheckDirOwner=true"
+#define GDM_KEY_RETRY_DELAY "security/RetryDelay=1"
+#define GDM_KEY_DISALLOW_TCP "security/DisallowTCP=true"
-#define GDM_KEY_NEVERPLACECOOKIESONNFS "security/NeverPlaceCookiesOnNFS=true"
-#define GDM_KEY_PASSWORDREQUIRED "security/PasswordRequired=false"
+#define GDM_KEY_NEVER_PLACE_COOKIES_ON_NFS "security/NeverPlaceCookiesOnNFS=true"
+#define GDM_KEY_PASSWORD_REQUIRED "security/PasswordRequired=false"
#define GDM_KEY_XDMCP "xdmcp/Enable=false"
-#define GDM_KEY_MAXPEND "xdmcp/MaxPending=4"
-#define GDM_KEY_MAXSESS "xdmcp/MaxSessions=16"
-#define GDM_KEY_MAXWAIT "xdmcp/MaxWait=15"
-#define GDM_KEY_DISPERHOST "xdmcp/DisplaysPerHost=2"
-#define GDM_KEY_UDPPORT "xdmcp/Port=177"
+#define GDM_KEY_MAX_PENDING "xdmcp/MaxPending=4"
+#define GDM_KEY_MAX_SESSIONS "xdmcp/MaxSessions=16"
+#define GDM_KEY_MAX_WAIT "xdmcp/MaxWait=15"
+#define GDM_KEY_DISPLAYS_PER_HOST "xdmcp/DisplaysPerHost=2"
+#define GDM_KEY_UDP_PORT "xdmcp/Port=177"
#define GDM_KEY_INDIRECT "xdmcp/HonorIndirect=true"
-#define GDM_KEY_MAXINDIR "xdmcp/MaxPendingIndirect=4"
-#define GDM_KEY_MAXINDWAIT "xdmcp/MaxWaitIndirect=15"
-#define GDM_KEY_PINGINTERVAL "xdmcp/PingIntervalSeconds=15"
+#define GDM_KEY_MAX_INDIRECT "xdmcp/MaxPendingIndirect=4"
+#define GDM_KEY_MAX_WAIT_INDIRECT "xdmcp/MaxWaitIndirect=15"
+#define GDM_KEY_PING_INTERVAL "xdmcp/PingIntervalSeconds=15"
#define GDM_KEY_WILLING "xdmcp/Willing=" EXPANDED_SYSCONFDIR "/gdm/Xwilling"
#define GDM_KEY_XDMCP_PROXY "xdmcp/EnableProxy=false"
@@ -272,8 +291,8 @@ enum {
#define GDM_KEY_GTK_THEME "gui/GtkTheme=Default"
#define GDM_KEY_GTKRC "gui/GtkRC=" EXPANDED_DATADIR "/themes/Default/gtk-2.0/gtkrc"
-#define GDM_KEY_ICONWIDTH "gui/MaxIconWidth=128"
-#define GDM_KEY_ICONHEIGHT "gui/MaxIconHeight=128"
+#define GDM_KEY_ICON_WIDTH "gui/MaxIconWidth=128"
+#define GDM_KEY_ICON_HEIGHT "gui/MaxIconHeight=128"
#define GDM_KEY_ALLOW_GTK_THEME_CHANGE "gui/AllowGtkThemeChange=true"
#define GDM_KEY_GTK_THEMES_TO_ALLOW "gui/GtkThemesToAllow=all"
@@ -281,40 +300,40 @@ enum {
#define GDM_KEY_BROWSER "greeter/Browser=false"
#define GDM_KEY_INCLUDE "greeter/Include="
#define GDM_KEY_EXCLUDE "greeter/Exclude=bin,daemon,adm,lp,sync,shutdown,halt,mail,news,uucp,operator,nobody,gdm,postgres,pvm,rpm,nfsnobody,pcap"
-#define GDM_KEY_INCLUDEALL "greeter/IncludeAll=false"
-#define GDM_KEY_MINIMALUID "greeter/MinimalUID=100"
+#define GDM_KEY_INCLUDE_ALL "greeter/IncludeAll=false"
+#define GDM_KEY_MINIMAL_UID "greeter/MinimalUID=100"
#define GDM_KEY_FACE "greeter/DefaultFace=" EXPANDED_PIXMAPDIR "/nobody.png"
-#define GDM_KEY_FACEDIR "greeter/GlobalFaceDir=" EXPANDED_DATADIR "/pixmaps/faces/"
-#define GDM_KEY_LOCFILE "greeter/LocaleFile=" EXPANDED_LOCALEDIR "/locale.alias"
+#define GDM_KEY_FACE_DIR "greeter/GlobalFaceDir=" EXPANDED_DATADIR "/pixmaps/faces/"
+#define GDM_KEY_LOCALE_FILE "greeter/LocaleFile=" EXPANDED_LOCALEDIR "/locale.alias"
#define GDM_KEY_LOGO "greeter/Logo=" EXPANDED_PIXMAPDIR "/gdm-foot-logo.png"
#define GDM_KEY_CHOOSER_BUTTON_LOGO "greeter/ChooserButtonLogo=" EXPANDED_PIXMAPDIR "/gdm-foot-logo.png"
#define GDM_KEY_QUIVER "greeter/Quiver=true"
-#define GDM_KEY_SYSMENU "greeter/SystemMenu=true"
+#define GDM_KEY_SYSTEM_MENU "greeter/SystemMenu=true"
#define GDM_KEY_CONFIGURATOR "daemon/Configurator=" EXPANDED_SBINDIR "/gdmsetup --disable-sound --disable-crash-dialog"
#define GDM_KEY_CONFIG_AVAILABLE "greeter/ConfigAvailable=true"
#define GDM_KEY_CHOOSER_BUTTON "greeter/ChooserButton=true"
#define GDM_KEY_TITLE_BAR "greeter/TitleBar=true"
#define GDM_KEY_DEFAULT_WELCOME "greeter/DefaultWelcome=true"
#define GDM_KEY_DEFAULT_WELCOME_BACKTEST "greeter/DefaultWelcome="
-#define GDM_KEY_DEFAULT_REMOTEWELCOME "greeter/DefaultRemoteWelcome=true"
-#define GDM_KEY_DEFAULT_REMOTEWELCOME_BACKTEST "greeter/DefaultRemoteWelcome="
+#define GDM_KEY_DEFAULT_REMOTE_WELCOME "greeter/DefaultRemoteWelcome=true"
+#define GDM_KEY_DEFAULT_REMOTE_WELCOME_BACKTEST "greeter/DefaultRemoteWelcome="
#define GDM_KEY_WELCOME "greeter/Welcome="
-#define GDM_KEY_REMOTEWELCOME "greeter/RemoteWelcome="
-#define GDM_KEY_XINERAMASCREEN "greeter/XineramaScreen=0"
-#define GDM_KEY_BACKGROUNDPROG "greeter/BackgroundProgram="
-#define GDM_KEY_RUNBACKGROUNDPROGALWAYS "greeter/RunBackgroundProgramAlways=false"
-#define GDM_KEY_BACKGROUNDPROGINITIALDELAY "greeter/BackgroundProgramInitialDelay=30"
-#define GDM_KEY_RESTARTBACKGROUNDPROG "greeter/RestartBackgroundProgram=true"
-#define GDM_KEY_BACKGROUNDPROGRESTARTDELAY "greeter/BackgroundProgramRestartDelay=30"
-#define GDM_KEY_BACKGROUNDIMAGE "greeter/BackgroundImage="
-#define GDM_KEY_BACKGROUNDCOLOR "greeter/BackgroundColor=#76848F"
-#define GDM_KEY_BACKGROUNDTYPE "greeter/BackgroundType=2"
-#define GDM_KEY_BACKGROUNDSCALETOFIT "greeter/BackgroundScaleToFit=true"
-#define GDM_KEY_BACKGROUNDREMOTEONLYCOLOR "greeter/BackgroundRemoteOnlyColor=true"
+#define GDM_KEY_REMOTE_WELCOME "greeter/RemoteWelcome="
+#define GDM_KEY_XINERAMA_SCREEN "greeter/XineramaScreen=0"
+#define GDM_KEY_BACKGROUND_PROGRAM "greeter/BackgroundProgram="
+#define GDM_KEY_RUN_BACKGROUND_PROGRAM_ALWAYS "greeter/RunBackgroundProgramAlways=false"
+#define GDM_KEY_BACKGROUND_PROGRAM_INITIAL_DELAY "greeter/BackgroundProgramInitialDelay=30"
+#define GDM_KEY_RESTART_BACKGROUND_PROGRAM "greeter/RestartBackgroundProgram=true"
+#define GDM_KEY_BACKGROUND_PROGRAM_RESTART_DELAY "greeter/BackgroundProgramRestartDelay=30"
+#define GDM_KEY_BACKGROUND_IMAGE "greeter/BackgroundImage="
+#define GDM_KEY_BACKGROUND_COLOR "greeter/BackgroundColor=#76848F"
+#define GDM_KEY_BACKGROUND_TYPE "greeter/BackgroundType=2"
+#define GDM_KEY_BACKGROUND_SCALE_TO_FIT "greeter/BackgroundScaleToFit=true"
+#define GDM_KEY_BACKGROUND_REMOTE_ONLY_COLOR "greeter/BackgroundRemoteOnlyColor=true"
#define GDM_KEY_LOCK_POSITION "greeter/LockPosition=false"
#define GDM_KEY_SET_POSITION "greeter/SetPosition=false"
-#define GDM_KEY_POSITIONX "greeter/PositionX=0"
-#define GDM_KEY_POSITIONY "greeter/PositionY=0"
+#define GDM_KEY_POSITION_X "greeter/PositionX=0"
+#define GDM_KEY_POSITION_Y "greeter/PositionY=0"
#define GDM_KEY_USE_24_CLOCK "greeter/Use24Clock=false"
#define GDM_KEY_ENTRY_CIRCLES "greeter/UseCirclesInEntry=false"
#define GDM_KEY_ENTRY_INVISIBLE "greeter/UseInvisibleInEntry=false"
@@ -335,16 +354,16 @@ enum {
#define GDM_KEY_SOUND_ON_LOGIN_FAILURE_FILE "greeter/SoundOnLoginFailureFile="
#define GDM_KEY_SOUND_PROGRAM "daemon/SoundProgram=" SOUND_PROGRAM
-#define GDM_KEY_SCAN "chooser/ScanTime=4"
-#define GDM_KEY_HOST "chooser/DefaultHostImg=" EXPANDED_PIXMAPDIR "/nohost.png"
-#define GDM_KEY_HOSTDIR "chooser/HostImageDir=" EXPANDED_DATADIR "/hosts/"
+#define GDM_KEY_SCAN_TIME "chooser/ScanTime=4"
+#define GDM_KEY_DEFAULT_HOST_IMG "chooser/DefaultHostImg=" EXPANDED_PIXMAPDIR "/nohost.png"
+#define GDM_KEY_HOST_IMAGE_DIR "chooser/HostImageDir=" EXPANDED_DATADIR "/hosts/"
#define GDM_KEY_HOSTS "chooser/Hosts="
#ifdef ENABLE_IPV6
#define GDM_KEY_MULTICAST "chooser/Multicast=true"
#define GDM_KEY_MULTICAST_ADDR "chooser/MulticastAddr=ff02::1"
#endif
#define GDM_KEY_BROADCAST "chooser/Broadcast=true"
-#define GDM_KEY_ALLOWADD "chooser/AllowAdd=true"
+#define GDM_KEY_ALLOW_ADD "chooser/AllowAdd=true"
#define GDM_KEY_DEBUG "debug/Enable=false"
#define GDM_KEY_DEBUG_GESTURES "debug/Gestures=false"
@@ -367,7 +386,7 @@ enum {
#define GDM_STANDARD "Standard"
#define GDM_DEFAULT_WELCOME_MSG "Welcome"
-#define GDM_DEFAULT_REMOTEWELCOME_MSG "Welcome to %n"
+#define GDM_DEFAULT_REMOTE_WELCOME_MSG "Welcome to %n"
#define GDM_RESPONSE_CANCEL "GDM_RESPONSE_CANCEL"
@@ -514,8 +533,8 @@ struct _GdmDisplay {
char *theme_name;
};
-typedef struct _GdmXServer GdmXServer;
-struct _GdmXServer {
+typedef struct _GdmXserver GdmXserver;
+struct _GdmXserver {
char *id;
char *name;
char *command;
@@ -584,7 +603,6 @@ enum {
};
/* If id == NULL, then get the first X server */
-GdmXServer * gdm_find_x_server (const char *id);
void gdm_final_cleanup (void);
@@ -654,18 +672,18 @@ void gdm_final_cleanup (void);
/* Notification protocol */
/* keys */
-#define GDM_NOTIFY_ALLOWREMOTEROOT "AllowRemoteRoot" /* <true/false as int> */
-#define GDM_NOTIFY_ALLOWROOT "AllowRoot" /* <true/false as int> */
-#define GDM_NOTIFY_ALLOWREMOTEAUTOLOGIN "AllowRemoteAutoLogin" /* <true/false as int> */
-#define GDM_NOTIFY_SYSMENU "SystemMenu" /* <true/false as int> */
+#define GDM_NOTIFY_ALLOW_REMOTE_ROOT "AllowRemoteRoot" /* <true/false as int> */
+#define GDM_NOTIFY_ALLOW_ROOT "AllowRoot" /* <true/false as int> */
+#define GDM_NOTIFY_ALLOW_REMOTE_AUTOLOGIN "AllowRemoteAutoLogin" /* <true/false as int> */
+#define GDM_NOTIFY_SYSTEM_MENU "SystemMenu" /* <true/false as int> */
#define GDM_NOTIFY_CONFIG_AVAILABLE "ConfigAvailable" /* <true/false as int> */
#define GDM_NOTIFY_CHOOSER_BUTTON "ChooserButton" /* <true/false as int> */
-#define GDM_NOTIFY_RETRYDELAY "RetryDelay" /* <seconds> */
+#define GDM_NOTIFY_RETRY_DELAY "RetryDelay" /* <seconds> */
#define GDM_NOTIFY_GREETER "Greeter" /* <greeter binary> */
-#define GDM_NOTIFY_REMOTEGREETER "RemoteGreeter" /* <greeter binary> */
+#define GDM_NOTIFY_REMOTE_GREETER "RemoteGreeter" /* <greeter binary> */
#define GDM_NOTIFY_TIMED_LOGIN "TimedLogin" /* <login> */
#define GDM_NOTIFY_TIMED_LOGIN_DELAY "TimedLoginDelay" /* <seconds> */
-#define GDM_NOTIFY_DISALLOWTCP "DisallowTCP" /* <true/false as int> */
+#define GDM_NOTIFY_DISALLOW_TCP "DisallowTCP" /* <true/false as int> */
#define GDM_NOTIFY_SOUND_ON_LOGIN_READY_FILE "SoundOnLoginFile" /* <sound file> */
#define GDM_NOTIFY_SOUND_ON_LOGIN_SUCCESS_FILE "SoundOnLoginSuccessFile" /* <sound file> */
#define GDM_NOTIFY_SOUND_ON_LOGIN_FAILURE_FILE "SoundOnLoginFailureFile" /* <sound file> */
diff --git a/daemon/gdmconfig.c b/daemon/gdmconfig.c
new file mode 100644
index 00000000..35d86e59
--- /dev/null
+++ b/daemon/gdmconfig.c
@@ -0,0 +1,2056 @@
+/* GDM - The GNOME Display Manager
+ * Copyright (C) 1998, 1999, 2000 Martin K. Petersen <mkp@mkp.net>
+ * Copyright (C) 2005 Brian Cameron <brian.cameron@sun.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*
+ * gdmconfig.c isolates most logic that interacts with vicious-extensions
+ * into a single file and provides a mechanism for interacting with GDM
+ * configuration optins via access functions for getting/setting values.
+ * This logic also ensures that the same configuration validation happens
+ * when loading the values initially or setting them via the
+ * GDM_UPDATE_CONFIG socket command.
+ *
+ * When adding a new configuration option, simply add the new option to
+ * gdm.h and to the val_hash and type_hash hashes in the gdm_config_init
+ * function. Any validation for the configuration option should be
+ * placed in the _gdm_set_value_string, _gdm_set_value_int, or
+ * _gdm_set_value_bool functions.
+ */
+#include <config.h>
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <signal.h>
+#include <pwd.h>
+#include <grp.h>
+
+#include <glib-2.0/glib.h>
+#include <glib/gi18n.h>
+
+#include "vicious.h"
+
+#include "gdm.h"
+#include "verify.h"
+#include "gdm-net.h"
+#include "misc.h"
+#include "server.h"
+#include "filecheck.h"
+
+gchar *config_file = NULL;
+static time_t config_file_mtime = 0;
+
+extern gboolean no_console;
+extern gboolean gdm_emergency_server;
+
+GSList *displays = NULL;
+GSList *xservers = NULL;
+
+gint high_display_num = 0;
+
+typedef enum {
+ CONFIG_BOOL,
+ CONFIG_INT,
+ 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 uid_t GdmUserId; /* Userid under which gdm should run */
+static gid_t GdmGroupId; /* Gruopid under which gdm should run */
+
+/* Config options used by daemon */
+/* ----------------------------- */
+static gchar *GdmUser = NULL;
+static gchar *GdmGroup = NULL;
+static gchar *GdmGtkRC = NULL;
+static gchar *GdmGtkTheme = NULL;
+static gchar *GdmSessDir = NULL;
+static gchar *GdmBaseXsession = NULL;
+static gchar *GdmDefaultSession = NULL;
+static gchar *GdmAutomaticLogin = NULL;
+static gchar *GdmConfigurator = NULL;
+static gchar *GdmGlobalFaceDir = NULL;
+static gchar *GdmGreeter = NULL;
+static gchar *GdmRemoteGreeter = NULL;
+static gchar *GdmGtkModulesList = NULL;
+static gchar *GdmChooser = NULL;
+static gchar *GdmLogDir = NULL;
+static gchar *GdmDisplayInit = NULL;
+static gchar *GdmPostLogin = NULL;
+static gchar *GdmPreSession = NULL;
+static gchar *GdmPostSession = NULL;
+static gchar *GdmFailsafeXserver = NULL;
+static gchar *GdmXKeepsCrashing = NULL;
+static gchar *GdmHalt = NULL;
+static gchar *GdmHaltReal = NULL;
+static gchar *GdmReboot = NULL;
+static gchar *GdmRebootReal = NULL;
+static gchar *GdmSuspend = NULL;
+static gchar *GdmSuspendReal = NULL;
+static gchar *GdmServAuthDir = NULL;
+static gchar *GdmMulticastAddr;
+static gchar *GdmUserAuthDir = NULL;
+static gchar *GdmUserAuthFile = NULL;
+static gchar *GdmUserAuthFallback = NULL;
+static gchar *GdmPidFile = NULL;
+static gchar *GdmPath = NULL;
+static gchar *GdmRootPath = NULL;
+static gchar *GdmWilling = NULL;
+static gchar *GdmXdmcpProxyXserver = NULL;
+static gchar *GdmXdmcpProxyReconnect = NULL;
+static gchar *GdmTimedLogin = NULL;
+static gchar *GdmStandardXserver = NULL;
+static gchar *GdmXnest = NULL;
+static gchar *GdmSoundProgram = NULL;
+static gchar *GdmSoundOnLoginReadyFile = NULL;
+static gchar *GdmSoundOnLoginSuccessFile = NULL;
+static gchar *GdmSoundOnLoginFailureFile = NULL;
+static gchar *GdmConsoleCannotHandle = NULL;
+
+static gint GdmXineramaScreen = 0;
+static gint GdmUserMaxFile = 0;
+static gint GdmDisplaysPerHost = 0;
+static gint GdmMaxPending = 0;
+static gint GdmMaxSessions = 0;
+static gint GdmUdpPort = 0;
+static gint GdmMaxIndirect = 0;
+static gint GdmMaxWaitIndirect = 0;
+static gint GdmPingInterval = 0;
+static gint GdmRelaxPerm = 0;
+static gint GdmRetryDelay = 0;
+static gint GdmTimedLoginDelay = 0;
+static gint GdmFlexibleXservers = 5;
+static gint GdmFirstVt = 7;
+
+/* The SDTLOGIN feature is Solaris specific, and causes the Xserver to be
+ * run with user permissionsinstead of as root, which adds security but
+ * disables the AlwaysRestartServer option as highlighted in the gdm
+ * documentation */
+#ifdef sun
+gboolean GdmAlwaysRestartServer = TRUE;
+#else
+gboolean GdmAlwaysRestartServer = FALSE;
+#endif
+static gboolean GdmAutomaticLoginEnable = FALSE;
+static gboolean GdmConfigAvailable = FALSE;
+static gboolean GdmSystemMenu = FALSE;
+static gboolean GdmChooserButton = FALSE;
+static gboolean GdmBrowser = FALSE;
+static gboolean GdmAddGtkModules = FALSE;
+static gboolean GdmDoubleLoginWarning = TRUE;
+static gboolean GdmAlwaysLoginCurrentSession = FALSE;
+static gboolean GdmDisplayLastLogin = TRUE;
+static gboolean GdmMulticast;
+static gboolean GdmNeverPlaceCookiesOnNfs = TRUE;
+static gboolean GdmPasswordRequired = FALSE;
+static gboolean GdmKillInitClients = FALSE;
+static gboolean GdmXdmcp = FALSE;
+static gboolean GdmIndirect = FALSE;
+static gboolean GdmXdmcpProxy = FALSE;
+static gboolean GdmDebug = FALSE;
+static gboolean GdmDebugGestures = FALSE;
+static gboolean GdmAllowRoot = FALSE;
+static gboolean GdmAllowRemoteRoot = FALSE;
+static gboolean GdmAllowRemoteAutoLogin = FALSE;
+static gboolean GdmCheckDirOwner = TRUE;
+static gboolean GdmTimedLoginEnable = FALSE;
+static gboolean GdmDynamicXservers = FALSE;
+static gboolean GdmVTAllocation = TRUE;
+static gboolean GdmDisallowTcp = TRUE;
+static gboolean GdmSoundOnLoginSuccess = FALSE;
+static gboolean GdmSoundOnLoginFailure = FALSE;
+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 *GdmLocaleFile;
+static gchar *GdmLogo;
+static gchar *GdmChooserButtonLogo;
+static gchar *GdmWelcome;
+static gchar *GdmRemoteWelcome;
+static gchar *GdmBackgroundProgram;
+static gchar *GdmBackgroundImage;
+static gchar *GdmBackgroundColor;
+static gchar *GdmGraphicalTheme;
+static gchar *GdmInfoMsgFile;
+static gchar *GdmInfoMsgFont;
+static gchar *GdmHost;
+static gchar *GdmHostImageDir;
+static gchar *GdmHosts;
+static gchar *GdmGraphicalThemeColor;
+static gchar *GdmGraphicalThemeDir;
+static gchar *GdmGraphicalThemes;
+
+static gint GdmPositionX;
+static gint GdmPositionY;
+static gint GdmMinimalUid;
+static gint GdmIconWidth;
+static gint GdmIconHeight;
+static gint GdmBackgroundType;
+static gint GdmScanTime;
+static gint GdmMaxWait;
+
+static gboolean GdmAllowGtkThemeChange;
+static gboolean GdmTitleBar;
+static gboolean GdmIncludeAll;
+static gboolean GdmDefaultWelcome;
+static gboolean GdmDefaultRemoteWelcome;
+static gboolean GdmLockPosition;
+static gboolean GdmBackgroundScaleToFit;
+static gboolean GdmBackgroundRemoteOnlyColor;
+static gboolean GdmRunBackgroundProgramAlways;
+static gboolean GdmSetPosition;
+static gboolean GdmQuiver;
+static gboolean GdmShowGnomeFailsafe;
+static gboolean GdmShowXtermFailsafe;
+static gboolean GdmShowLastSession;
+static gboolean GdmUse24Clock;
+static gboolean GdmEntryCircles;
+static gboolean GdmEntryInvisible;
+static gboolean GdmGraphicalThemeRand;
+static gboolean GdmBroadcast;
+static gboolean GdmAllowAdd;
+
+/**
+ * gdm_config_init
+ *
+ * Sets up initial hashes used by configuration routines.
+ */
+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);
+
+ /* 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);
+
+ /* 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);
+
+ /* 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_get_config:
+ *
+ * Get config file.
+ */
+static VeConfig *
+gdm_get_config (struct stat *statbuf)
+{
+ int r;
+
+ /* Not NULL if config_file was set by command-line option. */
+ if (config_file != NULL) {
+ VE_IGNORE_EINTR (r = stat (config_file, statbuf));
+ } else {
+ /* First check sysconfdir */
+ VE_IGNORE_EINTR (r = stat (GDM_SYSCONFDIR_CONFIG_FILE, statbuf));
+ if (r < 0) {
+ gdm_error (_("%s: No GDM configuration file: %s. Using defaults."),
+ "gdm_config_parse", GDM_SYSCONFDIR_CONFIG_FILE);
+ } else {
+ config_file = GDM_SYSCONFDIR_CONFIG_FILE;
+ }
+ }
+ return ve_config_new (config_file);
+}
+
+/**
+ * gdm_get_value_int
+ *
+ * Gets an integer configuration option by key. The option must
+ * first be loaded, say, by calling gdm_config_parse.
+ */
+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);
+
+ if (type == NULL || val == NULL) {
+ gdm_error ("Request for invalid configuration key %s", key);
+ } else if (*type != CONFIG_INT) {
+ gdm_error ("Request for configuration key %s, but not type INT", key);
+ } else {
+ gint *intval = (int *)val;
+ return *intval;
+ }
+
+ return 0;
+}
+
+/**
+ * gdm_get_value_string
+ *
+ * Gets a string configuration option by key. The option must
+ * first be loaded, say, by calling gdm_config_parse.
+ */
+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);
+
+ if (type == NULL || val == NULL) {
+ gdm_error ("Request for invalid configuration key %s", key);
+ } else if (*type != CONFIG_STRING) {
+ gdm_error ("Request for configuration key %s, but not type STRING", key);
+ } else {
+ gchar **charval = (char **)val;
+ return *charval;
+ }
+
+ return NULL;
+}
+
+/**
+ * gdm_get_value_bool
+ *
+ * Gets a boolean configuration option by key. The option must
+ * first be loaded, say, by calling gdm_config_parse.
+ */
+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);
+
+ if (type == NULL || val == NULL) {
+ gdm_error ("Request for invalid configuration key %s", key);
+ } else if (*type != CONFIG_BOOL) {
+ gdm_error ("Request for configuration key %s, but not type BOOL", key);
+ } else {
+ gboolean *boolval = (gboolean *)val;
+ return *boolval;
+ }
+
+ return FALSE;
+}
+
+/**
+ * gdm_config_to_string
+ *
+ * Returns a configuration option as a string. Used by GDM's
+ * GET_CONFIG socket command.
+ */
+void
+gdm_config_to_string (gchar *key, gchar **retval)
+{
+ GdmConfigType *type = g_hash_table_lookup (type_hash, key);
+
+ *retval = NULL;
+
+ if (type != NULL) {
+ if (*type == CONFIG_BOOL) {
+ gboolean value = gdm_get_value_bool (key);
+ if (value)
+ *retval = g_strdup ("true");
+ else
+ *retval = g_strdup ("false");
+ return;
+ } else if (*type == CONFIG_INT) {
+ gint value = gdm_get_value_int (key);
+ *retval = g_strdup_printf ("%d", value);
+ return;
+ } else if (*type == CONFIG_STRING) {
+ gchar *value = gdm_get_value_string (key);
+ if (value != NULL)
+ *retval = g_strdup (value);
+ return;
+ }
+ }
+
+ gdm_debug ("Error returning config key %s\n", key);
+ return;
+}
+
+/**
+ * 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
+ */
+int
+gdm_compare_displays (gconstpointer a, gconstpointer b)
+{
+ const GdmDisplay *d1 = a;
+ const GdmDisplay *d2 = b;
+ if (d1->dispnum < d2->dispnum)
+ return -1;
+ else if (d1->dispnum > d2->dispnum)
+ return 1;
+ else
+ return 0;
+}
+
+/**
+ * notify_displays_int
+ * notify_displays_string
+ *
+ * The following two functions will notify the slave programs
+ * (gdmgreeter, gdmlogin, etc.) that a configuration option has
+ * been changed so the slave can update with the new option
+ * value. GDM does this notify when it receives a
+ * GDM_CONFIG_UPDATE socket command from gdmsetup or from the
+ * gdmflexiserver --command option. notify_displays_int
+ * is also used for notifying for boolean values.
+ */
+static void
+notify_displays_int (const gchar *key, int val)
+{
+ GSList *li;
+ for (li = displays; li != NULL; li = li->next) {
+ GdmDisplay *disp = li->data;
+ if (disp->master_notify_fd >= 0) {
+ gdm_fdprintf (disp->master_notify_fd, "%c%s %d\n",
+ GDM_SLAVE_NOTIFY_KEY, key, val);
+
+ if (disp != NULL && disp->slavepid > 1)
+ kill (disp->slavepid, SIGUSR2);
+ }
+ }
+}
+
+/* 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)
+{
+ GSList *li;
+ for (li = displays; li != NULL; li = li->next) {
+ GdmDisplay *disp = li->data;
+ if (disp->master_notify_fd >= 0) {
+ gdm_fdprintf (disp->master_notify_fd, "%c%s %s\n",
+ GDM_SLAVE_NOTIFY_KEY, key, val);
+ if (disp != NULL && disp->slavepid > 1)
+ kill (disp->slavepid, SIGUSR2);
+ }
+ }
+}
+
+/* TODO - Need to fix so notification happens for TIMED_LOGIN */
+
+/**
+ * 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.
+ */
+static void
+_gdm_set_value_string (gchar *key, gchar *value, gboolean doing_update)
+{
+ gchar **setting = g_hash_table_lookup (val_hash, key);
+ gchar *setting_copy;
+ gchar *temp_string;
+
+ if (setting == NULL) {
+ gdm_error ("Failure setting key %s to %s", key, value);
+ return;
+ }
+
+ setting_copy = g_strdup (*setting);
+ g_free (*setting);
+
+ 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
+ *setting = g_strdup (value);
+
+ } 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
+ *setting = g_strdup (value);
+
+ } else if (is_key (key, GDM_KEY_BASE_XSESSION)) {
+ if (! ve_string_empty (value)) {
+ *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);
+ }
+ } 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;
+ else
+ *setting = g_strdup (value);
+ } else if (is_key (key, GDM_KEY_CONSOLE_CANNOT_HANDLE)) {
+ if (value == NULL)
+ *setting = "";
+ else
+ *setting = g_strdup (value);
+ gdm_ok_console_language ();
+ } else if (is_key (key, GDM_KEY_STANDARD_XSERVER)) {
+ gchar *bin;
+ 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"),
+ "gdm_config_parse");
+ if (access ("/usr/X11R6/bin/X", X_OK) == 0) {
+ *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)) {
+ *setting = g_strdup ("/usr/bin/X11/X");
+ } else
+ *setting = g_strdup (value);
+ }
+ } else {
+ if (! ve_string_empty (value))
+ *setting = g_strdup (value);
+ else {
+ if (is_key (key, GDM_KEY_GREETER))
+ gdm_error (_("%s: No greeter specified."), "gdm_config_parse");
+ else if (is_key (key, GDM_KEY_REMOTE_GREETER))
+ gdm_error (_("%s: No remote greeter specified."), "gdm_config_parse");
+ else if (is_key (key, GDM_KEY_SESSION_DESKTOP_DIR))
+ gdm_error (_("%s: No sessions directory specified."), "gdm_config_parse");
+
+ *setting = NULL;
+ }
+ }
+
+ if (doing_update == TRUE && strcmp (*setting, 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_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
+ gdm_debug ("set config key %s to string %s", key, *setting);
+}
+
+void
+gdm_set_value_string (gchar *key, gchar *value)
+{
+ _gdm_set_value_string (key, value, FALSE);
+}
+
+static void
+_gdm_set_value_bool (gchar *key, gboolean value, gboolean doing_update)
+{
+ gboolean *setting = g_hash_table_lookup (val_hash, key);
+ gboolean setting_copy = *setting;
+ gchar *temp_string;
+
+ if (setting == NULL) {
+ if (value)
+ gdm_error ("Failure setting key %s to true", key);
+ else
+ gdm_error ("Failure setting key %s to false", key);
+ return;
+ }
+
+ if (is_key (key, GDM_KEY_PASSWORD_REQUIRED)) {
+ temp_string = gdm_read_default ("PASSREQ=");
+ if (temp_string == NULL)
+ *setting = value;
+ else if (g_ascii_strcasecmp (temp_string, "YES") == 0)
+ *setting = TRUE;
+ else
+ *setting = FALSE;
+ g_free (temp_string);
+ } else if (is_key (key, GDM_KEY_ALLOW_REMOTE_ROOT)) {
+ temp_string = gdm_read_default ("CONSOLE=");
+
+ if (temp_string == NULL)
+ *setting = value;
+ else if (g_ascii_strcasecmp (temp_string, "/dev/console") != 0)
+ *setting = TRUE;
+ else
+ *setting = FALSE;
+ g_free (temp_string);
+#ifndef HAVE_LIBXDMCP
+ } else if (is_key (key, GDM_KEY_XMDCP)) {
+ if (value) {
+ gdm_info (_("%s: XDMCP was enabled while there is no XDMCP support; turning it off"), "gdm_config_parse");
+ }
+ *setting = FALSE;
+#endif
+ } else {
+ *setting = value;
+ }
+
+ if (doing_update == TRUE && *setting != setting_copy) {
+ if (is_key (key, GDM_KEY_ALLOW_ROOT))
+ notify_displays_int (GDM_NOTIFY_ALLOW_ROOT, *setting);
+ else if (is_key (key, GDM_KEY_ALLOW_REMOTE_ROOT))
+ notify_displays_int (GDM_NOTIFY_ALLOW_REMOTE_ROOT, *setting);
+ else if (is_key (key, GDM_KEY_ALLOW_REMOTE_AUTOLOGIN))
+ notify_displays_int (GDM_NOTIFY_ALLOW_REMOTE_AUTOLOGIN, *setting);
+ else if (is_key (key, GDM_KEY_SYSTEM_MENU))
+ notify_displays_int (GDM_NOTIFY_SYSTEM_MENU, *setting);
+ else if (is_key (key, GDM_KEY_CONFIG_AVAILABLE))
+ notify_displays_int (GDM_NOTIFY_CONFIG_AVAILABLE, *setting);
+ else if (is_key (key, GDM_KEY_CHOOSER_BUTTON))
+ notify_displays_int (GDM_NOTIFY_CHOOSER_BUTTON, *setting);
+ else if (is_key (key, GDM_KEY_DISALLOW_TCP))
+ notify_displays_int (GDM_NOTIFY_DISALLOW_TCP, *setting);
+ else if (is_key (key, GDM_KEY_ADD_GTK_MODULES))
+ notify_displays_int (GDM_NOTIFY_ADD_GTK_MODULES, *setting);
+ }
+
+ if (*setting)
+ gdm_debug ("set config key %s to boolean true", key);
+ else
+ gdm_debug ("set config key %s to boolean false", key);
+}
+
+void
+gdm_set_value_bool (gchar *key, gboolean value)
+{
+ _gdm_set_value_bool (key, value, FALSE);
+}
+
+void
+_gdm_set_value_int (gchar *key, gint value, gboolean doing_update)
+{
+ gint *setting = g_hash_table_lookup (val_hash, key);
+ gint setting_copy = *setting;
+
+ if (setting == NULL) {
+ gdm_error ("Failure setting key %s to %d", key, value);
+ return;
+ }
+
+ 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)) {
+ if (value < 0)
+ *setting = 0;
+ else
+ *setting = value;
+ } else {
+ *setting = value;
+ }
+
+ if (doing_update == TRUE && *setting != setting_copy) {
+ if (is_key (key, GDM_KEY_RETRY_DELAY))
+ notify_displays_int (GDM_NOTIFY_RETRY_DELAY, *setting);
+ else if (is_key (key, GDM_KEY_TIMED_LOGIN_DELAY))
+ notify_displays_int (GDM_NOTIFY_TIMED_LOGIN_DELAY, *setting);
+ }
+
+ gdm_debug ("set config key %s to integer %d", key, *setting);
+}
+
+void
+gdm_set_value_int (gchar *key, gint value)
+{
+ _gdm_set_value_int (key, value, FALSE);
+}
+
+/**
+ * gdm_update_config
+ *
+ * Will cause a the GDM daemon to re-read the key from the configuration
+ * file and cause notify signal to be sent to the slaves for the
+ * specified key, if appropriate. Only specific keys defined in the
+ * gdm_set_value functions above are associated with such notification.
+ * Obviously notification is not needed for configuration options only
+ * used by the daemon.
+ *
+ * To add a new notification, a GDM_NOTIFY_* argument will need to be
+ * defined in gdm.h, supporting logic placed in the gdm_set_value
+ * functions and in the gdm_slave_handle_notify function in slave.c.
+ */
+gboolean
+gdm_update_config (gchar* key)
+{
+ GdmConfigType *type = g_hash_table_lookup (type_hash, key);
+ struct stat statbuf;
+ VeConfig* cfg;
+ int r;
+ gboolean rc;
+
+ /*
+ * Do not allow these keys to be updated, since GDM would need
+ * additional work, or at least heavy testing, to make these keys
+ * flexible enough to be changed at runtime.
+ */
+ if (type == NULL ||
+ is_key (key, GDM_KEY_PID_FILE) ||
+ is_key (key, GDM_KEY_CONSOLE_NOTIFY) ||
+ is_key (key, GDM_KEY_USER) ||
+ is_key (key, GDM_KEY_GROUP) ||
+ is_key (key, GDM_KEY_LOG_DIR) ||
+ is_key (key, GDM_KEY_SERV_AUTHDIR) ||
+ is_key (key, GDM_KEY_USER_AUTHDIR) ||
+ is_key (key, GDM_KEY_USER_AUTHFILE) ||
+ is_key (key, GDM_KEY_USER_AUTHDIR_FALLBACK)) {
+ return FALSE;
+ }
+
+ /* Shortcut for updating all XDMCP parameters */
+ if (is_key (key, "xdmcp/PARAMETERS")) {
+ gdm_update_config (GDM_KEY_DISPLAYS_PER_HOST);
+ gdm_update_config (GDM_KEY_MAX_PENDING);
+ gdm_update_config (GDM_KEY_MAX_WAIT);
+ gdm_update_config (GDM_KEY_MAX_SESSIONS);
+ gdm_update_config (GDM_KEY_INDIRECT);
+ gdm_update_config (GDM_KEY_MAX_INDIRECT);
+ gdm_update_config (GDM_KEY_MAX_WAIT_INDIRECT);
+ gdm_update_config (GDM_KEY_PING_INTERVAL);
+ }
+
+ VE_IGNORE_EINTR (r = stat (config_file, &statbuf));
+ if G_UNLIKELY (r < 0) {
+ /* if the file didn't exist before either */
+ if (config_file_mtime == 0)
+ return TRUE;
+ } else {
+ if (config_file_mtime == statbuf.st_mtime)
+ return TRUE;
+ config_file_mtime = statbuf.st_mtime;
+ }
+
+ 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;
+ }
+
+ ve_config_destroy (cfg);
+ return TRUE;
+}
+
+/**
+ * check_logdir
+ * check_servauthdir
+ * display_exists
+ *
+ * Support functions for gdm_config_parse.
+ */
+static void
+check_logdir (void)
+{
+ struct stat statbuf;
+ int r;
+
+ VE_IGNORE_EINTR (r = stat (GdmLogDir, &statbuf));
+ if (r < 0 ||
+ ! S_ISDIR (statbuf.st_mode)) {
+ gdm_error (_("%s: Logdir %s does not exist or isn't a directory. Using ServAuthDir %s."), "gdm_config_parse",
+ GdmLogDir, GdmServAuthDir);
+ g_free (GdmLogDir);
+ GdmLogDir = g_strdup (GdmServAuthDir);
+ }
+}
+
+static void
+check_servauthdir (struct stat *statbuf)
+{
+ int r;
+
+ /* Enter paranoia mode */
+ VE_IGNORE_EINTR (r = stat (GdmServAuthDir, statbuf));
+ if G_UNLIKELY (r < 0) {
+ gchar *s = g_strdup_printf
+ (C_(N_("Server Authorization directory "
+ "(daemon/ServAuthDir) is set to %s "
+ "but this does not exist. Please "
+ "correct GDM configuration and "
+ "restart GDM.")), GdmServAuthDir);
+ if (GdmConsoleNotify)
+ gdm_text_message_dialog (s);
+ GdmPidFile = NULL;
+ g_free (s);
+ gdm_fail (_("%s: Authdir %s does not exist. Aborting."), "gdm_config_parse", GdmServAuthDir);
+ }
+
+ if G_UNLIKELY (! S_ISDIR (statbuf->st_mode)) {
+ gchar *s = g_strdup_printf
+ (C_(N_("Server Authorization directory "
+ "(daemon/ServAuthDir) is set to %s "
+ "but this is not a directory. Please "
+ "correct GDM configuration and "
+ "restart GDM.")), GdmServAuthDir);
+ if (GdmConsoleNotify)
+ gdm_text_message_dialog (s);
+ GdmPidFile = NULL;
+ g_free (s);
+ gdm_fail (_("%s: Authdir %s is not a directory. Aborting."), "gdm_config_parse", GdmServAuthDir);
+ }
+}
+
+static gboolean
+display_exists (int num)
+{
+ GSList *li;
+
+ for (li = displays; li != NULL; li = li->next) {
+ GdmDisplay *disp = li->data;
+ if (disp->dispnum == num)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+/**
+ * gdm_load_config_option
+ *
+ * Called by gdm_config_parse in a loop to set each key.
+ */
+void
+gdm_load_config_option (gpointer key_in, gpointer value_in, gpointer data)
+{
+ gchar *key = (gchar *)key_in;
+ GdmConfigType *type = (GdmConfigType *)value_in;
+ 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;
+ }
+ }
+
+ gdm_error ("Cannot set config option %s", key);
+}
+
+/**
+ * gdm_config_parse
+ *
+ * Loads initial configuration settings.
+ */
+void
+gdm_config_parse (void)
+{
+ VeConfig* cfg;
+ struct passwd *pwent;
+ struct group *grent;
+ struct stat statbuf;
+ gchar *bin;
+ GList *list, *li;
+ int r;
+
+ gdm_config_init ();
+
+ displays = NULL;
+ high_display_num = 0;
+ cfg = gdm_get_config (&statbuf);
+ config_file_mtime = statbuf.st_mtime;
+
+ /* Loop over all configuration options and load them */
+ g_hash_table_foreach (type_hash, gdm_load_config_option, cfg);
+
+ /* Find server definitions */
+ list = ve_config_get_sections (cfg);
+ for (li = list; li != NULL; li = li->next) {
+ const gchar *sec = li->data;
+ if (strncmp (sec, "server-", strlen ("server-")) == 0) {
+ GdmXserver *svr = g_new0 (GdmXserver, 1);
+ gchar buf[256];
+
+ svr->id = g_strdup (sec + strlen ("server-"));
+ g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_NAME, sec);
+ svr->name = ve_config_get_string (cfg, buf);
+ g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_COMMAND, sec);
+ svr->command = ve_config_get_string (cfg, buf);
+ g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_FLEXIBLE, sec);
+ svr->flexible = ve_config_get_bool (cfg, buf);
+ g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_CHOOSABLE, sec);
+ svr->choosable = ve_config_get_bool (cfg, buf);
+ g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_HANDLED, sec);
+ svr->handled = ve_config_get_bool (cfg, buf);
+ g_snprintf (buf, sizeof (buf), "%s/" GDM_KEY_SERVER_CHOOSER, sec);
+ svr->chooser = ve_config_get_bool (cfg, buf);
+
+ if (ve_string_empty (svr->command)) {
+ gdm_error (_("%s: Empty server command; "
+ "using standard command."), "gdm_config_parse");
+ g_free (svr->command);
+ svr->command = g_strdup (GdmStandardXserver);
+ }
+
+ xservers = g_slist_append (xservers, svr);
+ }
+ }
+ ve_config_free_list_of_strings (list);
+
+ if (xservers == NULL ||
+ gdm_find_x_server (GDM_STANDARD) == NULL) {
+ GdmXserver *svr = g_new0 (GdmXserver, 1);
+
+ svr->id = g_strdup (GDM_STANDARD);
+ svr->name = g_strdup ("Standard server");
+ svr->command = g_strdup (GdmStandardXserver);
+ svr->flexible = TRUE;
+ svr->choosable = TRUE;
+ svr->handled = TRUE;
+
+ xservers = g_slist_append (xservers, svr);
+ }
+
+ /* Find static X server definitions */
+ list = ve_config_get_keys (cfg, GDM_KEY_SECTION_SERVERS);
+ /* only read the list if no_console is FALSE
+ at this stage */
+ for (li = list; ! no_console && li != NULL; li = li->next) {
+ const gchar *key = li->data;
+ if (isdigit (*key)) {
+ gchar *full;
+ gchar *val;
+ int disp_num = atoi (key);
+ GdmDisplay *disp;
+
+ while (display_exists (disp_num)) {
+ disp_num++;
+ }
+
+ if (disp_num != atoi (key)) {
+ gdm_error (_("%s: Display number %d in use! Defaulting to %d"),
+ "gdm_config_parse", atoi (key), disp_num);
+ }
+
+ full = g_strdup_printf ("%s/%s", GDM_KEY_SECTION_SERVERS, key);
+ val = ve_config_get_string (cfg, full);
+ g_free (full);
+
+ disp = gdm_server_alloc (disp_num, val);
+ g_free (val);
+
+ if (disp == NULL)
+ continue;
+ displays = g_slist_insert_sorted (displays, disp, gdm_compare_displays);
+ if (disp_num > high_display_num)
+ high_display_num = disp_num;
+ } else {
+ gdm_info (_("%s: Invalid server line in config file. Ignoring!"), "gdm_config_parse");
+ }
+ }
+ ve_config_free_list_of_strings (list);
+
+ if G_UNLIKELY ((displays == NULL) && (! GdmXdmcp) && (!GdmDynamicXservers)) {
+ gchar *server = NULL;
+
+ /* if we requested no static servers (there is no console),
+ then don't display errors in console messages */
+ if (no_console) {
+ gdm_fail (_("%s: XDMCP disabled and no static servers defined. Aborting!"), "gdm_config_parse");
+ }
+
+ bin = ve_first_word (GdmStandardXserver);
+ if G_LIKELY (access (bin, X_OK) == 0) {
+ server = GdmStandardXserver;
+ } else if (access ("/usr/bin/X11/X", X_OK) == 0) {
+ server = "/usr/bin/X11/X";
+ } else if (access ("/usr/X11R6/bin/X", X_OK) == 0) {
+ server = "/usr/X11R6/bin/X";
+ } else if (access ("/opt/X11R6/bin/X", X_OK) == 0) {
+ server = "/opt/X11R6/bin/X";
+ }
+ g_free (bin);
+
+ /* yay, we can add a backup emergency server */
+ if (server != NULL) {
+ int num = gdm_get_free_display (0 /* start */, 0 /* server uid */);
+ gdm_error (_("%s: XDMCP disabled and no static servers defined. Adding %s on :%d to allow configuration!"),
+ "gdm_config_parse", server, num);
+
+ gdm_emergency_server = TRUE;
+ displays = g_slist_append (displays, gdm_server_alloc (num, server));
+ /* ALWAYS run the greeter and don't log anyone in,
+ * this is just an emergency session */
+ g_free (GdmAutomaticLogin);
+ GdmAutomaticLogin = NULL;
+ g_free (GdmTimedLogin);
+ GdmTimedLogin = NULL;
+ } else {
+ gchar *s = g_strdup_printf (C_(N_("XDMCP is disabled and GDM "
+ "cannot find any static server "
+ "to start. Aborting! Please "
+ "correct the configuration "
+ "and restart GDM.")));
+ gdm_text_message_dialog (s);
+ GdmPidFile = NULL;
+ g_free (s);
+ gdm_fail (_("%s: XDMCP disabled and no static servers defined. Aborting!"), "gdm_config_parse");
+ }
+ }
+
+ /* If no displays were found, then obviously
+ we're in a no console mode */
+ if (displays == NULL)
+ no_console = TRUE;
+
+ if (no_console)
+ GdmConsoleNotify = FALSE;
+
+ /* Lookup user and groupid for the GDM user */
+ pwent = getpwnam (GdmUser);
+
+ /* Set GdmUserId and GdmGroupId */
+ if G_UNLIKELY (pwent == NULL) {
+ gchar *s = g_strdup_printf (C_(N_("The GDM user '%s' does not exist. "
+ "Please correct GDM configuration "
+ "and restart GDM.")), GdmUser);
+ if (GdmConsoleNotify)
+ gdm_text_message_dialog (s);
+
+ GdmPidFile = NULL;
+ g_free (s);
+ gdm_fail (_("%s: Can't find the GDM user '%s'. Aborting!"), "gdm_config_parse", GdmUser);
+ } else {
+ GdmUserId = pwent->pw_uid;
+ }
+
+ if G_UNLIKELY (GdmUserId == 0) {
+ gchar *s = g_strdup_printf (C_(N_("The GDM user is set to be root, but "
+ "this is not allowed since it can "
+ "pose a security risk. Please "
+ "correct GDM configuration and "
+ "restart GDM.")));
+ if (GdmConsoleNotify)
+ gdm_text_message_dialog (s);
+ GdmPidFile = NULL;
+ g_free (s);
+ gdm_fail (_("%s: The GDM user should not be root. Aborting!"), "gdm_config_parse");
+ }
+
+ grent = getgrnam (GdmGroup);
+
+ if G_UNLIKELY (grent == NULL) {
+ gchar *s = g_strdup_printf (C_(N_("The GDM group '%s' does not exist. "
+ "Please correct GDM configuration "
+ "and restart GDM.")), GdmGroup);
+ if (GdmConsoleNotify)
+ gdm_text_message_dialog (s);
+ GdmPidFile = NULL;
+ g_free (s);
+ gdm_fail (_("%s: Can't find the GDM group '%s'. Aborting!"), "gdm_config_parse", GdmGroup);
+ } else {
+ GdmGroupId = grent->gr_gid;
+ }
+
+ if G_UNLIKELY (GdmGroupId == 0) {
+ gchar *s = g_strdup_printf (C_(N_("The GDM group is set to be root, but "
+ "this is not allowed since it can "
+ "pose a security risk. Please "
+ "correct GDM configuration and "
+ "restart GDM.")));
+ if (GdmConsoleNotify)
+ gdm_text_message_dialog (s);
+ GdmPidFile = NULL;
+ g_free (s);
+ gdm_fail (_("%s: The GDM group should not be root. Aborting!"), "gdm_config_parse");
+ }
+
+ /* gid remains `gdm' */
+ NEVER_FAILS_root_set_euid_egid (GdmUserId, GdmGroupId);
+
+ /* Check that the greeter can be executed */
+ bin = ve_first_word (GdmGreeter);
+ if G_UNLIKELY (ve_string_empty (bin) || access (bin, X_OK) != 0) {
+ gdm_error (_("%s: Greeter not found or can't be executed by the GDM user"), "gdm_config_parse");
+ }
+ g_free (bin);
+
+ bin = ve_first_word (GdmRemoteGreeter);
+ if G_UNLIKELY (ve_string_empty (bin) || access (bin, X_OK) != 0) {
+ gdm_error (_("%s: Remote greeter not found or can't be executed by the GDM user"), "gdm_config_parse");
+ }
+ g_free (bin);
+
+ /* Check that chooser can be executed */
+ bin = ve_first_word (GdmChooser);
+
+ if G_UNLIKELY (GdmIndirect && (ve_string_empty (bin) || access (bin, X_OK) != 0)) {
+ gdm_error (_("%s: Chooser not found or it can't be executed by the GDM user"), "gdm_config_parse");
+ }
+
+ g_free (bin);
+
+ /* Check the serv auth and log dirs */
+ if G_UNLIKELY (ve_string_empty (GdmServAuthDir)) {
+ if (GdmConsoleNotify)
+ gdm_text_message_dialog
+ (C_(N_("No daemon/ServAuthDir specified in the GDM configuration file")));
+ GdmPidFile = NULL;
+ gdm_fail (_("%s: No daemon/ServAuthDir specified."), "gdm_config_parse");
+ }
+
+ if (ve_string_empty (GdmLogDir)) {
+ g_free (GdmLogDir);
+ GdmLogDir = g_strdup (GdmServAuthDir);
+ }
+
+ /* Enter paranoia mode */
+ check_servauthdir (&statbuf);
+
+ NEVER_FAILS_root_set_euid_egid (0, 0);
+
+ /* Now set things up for us as */
+ chown (GdmServAuthDir, 0, GdmGroupId);
+ chmod (GdmServAuthDir, (S_IRWXU|S_IRWXG|S_ISVTX));
+
+ NEVER_FAILS_root_set_euid_egid (GdmUserId, GdmGroupId);
+
+ /* again paranoid */
+ check_servauthdir (&statbuf);
+
+ if G_UNLIKELY (statbuf.st_uid != 0 || statbuf.st_gid != GdmGroupId) {
+ gchar *s = g_strdup_printf (C_(N_("Server Authorization directory "
+ "(daemon/ServAuthDir) is set to %s "
+ "but is not owned by user %s and group "
+ "%s. Please correct the ownership or "
+ "GDM configuration and restart "
+ "GDM.")), GdmServAuthDir, GdmUser, GdmGroup);
+ if (GdmConsoleNotify)
+ gdm_text_message_dialog (s);
+ GdmPidFile = NULL;
+ g_free (s);
+ gdm_fail (_("%s: Authdir %s is not owned by user %s, group %s. Aborting."),
+ "gdm_config_parse", GdmServAuthDir, gdm_root_user (), GdmGroup);
+ }
+
+ if G_UNLIKELY (statbuf.st_mode != (S_IFDIR|S_IRWXU|S_IRWXG|S_ISVTX)) {
+ gchar *s = g_strdup_printf (C_(N_("Server Authorization directory "
+ "(daemon/ServAuthDir) is set to %s "
+ "but has the wrong permissions: it "
+ "should have permissions of %o. "
+ "Please correct the permissions or "
+ "the GDM configuration and "
+ "restart GDM.")), GdmServAuthDir,
+ (S_IRWXU|S_IRWXG|S_ISVTX));
+ if (GdmConsoleNotify)
+ gdm_text_message_dialog (s);
+ GdmPidFile = NULL;
+ g_free (s);
+ gdm_fail (_("%s: Authdir %s has wrong permissions %o. Should be %o. Aborting."), "gdm_config_parse",
+ GdmServAuthDir, statbuf.st_mode, (S_IRWXU|S_IRWXG|S_ISVTX));
+ }
+
+ NEVER_FAILS_root_set_euid_egid (0, 0);
+
+ check_logdir ();
+
+ /* Check that user authentication is properly configured */
+ gdm_verify_check ();
+
+ ve_config_destroy (cfg);
+}
+
+/**
+ * gdm_get_gdmuid
+ * gdm_get_gdmgid
+ *
+ * Access functions for getting the GDM user ID and group ID.
+ */
+uid_t
+gdm_get_gdmuid (void)
+{
+ return GdmUserId;
+}
+
+gid_t
+gdm_get_gdmgid (void)
+{
+ return GdmGroupId;
+}
+
+/**
+ * gdm_get_high_display_num
+ * gdm_get_high_display_num
+ *
+ * Access functions for getting the high display number.
+ */
+gint
+gdm_get_high_display_num (void)
+{
+ return high_display_num;
+}
+
+void
+gdm_set_high_display_num (gint val)
+{
+ high_display_num = val;
+}
+
+/**
+ * gdm_print_config_option
+ *
+ * Called by gdm_print_all_config in a loop to print each key.
+ *
+ */
+void
+gdm_print_config_option (gpointer key_in, gpointer value_in, gpointer data)
+{
+ gchar *key = (gchar *)key_in;
+ gchar *retval;
+ GdmConfigType *type = (GdmConfigType *)value_in;
+
+ gdm_config_to_string (key, &retval);
+ if (retval != NULL) {
+ gdm_debug ("key is %s, value is %s\n", key, retval);
+ g_free (retval);
+ } else
+ gdm_debug ("key is %s, value is <NULL>\n", key);
+}
+
+/**
+ * gdm_print_all_config
+ *
+ * Not used by GDM, but useful for debug purposes.
+ */
+void
+gdm_print_all_config (void)
+{
+ gdm_config_parse();
+
+ g_hash_table_foreach (type_hash, gdm_print_config_option, NULL);
+}
+
+/**
+ * gdm_signal_terminthup_was_notified
+ *
+ * returns TRUE if signal SIGTERM, SIGINT, or SIGHUP was received.
+ * This just hides these vicious-extensions functions from the
+ * other files
+ */
+gboolean
+gdm_signal_terminthup_was_notified (void)
+{
+ if (ve_signal_was_notified (SIGTERM) ||
+ ve_signal_was_notified (SIGINT) ||
+ ve_signal_was_notified (SIGHUP)) {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
+
+/**
+ * check_user_file
+ * check_global_file
+ * is_in_trusted_pic_dir
+ * get_facefile_from_gnome2_dir_config
+ * path_is_local
+ * gdm_get_facefile_from_home
+ * gdm_get_facefile_from_global
+ *
+ * These functions are used for accessing the user's face image from their
+ * home directory via vicious-extensions.
+ */
+static gboolean
+check_user_file (const char *path,
+ guint uid)
+{
+ char *dir;
+ char *file;
+ gboolean is_ok;
+
+ if (path == NULL)
+ return FALSE;
+
+ if (access (path, R_OK) != 0)
+ return FALSE;
+
+ dir = g_path_get_dirname (path);
+ file = g_path_get_basename (path);
+
+ is_ok = gdm_file_check ("run_pictures",
+ uid,
+ dir,
+ file,
+ TRUE, TRUE,
+ gdm_get_value_int (GDM_KEY_USER_MAX_FILE),
+ gdm_get_value_int (GDM_KEY_RELAX_PERM));
+ g_free (dir);
+ g_free (file);
+
+ return is_ok;
+}
+
+static gboolean
+check_global_file (const char *path,
+ guint uid)
+{
+ if (path == NULL)
+ return FALSE;
+
+ if (access (path, R_OK) != 0)
+ return FALSE;
+
+ return TRUE;
+}
+
+/* If path starts with a "trusted" directory, don't sanity check things */
+/* This is really somewhat "outdated" as we now really want things in
+ * the picture dir or in ~/.gnome2/photo */
+static gboolean
+is_in_trusted_pic_dir (const char *path)
+{
+ /* our own pixmap dir is trusted */
+ if (strncmp (path, EXPANDED_PIXMAPDIR, sizeof (EXPANDED_PIXMAPDIR)) == 0)
+ return TRUE;
+
+ return FALSE;
+}
+
+static gchar *
+get_facefile_from_gnome2_dir_config (const char *homedir,
+ guint uid)
+{
+ char *picfile = NULL;
+ char *cfgdir;
+
+ /* Sanity check on ~user/.gnome2/gdm */
+ cfgdir = g_build_filename (homedir, ".gnome2", "gdm", NULL);
+ if (G_LIKELY (check_user_file (cfgdir, uid))) {
+ VeConfig *cfg;
+ char *cfgfile;
+
+ cfgfile = g_build_filename (homedir, ".gnome2", "gdm", NULL);
+ cfg = ve_config_new (cfgfile);
+ g_free (cfgfile);
+
+ picfile = ve_config_get_string (cfg, "face/picture=");
+ ve_config_destroy (cfg);
+
+ /* must exist and be absolute (note that this check
+ * catches empty strings)*/
+ /* Note that these days we just set ~/.face */
+ if G_UNLIKELY (picfile != NULL &&
+ (picfile[0] != '/' ||
+ /* this catches readability by user */
+ access (picfile, R_OK) != 0)) {
+ g_free (picfile);
+ picfile = NULL;
+ }
+
+ if (picfile != NULL) {
+ char buf[PATH_MAX];
+ if (realpath (picfile, buf) == NULL) {
+ g_free (picfile);
+ picfile = NULL;
+ } else {
+ g_free (picfile);
+ picfile = g_strdup (buf);
+ }
+ }
+
+ if G_UNLIKELY (picfile != NULL) {
+ if (! is_in_trusted_pic_dir (picfile)) {
+ /* if not in trusted dir, check it out */
+
+ /* Note that strict permissions checking is done
+ * on this file. Even if it may not even be owned by the
+ * user. This setting should ONLY point to pics in trusted
+ * dirs. */
+ if (! check_user_file (picfile, uid)) {
+ g_free (picfile);
+ picfile = NULL;
+ }
+ }
+ }
+ }
+ g_free (cfgdir);
+
+ return picfile;
+}
+
+static GHashTable *fstype_hash = NULL;
+extern char *filesystem_type (char *path, char *relpath, struct stat *statp);
+
+static gboolean
+path_is_local (const char *path)
+{
+ gpointer local = NULL;
+
+ if (path == NULL)
+ return FALSE;
+
+ if (fstype_hash == NULL)
+ fstype_hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+ else
+ local = g_hash_table_lookup (fstype_hash, path);
+
+ if (local == NULL) {
+ struct stat statbuf;
+
+ 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));
+ local = GINT_TO_POINTER (is_local ? 1 : -1);
+ g_hash_table_insert (fstype_hash, g_strdup (path), local);
+ }
+ }
+
+ return GPOINTER_TO_INT (local) > 0;
+}
+
+gchar *
+gdm_get_facefile_from_home (const char *homedir,
+ guint uid)
+{
+ char *picfile = NULL;
+ char *path;
+ gboolean is_local;
+
+ /* special case: look at parent of home to detect autofs
+ this is so we don't try to trigger an automount */
+ path = g_path_get_dirname (homedir);
+ is_local = path_is_local (path);
+ g_free (path);
+
+ /* now check that home dir itself is local */
+ if (is_local) {
+ is_local = path_is_local (homedir);
+ }
+
+ /* only look at local home directories so we don't try to
+ read from remote (e.g. NFS) volumes */
+ if (! is_local)
+ return NULL;
+
+
+ picfile = g_build_filename (homedir, ".face", NULL);
+
+ if (check_user_file (picfile, uid))
+ return picfile;
+ else {
+ g_free (picfile);
+ picfile = NULL;
+ }
+
+ picfile = g_build_filename (homedir, ".face.icon", NULL);
+
+ if (check_user_file (picfile, uid))
+ return picfile;
+ else {
+ g_free (picfile);
+ picfile = NULL;
+ }
+
+ picfile = get_facefile_from_gnome2_dir_config (homedir, uid);
+ if (check_user_file (picfile, uid))
+ return picfile;
+ else {
+ g_free (picfile);
+ picfile = NULL;
+ }
+
+ /* Nothing found yet, try the old locations */
+
+ picfile = g_build_filename (homedir, ".gnome2", "photo", NULL);
+ if (check_user_file (picfile, uid))
+ return picfile;
+ else {
+ g_free (picfile);
+ picfile = NULL;
+ }
+
+ picfile = g_build_filename (homedir, ".gnome", "photo", NULL);
+ if (check_user_file (picfile, uid))
+ return picfile;
+ else {
+ g_free (picfile);
+ picfile = NULL;
+ }
+
+ return NULL;
+}
+
+gchar *
+gdm_get_facefile_from_global (const char *username,
+ guint uid)
+{
+ char *picfile = NULL;
+ char *facedir = gdm_get_value_string (GDM_KEY_FACE_DIR);
+
+ /* Try the global face directory */
+
+ picfile = g_build_filename (facedir, username, NULL);
+
+ if (check_global_file (picfile, uid))
+ return picfile;
+
+ g_free (picfile);
+ picfile = gdm_make_filename (facedir, username, ".png");
+
+ if (check_global_file (picfile, uid))
+ return picfile;
+
+ g_free (picfile);
+ return NULL;
+}
+
+/**
+ * gdm_get_session_exec
+ *
+ * This function accesses the GDM session desktop file, via vicious
+ * extensions and returns the execution command for starting the
+ * session.
+ */
+char *
+gdm_get_session_exec (const char *session_name, gboolean check_try_exec)
+{
+ char *file;
+ char *full = NULL;
+ VeConfig *cfg;
+ static char *exec;
+ static char *cached = NULL;
+ char *tryexec;
+
+ /* clear cache */
+ if (session_name == NULL) {
+ g_free (exec);
+ exec = NULL;
+ g_free (cached);
+ cached = NULL;
+ return NULL;
+ }
+
+ if (cached != NULL && strcmp (session_name, cached) == 0)
+ return g_strdup (exec);
+
+ g_free (exec);
+ exec = NULL;
+ g_free (cached);
+ cached = g_strdup (session_name);
+
+ /* Some ugly special casing for legacy "Default.desktop", oh well,
+ * we changed to "default.desktop" */
+ if (g_ascii_strcasecmp (session_name, "default") == 0 ||
+ g_ascii_strcasecmp (session_name, "default.desktop") == 0) {
+ full = ve_find_prog_in_path ("default.desktop",
+ gdm_get_value_string (GDM_KEY_SESSION_DESKTOP_DIR));
+ }
+
+ if (full == NULL) {
+ file = gdm_ensure_extension (session_name, ".desktop");
+ full = ve_find_prog_in_path (file,
+ gdm_get_value_string (GDM_KEY_SESSION_DESKTOP_DIR));
+ g_free (file);
+ }
+
+ if (ve_string_empty (full) || access (full, R_OK) != 0) {
+ g_free (full);
+ if (gdm_is_session_magic (session_name)) {
+ exec = g_strdup (session_name);
+ return g_strdup (exec);
+ } else {
+ return NULL;
+ }
+ }
+
+ cfg = ve_config_get (full);
+ g_free (full);
+ if (ve_config_get_bool (cfg, "Desktop Entry/Hidden=false"))
+ return NULL;
+
+ if (check_try_exec) {
+ tryexec = ve_config_get_string (cfg, "Desktop Entry/TryExec");
+ if ( ! ve_string_empty (tryexec) &&
+ ! ve_is_prog_in_path (tryexec, gdm_get_value_string (GDM_KEY_PATH)) &&
+ ! ve_is_prog_in_path (tryexec, gdm_saved_getenv ("PATH"))) {
+ g_free (tryexec);
+ return NULL;
+ }
+ g_free (tryexec);
+ }
+
+ exec = ve_config_get_string (cfg, "Desktop Entry/Exec");
+ return g_strdup (exec);
+}
+
+/**
+ * gdm_set_user_session_lang
+ * gdm_get_user_session_lang
+ *
+ * These functions get and set the user's language and setting in their
+ * $HOME/.dmrc file via vicious-extensions.
+ */
+void
+gdm_set_user_session_lang (gboolean savesess, gboolean savelang,
+ const char *home_dir, const char *save_session, const char *save_language)
+{
+ VeConfig *dmrc = NULL;
+ gchar *cfgstr = g_build_filename (home_dir, ".dmrc", NULL);
+
+ if (savesess) {
+ dmrc = ve_config_new (cfgstr);
+ ve_config_set_string (dmrc, "Desktop/Session",
+ ve_sure_string (save_session));
+ }
+
+ if (savelang) {
+ if (dmrc == NULL)
+ dmrc = ve_config_new (cfgstr);
+ if (ve_string_empty (save_language))
+ /* we chose the system default language so wipe the
+ * lang key */
+ ve_config_delete_key (dmrc, "Desktop/Language");
+ else
+ ve_config_set_string (dmrc, "Desktop/Language", save_language);
+ }
+
+ g_free (cfgstr);
+
+ if (dmrc != NULL) {
+ mode_t oldmode;
+ oldmode = umask (077);
+ ve_config_save (dmrc, FALSE);
+ ve_config_destroy (dmrc);
+ dmrc = NULL;
+ umask (oldmode);
+ }
+}
+
+void
+gdm_get_user_session_lang (char **usrsess, char **usrlang,
+ const char *home_dir, gboolean *savesess)
+{
+ char *p;
+ char *cfgfile = g_build_filename (home_dir, ".dmrc", NULL);
+ VeConfig *cfg = ve_config_new (cfgfile);
+ g_free (cfgfile);
+
+ *usrsess = ve_config_get_string (cfg, "Desktop/Session");
+ if (*usrsess == NULL)
+ *usrsess = g_strdup ("");
+
+ /* this is just being truly anal about what users give us, and in case
+ * it looks like they may have included a path whack it. */
+ p = strrchr (*usrsess, '/');
+ if (p != NULL) {
+ char *tmp = g_strdup (p+1);
+ g_free (*usrsess);
+ *usrsess = tmp;
+ }
+
+ /* ugly workaround for migration */
+ if ((strcmp (*usrsess, "Default.desktop") == 0 ||
+ strcmp (*usrsess, "Default") == 0) &&
+ ! ve_is_prog_in_path ("Default.desktop",
+ gdm_get_value_string (GDM_KEY_SESSION_DESKTOP_DIR))) {
+ g_free (*usrsess);
+ *usrsess = g_strdup ("default");
+ *savesess = TRUE;
+ }
+
+ *usrlang = ve_config_get_string (cfg, "Desktop/Language");
+ if (*usrlang == NULL)
+ *usrlang = g_strdup ("");
+
+ ve_config_destroy (cfg);
+}
+
diff --git a/daemon/gdmconfig.h b/daemon/gdmconfig.h
new file mode 100644
index 00000000..d25c53d3
--- /dev/null
+++ b/daemon/gdmconfig.h
@@ -0,0 +1,68 @@
+/* GDM - The GNOME Display Manager
+ * Copyright (C) 1998, 1999, 2000 Martin K. Petersen <mkp@mkp.net>
+ * Copyright (C) 2005 Brian Cameron <brian.cameron@sun.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+#include "gdm.h"
+
+/* To access ve_string_empty(), ve_sure_string(), and
+ VE_IGNORE_EINTR macros ve-misc.h must be included */
+
+#include "ve-misc.h"
+
+gchar* gdm_get_value_string (gchar *key);
+gboolean gdm_get_value_bool (gchar *key);
+gint gdm_get_value_int (gchar *key);
+void gdm_set_value_string (gchar *key,
+ gchar *value);
+void gdm_set_value_bool (gchar *key,
+ gboolean value);
+void gdm_set_value_int (gchar *key,
+ gint value);
+gboolean gdm_config_to_string (gchar *key,
+ gchar *retval);
+gboolean gdm_update_config (gchar *key);
+void gdm_config_init (void);
+void gdm_config_parse (void);
+GdmXserver* gdm_find_x_server (const gchar *id);
+int gdm_compare_displays (gconstpointer a,
+ gconstpointer b);
+uid_t gdm_get_gdmuid (void);
+uid_t gdm_get_gdmgid (void);
+gint gdm_get_high_display_num (void);
+void gdm_set_high_display_num (gint val);
+void gdm_print_all_config (void);
+gboolean gdm_signal_terminthup_was_notified (void);
+
+gchar* gdm_get_facefile_from_home
+ (const char *homedir,
+ guint uid);
+gchar* gdm_get_facefile_from_global
+ (const char *username,
+ guint uid);
+void gdm_get_user_session_lang
+ (char **usrsess,
+ char **usrlang,
+ const char *homedir,
+ gboolean *savesess);
+void gdm_set_user_session (gboolean savesess,
+ gboolean savelang,
+ const char *homedir,
+ const char *save_session,
+ const char *save_language);
+char* gdm_get_session_exec (const char *session_name,
+ gboolean check_try_exec);
+
diff --git a/daemon/gdmconfig.o b/daemon/gdmconfig.o
new file mode 100644
index 00000000..4b22a390
--- /dev/null
+++ b/daemon/gdmconfig.o
Binary files differ
diff --git a/daemon/getvt.c b/daemon/getvt.c
index 6ca3baf0..221735d8 100644
--- a/daemon/getvt.c
+++ b/daemon/getvt.c
@@ -1,6 +1,23 @@
+/* GDM - The GNOME Display Manager
+ * Copyright (C) 1998, 1999, 2000 Martin K. Petersen <mkp@mkp.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
#include "config.h"
-#include <vicious.h>
#include "gdm.h"
#include "misc.h"
#include "getvt.h"
diff --git a/daemon/getvt.h b/daemon/getvt.h
index 737ab582..c18f7b15 100644
--- a/daemon/getvt.h
+++ b/daemon/getvt.h
@@ -1,4 +1,4 @@
-/* GDM - The Gnome Display Manager
+/* GDM - The GNOME Display Manager
* Copyright (C) 2002 Queen of England
*
* This program is free software; you can redistribute it and/or modify
diff --git a/daemon/misc.c b/daemon/misc.c
index bb5dea55..594ae117 100644
--- a/daemon/misc.c
+++ b/daemon/misc.c
@@ -17,7 +17,7 @@
*/
#include "config.h"
-#include <libgnome/libgnome.h>
+
#include <syslog.h>
#include <unistd.h>
#include <dirent.h>
@@ -48,20 +48,13 @@
#include <X11/Xlib.h>
-#include <vicious.h>
+#include <libgnome/libgnome.h>
#include "gdm.h"
#include "misc.h"
#include "xdmcp.h"
#include "slave.h"
-
-/* Configuration option variables */
-extern gchar *GdmPidFile;
-extern gboolean GdmDebug;
-extern GSList *displays;
-extern int gdm_xdmcpfd;
-extern gboolean GdmXdmcp;
-extern gchar *GdmConsoleCannotHandle;
+#include "gdmconfig.h"
extern char **environ;
@@ -70,9 +63,7 @@ extern int extra_status;
extern pid_t gdm_main_pid;
extern gboolean preserve_ld_vars;
extern int gdm_in_signal;
-
-extern gboolean GdmConsoleNotify;
-
+extern GSList *displays;
extern char *gdm_charset;
#ifdef ENABLE_IPV6
@@ -318,7 +309,7 @@ gdm_debug (const gchar *format, ...)
va_list args;
char *s;
- if G_LIKELY ( ! GdmDebug)
+ if G_LIKELY (! gdm_get_value_bool (GDM_KEY_DEBUG))
return;
va_start (args, format);
@@ -589,7 +580,7 @@ gdm_text_message_dialog (const char *msg)
char *dialog; /* do we have dialog?*/
char *msg_quoted;
- if ( ! GdmConsoleNotify)
+ if ( ! gdm_get_value_bool (GDM_KEY_CONSOLE_NOTIFY))
return FALSE;
if (access (EXPANDED_LIBEXECDIR "/gdmopen", X_OK) != 0)
@@ -610,11 +601,11 @@ gdm_text_message_dialog (const char *msg)
char *argv[6];
if ( ! gdm_ok_console_language ()) {
- ve_unsetenv ("LANG");
- ve_unsetenv ("LC_ALL");
- ve_unsetenv ("LC_MESSAGES");
- ve_setenv ("LANG", "C", TRUE);
- ve_setenv ("UNSAFE_TO_TRANSLATE", "yes", TRUE);
+ g_unsetenv ("LANG");
+ g_unsetenv ("LC_ALL");
+ g_unsetenv ("LC_MESSAGES");
+ g_setenv ("LANG", "C", TRUE);
+ g_setenv ("UNSAFE_TO_TRANSLATE", "yes", TRUE);
}
argv[0] = EXPANDED_LIBEXECDIR "/gdmopen";
@@ -667,7 +658,7 @@ gdm_text_yesno_dialog (const char *msg, gboolean *ret)
char *dialog; /* do we have dialog?*/
char *msg_quoted;
- if ( ! GdmConsoleNotify)
+ if ( ! gdm_get_value_bool (GDM_KEY_CONSOLE_NOTIFY))
return FALSE;
if (access (EXPANDED_LIBEXECDIR "/gdmopen", X_OK) != 0)
@@ -692,11 +683,11 @@ gdm_text_yesno_dialog (const char *msg, gboolean *ret)
int retint;
if ( ! gdm_ok_console_language ()) {
- ve_unsetenv ("LANG");
- ve_unsetenv ("LC_ALL");
- ve_unsetenv ("LC_MESSAGES");
- ve_setenv ("LANG", "C", TRUE);
- ve_setenv ("UNSAFE_TO_TRANSLATE", "yes", TRUE);
+ g_unsetenv ("LANG");
+ g_unsetenv ("LC_ALL");
+ g_unsetenv ("LC_MESSAGES");
+ g_setenv ("LANG", "C", TRUE);
+ g_setenv ("UNSAFE_TO_TRANSLATE", "yes", TRUE);
}
argv[0] = EXPANDED_LIBEXECDIR "/gdmopen";
@@ -814,8 +805,8 @@ gdm_exec_wait (char * const *argv, gboolean no_display,
openlog ("gdm", LOG_PID, LOG_DAEMON);
if (no_display) {
- ve_unsetenv ("DISPLAY");
- ve_unsetenv ("XAUTHORITY");
+ g_unsetenv ("DISPLAY");
+ g_unsetenv ("XAUTHORITY");
}
VE_IGNORE_EINTR (execv (argv[0], argv));
@@ -950,7 +941,7 @@ gdm_fork_extra (void)
/* Harmless in children, but in case we'd run
extra processes from main daemon would fix
problems ... */
- if (GdmXdmcp)
+ if (gdm_get_value_bool (GDM_KEY_XDMCP))
gdm_xdmcp_close ();
}
@@ -2434,12 +2425,13 @@ gdm_ok_console_language (void)
static gboolean cached = FALSE;
static gboolean is_ok;
const char *loc;
+ char *consolecannothandle = gdm_get_value_string (GDM_KEY_CONSOLE_CANNOT_HANDLE);
if (cached)
return is_ok;
/* so far we should be paranoid, we're not set yet */
- if (GdmConsoleCannotHandle == NULL)
+ if (consolecannothandle == NULL)
return FALSE;
cached = TRUE;
@@ -2452,7 +2444,7 @@ gdm_ok_console_language (void)
is_ok = TRUE;
- v = g_strsplit (GdmConsoleCannotHandle, ",", -1);
+ v = g_strsplit (consolecannothandle, ",", -1);
for (i = 0; v != NULL && v[i] != NULL; i++) {
if ( ! ve_string_empty (v[i]) &&
strncmp (v[i], loc, strlen (v[i])) == 0) {
@@ -2485,9 +2477,9 @@ gdm_console_translate (const char *str)
gchar *
gdm_read_default (gchar *key)
{
+#ifdef HAVE_DEFOPEN
gchar *retval = NULL;
-#ifdef HAVE_DEFOPEN
if (defopen ("/etc/default/login") == 0) {
int flags = defcntl (DC_GETFLAGS, 0);
diff --git a/daemon/misc.h b/daemon/misc.h
index e43beaaf..33a4d2c1 100644
--- a/daemon/misc.h
+++ b/daemon/misc.h
@@ -1,4 +1,4 @@
-/* GDM - The Gnome Display Manager
+/* GDM - The GNOME Display Manager
* Copyright (C) 1998, 1999, 2000 Martin K. Petersen <mkp@mkp.net>
*
* This program is free software; you can redistribute it and/or modify
diff --git a/daemon/server.c b/daemon/server.c
index 5a16522f..d9902893 100644
--- a/daemon/server.c
+++ b/daemon/server.c
@@ -37,8 +37,6 @@
#include <ctype.h>
#include <X11/Xlib.h>
-#include <vicious.h>
-
#include "gdm.h"
#include "server.h"
#include "misc.h"
@@ -47,24 +45,16 @@
#include "auth.h"
#include "slave.h"
#include "getvt.h"
+#include "gdmconfig.h"
#define SERVER_WAIT_ALARM 10
-
/* Local prototypes */
static void gdm_server_spawn (GdmDisplay *d, const char *vtarg);
static void gdm_server_usr1_handler (gint);
static void gdm_server_child_handler (gint);
static char * get_font_path (const char *display);
-/* Configuration options */
-extern gchar *GdmDisplayInit;
-extern gchar *GdmServAuthDir;
-extern gchar *GdmLogDir;
-extern gchar *GdmStandardXServer;
-extern gboolean GdmXdmcp;
-extern gboolean GdmDisallowTCP;
-extern gint high_display_num;
extern pid_t extra_process;
extern int extra_status;
extern int gdm_in_signal;
@@ -380,7 +370,7 @@ busy_ask_user (GdmDisplay *disp)
static gboolean
display_parent_no_connect (GdmDisplay *disp)
{
- char *logname = gdm_make_filename (GdmLogDir, d->name, ".log");
+ char *logname = gdm_make_filename (gdm_get_value_string (GDM_KEY_LOG_DIR), d->name, ".log");
FILE *fp;
char buf[256];
char *getsret;
@@ -412,7 +402,7 @@ display_parent_no_connect (GdmDisplay *disp)
static gboolean
display_busy (GdmDisplay *disp)
{
- char *logname = gdm_make_filename (GdmLogDir, d->name, ".log");
+ char *logname = gdm_make_filename (gdm_get_value_string (GDM_KEY_LOG_DIR), d->name, ".log");
FILE *fp;
char buf[256];
char *getsret;
@@ -467,7 +457,7 @@ open_another_logfile (char buf[256], FILE **fp)
static int
display_vt (GdmDisplay *disp)
{
- char *logname = gdm_make_filename (GdmLogDir, d->name, ".log");
+ char *logname = gdm_make_filename (gdm_get_value_string (GDM_KEY_LOG_DIR), d->name, ".log");
FILE *fp;
char buf[256];
gboolean switched = FALSE;
@@ -581,7 +571,7 @@ do_server_wait (GdmDisplay *d)
* as a test, but the */
/* just in case it's set */
- ve_unsetenv ("XAUTHORITY");
+ g_unsetenv ("XAUTHORITY");
gdm_auth_set_local_auth (d);
@@ -746,7 +736,7 @@ gdm_server_start (GdmDisplay *disp,
if (SERVER_IS_FLEXI (d) ||
treat_as_flexi) {
flexi_disp = gdm_get_free_display
- (MAX (high_display_num + 1, min_flexi_disp) /* start */,
+ (MAX (gdm_get_high_display_num() + 1, min_flexi_disp) /* start */,
d->server_uid /* server uid */);
g_free (d->name);
@@ -767,7 +757,7 @@ gdm_server_start (GdmDisplay *disp,
return FALSE;
gdm_slave_send_string (GDM_SOP_COOKIE, d->cookie);
gdm_slave_send_string (GDM_SOP_AUTHFILE, d->authfile);
- ve_setenv ("DISPLAY", d->name, TRUE);
+ g_setenv ("DISPLAY", d->name, TRUE);
if ( ! setup_server_wait (d))
return FALSE;
@@ -879,7 +869,7 @@ gdm_server_start (GdmDisplay *disp,
return gdm_server_start (d,
FALSE /*try_again_if_busy */,
TRUE /* treat as flexi */,
- high_display_num + 1,
+ gdm_get_high_display_num() + 1,
flexi_retries - 1);
}
_exit (DISPLAY_REMANAGE);
@@ -930,12 +920,14 @@ safer_rename (const char *a, const char *b)
static void
rotate_logs (const char *dname)
{
+ gchar *logdir = gdm_get_value_string (GDM_KEY_LOG_DIR);
+
/* I'm too lazy to write a loop damnit */
- char *fname4 = gdm_make_filename (GdmLogDir, dname, ".log.4");
- char *fname3 = gdm_make_filename (GdmLogDir, dname, ".log.3");
- char *fname2 = gdm_make_filename (GdmLogDir, dname, ".log.2");
- char *fname1 = gdm_make_filename (GdmLogDir, dname, ".log.1");
- char *fname = gdm_make_filename (GdmLogDir, dname, ".log");
+ char *fname4 = gdm_make_filename (logdir, dname, ".log.4");
+ char *fname3 = gdm_make_filename (logdir, dname, ".log.3");
+ char *fname2 = gdm_make_filename (logdir, dname, ".log.2");
+ char *fname1 = gdm_make_filename (logdir, dname, ".log.1");
+ char *fname = gdm_make_filename (logdir, dname, ".log");
/* Rotate the logs (keep 4 last) */
VE_IGNORE_EINTR (unlink (fname4));
@@ -951,11 +943,11 @@ rotate_logs (const char *dname)
g_free (fname);
}
-GdmXServer *
+GdmXserver *
gdm_server_resolve (GdmDisplay *disp)
{
char *bin;
- GdmXServer *svr = NULL;
+ GdmXserver *svr = NULL;
bin = ve_first_word (disp->command);
if (bin != NULL && bin[0] != '/') {
@@ -981,13 +973,13 @@ gdm_server_resolve_command_line (GdmDisplay *disp,
bin = ve_first_word (disp->command);
if (bin == NULL) {
gdm_error (_("Invalid server command '%s'"), disp->command);
- argv = ve_split (GdmStandardXServer);
+ argv = ve_split (gdm_get_value_string (GDM_KEY_STANDARD_XSERVER));
} else if (bin[0] != '/') {
- GdmXServer *svr = gdm_find_x_server (bin);
+ GdmXserver *svr = gdm_find_x_server (bin);
if (svr == NULL) {
gdm_error (_("Server name '%s' not found; "
"using standard server"), bin);
- argv = ve_split (GdmStandardXServer);
+ argv = ve_split (gdm_get_value_string (GDM_KEY_STANDARD_XSERVER));
} else {
char **svr_command =
ve_split (ve_sure_string (svr->command));
@@ -1056,7 +1048,7 @@ gdm_server_resolve_command_line (GdmDisplay *disp,
query_in_arglist = TRUE;
}
- if (resolve_flags && GdmDisallowTCP && ! query_in_arglist) {
+ if (resolve_flags && gdm_get_value_bool (GDM_KEY_DISALLOW_TCP) && ! query_in_arglist) {
argv[len++] = g_strdup ("-nolisten");
argv[len++] = g_strdup ("tcp");
d->tcp_disallowed = TRUE;
@@ -1153,7 +1145,7 @@ gdm_server_spawn (GdmDisplay *d, const char *vtarg)
rotate_logs (d->name);
/* Log all output from spawned programs to a file */
- logfile = gdm_make_filename (GdmLogDir, d->name, ".log");
+ logfile = gdm_make_filename (gdm_get_value_string (GDM_KEY_LOG_DIR), d->name, ".log");
VE_IGNORE_EINTR (unlink (logfile));
VE_IGNORE_EINTR (logfd = open (logfile, O_CREAT|O_TRUNC|O_WRONLY|O_EXCL, 0644));
@@ -1201,11 +1193,11 @@ gdm_server_spawn (GdmDisplay *d, const char *vtarg)
if (SERVER_IS_PROXY (d)) {
int argc = ve_vector_len (argv);
- ve_unsetenv ("DISPLAY");
+ g_unsetenv ("DISPLAY");
if (d->parent_auth_file != NULL)
- ve_setenv ("XAUTHORITY", d->parent_auth_file, TRUE);
+ g_setenv ("XAUTHORITY", d->parent_auth_file, TRUE);
else
- ve_unsetenv ("XAUTHORITY");
+ g_unsetenv ("XAUTHORITY");
if (d->type == TYPE_FLEXI_XNEST) {
char *font_path = NULL;
@@ -1253,11 +1245,11 @@ gdm_server_spawn (GdmDisplay *d, const char *vtarg)
}
if (pwent->pw_dir != NULL &&
g_file_test (pwent->pw_dir, G_FILE_TEST_EXISTS))
- ve_setenv ("HOME", pwent->pw_dir, TRUE);
+ g_setenv ("HOME", pwent->pw_dir, TRUE);
else
- ve_setenv ("HOME", "/", TRUE); /* Hack */
- ve_setenv ("SHELL", pwent->pw_shell, TRUE);
- ve_unsetenv ("MAIL");
+ g_setenv ("HOME", "/", TRUE); /* Hack */
+ g_setenv ("SHELL", pwent->pw_shell, TRUE);
+ g_unsetenv ("MAIL");
if (setgid (pwent->pw_gid) < 0) {
gdm_error (_("%s: Couldn't set groupid to %d"),
diff --git a/daemon/server.h b/daemon/server.h
index 131d023b..301ea53a 100644
--- a/daemon/server.h
+++ b/daemon/server.h
@@ -1,4 +1,4 @@
-/* GDM - The Gnome Display Manager
+/* GDM - The GNOME Display Manager
* Copyright (C) 1998, 1999, 2000 Martin K. Petersen <mkp@mkp.net>
*
* This program is free software; you can redistribute it and/or modify
@@ -42,7 +42,7 @@ void gdm_server_checklog (GdmDisplay *disp);
char ** gdm_server_resolve_command_line (GdmDisplay *disp,
gboolean resolve_flags,
const char *vtarg);
-GdmXServer * gdm_server_resolve (GdmDisplay *disp);
+GdmXserver * gdm_server_resolve (GdmDisplay *disp);
diff --git a/daemon/slave.c b/daemon/slave.c
index 22ac6993..95989fae 100644
--- a/daemon/slave.c
+++ b/daemon/slave.c
@@ -73,8 +73,6 @@
#include <gdk/gdkx.h>
#include <gtk/gtk.h>
-#include <vicious.h>
-
#include "gdm.h"
#include "slave.h"
#include "misc.h"
@@ -86,6 +84,7 @@
#include "getvt.h"
#include "errorgui.h"
#include "cookie.h"
+#include "gdmconfig.h"
/* Some per slave globals */
static GdmDisplay *d = 0;
@@ -145,59 +144,6 @@ extern int slave_fifo_pipe_fd; /* the slavepipe (like fifo) connection, this is
/* wait for a GO in the SOP protocol */
extern gboolean gdm_wait_for_go;
-/* Configuration option variables */
-extern gchar *GdmUser;
-extern uid_t GdmUserId;
-extern gid_t GdmGroupId;
-extern gchar *GdmSessDir;
-extern gchar *GdmXsession;
-extern gchar *GdmDefaultSession;
-extern gchar *GdmAutomaticLogin;
-extern gboolean GdmAllowRemoteAutoLogin;
-extern gboolean GdmAlwaysRestartServer;
-extern gboolean GdmAddGtkModules;
-extern gboolean GdmDoubleLoginWarning;
-extern gboolean GdmAlwaysLoginCurrentSession;
-extern gchar *GdmConfigurator;
-extern gboolean GdmConfigAvailable;
-extern gboolean GdmChooserButton;
-extern gboolean GdmSystemMenu;
-extern gint GdmXineramaScreen;
-extern gchar *GdmGreeter;
-extern gchar *GdmRemoteGreeter;
-extern gchar *GdmGtkModulesList;
-extern gchar *GdmChooser;
-extern gchar *GdmDisplayInit;
-extern gchar *GdmPostLogin;
-extern gchar *GdmPreSession;
-extern gchar *GdmPostSession;
-extern gchar *GdmSuspend;
-extern gchar *GdmDefaultPath;
-extern gchar *GdmRootPath;
-extern gchar *GdmUserAuthFile;
-extern gchar *GdmServAuthDir;
-extern gchar *GdmDefaultLocale;
-extern gchar *GdmTimedLogin;
-extern gint GdmTimedLoginDelay;
-extern gint GdmUserMaxFile;
-extern gint GdmRelaxPerms;
-extern gboolean GdmKillInitClients;
-extern gint GdmPingInterval;
-extern gint GdmRetryDelay;
-extern gboolean GdmAllowRoot;
-extern gboolean GdmAllowRemoteRoot;
-extern gchar *GdmGlobalFaceDir;
-extern gboolean GdmDebug;
-extern gboolean GdmDebugGestures;
-extern gboolean GdmDisallowTCP;
-extern gchar *GdmSoundProgram;
-extern gchar *GdmSoundOnLoginReadyFile;
-extern gboolean GdmSoundOnLoginSuccess;
-extern gchar *GdmSoundOnLoginSuccessFile;
-extern gboolean GdmSoundOnLoginFailure;
-extern gchar *GdmSoundOnLoginFailureFile;
-
-
/* Local prototypes */
static gint gdm_slave_xerror_handler (Display *disp, XErrorEvent *evt);
static gint gdm_slave_xioerror_handler (Display *disp);
@@ -764,6 +710,7 @@ gdm_slave_start (GdmDisplay *display)
struct sigaction xfsz;
#endif /* SIGXFSZ */
sigset_t mask;
+ int pinginterval = gdm_get_value_int (GDM_KEY_PING_INTERVAL);
/*
* Set d global to display before setting signal handlers,
@@ -791,7 +738,7 @@ gdm_slave_start (GdmDisplay *display)
sigaddset (&mask, SIGCHLD);
sigaddset (&mask, SIGUSR2);
sigaddset (&mask, SIGUSR1); /* normally we ignore USR1 */
- if ( ! SERVER_IS_LOCAL (display) && GdmPingInterval > 0) {
+ if ( ! SERVER_IS_LOCAL (display) && pinginterval > 0) {
sigaddset (&mask, SIGALRM);
}
/* must set signal mask before the Setjmp as it will be
@@ -821,7 +768,7 @@ gdm_slave_start (GdmDisplay *display)
_exit (DISPLAY_REMANAGE);
}
- if ( ! SERVER_IS_LOCAL (display) && GdmPingInterval > 0) {
+ if ( ! SERVER_IS_LOCAL (display) && pinginterval > 0) {
/* Handle a ALRM signals from our ping alarms */
alrm.sa_handler = gdm_slave_alrm_handler;
alrm.sa_flags = SA_RESTART | SA_NODEFER;
@@ -913,7 +860,7 @@ gdm_slave_start (GdmDisplay *display)
gdm_debug ("gdm_slave_start: Reinitializing things");
- if (GdmAlwaysRestartServer) {
+ if (gdm_get_value_bool (GDM_KEY_ALWAYS_RESTART_SERVER)) {
/* Whack the server if we want to restart it next time
* we run gdm_slave_run */
gdm_server_stop (display);
@@ -950,8 +897,8 @@ setup_automatic_session (GdmDisplay *display, const char *name)
/* Run the init script. gdmslave suspends until script
* has terminated */
- gdm_slave_exec_script (display, GdmDisplayInit, NULL, NULL,
- FALSE /* pass_stdout */);
+ gdm_slave_exec_script (display, gdm_get_value_string (GDM_KEY_DISPLAY_INIT_DIR),
+ NULL, NULL, FALSE /* pass_stdout */);
gdm_debug ("setup_automatic_session: DisplayInit script finished");
@@ -990,6 +937,7 @@ gdm_screen_init (GdmDisplay *display)
if (have_xinerama) {
int screen_num;
+ int xineramascreen;
XineramaScreenInfo *xscreens =
XineramaQueryScreens (display->dsp,
&screen_num);
@@ -998,13 +946,15 @@ gdm_screen_init (GdmDisplay *display)
if G_UNLIKELY (screen_num <= 0)
gdm_fail ("Xinerama active, but <= 0 screens?");
- if (screen_num <= GdmXineramaScreen)
- GdmXineramaScreen = 0;
+ if (screen_num <= gdm_get_value_int (GDM_KEY_XINERAMA_SCREEN))
+ gdm_set_value_int (GDM_KEY_XINERAMA_SCREEN, 0);
- display->screenx = xscreens[GdmXineramaScreen].x_org;
- display->screeny = xscreens[GdmXineramaScreen].y_org;
- display->screenwidth = xscreens[GdmXineramaScreen].width;
- display->screenheight = xscreens[GdmXineramaScreen].height;
+ xineramascreen = gdm_get_value_int (GDM_KEY_XINERAMA);
+
+ display->screenx = xscreens[xineramascreen].x_org;
+ display->screeny = xscreens[xineramascreen].y_org;
+ display->screenwidth = xscreens[xineramascreen].width;
+ display->screenheight = xscreens[xineramascreen].height;
display->lrh_offsetx =
DisplayWidth (display->dsp,
@@ -1036,6 +986,7 @@ gdm_screen_init (GdmDisplay *display)
int result;
XRectangle monitors[MAXFRAMEBUFFERS];
unsigned char hints[16];
+ int xineramascreen;
result = XineramaGetInfo (display->dsp, 0, monitors, hints, &n_monitors);
/* Yes I know it should be Success but the current implementation
@@ -1044,13 +995,14 @@ gdm_screen_init (GdmDisplay *display)
if G_UNLIKELY (result <= 0)
gdm_fail ("Xinerama active, but <= 0 screens?");
- if (n_monitors <= GdmXineramaScreen)
- GdmXineramaScreen = 0;
+ if (n_monitors <= gdm_get_value_int (GDM_KEY_XINERAMA_SCREEN))
+ gdm_set_value_int (GDM_KEY_XINERAMA_SCREEN, 0);
- display->screenx = monitors[GdmXineramaScreen].x;
- display->screeny = monitors[GdmXineramaScreen].y;
- display->screenwidth = monitors[GdmXineramaScreen].width;
- display->screenheight = monitors[GdmXineramaScreen].height;
+ xineramascreen = gdm_get_value_int (GDM_KEY_XINERAMA_SCREEN);
+ display->screenx = monitors[xineramascreen].x;
+ display->screeny = monitors[xineramascreen].y;
+ display->screenwidth = monitors[xineramascreen].width;
+ display->screenheight = monitors[xineramascreen].height;
display->lrh_offsetx =
DisplayWidth (display->dsp,
@@ -1218,12 +1170,12 @@ gdm_slave_check_user_wants_to_log_in (const char *user)
if (d->type != TYPE_XDMCP_PROXY) {
int r;
- if (!GdmDoubleLoginWarning) {
+ if (!gdm_get_value_bool (GDM_KEY_DOUBLE_LOGIN_WARNING)) {
g_free (migrate_to);
return TRUE;
}
- if (GdmAlwaysLoginCurrentSession)
+ if (gdm_get_value_bool (GDM_KEY_ALWAYS_LOGIN_CURRENT_SESSION))
r = 1;
else
r = ask_migrate (migrate_to);
@@ -1303,6 +1255,7 @@ gdm_slave_run (GdmDisplay *display)
{
gint openretries = 0;
gint maxtries = 0;
+ gint pinginterval = gdm_get_value_int (GDM_KEY_PING_INTERVAL);
/* Reset d since gdm_slave_run is called in a loop */
d = display;
@@ -1353,22 +1306,26 @@ gdm_slave_run (GdmDisplay *display)
/* We can use d->handled from now on on this display,
* since the lookup was done in server start */
- ve_setenv ("DISPLAY", d->name, TRUE);
- ve_unsetenv ("XAUTHORITY"); /* just in case it's set */
+ g_setenv ("DISPLAY", d->name, TRUE);
+ g_unsetenv ("XAUTHORITY"); /* just in case it's set */
gdm_auth_set_local_auth (d);
if (d->handled) {
/* Now the display name and hostname is final */
- if ( ! ve_string_empty (GdmAutomaticLogin)) {
+
+ char *automaticlogin = gdm_get_value_string (GDM_KEY_AUTOMATIC_LOGIN);
+ char *timedlogin = gdm_get_value_string (GDM_KEY_TIMED_LOGIN);
+
+ if ( ! ve_string_empty (automaticlogin)) {
g_free (ParsedAutomaticLogin);
- ParsedAutomaticLogin = gdm_parse_enriched_login (GdmAutomaticLogin,
+ ParsedAutomaticLogin = gdm_parse_enriched_login (automaticlogin,
display);
}
- if ( ! ve_string_empty (GdmTimedLogin)) {
+ if ( ! ve_string_empty (timedlogin)) {
g_free (ParsedTimedLogin);
- ParsedTimedLogin = gdm_parse_enriched_login (GdmTimedLogin,
+ ParsedTimedLogin = gdm_parse_enriched_login (timedlogin,
display);
}
}
@@ -1451,8 +1408,8 @@ gdm_slave_run (GdmDisplay *display)
do_xfailed_on_xio_error = FALSE;
/* If XDMCP setup pinging */
- if ( ! SERVER_IS_LOCAL (d) && GdmPingInterval > 0) {
- alarm (GdmPingInterval);
+ if ( ! SERVER_IS_LOCAL (d) && pinginterval > 0) {
+ alarm (pinginterval);
}
/* checkout xinerama */
@@ -1624,7 +1581,7 @@ focus_first_x_window (const char *class_res_name)
openlog ("gdm", LOG_PID, LOG_DAEMON);
/* just in case it's set */
- ve_unsetenv ("XAUTHORITY");
+ g_unsetenv ("XAUTHORITY");
gdm_auth_set_local_auth (d);
@@ -1743,18 +1700,18 @@ run_config (GdmDisplay *display, struct passwd *pwent)
gdm_restoreenv ();
/* root here */
- ve_setenv ("XAUTHORITY", GDM_AUTHFILE (display), TRUE);
- ve_setenv ("DISPLAY", display->name, TRUE);
- ve_setenv ("LOGNAME", pwent->pw_name, TRUE);
- ve_setenv ("USER", pwent->pw_name, TRUE);
- ve_setenv ("USERNAME", pwent->pw_name, TRUE);
- ve_setenv ("HOME", pwent->pw_dir, TRUE);
- ve_setenv ("SHELL", pwent->pw_shell, TRUE);
- ve_setenv ("PATH", GdmRootPath, TRUE);
- ve_setenv ("RUNNING_UNDER_GDM", "true", TRUE);
+ g_setenv ("XAUTHORITY", GDM_AUTHFILE (display), TRUE);
+ g_setenv ("DISPLAY", display->name, TRUE);
+ g_setenv ("LOGNAME", pwent->pw_name, TRUE);
+ g_setenv ("USER", pwent->pw_name, TRUE);
+ g_setenv ("USERNAME", pwent->pw_name, TRUE);
+ g_setenv ("HOME", pwent->pw_dir, TRUE);
+ g_setenv ("SHELL", pwent->pw_shell, TRUE);
+ g_setenv ("PATH", gdm_get_value_string (GDM_KEY_ROOT_PATH), TRUE);
+ g_setenv ("RUNNING_UNDER_GDM", "true", TRUE);
if ( ! ve_string_empty (display->theme_name))
- ve_setenv ("GDM_GTK_THEME", display->theme_name, TRUE);
- ve_unsetenv ("MAIL"); /* Unset $MAIL for broken shells */
+ g_setenv ("GDM_GTK_THEME", display->theme_name, TRUE);
+ g_unsetenv ("MAIL"); /* Unset $MAIL for broken shells */
closelog ();
@@ -1773,7 +1730,7 @@ run_config (GdmDisplay *display, struct passwd *pwent)
VE_IGNORE_EINTR (chdir ("/"));
/* exec the configurator */
- argv = ve_split (GdmConfigurator);
+ argv = ve_split (gdm_get_value_string (GDM_KEY_CONFIGURATOR));
if G_LIKELY (argv != NULL &&
argv[0] != NULL &&
access (argv[0], X_OK) == 0)
@@ -1866,11 +1823,12 @@ restart_the_greeter (void)
static gboolean
play_login_sound (const char *sound_file)
{
+ char *soundprogram = gdm_get_value_string (GDM_KEY_SOUND_PROGRAM);
pid_t pid;
- if (ve_string_empty (GdmSoundProgram) ||
+ if (ve_string_empty (soundprogram) ||
ve_string_empty (sound_file) ||
- access (GdmSoundProgram, X_OK) != 0 ||
+ access (soundprogram, X_OK) != 0 ||
access (sound_file, F_OK) != 0)
return FALSE;
@@ -1888,8 +1846,8 @@ play_login_sound (const char *sound_file)
setsid ();
seteuid (0);
setegid (0);
- execl (GdmSoundProgram,
- GdmSoundProgram,
+ execl (soundprogram,
+ soundprogram,
sound_file,
NULL);
_exit (0);
@@ -1901,6 +1859,7 @@ play_login_sound (const char *sound_file)
static void
gdm_slave_wait_for_login (void)
{
+ char *successsound;
g_free (login);
login = NULL;
@@ -1960,8 +1919,8 @@ gdm_slave_wait_for_login (void)
_("You must authenticate as root to run configuration."));
/* we always allow root for this */
- oldAllowRoot = GdmAllowRoot;
- GdmAllowRoot = TRUE;
+ oldAllowRoot = gdm_get_value_bool (GDM_KEY_ALLOW_ROOT);
+ gdm_set_value_bool (GDM_KEY_ALLOW_ROOT, TRUE);
pwent = getpwuid (0);
if G_UNLIKELY (pwent == NULL) {
@@ -1975,7 +1934,7 @@ gdm_slave_wait_for_login (void)
pwent->pw_name,
d->name,
d->attached);
- GdmAllowRoot = oldAllowRoot;
+ gdm_set_value_bool (GDM_KEY_ALLOW_ROOT, oldAllowRoot);
/* Clear message */
gdm_slave_greeter_ctl_no_ret (GDM_MSG, "");
@@ -2080,13 +2039,15 @@ gdm_slave_wait_for_login (void)
}
if (login == NULL) {
+ char *failuresound = gdm_get_value_string (GDM_KEY_SOUND_ON_LOGIN_FAILURE_FILE);
+
gdm_debug ("gdm_slave_wait_for_login: No login/Bad login");
gdm_slave_greeter_ctl_no_ret (GDM_RESET, "");
/* Play sounds if specified for a failed login */
if (d->attached &&
- GdmSoundOnLoginFailure &&
- ! play_login_sound (GdmSoundOnLoginFailureFile)) {
+ failuresound &&
+ ! play_login_sound (failuresound)) {
gdm_error (_("Login sound requested on non-local display or the play "
"software cannot be run or the sound does not exist."));
}
@@ -2105,11 +2066,12 @@ gdm_slave_wait_for_login (void)
gdm_debug ("gdm_slave_wait_for_login: Timed Login");
}
+ successsound = gdm_get_value_string (GDM_KEY_SOUND_ON_LOGIN_SUCCESS_FILE);
/* Play sounds if specified for a successful login */
if (login != NULL &&
d->attached &&
- GdmSoundOnLoginSuccess &&
- ! play_login_sound (GdmSoundOnLoginSuccessFile)) {
+ successsound &&
+ ! play_login_sound (successsound)) {
gdm_error (_("Login sound requested on non-local display or the play software "
"cannot be run or the sound does not exist."));
}
@@ -2120,255 +2082,6 @@ gdm_slave_wait_for_login (void)
}
-/* If path starts with a "trusted" directory, don't sanity check things */
-/* This is really somewhat "outdated" as we now really want things in
- * the picture dir or in ~/.gnome2/photo */
-static gboolean
-is_in_trusted_pic_dir (const char *path)
-{
- /* our own pixmap dir is trusted */
- if (strncmp (path, EXPANDED_PIXMAPDIR, sizeof (EXPANDED_PIXMAPDIR)) == 0)
- return TRUE;
-
- return FALSE;
-}
-
-static GHashTable *fstype_hash = NULL;
-extern char *filesystem_type (char *path, char *relpath, struct stat *statp);
-
-static gboolean
-path_is_local (const char *path)
-{
- gpointer local = NULL;
-
- if (path == NULL)
- return FALSE;
-
- if (fstype_hash == NULL)
- fstype_hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
- else
- local = g_hash_table_lookup (fstype_hash, path);
-
- if (local == NULL) {
- struct stat statbuf;
-
- 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));
- local = GINT_TO_POINTER (is_local ? 1 : -1);
- g_hash_table_insert (fstype_hash, g_strdup (path), local);
- }
- }
-
- return GPOINTER_TO_INT (local) > 0;
-}
-
-static gboolean
-check_user_file (const char *path,
- guint uid)
-{
- char *dir;
- char *file;
- gboolean is_ok;
-
- if (path == NULL)
- return FALSE;
-
- if (access (path, R_OK) != 0)
- return FALSE;
-
- dir = g_path_get_dirname (path);
- file = g_path_get_basename (path);
-
- is_ok = gdm_file_check ("run_pictures",
- uid,
- dir,
- file,
- TRUE, TRUE,
- GdmUserMaxFile,
- GdmRelaxPerms);
- g_free (dir);
- g_free (file);
-
- return is_ok;
-}
-
-static gboolean
-check_global_file (const char *path,
- guint uid)
-{
- if (path == NULL)
- return FALSE;
-
- if (access (path, R_OK) != 0)
- return FALSE;
-
- return TRUE;
-}
-
-static char *
-get_facefile_from_gnome2_dir_config (const char *homedir,
- guint uid)
-{
- char *picfile = NULL;
- char *cfgdir;
-
- /* Sanity check on ~user/.gnome2/gdm */
- cfgdir = g_build_filename (homedir, ".gnome2", "gdm", NULL);
- if (G_LIKELY (check_user_file (cfgdir, uid))) {
- VeConfig *cfg;
- char *cfgfile;
-
- cfgfile = g_build_filename (homedir, ".gnome2", "gdm", NULL);
- cfg = ve_config_new (cfgfile);
- g_free (cfgfile);
-
- picfile = ve_config_get_string (cfg, "face/picture=");
- ve_config_destroy (cfg);
-
- /* must exist and be absolute (note that this check
- * catches empty strings)*/
- /* Note that these days we just set ~/.face */
- if G_UNLIKELY (picfile != NULL &&
- (picfile[0] != '/' ||
- /* this catches readability by user */
- access (picfile, R_OK) != 0)) {
- g_free (picfile);
- picfile = NULL;
- }
-
- if (picfile != NULL) {
- char buf[PATH_MAX];
- if (realpath (picfile, buf) == NULL) {
- g_free (picfile);
- picfile = NULL;
- } else {
- g_free (picfile);
- picfile = g_strdup (buf);
- }
- }
-
- if G_UNLIKELY (picfile != NULL) {
- if (! is_in_trusted_pic_dir (picfile)) {
- /* if not in trusted dir, check it out */
-
- /* Note that strict permissions checking is done
- * on this file. Even if it may not even be owned by the
- * user. This setting should ONLY point to pics in trusted
- * dirs. */
- if (! check_user_file (picfile, uid)) {
- g_free (picfile);
- picfile = NULL;
- }
- }
- }
- }
- g_free (cfgdir);
-
- return picfile;
-}
-
-static char *
-get_facefile_from_home (const char *homedir,
- guint uid)
-{
- char *picfile = NULL;
- char *path;
- gboolean is_local;
-
- /* special case: look at parent of home to detect autofs
- this is so we don't try to trigger an automount */
- path = g_path_get_dirname (homedir);
- is_local = path_is_local (path);
- g_free (path);
-
- /* now check that home dir itself is local */
- if (is_local) {
- is_local = path_is_local (homedir);
- }
-
- /* only look at local home directories so we don't try to
- read from remote (e.g. NFS) volumes */
- if (! is_local)
- return NULL;
-
-
- picfile = g_build_filename (homedir, ".face", NULL);
-
- if (check_user_file (picfile, uid))
- return picfile;
- else {
- g_free (picfile);
- picfile = NULL;
- }
-
- picfile = g_build_filename (homedir, ".face.icon", NULL);
-
- if (check_user_file (picfile, uid))
- return picfile;
- else {
- g_free (picfile);
- picfile = NULL;
- }
-
- picfile = get_facefile_from_gnome2_dir_config (homedir, uid);
- if (check_user_file (picfile, uid))
- return picfile;
- else {
- g_free (picfile);
- picfile = NULL;
- }
-
- /* Nothing found yet, try the old locations */
-
- picfile = g_build_filename (homedir, ".gnome2", "photo", NULL);
- if (check_user_file (picfile, uid))
- return picfile;
- else {
- g_free (picfile);
- picfile = NULL;
- }
-
- picfile = g_build_filename (homedir, ".gnome", "photo", NULL);
- if (check_user_file (picfile, uid))
- return picfile;
- else {
- g_free (picfile);
- picfile = NULL;
- }
-
- return NULL;
-}
-
-static gchar *
-get_facefile_from_global (const char *username,
- guint uid)
-{
- char *picfile = NULL;
-
- /* Try the global face directory */
-
- picfile = g_build_filename (GdmGlobalFaceDir,
- username, NULL);
-
- if (check_global_file (picfile, uid))
- return picfile;
-
- g_free (picfile);
- picfile = gdm_make_filename (GdmGlobalFaceDir,
- username, ".png");
-
- if (check_global_file (picfile, uid))
- return picfile;
-
- g_free (picfile);
- return NULL;
-}
-
/* This is VERY evil! */
static void
run_pictures (void)
@@ -2405,25 +2118,25 @@ run_pictures (void)
NEVER_FAILS_seteuid (0);
if G_UNLIKELY (setegid (pwent->pw_gid) != 0 ||
seteuid (pwent->pw_uid) != 0) {
- NEVER_FAILS_root_set_euid_egid (0, GdmGroupId);
+ NEVER_FAILS_root_set_euid_egid (0, gdm_get_gdmgid());
gdm_slave_greeter_ctl_no_ret (GDM_READPIC, "");
continue;
}
- picfile = get_facefile_from_home (pwent->pw_dir, pwent->pw_uid);
+ picfile = gdm_get_facefile_from_home (pwent->pw_dir, pwent->pw_uid);
if (! picfile)
- picfile = get_facefile_from_global (pwent->pw_name, pwent->pw_uid);
+ picfile = gdm_get_facefile_from_global (pwent->pw_name, pwent->pw_uid);
if (! picfile) {
- NEVER_FAILS_root_set_euid_egid (0, GdmGroupId);
+ NEVER_FAILS_root_set_euid_egid (0, gdm_get_gdmgid());
gdm_slave_greeter_ctl_no_ret (GDM_READPIC, "");
continue;
}
VE_IGNORE_EINTR (r = stat (picfile, &s));
- if G_UNLIKELY (r < 0 || s.st_size > GdmUserMaxFile) {
- NEVER_FAILS_root_set_euid_egid (0, GdmGroupId);
+ if G_UNLIKELY (r < 0 || s.st_size > gdm_get_value_int (GDM_KEY_USER_MAX_FILE)) {
+ NEVER_FAILS_root_set_euid_egid (0, gdm_get_gdmgid());
gdm_slave_greeter_ctl_no_ret (GDM_READPIC, "");
continue;
@@ -2432,7 +2145,7 @@ run_pictures (void)
VE_IGNORE_EINTR (fp = fopen (picfile, "r"));
g_free (picfile);
if G_UNLIKELY (fp == NULL) {
- NEVER_FAILS_root_set_euid_egid (0, GdmGroupId);
+ NEVER_FAILS_root_set_euid_egid (0, gdm_get_gdmgid());
gdm_slave_greeter_ctl_no_ret (GDM_READPIC, "");
continue;
@@ -2446,7 +2159,7 @@ run_pictures (void)
VE_IGNORE_EINTR (fclose (fp));
g_free (ret);
- NEVER_FAILS_root_set_euid_egid (0, GdmGroupId);
+ NEVER_FAILS_root_set_euid_egid (0, gdm_get_gdmgid());
continue;
}
@@ -2524,7 +2237,7 @@ run_pictures (void)
gdm_slave_greeter_ctl_no_ret (GDM_READPIC, "done");
- NEVER_FAILS_root_set_euid_egid (0, GdmGroupId);
+ NEVER_FAILS_root_set_euid_egid (0, gdm_get_gdmgid());
}
g_free (response); /* not reached */
}
@@ -2543,7 +2256,7 @@ copy_auth_file (uid_t fromuid, uid_t touid, const char *file)
int cnt;
NEVER_FAILS_seteuid (0);
- NEVER_FAILS_setegid (GdmGroupId);
+ NEVER_FAILS_setegid (gdm_get_gdmgid());
if G_UNLIKELY (seteuid (fromuid) != 0) {
NEVER_FAILS_root_set_euid_egid (old, oldg);
@@ -2575,7 +2288,8 @@ copy_auth_file (uid_t fromuid, uid_t touid, const char *file)
NEVER_FAILS_root_set_euid_egid (0, 0);
- name = gdm_make_filename (GdmServAuthDir, d->name, ".XnestAuth");
+ name = gdm_make_filename (gdm_get_value_string (GDM_KEY_SERV_AUTHDIR),
+ d->name, ".XnestAuth");
VE_IGNORE_EINTR (unlink (name));
VE_IGNORE_EINTR (authfd = open (name, O_EXCL|O_TRUNC|O_WRONLY|O_CREAT, 0600));
@@ -2626,7 +2340,7 @@ copy_auth_file (uid_t fromuid, uid_t touid, const char *file)
cnt = cnt + written;
/* this should never occur (we check above)
but we're paranoid) */
- if G_UNLIKELY (cnt > GdmUserMaxFile)
+ if G_UNLIKELY (cnt > gdm_get_value_int (GDM_KEY_USER_MAX_FILE))
return NULL;
}
@@ -2674,12 +2388,15 @@ gdm_slave_greeter (void)
struct passwd *pwent;
pid_t pid;
char *command;
+ char *defaultpath;
+ char *gdmuser;
+ char *moduleslist;
gdm_debug ("gdm_slave_greeter: Running greeter on %s", d->name);
/* Run the init script. gdmslave suspends until script has terminated */
- gdm_slave_exec_script (d, GdmDisplayInit, NULL, NULL,
- FALSE /* pass_stdout */);
+ gdm_slave_exec_script (d, gdm_get_value_string (GDM_KEY_DISPLAY_INIT_DIR),
+ NULL, NULL, FALSE /* pass_stdout */);
/* Open a pipe for greeter communications */
if G_UNLIKELY (pipe (pipe1) < 0)
@@ -2727,87 +2444,94 @@ gdm_slave_greeter (void)
openlog ("gdm", LOG_PID, LOG_DAEMON);
- if G_UNLIKELY (setgid (GdmGroupId) < 0)
+ if G_UNLIKELY (setgid (gdm_get_gdmgid()) < 0)
gdm_child_exit (DISPLAY_ABORT,
_("%s: Couldn't set groupid to %d"),
- "gdm_slave_greeter", GdmGroupId);
+ "gdm_slave_greeter", gdm_get_gdmgid());
- if G_UNLIKELY (initgroups (GdmUser, GdmGroupId) < 0)
+ gdmuser = gdm_get_value_string (GDM_KEY_USER);
+ if G_UNLIKELY (initgroups (gdmuser, gdm_get_gdmgid()) < 0)
gdm_child_exit (DISPLAY_ABORT,
_("%s: initgroups() failed for %s"),
- "gdm_slave_greeter", GdmUser);
+ "gdm_slave_greeter", gdmuser);
- if G_UNLIKELY (setuid (GdmUserId) < 0)
+ if G_UNLIKELY (setuid (gdm_get_gdmuid()) < 0)
gdm_child_exit (DISPLAY_ABORT,
_("%s: Couldn't set userid to %d"),
- "gdm_slave_greeter", GdmUserId);
+ "gdm_slave_greeter", gdm_get_gdmuid());
gdm_restoreenv ();
- ve_setenv ("XAUTHORITY", GDM_AUTHFILE (d), TRUE);
- ve_setenv ("DISPLAY", d->name, TRUE);
+ g_setenv ("XAUTHORITY", GDM_AUTHFILE (d), TRUE);
+ g_setenv ("DISPLAY", d->name, TRUE);
/* hackish ain't it */
set_xnest_parent_stuff ();
- ve_setenv ("LOGNAME", GdmUser, TRUE);
- ve_setenv ("USER", GdmUser, TRUE);
- ve_setenv ("USERNAME", GdmUser, TRUE);
- ve_setenv ("GDM_GREETER_PROTOCOL_VERSION",
+ g_setenv ("LOGNAME", gdmuser, TRUE);
+ g_setenv ("USER", gdmuser, TRUE);
+ g_setenv ("USERNAME", gdmuser, TRUE);
+ g_setenv ("GDM_GREETER_PROTOCOL_VERSION",
GDM_GREETER_PROTOCOL_VERSION, TRUE);
- ve_setenv ("GDM_VERSION", VERSION, TRUE);
- ve_unsetenv ("MAIL"); /* Unset $MAIL for broken shells */
+ g_setenv ("GDM_VERSION", VERSION, TRUE);
+ g_unsetenv ("MAIL"); /* Unset $MAIL for broken shells */
- pwent = getpwnam (GdmUser);
+ pwent = getpwnam (gdmuser);
if G_LIKELY (pwent != NULL) {
/* Note that usually this doesn't exist */
if (pwent->pw_dir != NULL &&
g_file_test (pwent->pw_dir, G_FILE_TEST_EXISTS))
- ve_setenv ("HOME", pwent->pw_dir, TRUE);
+ g_setenv ("HOME", pwent->pw_dir, TRUE);
else
- ve_setenv ("HOME", ve_sure_string (GdmServAuthDir), TRUE); /* Hack */
- ve_setenv ("SHELL", pwent->pw_shell, TRUE);
+ g_setenv ("HOME",
+ ve_sure_string (gdm_get_value_string (GDM_KEY_SERV_AUTHDIR)),
+ TRUE); /* Hack */
+ g_setenv ("SHELL", pwent->pw_shell, TRUE);
} else {
- ve_setenv ("HOME", ve_sure_string (GdmServAuthDir), TRUE); /* Hack */
- ve_setenv ("SHELL", "/bin/sh", TRUE);
+ g_setenv ("HOME",
+ ve_sure_string (gdm_get_value_string (GDM_KEY_SERV_AUTHDIR)),
+ TRUE); /* Hack */
+ g_setenv ("SHELL", "/bin/sh", TRUE);
}
+
+ defaultpath = gdm_get_value_string (GDM_KEY_PATH);
if (ve_string_empty (g_getenv ("PATH"))) {
- ve_setenv ("PATH", GdmDefaultPath, TRUE);
- } else if ( ! ve_string_empty (GdmDefaultPath)) {
- ve_setenv ("PATH", g_strconcat (g_getenv ("PATH"), ":", GdmDefaultPath, NULL), TRUE);
+ g_setenv ("PATH", defaultpath, TRUE);
+ } else if ( ! ve_string_empty (defaultpath)) {
+ g_setenv ("PATH", g_strconcat (g_getenv ("PATH"), ":", defaultpath, NULL), TRUE);
}
- ve_setenv ("RUNNING_UNDER_GDM", "true", TRUE);
+ g_setenv ("RUNNING_UNDER_GDM", "true", TRUE);
if ( ! ve_string_empty (d->theme_name))
- ve_setenv ("GDM_GTK_THEME", d->theme_name, TRUE);
+ g_setenv ("GDM_GTK_THEME", d->theme_name, TRUE);
- if (GdmDebugGestures) {
- ve_setenv ("GDM_DEBUG_GESTURES", "true", TRUE);
+ if (gdm_get_value_bool (GDM_KEY_DEBUG_GESTURES)) {
+ g_setenv ("GDM_DEBUG_GESTURES", "true", TRUE);
}
/* Note that this is just informative, the slave will not listen to
* the greeter even if it does something it shouldn't on a non-local
* display so it's not a security risk */
if (d->attached) {
- ve_setenv ("GDM_IS_LOCAL", "yes", TRUE);
+ g_setenv ("GDM_IS_LOCAL", "yes", TRUE);
} else {
- ve_unsetenv ("GDM_IS_LOCAL");
+ g_unsetenv ("GDM_IS_LOCAL");
}
/* this is again informal only, if the greeter does time out it will
* not actually login a user if it's not enabled for this display */
if (d->timed_login_ok) {
if(ParsedTimedLogin == NULL)
- ve_setenv ("GDM_TIMED_LOGIN_OK", " ", TRUE);
+ g_setenv ("GDM_TIMED_LOGIN_OK", " ", TRUE);
else
- ve_setenv ("GDM_TIMED_LOGIN_OK", ParsedTimedLogin, TRUE);
+ g_setenv ("GDM_TIMED_LOGIN_OK", ParsedTimedLogin, TRUE);
} else {
- ve_unsetenv ("GDM_TIMED_LOGIN_OK");
+ g_unsetenv ("GDM_TIMED_LOGIN_OK");
}
if (SERVER_IS_FLEXI (d)) {
- ve_setenv ("GDM_FLEXI_SERVER", "yes", TRUE);
+ g_setenv ("GDM_FLEXI_SERVER", "yes", TRUE);
} else {
- ve_unsetenv ("GDM_FLEXI_SERVER");
+ g_unsetenv ("GDM_FLEXI_SERVER");
}
if G_UNLIKELY (gdm_emergency_server) {
@@ -2821,7 +2545,7 @@ gdm_slave_greeter (void)
"log in and fix the configuration. "
"Note that automatic and timed logins "
"are disabled now."));
- ve_unsetenv ("GDM_TIMED_LOGIN_OK");
+ g_unsetenv ("GDM_TIMED_LOGIN_OK");
}
if G_UNLIKELY (d->failsafe_xserver) {
@@ -2844,9 +2568,9 @@ gdm_slave_greeter (void)
}
if (d->attached)
- command = GdmGreeter;
+ command = gdm_get_value_string (GDM_KEY_GREETER);
else
- command = GdmRemoteGreeter;
+ command = gdm_get_value_string (GDM_KEY_REMOTE_GREETER);
if G_UNLIKELY (d->try_different_greeter) {
/* FIXME: we should also really be able to do standalone failsafe
@@ -2869,17 +2593,19 @@ gdm_slave_greeter (void)
}
}
- if (GdmAddGtkModules &&
- ! ve_string_empty (GdmGtkModulesList) &&
+ moduleslist = gdm_get_value_string (GDM_KEY_GTK_MODULES_LIST);
+
+ if (gdm_get_value_bool (GDM_KEY_ADD_GTK_MODULES) &&
+ ! ve_string_empty (moduleslist) &&
/* don't add modules if we're trying to prevent crashes,
perhaps it's the modules causing the problem in the first place */
! d->try_different_greeter) {
- gchar *modules = g_strdup_printf ("--gtk-module=%s", GdmGtkModulesList);
+ gchar *modules = g_strdup_printf ("--gtk-module=%s", moduleslist);
exec_command (command, modules);
/* Something went wrong */
gdm_error (_("%s: Cannot start greeter with gtk modules: %s. Trying without modules"),
"gdm_slave_greeter",
- GdmGtkModulesList);
+ moduleslist);
g_free (modules);
}
exec_command (command, NULL);
@@ -2888,7 +2614,7 @@ gdm_slave_greeter (void)
"gdm_slave_greeter",
EXPANDED_LIBEXECDIR "/gdmlogin");
- ve_setenv ("GDM_WHACKED_GREETER_CONFIG", "true", TRUE);
+ g_setenv ("GDM_WHACKED_GREETER_CONFIG", "true", TRUE);
exec_command (EXPANDED_LIBEXECDIR "/gdmlogin", NULL);
@@ -2961,7 +2687,8 @@ gdm_slave_send (const char *str, gboolean wait_for_ack)
these functions. And if the pipe creation failed
in main daemon just abort the main daemon. */
/* Use the fifo as a fallback only now that we have a pipe */
- fifopath = g_build_filename (GdmServAuthDir, ".gdmfifo", NULL);
+ fifopath = g_build_filename (gdm_get_value_string (GDM_KEY_SERV_AUTHDIR),
+ ".gdmfifo", NULL);
old = geteuid ();
if (old != 0)
seteuid (0);
@@ -3066,7 +2793,7 @@ gdm_slave_send_string (const char *opcode, const char *str)
{
char *msg;
- if G_UNLIKELY (GdmDebug && gdm_in_signal == 0) {
+ if G_UNLIKELY (gdm_get_value_bool (GDM_KEY_DEBUG) && gdm_in_signal == 0) {
gdm_debug ("Sending %s == <secret> for slave %ld",
opcode,
(long)getpid ());
@@ -3142,6 +2869,9 @@ gdm_slave_chooser (void)
struct passwd *pwent;
pid_t pid;
GdmWaitPid *wp;
+ char *defaultpath;
+ char *gdmuser;
+ char *moduleslist;
gdm_debug ("gdm_slave_chooser: Running chooser on %s", d->name);
@@ -3150,8 +2880,8 @@ gdm_slave_chooser (void)
gdm_slave_exit (DISPLAY_REMANAGE, _("%s: Can't init pipe to gdmchooser"), "gdm_slave_chooser");
/* Run the init script. gdmslave suspends until script has terminated */
- gdm_slave_exec_script (d, GdmDisplayInit, NULL, NULL,
- FALSE /* pass_stdout */);
+ gdm_slave_exec_script (d, gdm_get_value_string (GDM_KEY_DISPLAY_INIT_DIR),
+ NULL, NULL, FALSE /* pass_stdout */);
/* Fork. Parent is gdmslave, child is greeter process. */
gdm_sigchld_block_push ();
@@ -3185,62 +2915,70 @@ gdm_slave_chooser (void)
openlog ("gdm", LOG_PID, LOG_DAEMON);
- if G_UNLIKELY (setgid (GdmGroupId) < 0)
+ if G_UNLIKELY (setgid (gdm_get_gdmgid()) < 0)
gdm_child_exit (DISPLAY_ABORT,
_("%s: Couldn't set groupid to %d"),
- "gdm_slave_chooser", GdmGroupId);
+ "gdm_slave_chooser", gdm_get_gdmgid());
- if G_UNLIKELY (initgroups (GdmUser, GdmGroupId) < 0)
+ gdmuser = gdm_get_value_string (GDM_KEY_USER);
+ if G_UNLIKELY (initgroups (gdmuser, gdm_get_gdmgid()) < 0)
gdm_child_exit (DISPLAY_ABORT,
_("%s: initgroups() failed for %s"),
- "gdm_slave_chooser", GdmUser);
+ "gdm_slave_chooser", gdmuser);
- if G_UNLIKELY (setuid (GdmUserId) < 0)
+ if G_UNLIKELY (setuid (gdm_get_gdmuid()) < 0)
gdm_child_exit (DISPLAY_ABORT,
_("%s: Couldn't set userid to %d"),
- "gdm_slave_chooser", GdmUserId);
+ "gdm_slave_chooser", gdm_get_gdmuid());
gdm_restoreenv ();
- ve_setenv ("XAUTHORITY", GDM_AUTHFILE (d), TRUE);
- ve_setenv ("DISPLAY", d->name, TRUE);
+ g_setenv ("XAUTHORITY", GDM_AUTHFILE (d), TRUE);
+ g_setenv ("DISPLAY", d->name, TRUE);
- ve_setenv ("LOGNAME", GdmUser, TRUE);
- ve_setenv ("USER", GdmUser, TRUE);
- ve_setenv ("USERNAME", GdmUser, TRUE);
+ g_setenv ("LOGNAME", gdmuser, TRUE);
+ g_setenv ("USER", gdmuser, TRUE);
+ g_setenv ("USERNAME", gdmuser, TRUE);
- ve_setenv ("GDM_VERSION", VERSION, TRUE);
+ g_setenv ("GDM_VERSION", VERSION, TRUE);
- ve_unsetenv ("MAIL"); /* Unset $MAIL for broken shells */
+ g_unsetenv ("MAIL"); /* Unset $MAIL for broken shells */
- pwent = getpwnam (GdmUser);
+ pwent = getpwnam (gdmuser);
if G_LIKELY (pwent != NULL) {
/* Note that usually this doesn't exist */
if (g_file_test (pwent->pw_dir, G_FILE_TEST_EXISTS))
- ve_setenv ("HOME", pwent->pw_dir, TRUE);
+ g_setenv ("HOME", pwent->pw_dir, TRUE);
else
- ve_setenv ("HOME", ve_sure_string (GdmServAuthDir), TRUE); /* Hack */
- ve_setenv ("SHELL", pwent->pw_shell, TRUE);
+ g_setenv ("HOME",
+ ve_sure_string (gdm_get_value_string (GDM_KEY_SERV_AUTHDIR)),
+ TRUE); /* Hack */
+ g_setenv ("SHELL", pwent->pw_shell, TRUE);
} else {
- ve_setenv ("HOME", ve_sure_string (GdmServAuthDir), TRUE); /* Hack */
- ve_setenv ("SHELL", "/bin/sh", TRUE);
+ g_setenv ("HOME",
+ ve_sure_string (gdm_get_value_string (GDM_KEY_SERV_AUTHDIR)),
+ TRUE); /* Hack */
+ g_setenv ("SHELL", "/bin/sh", TRUE);
}
+
+ defaultpath = gdm_get_value_string (GDM_KEY_PATH);
if (ve_string_empty (g_getenv ("PATH"))) {
- ve_setenv ("PATH", GdmDefaultPath, TRUE);
- } else if ( ! ve_string_empty (GdmDefaultPath)) {
- ve_setenv ("PATH", g_strconcat (g_getenv ("PATH"), ":", GdmDefaultPath, NULL), TRUE);
+ g_setenv ("PATH", defaultpath, TRUE);
+ } else if ( ! ve_string_empty (defaultpath)) {
+ g_setenv ("PATH", g_strconcat (g_getenv ("PATH"), ":", defaultpath, NULL), TRUE);
}
- ve_setenv ("RUNNING_UNDER_GDM", "true", TRUE);
+ g_setenv ("RUNNING_UNDER_GDM", "true", TRUE);
if ( ! ve_string_empty (d->theme_name))
- ve_setenv ("GDM_GTK_THEME", d->theme_name, TRUE);
+ g_setenv ("GDM_GTK_THEME", d->theme_name, TRUE);
- if (GdmAddGtkModules &&
- ! ve_string_empty (GdmGtkModulesList)) {
- char *modules = g_strdup_printf ("--gtk-module=%s", GdmGtkModulesList);
- exec_command (GdmChooser, modules);
+ moduleslist = gdm_get_value_string (GDM_KEY_GTK_MODULES_LIST);
+ if (gdm_get_value_bool (GDM_KEY_ADD_GTK_MODULES) &&
+ ! ve_string_empty (moduleslist)) {
+ char *modules = g_strdup_printf ("--gtk-module=%s", moduleslist);
+ exec_command (gdm_get_value_string (GDM_KEY_CHOOSER), modules);
}
- exec_command (GdmChooser, NULL);
+ exec_command (gdm_get_value_string (GDM_KEY_CHOOSER), NULL);
gdm_error_box (d,
GTK_MESSAGE_ERROR,
@@ -3302,84 +3040,14 @@ gdm_slave_chooser (void)
}
}
-static gboolean
-is_session_magic (const char *session_name)
+gboolean
+gdm_is_session_magic (const char *session_name)
{
return (strcmp (session_name, GDM_SESSION_DEFAULT) == 0 ||
strcmp (session_name, GDM_SESSION_CUSTOM) == 0 ||
strcmp (session_name, GDM_SESSION_FAILSAFE) == 0);
}
-static char *
-get_session_exec (const char *session_name, gboolean check_try_exec)
-{
- char *file;
- char *full = NULL;
- VeConfig *cfg;
- static char *exec;
- static char *cached = NULL;
- char *tryexec;
-
- /* clear cache */
- if (session_name == NULL) {
- g_free (exec);
- exec = NULL;
- g_free (cached);
- cached = NULL;
- return NULL;
- }
-
- if (cached != NULL && strcmp (session_name, cached) == 0)
- return g_strdup (exec);
-
- g_free (exec);
- exec = NULL;
- g_free (cached);
- cached = g_strdup (session_name);
-
- /* Some ugly special casing for legacy "Default.desktop", oh well,
- * we changed to "default.desktop" */
- if (g_ascii_strcasecmp (session_name, "default") == 0 ||
- g_ascii_strcasecmp (session_name, "default.desktop") == 0) {
- full = ve_find_prog_in_path ("default.desktop", GdmSessDir);
- }
-
- if (full == NULL) {
- file = gdm_ensure_extension (session_name, ".desktop");
- full = ve_find_prog_in_path (file, GdmSessDir);
- g_free (file);
- }
-
- if (ve_string_empty (full) || access (full, R_OK) != 0) {
- g_free (full);
- if (is_session_magic (session_name)) {
- exec = g_strdup (session_name);
- return g_strdup (exec);
- } else {
- return NULL;
- }
- }
-
- cfg = ve_config_get (full);
- g_free (full);
- if (ve_config_get_bool (cfg, "Desktop Entry/Hidden=false"))
- return NULL;
-
- if (check_try_exec) {
- tryexec = ve_config_get_string (cfg, "Desktop Entry/TryExec");
- if ( ! ve_string_empty (tryexec) &&
- ! ve_is_prog_in_path (tryexec, GdmDefaultPath) &&
- ! ve_is_prog_in_path (tryexec, gdm_saved_getenv ("PATH"))) {
- g_free (tryexec);
- return NULL;
- }
- g_free (tryexec);
- }
-
- exec = ve_config_get_string (cfg, "Desktop Entry/Exec");
- return g_strdup (exec);
-}
-
/* Note that this does check TryExec! while normally we don't check
* it */
static gboolean
@@ -3393,10 +3061,10 @@ is_session_ok (const char *session_name)
strcmp (session_name, GDM_SESSION_FAILSAFE_XTERM) == 0)
return TRUE;
- if (ve_string_empty (GdmSessDir))
- return is_session_magic (session_name);
+ if (ve_string_empty (gdm_get_value_string (GDM_KEY_SESSION_DESKTOP_DIR)))
+ return gdm_is_session_magic (session_name);
- exec = get_session_exec (session_name, TRUE /* check_try_exec */);
+ exec = gdm_get_session_exec (session_name, TRUE /* check_try_exec */);
if (exec == NULL)
ret = FALSE;
g_free (exec);
@@ -3422,10 +3090,11 @@ find_a_session (void)
};
int i;
char *session;
+ char *defaultsession = gdm_get_value_string (GDM_KEY_DEFAULT_SESSION);
- if (!ve_string_empty (GdmDefaultSession) &&
- is_session_ok (GdmDefaultSession))
- session = g_strdup (GdmDefaultSession);
+ if (!ve_string_empty (defaultsession) &&
+ is_session_ok (defaultsession))
+ session = g_strdup (defaultsession);
else
session = NULL;
@@ -3641,7 +3310,6 @@ session_child_run (struct passwd *pwent,
{
char *exec;
const char *shell = NULL;
- VeConfig *dmrc = NULL;
char *argv[4];
char *greeter;
@@ -3656,7 +3324,7 @@ session_child_run (struct passwd *pwent,
gdm_error (_("%s: setsid() failed: %s!"),
"session_child_run", strerror(errno));
- ve_setenv ("XAUTHORITY", GDM_AUTHFILE (d), TRUE);
+ g_setenv ("XAUTHORITY", GDM_AUTHFILE (d), TRUE);
/* Here we setup our 0,1,2 descriptors, we do it here
* nowdays rather then later on so that we get errors even
@@ -3677,29 +3345,29 @@ session_child_run (struct passwd *pwent,
/* Set this for the PreSession script */
/* compatibility */
- ve_setenv ("GDMSESSION", session, TRUE);
+ g_setenv ("GDMSESSION", session, TRUE);
- ve_setenv ("DESKTOP_SESSION", session, TRUE);
+ g_setenv ("DESKTOP_SESSION", session, TRUE);
/* Determine default greeter type so the PreSession */
/* script can set the appropriate background color. */
if (d->attached) {
- greeter = GdmGreeter;
+ greeter = gdm_get_value_string (GDM_KEY_GREETER);
} else {
- greeter = GdmRemoteGreeter;
+ greeter = gdm_get_value_string (GDM_KEY_REMOTE_GREETER);
}
if (strstr (greeter, "gdmlogin") != NULL) {
- ve_setenv ("GDM_GREETER_TYPE", "PLAIN", TRUE);
+ g_setenv ("GDM_GREETER_TYPE", "PLAIN", TRUE);
} else if (strstr (greeter, "gdmgreeter") != NULL) {
- ve_setenv ("GDM_GREETER_TYPE", "THEMED", TRUE);
+ g_setenv ("GDM_GREETER_TYPE", "THEMED", TRUE);
} else {
/* huh? */
- ve_setenv ("GDM_GREETER_TYPE", "unknown", TRUE);
+ g_setenv ("GDM_GREETER_TYPE", "unknown", TRUE);
}
/* Run the PreSession script */
- if G_UNLIKELY (gdm_slave_exec_script (d, GdmPreSession,
+ if G_UNLIKELY (gdm_slave_exec_script (d, gdm_get_value_string (GDM_KEY_PRESESSION),
pwent->pw_name, pwent,
TRUE /* pass_stdout */) != EXIT_SUCCESS &&
/* ignore errors in failsafe modes */
@@ -3711,40 +3379,40 @@ session_child_run (struct passwd *pwent,
gdm_clearenv ();
/* Prepare user session */
- ve_setenv ("XAUTHORITY", d->userauth, TRUE);
- ve_setenv ("DISPLAY", d->name, TRUE);
- ve_setenv ("LOGNAME", pwent->pw_name, TRUE);
- ve_setenv ("USER", pwent->pw_name, TRUE);
- ve_setenv ("USERNAME", pwent->pw_name, TRUE);
- ve_setenv ("HOME", home_dir, TRUE);
- ve_setenv ("GDMSESSION", session, TRUE);
- ve_setenv ("DESKTOP_SESSION", session, TRUE);
- ve_setenv ("SHELL", pwent->pw_shell, TRUE);
- ve_unsetenv ("MAIL"); /* Unset $MAIL for broken shells */
+ g_setenv ("XAUTHORITY", d->userauth, TRUE);
+ g_setenv ("DISPLAY", d->name, TRUE);
+ g_setenv ("LOGNAME", pwent->pw_name, TRUE);
+ g_setenv ("USER", pwent->pw_name, TRUE);
+ g_setenv ("USERNAME", pwent->pw_name, TRUE);
+ g_setenv ("HOME", home_dir, TRUE);
+ g_setenv ("GDMSESSION", session, TRUE);
+ g_setenv ("DESKTOP_SESSION", session, TRUE);
+ g_setenv ("SHELL", pwent->pw_shell, TRUE);
+ g_unsetenv ("MAIL"); /* Unset $MAIL for broken shells */
if (d->type == TYPE_STATIC) {
- ve_setenv ("GDM_XSERVER_LOCATION", "local", TRUE);
+ g_setenv ("GDM_XSERVER_LOCATION", "local", TRUE);
} else if (d->type == TYPE_XDMCP) {
- ve_setenv ("GDM_XSERVER_LOCATION", "xdmcp", TRUE);
+ g_setenv ("GDM_XSERVER_LOCATION", "xdmcp", TRUE);
} else if (d->type == TYPE_FLEXI) {
- ve_setenv ("GDM_XSERVER_LOCATION", "flexi", TRUE);
+ g_setenv ("GDM_XSERVER_LOCATION", "flexi", TRUE);
} else if (d->type == TYPE_FLEXI_XNEST) {
- ve_setenv ("GDM_XSERVER_LOCATION", "flexi-xnest", TRUE);
+ g_setenv ("GDM_XSERVER_LOCATION", "flexi-xnest", TRUE);
} else if (d->type == TYPE_XDMCP_PROXY) {
- ve_setenv ("GDM_XSERVER_LOCATION", "xdmcp-proxy", TRUE);
+ g_setenv ("GDM_XSERVER_LOCATION", "xdmcp-proxy", TRUE);
} else {
/* huh? */
- ve_setenv ("GDM_XSERVER_LOCATION", "unknown", TRUE);
+ g_setenv ("GDM_XSERVER_LOCATION", "unknown", TRUE);
}
if (gnome_session != NULL)
- ve_setenv ("GDM_GNOME_SESSION", gnome_session, TRUE);
+ g_setenv ("GDM_GNOME_SESSION", gnome_session, TRUE);
/* Special PATH for root */
if (pwent->pw_uid == 0)
- ve_setenv ("PATH", GdmRootPath, TRUE);
+ g_setenv ("PATH", gdm_get_value_string (GDM_KEY_ROOT_PATH), TRUE);
else
- ve_setenv ("PATH", GdmDefaultPath, TRUE);
+ g_setenv ("PATH", gdm_get_value_string (GDM_KEY_PATH), TRUE);
/* Eeeeek, this no lookie as a correct language code,
* just use the system default */
@@ -3828,45 +3496,16 @@ session_child_run (struct passwd *pwent,
* system default selected. Else let the session do whatever it
* does since we're using sys default */
if ( ! ve_string_empty (language)) {
- ve_setenv ("LANG", language, TRUE);
- ve_setenv ("GDM_LANG", language, TRUE);
+ g_setenv ("LANG", language, TRUE);
+ g_setenv ("GDM_LANG", language, TRUE);
}
/* just in case there is some weirdness going on */
VE_IGNORE_EINTR (chdir (home_dir));
- if (usrcfgok && savesess && home_dir_ok) {
- gchar *cfgstr = g_build_filename (home_dir, ".dmrc", NULL);
- if (dmrc == NULL)
- dmrc = ve_config_new (cfgstr);
- ve_config_set_string (dmrc, "Desktop/Session",
- ve_sure_string (save_session));
- g_free (cfgstr);
- }
+ if (usrcfgok && home_dir_ok)
+ gdm_set_user_session_lang (savesess, savelang, home_dir, save_session, language);
- if (usrcfgok && savelang && home_dir_ok) {
- gchar *cfgstr = g_build_filename (home_dir, ".dmrc", NULL);
- if (dmrc == NULL)
- dmrc = ve_config_new (cfgstr);
- if (ve_string_empty (language))
- /* we chose the system default language so wipe the
- * lang key */
- ve_config_delete_key (dmrc, "Desktop/Language");
- else
- ve_config_set_string (dmrc, "Desktop/Language",
- language);
- g_free (cfgstr);
- }
-
- if (dmrc != NULL) {
- mode_t oldmode;
- oldmode = umask (077);
- ve_config_save (dmrc, FALSE);
- ve_config_destroy (dmrc);
- dmrc = NULL;
- umask (oldmode);
- }
-
closelog ();
gdm_close_all_descriptors (3 /* from */, -1 /* except */, -1 /* except2 */);
@@ -3881,7 +3520,7 @@ session_child_run (struct passwd *pwent,
exec = NULL;
if (strcmp (session, GDM_SESSION_FAILSAFE_XTERM) != 0 &&
strcmp (session, GDM_SESSION_FAILSAFE_GNOME) != 0) {
- exec = get_session_exec (session,
+ exec = gdm_get_session_exec (session,
FALSE /* check_try_exec */);
if G_UNLIKELY (exec == NULL) {
gdm_error (_("%s: No Exec line in the session file: %s. Starting failsafe GNOME"),
@@ -3902,8 +3541,10 @@ session_child_run (struct passwd *pwent,
}
if (exec != NULL) {
+ char *basexsession = gdm_get_value_string (GDM_KEY_BASE_XSESSION);
+
/* cannot be possibly failsafe */
- if G_UNLIKELY (access (GdmXsession, X_OK) != 0) {
+ if G_UNLIKELY (access (basexsession, X_OK) != 0) {
gdm_error (_("%s: Cannot find or run the base Xsession script. Running the GNOME failsafe session instead."),
"session_child_run");
session = GDM_SESSION_FAILSAFE_GNOME;
@@ -3915,7 +3556,7 @@ session_child_run (struct passwd *pwent,
/* This is where everything is OK, and note that
we really DON'T care about leaks, we are going to
exec in just a bit */
- argv[0] = GdmXsession;
+ argv[0] = basexsession;
argv[1] = exec;
argv[2] = NULL;
}
@@ -4016,7 +3657,7 @@ session_child_run (struct passwd *pwent,
/* Add a NULL byte to terminate the variable name */
p[0] = '\0';
/* Add the variable to the env */
- ve_setenv (env_str, &p[1], TRUE);
+ g_setenv (env_str, &p[1], TRUE);
}
g_free (env_str);
}
@@ -4112,7 +3753,7 @@ gdm_slave_session_start (void)
logged_in_gid = gid = pwent->pw_gid;
/* Run the PostLogin script */
- if G_UNLIKELY (gdm_slave_exec_script (d, GdmPostLogin,
+ if G_UNLIKELY (gdm_slave_exec_script (d, gdm_get_value_string (GDM_KEY_POSTLOGIN),
login, pwent,
TRUE /* pass_stdout */) != EXIT_SUCCESS &&
/* ignore errors in failsafe modes */
@@ -4150,7 +3791,7 @@ gdm_slave_session_start (void)
/* Set euid, egid to root:gdm to manage user interaction */
seteuid (0);
- setegid (GdmGroupId);
+ setegid (gdm_get_gdmgid());
gdm_error (_("%s: Home directory for %s: '%s' does not exist!"),
"gdm_slave_session_start",
@@ -4187,44 +3828,14 @@ gdm_slave_session_start (void)
/* Sanity check on ~user/.dmrc */
usrcfgok = gdm_file_check ("gdm_slave_session_start", pwent->pw_uid,
home_dir, ".dmrc", TRUE, FALSE,
- GdmUserMaxFile, GdmRelaxPerms);
+ gdm_get_value_int (GDM_KEY_USER_MAX_FILE),
+ gdm_get_value_int (GDM_KEY_RELAX_PERM));
} else {
usrcfgok = FALSE;
}
if G_LIKELY (usrcfgok) {
- char *p;
- char *cfgfile = g_build_filename (home_dir, ".dmrc", NULL);
- VeConfig *cfg = ve_config_new (cfgfile);
- g_free (cfgfile);
-
- usrsess = ve_config_get_string (cfg, "Desktop/Session");
- if (usrsess == NULL)
- usrsess = g_strdup ("");
-
- /* this is just being truly anal about what users give us, and in case
- * it looks like they may have included a path whack it. */
- p = strrchr (usrsess, '/');
- if (p != NULL) {
- char *tmp = g_strdup (p+1);
- g_free (usrsess);
- usrsess = tmp;
- }
-
- /* ugly workaround for migration */
- if ((strcmp (usrsess, "Default.desktop") == 0 ||
- strcmp (usrsess, "Default") == 0) &&
- ! ve_is_prog_in_path ("Default.desktop", GdmSessDir)) {
- g_free (usrsess);
- usrsess = g_strdup ("default");
- savesess = TRUE;
- }
-
- usrlang = ve_config_get_string (cfg, "Desktop/Language");
- if (usrlang == NULL)
- usrlang = g_strdup ("");
-
- ve_config_destroy (cfg);
+ gdm_get_user_session_lang (&usrsess, &usrlang, home_dir, &savesess);
} else {
/* This won't get displayed if the .dmrc file simply doesn't
* exist since we pass absentok=TRUE when we call gdm_file_check
@@ -4242,7 +3853,7 @@ gdm_slave_session_start (void)
usrlang = g_strdup ("");
}
- NEVER_FAILS_root_set_euid_egid (0, GdmGroupId);
+ NEVER_FAILS_root_set_euid_egid (0, gdm_get_gdmgid());
if (greet) {
tmp = gdm_ensure_extension (usrsess, ".desktop");
@@ -4315,7 +3926,7 @@ gdm_slave_session_start (void)
gdm_slave_whack_greeter ();
}
- if (GdmKillInitClients)
+ if (gdm_get_value_bool (GDM_KEY_KILL_INIT_CLIENTS))
gdm_server_whack_clients (d->dsp);
/* Now that we will set up the user authorization we will
@@ -4353,7 +3964,7 @@ gdm_slave_session_start (void)
}
}
- NEVER_FAILS_root_set_euid_egid (0, GdmGroupId);
+ NEVER_FAILS_root_set_euid_egid (0, gdm_get_gdmgid());
if G_UNLIKELY ( ! authok) {
gdm_debug ("gdm_slave_session_start: Auth not OK");
@@ -4379,7 +3990,7 @@ gdm_slave_session_start (void)
failsafe = TRUE;
if G_LIKELY ( ! failsafe) {
- char *exec = get_session_exec (session, FALSE /* check_try_exec */);
+ char *exec = gdm_get_session_exec (session, FALSE /* check_try_exec */);
if ( ! ve_string_empty (exec) &&
strcmp (exec, "failsafe") == 0)
failsafe = TRUE;
@@ -4462,7 +4073,7 @@ gdm_slave_session_start (void)
}
/* this clears internal cache */
- get_session_exec (NULL, FALSE);
+ gdm_get_session_exec (NULL, FALSE);
if G_LIKELY (logfilefd >= 0) {
d->xsession_errors_fd = logfilefd;
@@ -4473,7 +4084,7 @@ gdm_slave_session_start (void)
}
/* We must be root for this, and we are, but just to make sure */
- NEVER_FAILS_root_set_euid_egid (0, GdmGroupId);
+ NEVER_FAILS_root_set_euid_egid (0, gdm_get_gdmgid());
/* Reset all the process limits, pam may have set some up for our process and that
is quite evil. But pam is generally evil, so this is to be expected. */
gdm_reset_limits ();
@@ -4618,14 +4229,14 @@ gdm_slave_session_stop (gboolean run_post_session,
else
pwent = getpwnam (local_login); /* PAM overwrites our pwent */
- x_servers_file = gdm_make_filename (GdmServAuthDir,
+ x_servers_file = gdm_make_filename (gdm_get_value_string (GDM_KEY_SERV_AUTHDIR),
d->name, ".Xservers");
/* if there was a session that ran, run the PostSession script */
if (run_post_session) {
/* Execute post session script */
gdm_debug ("gdm_slave_session_stop: Running post session script");
- gdm_slave_exec_script (d, GdmPostSession, local_login, pwent,
+ gdm_slave_exec_script (d, gdm_get_value_string (GDM_KEY_POSTSESSION), local_login, pwent,
FALSE /* pass_stdout */);
}
@@ -4798,7 +4409,7 @@ gdm_slave_alrm_handler (int sig)
in_ping = TRUE;
/* schedule next alarm */
- alarm (GdmPingInterval);
+ alarm (gdm_get_value_int (GDM_KEY_PING_INTERVAL));
XSync (d->dsp, True);
@@ -5102,26 +4713,26 @@ check_for_interruption (const char *msg)
* it is allowed for this display (it's only allowed
* for the first local display) and if it's set up
* correctly */
- if ((d->attached || GdmAllowRemoteAutoLogin)
+ if ((d->attached || gdm_get_value_string (GDM_KEY_ALLOW_REMOTE_AUTOLOGIN))
&& d->timed_login_ok &&
! ve_string_empty (ParsedTimedLogin) &&
strcmp (ParsedTimedLogin, gdm_root_user ()) != 0 &&
- GdmTimedLoginDelay > 0) {
+ gdm_get_value_int (GDM_KEY_TIMED_LOGIN_DELAY) > 0) {
do_timed_login = TRUE;
}
break;
case GDM_INTERRUPT_CONFIGURE:
if (d->attached &&
- GdmConfigAvailable &&
- GdmSystemMenu &&
- ! ve_string_empty (GdmConfigurator)) {
+ gdm_get_value_bool (GDM_KEY_CONFIG_AVAILABLE) &&
+ gdm_get_value_bool (GDM_KEY_SYSTEM_MENU) &&
+ ! ve_string_empty (gdm_get_value_string (GDM_KEY_CONFIGURATOR))) {
do_configurator = TRUE;
}
break;
case GDM_INTERRUPT_SUSPEND:
if (d->attached &&
- GdmSystemMenu &&
- ! ve_string_empty (GdmSuspend)) {
+ gdm_get_value_bool (GDM_KEY_SYSTEM_MENU) &&
+ ! ve_string_empty (gdm_get_value_string (GDM_KEY_SUSPEND))) {
gdm_slave_send (GDM_SOP_SUSPEND_MACHINE,
FALSE /* wait_for_ack */);
}
@@ -5130,7 +4741,7 @@ check_for_interruption (const char *msg)
return TRUE;
case GDM_INTERRUPT_LOGIN_SOUND:
if (d->attached &&
- ! play_login_sound (GdmSoundOnLoginReadyFile)) {
+ ! play_login_sound (gdm_get_value_string (GDM_KEY_SOUND_ON_LOGIN_READY_FILE))) {
gdm_error (_("Login sound requested on non-local display or the play software "
"cannot be run or the sound does not exist"));
}
@@ -5335,7 +4946,7 @@ create_temp_auth_file (void)
g_free (d->parent_temp_auth_file);
d->parent_temp_auth_file =
copy_auth_file (d->server_uid,
- GdmUserId,
+ gdm_get_gdmuid(),
d->parent_auth_file);
}
}
@@ -5344,9 +4955,9 @@ static void
set_xnest_parent_stuff (void)
{
if (d->type == TYPE_FLEXI_XNEST) {
- ve_setenv ("GDM_PARENT_DISPLAY", d->parent_disp, TRUE);
+ g_setenv ("GDM_PARENT_DISPLAY", d->parent_disp, TRUE);
if (d->parent_temp_auth_file != NULL) {
- ve_setenv ("GDM_PARENT_XAUTHORITY",
+ g_setenv ("GDM_PARENT_XAUTHORITY",
d->parent_temp_auth_file, TRUE);
g_free (d->parent_temp_auth_file);
d->parent_temp_auth_file = NULL;
@@ -5434,57 +5045,58 @@ gdm_slave_exec_script (GdmDisplay *d, const gchar *dir, const char *login,
openlog ("gdm", LOG_PID, LOG_DAEMON);
if (login != NULL) {
- ve_setenv ("LOGNAME", login, TRUE);
- ve_setenv ("USER", login, TRUE);
- ve_setenv ("USERNAME", login, TRUE);
+ g_setenv ("LOGNAME", login, TRUE);
+ g_setenv ("USER", login, TRUE);
+ g_setenv ("USERNAME", login, TRUE);
} else {
- ve_setenv ("LOGNAME", GdmUser, TRUE);
- ve_setenv ("USER", GdmUser, TRUE);
- ve_setenv ("USERNAME", GdmUser, TRUE);
+ char *gdmuser = gdm_get_value_string (GDM_KEY_USER);
+ g_setenv ("LOGNAME", gdmuser, TRUE);
+ g_setenv ("USER", gdmuser, TRUE);
+ g_setenv ("USERNAME", gdmuser, TRUE);
}
if (pwent != NULL) {
if (ve_string_empty (pwent->pw_dir)) {
- ve_setenv ("HOME", "/", TRUE);
- ve_setenv ("PWD", "/", TRUE);
+ g_setenv ("HOME", "/", TRUE);
+ g_setenv ("PWD", "/", TRUE);
VE_IGNORE_EINTR (chdir ("/"));
} else {
- ve_setenv ("HOME", pwent->pw_dir, TRUE);
- ve_setenv ("PWD", pwent->pw_dir, TRUE);
+ g_setenv ("HOME", pwent->pw_dir, TRUE);
+ g_setenv ("PWD", pwent->pw_dir, TRUE);
VE_IGNORE_EINTR (chdir (pwent->pw_dir));
if (errno != 0) {
VE_IGNORE_EINTR (chdir ("/"));
- ve_setenv ("PWD", "/", TRUE);
+ g_setenv ("PWD", "/", TRUE);
}
}
- ve_setenv ("SHELL", pwent->pw_shell, TRUE);
+ g_setenv ("SHELL", pwent->pw_shell, TRUE);
} else {
- ve_setenv ("HOME", "/", TRUE);
- ve_setenv ("PWD", "/", TRUE);
+ g_setenv ("HOME", "/", TRUE);
+ g_setenv ("PWD", "/", TRUE);
VE_IGNORE_EINTR (chdir ("/"));
- ve_setenv ("SHELL", "/bin/sh", TRUE);
+ g_setenv ("SHELL", "/bin/sh", TRUE);
}
set_xnest_parent_stuff ();
/* some env for use with the Pre and Post scripts */
- x_servers_file = gdm_make_filename (GdmServAuthDir,
+ x_servers_file = gdm_make_filename (gdm_get_value_string (GDM_KEY_SERV_AUTHDIR),
d->name, ".Xservers");
- ve_setenv ("X_SERVERS", x_servers_file, TRUE);
+ g_setenv ("X_SERVERS", x_servers_file, TRUE);
g_free (x_servers_file);
if (SERVER_IS_XDMCP (d))
- ve_setenv ("REMOTE_HOST", d->hostname, TRUE);
+ g_setenv ("REMOTE_HOST", d->hostname, TRUE);
/* Runs as root */
if (GDM_AUTHFILE (d) != NULL)
- ve_setenv ("XAUTHORITY", GDM_AUTHFILE (d), TRUE);
+ g_setenv ("XAUTHORITY", GDM_AUTHFILE (d), TRUE);
else
- ve_unsetenv ("XAUTHORITY");
- ve_setenv ("DISPLAY", d->name, TRUE);
- ve_setenv ("PATH", GdmRootPath, TRUE);
- ve_setenv ("RUNNING_UNDER_GDM", "true", TRUE);
+ g_unsetenv ("XAUTHORITY");
+ g_setenv ("DISPLAY", d->name, TRUE);
+ g_setenv ("PATH", gdm_get_value_string (GDM_KEY_ROOT_PATH), TRUE);
+ g_setenv ("RUNNING_UNDER_GDM", "true", TRUE);
if ( ! ve_string_empty (d->theme_name))
- ve_setenv ("GDM_GTK_THEME", d->theme_name, TRUE);
- ve_unsetenv ("MAIL");
+ g_setenv ("GDM_GTK_THEME", d->theme_name, TRUE);
+ g_unsetenv ("MAIL");
argv = ve_split (script);
VE_IGNORE_EINTR (execv (argv[0], argv));
syslog (LOG_ERR, _("%s: Failed starting: %s"), "gdm_slave_exec_script",
@@ -5612,18 +5224,18 @@ gdm_parse_enriched_login (const gchar *s, GdmDisplay *display)
/* runs as root */
if (GDM_AUTHFILE (display) != NULL)
- ve_setenv ("XAUTHORITY", GDM_AUTHFILE (display), TRUE);
+ g_setenv ("XAUTHORITY", GDM_AUTHFILE (display), TRUE);
else
- ve_unsetenv ("XAUTHORITY");
- ve_setenv ("DISPLAY", display->name, TRUE);
+ g_unsetenv ("XAUTHORITY");
+ g_setenv ("DISPLAY", display->name, TRUE);
if (SERVER_IS_XDMCP (display))
- ve_setenv ("REMOTE_HOST", display->hostname, TRUE);
- ve_setenv ("PATH", GdmRootPath, TRUE);
- ve_setenv ("SHELL", "/bin/sh", TRUE);
- ve_setenv ("RUNNING_UNDER_GDM", "true", TRUE);
+ g_setenv ("REMOTE_HOST", display->hostname, TRUE);
+ g_setenv ("PATH", gdm_get_value_string (GDM_KEY_ROOT_PATH), TRUE);
+ g_setenv ("SHELL", "/bin/sh", TRUE);
+ g_setenv ("RUNNING_UNDER_GDM", "true", TRUE);
if ( ! ve_string_empty (d->theme_name))
- ve_setenv ("GDM_GTK_THEME", d->theme_name, TRUE);
- ve_unsetenv ("MAIL");
+ g_setenv ("GDM_GTK_THEME", d->theme_name, TRUE);
+ g_unsetenv ("MAIL");
argv = ve_split (str->str);
VE_IGNORE_EINTR (execv (argv[0], argv));
@@ -5672,33 +5284,32 @@ gdm_slave_handle_notify (const char *msg)
gdm_debug ("Handling slave notify: '%s'", msg);
- if (sscanf (msg, GDM_NOTIFY_ALLOWROOT " %d", &val) == 1) {
- GdmAllowRoot = val;
- } else if (sscanf (msg, GDM_NOTIFY_ALLOWREMOTEROOT " %d", &val) == 1) {
- GdmAllowRemoteRoot = val;
- } else if (sscanf (msg, GDM_NOTIFY_ALLOWREMOTEAUTOLOGIN " %d", &val) == 1) {
- GdmAllowRemoteAutoLogin = val;
- } else if (sscanf (msg, GDM_NOTIFY_SYSMENU " %d", &val) == 1) {
- GdmSystemMenu = val;
+ if (sscanf (msg, GDM_NOTIFY_ALLOW_ROOT " %d", &val) == 1) {
+ gdm_set_value_bool (GDM_KEY_ALLOW_ROOT, val);
+ } else if (sscanf (msg, GDM_NOTIFY_ALLOW_REMOTE_ROOT " %d", &val) == 1) {
+ gdm_set_value_bool (GDM_KEY_ALLOW_REMOTE_ROOT, val);
+ } else if (sscanf (msg, GDM_NOTIFY_ALLOW_REMOTE_AUTOLOGIN " %d", &val) == 1) {
+ gdm_set_value_bool (GDM_KEY_ALLOW_REMOTE_AUTOLOGIN, val);
+ } else if (sscanf (msg, GDM_NOTIFY_SYSTEM_MENU " %d", &val) == 1) {
+ gdm_set_value_bool (GDM_KEY_SYSTEM_MENU, val);
if (d->greetpid > 1)
kill (d->greetpid, SIGHUP);
} else if (sscanf (msg, GDM_NOTIFY_CONFIG_AVAILABLE " %d", &val) == 1) {
- GdmConfigAvailable = val;
+ gdm_set_value_bool (GDM_KEY_CONFIG_AVAILABLE, val);
if (d->greetpid > 1)
kill (d->greetpid, SIGHUP);
} else if (sscanf (msg, GDM_NOTIFY_CHOOSER_BUTTON " %d", &val) == 1) {
- GdmChooserButton = val;
+ gdm_set_value_bool (GDM_KEY_CHOOSER_BUTTON, val);
if (d->greetpid > 1)
kill (d->greetpid, SIGHUP);
- } else if (sscanf (msg, GDM_NOTIFY_RETRYDELAY " %d", &val) == 1) {
- GdmRetryDelay = val;
- } else if (sscanf (msg, GDM_NOTIFY_DISALLOWTCP " %d", &val) == 1) {
- GdmDisallowTCP = val;
+ } else if (sscanf (msg, GDM_NOTIFY_RETRY_DELAY " %d", &val) == 1) {
+ gdm_set_value_int (GDM_KEY_RETRY_DELAY, val);
+ } else if (sscanf (msg, GDM_NOTIFY_DISALLOW_TCP " %d", &val) == 1) {
+ gdm_set_value_bool (GDM_KEY_DISALLOW_TCP, val);
remanage_asap = TRUE;
} else if (strncmp (msg, GDM_NOTIFY_GREETER " ",
strlen (GDM_NOTIFY_GREETER) + 1) == 0) {
- g_free (GdmGreeter);
- GdmGreeter = g_strdup (&msg[strlen (GDM_NOTIFY_GREETER) + 1]);
+ gdm_set_value_string (GDM_KEY_GREETER, (&msg[strlen (GDM_NOTIFY_GREETER) + 1]));
if (d->attached) {
do_restart_greeter = TRUE;
@@ -5714,11 +5325,10 @@ gdm_slave_handle_notify (const char *msg)
}
}
}
- } else if (strncmp (msg, GDM_NOTIFY_REMOTEGREETER " ",
- strlen (GDM_NOTIFY_REMOTEGREETER) + 1) == 0) {
- g_free (GdmRemoteGreeter);
- GdmRemoteGreeter = g_strdup
- (&msg[strlen (GDM_NOTIFY_REMOTEGREETER) + 1]);
+ } else if (strncmp (msg, GDM_NOTIFY_REMOTE_GREETER " ",
+ strlen (GDM_NOTIFY_REMOTE_GREETER) + 1) == 0) {
+ gdm_set_value_string (GDM_KEY_REMOTE_GREETER,
+ (&msg[strlen (GDM_NOTIFY_REMOTE_GREETER) + 1]));
if ( ! d->attached) {
do_restart_greeter = TRUE;
if (restart_greeter_now) {
@@ -5746,37 +5356,33 @@ gdm_slave_handle_notify (const char *msg)
}
}
} else if (sscanf (msg, GDM_NOTIFY_TIMED_LOGIN_DELAY " %d", &val) == 1) {
- GdmTimedLoginDelay = val;
+ gdm_set_value_int (GDM_KEY_TIMED_LOGIN_DELAY, val);
if (d->greetpid > 1)
kill (d->greetpid, SIGHUP);
} else if (strncmp (msg, GDM_NOTIFY_SOUND_ON_LOGIN_READY_FILE " ",
strlen (GDM_NOTIFY_SOUND_ON_LOGIN_READY_FILE) + 1) == 0) {
- g_free (GdmSoundOnLoginReadyFile);
- GdmSoundOnLoginReadyFile = g_strdup
- (&msg[strlen (GDM_NOTIFY_SOUND_ON_LOGIN_READY_FILE) + 1]);
+ gdm_set_value_string (GDM_KEY_SOUND_ON_LOGIN_READY_FILE,
+ (&msg[strlen (GDM_NOTIFY_SOUND_ON_LOGIN_READY_FILE) + 1]));
if (d->greetpid > 1)
kill (d->greetpid, SIGHUP);
} else if (strncmp (msg, GDM_NOTIFY_SOUND_ON_LOGIN_SUCCESS_FILE " ",
strlen (GDM_NOTIFY_SOUND_ON_LOGIN_SUCCESS_FILE) + 1) == 0) {
- g_free (GdmSoundOnLoginSuccessFile);
- GdmSoundOnLoginSuccessFile = g_strdup
- (&msg[strlen (GDM_NOTIFY_SOUND_ON_LOGIN_SUCCESS_FILE) + 1]);
+ gdm_set_value_string (GDM_KEY_SOUND_ON_LOGIN_SUCCESS_FILE,
+ (&msg[strlen (GDM_NOTIFY_SOUND_ON_LOGIN_SUCCESS_FILE) + 1]));
if (d->greetpid > 1)
kill (d->greetpid, SIGHUP);
} else if (strncmp (msg, GDM_NOTIFY_SOUND_ON_LOGIN_FAILURE_FILE " ",
strlen (GDM_NOTIFY_SOUND_ON_LOGIN_FAILURE_FILE) + 1) == 0) {
- g_free (GdmSoundOnLoginFailureFile);
- GdmSoundOnLoginFailureFile = g_strdup
- (&msg[strlen (GDM_NOTIFY_SOUND_ON_LOGIN_FAILURE_FILE) + 1]);
+ gdm_set_value_string (GDM_KEY_SOUND_ON_LOGIN_FAILURE_FILE,
+ (&msg[strlen (GDM_NOTIFY_SOUND_ON_LOGIN_FAILURE_FILE) + 1]));
if (d->greetpid > 1)
kill (d->greetpid, SIGHUP);
} else if (strncmp (msg, GDM_NOTIFY_GTK_MODULES_LIST " ",
strlen (GDM_NOTIFY_GTK_MODULES_LIST) + 1) == 0) {
- g_free (GdmGtkModulesList);
- GdmGtkModulesList = g_strdup
- (&msg[strlen (GDM_NOTIFY_GTK_MODULES_LIST) + 1]);
+ gdm_set_value_string (GDM_KEY_GTK_MODULES_LIST,
+ (&msg[strlen (GDM_NOTIFY_GTK_MODULES_LIST) + 1]));
- if (GdmAddGtkModules) {
+ if (gdm_get_value_bool (GDM_KEY_ADD_GTK_MODULES)) {
do_restart_greeter = TRUE;
if (restart_greeter_now) {
; /* will get restarted later */
@@ -5791,7 +5397,7 @@ gdm_slave_handle_notify (const char *msg)
}
}
} else if (sscanf (msg, GDM_NOTIFY_ADD_GTK_MODULES " %d", &val) == 1) {
- GdmAddGtkModules = val;
+ gdm_set_value_bool (GDM_KEY_ADD_GTK_MODULES, val);
do_restart_greeter = TRUE;
if (restart_greeter_now) {
diff --git a/daemon/slave.h b/daemon/slave.h
index 3c49b2f3..4aa33fc6 100644
--- a/daemon/slave.h
+++ b/daemon/slave.h
@@ -1,4 +1,4 @@
-/* GDM - The Gnome Display Manager
+/* GDM - The GNOME Display Manager
* Copyright (C) 1998, 1999, 2000 Martin K. Petersen <mkp@mkp.net>
*
* This program is free software; you can redistribute it and/or modify
@@ -37,6 +37,7 @@ gboolean gdm_slave_final_cleanup (void);
void gdm_slave_whack_temp_auth_file (void);
gboolean gdm_slave_check_user_wants_to_log_in (const char *user);
+gboolean gdm_is_session_magic (const char *session_name);
/* This is the slave child handler so that we can chain to it from elsewhere */
void gdm_slave_child_handler (int sig);
diff --git a/daemon/verify-crypt.c b/daemon/verify-crypt.c
index 01d3749c..35e45df2 100644
--- a/daemon/verify-crypt.c
+++ b/daemon/verify-crypt.c
@@ -32,8 +32,6 @@
# include <crypt.h>
#endif /* HAVE_CRYPT */
-#include <vicious.h>
-
#include "gdm.h"
#include "misc.h"
#include "slave.h"
diff --git a/daemon/verify-pam.c b/daemon/verify-pam.c
index 6ceccf0f..f4272557 100644
--- a/daemon/verify-pam.c
+++ b/daemon/verify-pam.c
@@ -30,13 +30,13 @@
#endif
#include <libgnome/libgnome.h>
-#include <vicious.h>
#include "gdm.h"
#include "misc.h"
#include "slave.h"
#include "verify.h"
#include "errorgui.h"
+#include "gdmconfig.h"
#ifdef HAVE_LOGINDEVPERM
#include <libdevinfo.h>
@@ -46,20 +46,6 @@
#include <bsm/adt_event.h>
#endif /* HAVE_ADT */
-/* Configuration option variables */
-extern gboolean GdmAllowRoot;
-extern gboolean GdmAllowRemoteRoot;
-extern gchar *GdmTimedLogin;
-extern gchar *GdmUser;
-extern gboolean GdmAllowRemoteAutoLogin;
-extern gint GdmRetryDelay;
-extern gboolean GdmDisplayLastLogin;
-extern uid_t GdmUserId;
-extern gid_t GdmGroupId;
-extern gboolean GdmPasswordRequired;
-
-extern gboolean GdmConsoleNotify;
-
/* Evil, but this way these things are passed to the child session */
static pam_handle_t *pamh = NULL;
@@ -570,7 +556,7 @@ gdm_verify_pam_conv (int num_msg, const struct pam_message **msg,
g_free (tmp_PAM_USER);
tmp_PAM_USER = g_strdup (s);
- if (GdmDisplayLastLogin) {
+ if (gdm_get_value_bool (GDM_KEY_DISPLAY_LAST_LOGIN)) {
char *info = gdm_get_last_info (s);
gdm_slave_greeter_ctl_no_ret (GDM_ERRBOX, info);
g_free (info);
@@ -838,8 +824,8 @@ verify_user_again:
null_tok = 0;
/* start the timer for timed logins */
- if ( ! ve_string_empty (GdmTimedLogin) &&
- (local || GdmAllowRemoteAutoLogin)) {
+ if ( ! ve_string_empty (gdm_get_value_string (GDM_KEY_TIMED_LOGIN)) &&
+ (local || gdm_get_value_bool (GDM_KEY_ALLOW_REMOTE_AUTOLOGIN))) {
gdm_slave_greeter_ctl_no_ret (GDM_STARTTIMER, "");
started_timer = TRUE;
}
@@ -871,16 +857,16 @@ authenticate_again:
when running the configurator. We wish to ourselves cancel logins
without a delay, so ... evil */
#ifdef PAM_FAIL_DELAY
- pam_fail_delay (pamh, GdmRetryDelay * 1000000);
+ pam_fail_delay (pamh, gdm_get_value_int (GDM_KEY_RETRY_DELAY) * 1000000);
#endif /* PAM_FAIL_DELAY */
#endif
passreq = gdm_read_default ("PASSREQ=");
if ((passreq != NULL) &&
g_ascii_strcasecmp (passreq, "YES") == 0)
- GdmPasswordRequired = TRUE;
+ gdm_set_value_bool (GDM_KEY_PASSWORD_REQUIRED, TRUE);
- if (GdmPasswordRequired)
+ if (gdm_get_value_bool (GDM_KEY_PASSWORD_REQUIRED))
null_tok |= PAM_DISALLOW_NULL_AUTHTOK;
gdm_verify_select_user (NULL);
@@ -921,7 +907,7 @@ authenticate_again:
if (gdm_slave_action_pending ()) {
/* FIXME: see note above about PAM_FAIL_DELAY */
/* #ifndef PAM_FAIL_DELAY */
- gdm_sleep_no_signal (GdmRetryDelay);
+ gdm_sleep_no_signal (gdm_get_value_int (GDM_KEY_RETRY_DELAY));
/* wait up to 100ms randomly */
usleep (g_random_int_range (0, 100000));
/* #endif */ /* PAM_FAIL_DELAY */
@@ -968,11 +954,11 @@ authenticate_again:
consoleonly = gdm_read_default ("CONSOLE=");
if ((consoleonly != NULL) &&
g_ascii_strcasecmp (consoleonly, "/dev/console") == 0)
- GdmAllowRemoteRoot = FALSE;
+ gdm_set_value_bool (GDM_KEY_ALLOW_REMOTE_ROOT, FALSE);
pwent = getpwnam (login);
- if ( ( ! GdmAllowRoot ||
- ( ! GdmAllowRemoteRoot && ! local) ) &&
+ if ( ( ! gdm_get_value_bool (GDM_KEY_ALLOW_ROOT) ||
+ ( ! gdm_get_value_bool (GDM_KEY_ALLOW_REMOTE_ROOT) && ! local) ) &&
pwent != NULL &&
pwent->pw_uid == 0) {
gdm_error (_("Root login disallowed on display '%s'"),
@@ -1234,9 +1220,9 @@ gdm_verify_setup_user (GdmDisplay *d, const gchar *login, const gchar *display,
passreq = gdm_read_default ("PASSREQ=");
if ((passreq != NULL) &&
g_ascii_strcasecmp (passreq, "YES") == 0)
- GdmPasswordRequired = TRUE;
+ gdm_set_value_bool (GDM_KEY_PASSWORD_REQUIRED, TRUE);
- if (GdmPasswordRequired)
+ if (gdm_get_value_bool (GDM_KEY_PASSWORD_REQUIRED))
null_tok |= PAM_DISALLOW_NULL_AUTHTOK;
/* Start authentication session */
@@ -1487,8 +1473,8 @@ gdm_verify_cleanup (GdmDisplay *d)
if (old_opened_session && old_did_setcred && d->attached) {
(void) di_devperm_logout ("/dev/console");
/* give it back to gdm user */
- (void) di_devperm_login ("/dev/console", GdmUserId,
- GdmGroupId, NULL);
+ (void) di_devperm_login ("/dev/console", gdm_get_gdmuid(),
+ gdm_get_gdmgid(), NULL);
}
#endif /* HAVE_LOGINDEVPERM */
@@ -1529,7 +1515,7 @@ gdm_verify_check (void)
closelog ();
openlog ("gdm", LOG_PID, LOG_DAEMON);
- if (GdmConsoleNotify)
+ if (gdm_get_value_bool (GDM_KEY_CONSOLE_NOTIFY))
gdm_text_message_dialog
(C_(N_("Can't find PAM configuration for gdm.")));
gdm_fail ("gdm_verify_check: %s",
diff --git a/daemon/verify-shadow.c b/daemon/verify-shadow.c
index 0b2d96e3..643c36a3 100644
--- a/daemon/verify-shadow.c
+++ b/daemon/verify-shadow.c
@@ -33,8 +33,6 @@
# include <crypt.h>
#endif /* HAVE_CRYPT */
-#include <vicious.h>
-
#include "gdm.h"
#include "misc.h"
#include "slave.h"
diff --git a/daemon/verify.h b/daemon/verify.h
index f24aee45..e7e983f9 100644
--- a/daemon/verify.h
+++ b/daemon/verify.h
@@ -1,4 +1,4 @@
-/* GDM - The Gnome Display Manager
+/* GDM - The GNOME Display Manager
* Copyright (C) 1998, 1999, 2000 Martin K. Petersen <mkp@mkp.net>
*
* This program is free software; you can redistribute it and/or modify
diff --git a/daemon/xdmcp.c b/daemon/xdmcp.c
index cc044184..8d4c6289 100644
--- a/daemon/xdmcp.c
+++ b/daemon/xdmcp.c
@@ -55,7 +55,6 @@
*/
#include <config.h>
-#include <libgnome/libgnome.h>
#ifdef HAVE_LIBXDMCP
#include <stdio.h>
@@ -88,9 +87,11 @@
#ifdef HAVE_TCPWRAPPERS
#include <tcpd.h>
#endif
+#endif /* HAVE_LIBXDMCP */
-#include <vicious.h>
+#include <libgnome/libgnome.h>
+#ifdef HAVE_LIBXDMCP
#include "gdm.h"
#include "display.h"
#include "auth.h"
@@ -100,6 +101,7 @@
#include "choose.h"
#include "xdmcp.h"
#include "cookie.h"
+#include "gdmconfig.h"
#define XDMCP_MULTICAST_ADDRESS "ff02::1" /*This is to be changed when the Xdmcp Multicast address is decided */
@@ -121,32 +123,6 @@ static gboolean initted = FALSE;
extern GSList *displays;
extern gint xdmcp_pending;
extern gint xdmcp_sessions;
-extern uid_t GdmUserId;
-extern gchar *GdmLogDir;
-extern gchar *GdmServAuthDir;
-extern gboolean GdmMulticast; /* Whether Multicast options are set */
-extern gchar *GdmMulticastAddr; /* Multicast address */
-
-/* Tunables */
-extern gint GdmMaxPending; /* only accept this number of pending sessions */
-extern gint GdmMaxManageWait; /* Dispose sessions not responding with MANAGE after 10 secs */
-extern gint GdmMaxSessions; /* Maximum number of remote sessions */
-extern gint GdmPort; /* UDP port number */
-extern gboolean GdmIndirect; /* Honor XDMCP_INDIRECT, i.e. choosing */
-extern gint GdmMaxIndirectWait; /* Max wait between INDIRECT_QUERY and MANAGE */
-extern gint GdmDispPerHost; /* Max number of displays per remote host */
-extern gchar *GdmTimedLogin;
-extern gboolean GdmAllowRemoteAutoLogin;
-extern gchar *GdmWilling; /* The willing script */
-
-extern gboolean GdmXdmcp; /* xdmcp enabled */
-
-extern gboolean GdmXdmcpProxy; /* Proxy X server enabled */
-extern gchar *GdmXdmcpProxyCommand; /* Proxy X server command */
-extern gchar *GdmXdmcpProxyReconnect; /* Proxy reconnect command */
-
-
-extern gboolean GdmDebug; /* debug enabled */
/* Local prototypes */
static gboolean gdm_xdmcp_decode_packet (GIOChannel *source,
@@ -361,8 +337,9 @@ gdm_xdmcp_init (void)
gint addrlen;
gchar hostbuf[1024];
struct utsname name;
+ int udpport = gdm_get_value_int (GDM_KEY_UDP_PORT);
- if ( ! GdmXdmcp)
+ if ( ! gdm_get_value_bool (GDM_KEY_XDMCP))
return TRUE;
globsessid = g_random_int ();
@@ -385,7 +362,7 @@ gdm_xdmcp_init (void)
initted = TRUE;
}
- gdm_debug ("XDMCP: Start up on host %s, port %d", hostbuf, GdmPort);
+ gdm_debug ("XDMCP: Start up on host %s, port %d", hostbuf, udpport);
/* Open socket for communications */
#ifdef ENABLE_IPV6
@@ -396,19 +373,19 @@ gdm_xdmcp_init (void)
if G_UNLIKELY (gdm_xdmcpfd < 0) {
gdm_error (_("%s: Could not create socket!"), "gdm_xdmcp_init");
- GdmXdmcp = FALSE;
+ gdm_set_value_bool (GDM_KEY_XDMCP, FALSE);
return FALSE;
}
#ifdef ENABLE_IPV6
if (have_ipv6 ()) {
((struct sockaddr_in6 *)(&serv_sa))->sin6_family = AF_INET6;
- ((struct sockaddr_in6 *)(&serv_sa))->sin6_port = htons (GdmPort); /* UDP 177 */
+ ((struct sockaddr_in6 *)(&serv_sa))->sin6_port = htons (udpport); /* UDP 177 */
((struct sockaddr_in6 *)(&serv_sa))->sin6_addr = in6addr_any;
addrlen = sizeof (struct sockaddr_in6);
/* Checking and Setting Multicast options */
- if (GdmMulticast) {
+ if (gdm_get_value_bool (GDM_KEY_MULTICAST)) {
int socktemp; /* temporary socket for getting info about available interfaces*/
int i, num;
char *buf;
@@ -419,12 +396,10 @@ gdm_xdmcp_init (void)
struct ifreq *ifr;
/* Extract Multicast address for IPv6 */
- if (ve_string_empty (GdmMulticastAddr)) {
- g_free (GdmMulticastAddr);
+ if (ve_string_empty (gdm_get_value_string (GDM_KEY_MULTICAST_ADDR))) {
/* Stuff it with all-node multicast address */
- GdmMulticastAddr = g_new0 (char, strlen (XDMCP_MULTICAST_ADDRESS) + 1);
- strcpy (GdmMulticastAddr, XDMCP_MULTICAST_ADDRESS);
+ gdm_set_value_string (GDM_KEY_MULTICAST_ADDR, XDMCP_MULTICAST_ADDRESS);
}
socktemp = socket (AF_INET, SOCK_DGRAM, 0);
@@ -464,7 +439,7 @@ gdm_xdmcp_init (void)
}
mreq.ipv6mr_interface = ifindex;
- inet_pton (AF_INET6, GdmMulticastAddr, &mreq.ipv6mr_multiaddr);
+ inet_pton (AF_INET6, gdm_get_value_string (GDM_KEY_MULTICAST_ADDR), &mreq.ipv6mr_multiaddr);
setsockopt (gdm_xdmcpfd, IPPROTO_IPV6, IPV6_JOIN_GROUP, &mreq, sizeof(mreq));
}
}
@@ -476,7 +451,7 @@ gdm_xdmcp_init (void)
#endif
{
((struct sockaddr_in *)(&serv_sa))->sin_family = AF_INET;
- ((struct sockaddr_in *)(&serv_sa))->sin_port = htons (GdmPort); /* UDP 177 */
+ ((struct sockaddr_in *)(&serv_sa))->sin_port = htons (udpport); /* UDP 177 */
((struct sockaddr_in *)(&serv_sa))->sin_addr.s_addr = htonl (INADDR_ANY);
addrlen = sizeof (struct sockaddr_in);
}
@@ -484,7 +459,7 @@ gdm_xdmcp_init (void)
if G_UNLIKELY (bind (gdm_xdmcpfd, (struct sockaddr*) &serv_sa, addrlen) == -1) {
gdm_error (_("%s: Could not bind to XDMCP socket!"), "gdm_xdmcp_init");
gdm_xdmcp_close ();
- GdmXdmcp = FALSE;
+ gdm_set_value_bool (GDM_KEY_XDMCP, FALSE);
return FALSE;
}
@@ -695,7 +670,7 @@ gdm_xdmcp_handle_query (struct sockaddr_in *clnt_sa, gint len, gint type)
/* Crude checksumming */
for (i = 0 ; i < clnt_authlist.length ; i++) {
- if G_UNLIKELY (GdmDebug) {
+ if G_UNLIKELY (gdm_get_value_bool (GDM_KEY_DEBUG)) {
char *s = g_strndup (clnt_authlist.data[i].data, clnt_authlist.length);
gdm_debug ("gdm_xdmcp_handle_query: authlist: %s", ve_sure_string (s));
g_free (s);
@@ -717,7 +692,7 @@ gdm_xdmcp_handle_query (struct sockaddr_in *clnt_sa, gint len, gint type)
* the pending list. If found send a FORWARD_QUERY to the
* chosen manager. Otherwise alloc a new indirect display. */
- if (GdmIndirect &&
+ if (gdm_get_value_bool (GDM_KEY_INDIRECT) &&
type == INDIRECT_QUERY) {
GdmIndirectDisplay *id = gdm_choose_indirect_lookup (clnt_sa);
@@ -1144,7 +1119,7 @@ gdm_xdmcp_handle_forward_query (struct sockaddr_in *clnt_sa, gint len)
explen += 2+clnt_port.length;
for (i = 0 ; i < clnt_authlist.length ; i++) {
- if G_UNLIKELY (GdmDebug) {
+ if G_UNLIKELY (gdm_get_value_bool (GDM_KEY_DEBUG)) {
char *s = g_strndup (clnt_authlist.data[i].data, clnt_authlist.length);
gdm_debug ("gdm_xdmcp_handle_forward_query: authlist: %s", ve_sure_string (s));
g_free (s);
@@ -1264,8 +1239,8 @@ gdm_xdmcp_send_willing (struct sockaddr_in *clnt_sa)
static time_t last_willing = 0;
char *bin;
FILE *fd;
-#ifdef ENABLE_IPV6
-#endif
+ char *willing = gdm_get_value_string (GDM_KEY_WILLING);
+ int dispperhost = gdm_get_value_int (GDM_KEY_DISPLAYS_PER_HOST);
#ifdef ENABLE_IPV6
if (clnt_sa->ss_family == AF_INET6) {
@@ -1282,10 +1257,10 @@ gdm_xdmcp_send_willing (struct sockaddr_in *clnt_sa)
if (last_willing == 0 ||
time (NULL) - 3 > last_willing) {
char statusBuf[256] = "";
- bin = ve_first_word (GdmWilling);
+ bin = ve_first_word (willing);
if ( ! ve_string_empty (bin) &&
access (bin, X_OK) == 0 &&
- (fd = popen (GdmWilling, "r")) != NULL) {
+ (fd = popen (willing, "r")) != NULL) {
if (fgets (statusBuf, sizeof (statusBuf), fd) != NULL &&
! ve_string_empty (g_strstrip (statusBuf))) {
g_free (last_status);
@@ -1305,7 +1280,7 @@ gdm_xdmcp_send_willing (struct sockaddr_in *clnt_sa)
#ifdef ENABLE_IPV6
if (clnt_sa->ss_family == AF_INET6) {
if ( ! gdm_is_local_addr6 (&(((struct sockaddr_in6 *)clnt_sa)->sin6_addr)) &&
- gdm_xdmcp_displays_from_host (clnt_sa) >= GdmDispPerHost) {
+ gdm_xdmcp_displays_from_host (clnt_sa) >= dispperhost) {
/* Don't translate, this goes over the wire to servers where we
* don't know the charset or language, so it must be ascii */
status.data = g_strdup_printf ("%s (Server is busy)", last_status);
@@ -1317,7 +1292,7 @@ gdm_xdmcp_send_willing (struct sockaddr_in *clnt_sa)
#endif
{
if ( ! gdm_is_local_addr (&(((struct sockaddr_in *)clnt_sa)->sin_addr)) &&
- gdm_xdmcp_displays_from_host (clnt_sa) >= GdmDispPerHost) {
+ gdm_xdmcp_displays_from_host (clnt_sa) >= dispperhost) {
/* Don't translate, this goes over the wire to servers where we
* don't know the charset or language, so it must be ascii */
status.data = g_strdup_printf ("%s (Server is busy)", last_status);
@@ -1584,6 +1559,9 @@ gdm_xdmcp_handle_request (struct sockaddr_in *clnt_sa, gint len)
gint i;
gboolean mitauth = FALSE;
gboolean entered = FALSE;
+ int maxsessions = gdm_get_value_int (GDM_KEY_MAX_SESSIONS);
+ int maxpending = gdm_get_value_int (GDM_KEY_MAX_PENDING);
+ int dispperhost = gdm_get_value_int (GDM_KEY_DISPLAYS_PER_HOST);
#ifdef ENABLE_IPV6
char buffer6[INET6_ADDRSTRLEN];
@@ -1728,10 +1706,10 @@ gdm_xdmcp_handle_request (struct sockaddr_in *clnt_sa, gint len)
return;
}
- if G_UNLIKELY (GdmDebug) {
+ if G_UNLIKELY (gdm_get_value_bool (GDM_KEY_DEBUG)) {
char *s = g_strndup (clnt_manufacturer.data, clnt_manufacturer.length);
gdm_debug ("gdm_xdmcp_handle_request: xdmcp_pending=%d, MaxPending=%d, xdmcp_sessions=%d, MaxSessions=%d, ManufacturerID=%s",
- xdmcp_pending, GdmMaxPending, xdmcp_sessions, GdmMaxSessions, ve_sure_string (s));
+ xdmcp_pending, maxpending, xdmcp_sessions, maxsessions, ve_sure_string (s));
g_free (s);
}
@@ -1739,17 +1717,17 @@ gdm_xdmcp_handle_request (struct sockaddr_in *clnt_sa, gint len)
#ifdef ENABLE_IPV6
if (clnt_sa->ss_family == AF_INET6) {
if (mitauth &&
- xdmcp_sessions < GdmMaxSessions &&
- (gdm_is_local_addr6 (&((struct sockaddr_in6 *)clnt_sa)->sin6_addr) || gdm_xdmcp_displays_from_host (clnt_sa) < GdmDispPerHost))
+ xdmcp_sessions < maxsessions &&
+ (gdm_is_local_addr6 (&((struct sockaddr_in6 *)clnt_sa)->sin6_addr) || gdm_xdmcp_displays_from_host (clnt_sa) < dispperhost))
entered = TRUE;
} else
#endif
{
if (mitauth &&
- xdmcp_sessions < GdmMaxSessions &&
+ xdmcp_sessions < maxsessions &&
(gdm_is_local_addr (&(((struct sockaddr_in *)clnt_sa)->sin_addr)) ||
- gdm_xdmcp_displays_from_host (clnt_sa) < GdmDispPerHost))
+ gdm_xdmcp_displays_from_host (clnt_sa) < dispperhost))
entered = TRUE;
}
@@ -1761,7 +1739,7 @@ gdm_xdmcp_handle_request (struct sockaddr_in *clnt_sa, gint len)
/* Check if we are already talking to this host */
gdm_xdmcp_display_dispose_check (he->hostname, clnt_dspnum);
- if (xdmcp_pending >= GdmMaxPending) {
+ if (xdmcp_pending >= maxpending) {
gdm_debug ("gdm_xdmcp_handle_request: maximum pending");
/* Don't translate, this goes over the wire to servers where we
* don't know the charset or language, so it must be ascii */
@@ -1776,7 +1754,7 @@ gdm_xdmcp_handle_request (struct sockaddr_in *clnt_sa, gint len)
* don't know the charset or language, so it must be ascii */
if ( ! mitauth) {
gdm_xdmcp_send_decline (clnt_sa, "Only MIT-MAGIC-COOKIE-1 supported");
- } else if (xdmcp_sessions >= GdmMaxSessions) {
+ } else if (xdmcp_sessions >= maxsessions) {
gdm_info ("Maximum number of open XDMCP sessions reached");
gdm_xdmcp_send_decline (clnt_sa, "Maximum number of open sessions reached");
} else {
@@ -2008,7 +1986,7 @@ gdm_xdmcp_handle_manage (struct sockaddr_in *clnt_sa, gint len)
return;
}
- if G_UNLIKELY (GdmDebug) {
+ if G_UNLIKELY (gdm_get_value_bool (GDM_KEY_DEBUG)) {
char *s = g_strndup (clnt_dspclass.data, clnt_dspclass.length);
#ifdef ENABLE_IPV6
@@ -2029,7 +2007,7 @@ gdm_xdmcp_handle_manage (struct sockaddr_in *clnt_sa, gint len)
gdm_debug ("gdm_xdmcp_handle_manage: Looked up %s", d->name);
- if (GdmIndirect) {
+ if (gdm_get_value_bool (GDM_KEY_INDIRECT)) {
id = gdm_choose_indirect_lookup (clnt_sa);
/* This was an indirect thingie and nothing was yet chosen,
@@ -2530,12 +2508,13 @@ gdm_xdmcp_display_alloc (
int displaynum)
{
GdmDisplay *d = NULL;
+ char *proxycmd = gdm_get_value_string (GDM_KEY_XDMCP_PROXY_XSERVER);
d = g_new0 (GdmDisplay, 1);
- if (GdmXdmcpProxy && GdmXdmcpProxyCommand != NULL) {
+ if (gdm_get_value_bool (GDM_KEY_XDMCP_PROXY) && proxycmd != NULL) {
d->type = TYPE_XDMCP_PROXY;
- d->command = g_strdup (GdmXdmcpProxyCommand);
+ d->command = g_strdup (proxycmd);
gdm_debug ("Using proxy server for XDMCP: %s\n", d->command);
} else {
d->type = TYPE_XDMCP;
@@ -2570,8 +2549,8 @@ gdm_xdmcp_display_alloc (
d->login = NULL;
d->sleep_before_run = 0;
- if (GdmAllowRemoteAutoLogin &&
- ! ve_string_empty (GdmTimedLogin)) {
+ if (gdm_get_value_bool (GDM_KEY_ALLOW_REMOTE_AUTOLOGIN) &&
+ ! ve_string_empty (gdm_get_value_string (GDM_KEY_TIMED_LOGIN))) {
d->timed_login_ok = TRUE;
} else {
d->timed_login_ok = FALSE;
@@ -2621,7 +2600,7 @@ gdm_xdmcp_display_alloc (
d->name = g_strdup (":-1");
d->dispnum = -1;
- d->server_uid = GdmUserId;
+ d->server_uid = gdm_get_gdmuid();
d->parent_auth_file = d->authfile;
d->authfile = NULL;
@@ -2706,7 +2685,7 @@ gdm_xdmcp_displays_check (void)
if (d != NULL &&
SERVER_IS_XDMCP (d) &&
d->dispstat == XDMCP_PENDING &&
- curtime > d->acctime + GdmMaxManageWait) {
+ curtime > d->acctime + gdm_get_value_int (GDM_KEY_MAX_WAIT)) {
gdm_debug ("gdm_xdmcp_displays_check: Disposing session id %ld",
(long)d->sessionid);
gdm_display_dispose (d);
@@ -2725,8 +2704,9 @@ reconnect_to_parent (GdmDisplay *to)
{
GError *error;
gchar *command_argv[10];
+ gchar *proxyreconnect = gdm_get_value_string (GDM_KEY_XDMCP_PROXY_RECONNECT);
- command_argv[0] = GdmXdmcpProxyReconnect;
+ command_argv[0] = proxyreconnect;
command_argv[1] = "--display";
command_argv[2] = to->parent_disp;
command_argv[3] = "--display-authfile";
@@ -2739,7 +2719,7 @@ reconnect_to_parent (GdmDisplay *to)
gdm_debug ("XDMCP: migrating display by running "
"'%s --display %s --display-authfile %s --to %s --to-authfile %s'",
- GdmXdmcpProxyReconnect,
+ proxyreconnect,
to->parent_disp, to->parent_auth_file,
to->name, to->authfile);
@@ -2748,7 +2728,7 @@ reconnect_to_parent (GdmDisplay *to)
gdm_error (_("%s: Failed to run "
"'%s --display %s --display-authfile %s --to %s --to-authfile %s': %s"),
"gdm_xdmcp_migrate",
- GdmXdmcpProxyReconnect,
+ proxyreconnect,
to->parent_disp, to->parent_auth_file,
to->name, to->authfile,
error->message);
diff --git a/daemon/xdmcp.h b/daemon/xdmcp.h
index 48afd1f2..ac0b8a65 100644
--- a/daemon/xdmcp.h
+++ b/daemon/xdmcp.h
@@ -1,4 +1,4 @@
-/* GDM - The Gnome Display Manager
+/* GDM - The GNOME Display Manager
* Copyright (C) 1998, 1999, 2000 Martin K. Petersen <mkp@mkp.net>
*
* This program is free software; you can redistribute it and/or modify
diff --git a/gui/gdmXnestchooser.c b/gui/gdmXnestchooser.c
index ecc0e0f0..cdd07184 100644
--- a/gui/gdmXnestchooser.c
+++ b/gui/gdmXnestchooser.c
@@ -514,7 +514,7 @@ main (int argc, char *argv[])
gnome_config_push_prefix (config_prefix);
xdmcp_enabled = gnome_config_get_bool (GDM_KEY_XDMCP);
honor_indirect = gnome_config_get_bool (GDM_KEY_INDIRECT);
- pidfile = gnome_config_get_string (GDM_KEY_PIDFILE);
+ pidfile = gnome_config_get_string (GDM_KEY_PID_FILE);
xnest = gnome_config_get_string (GDM_KEY_XNEST);
gnome_config_pop_prefix ();
g_free (config_file);
diff --git a/gui/gdmchooser.c b/gui/gdmchooser.c
index 0951959e..886b9d4a 100644
--- a/gui/gdmchooser.c
+++ b/gui/gdmchooser.c
@@ -1607,24 +1607,24 @@ gdm_chooser_parse_config (void)
cfg = ve_config_get (config_file);
- GdmXineramaScreen = ve_config_get_int (cfg, GDM_KEY_XINERAMASCREEN);
+ GdmXineramaScreen = ve_config_get_int (cfg, GDM_KEY_XINERAMA_SCREEN);
GdmGtkRC = ve_config_get_string (cfg, GDM_KEY_GTKRC);
GdmGtkTheme = ve_config_get_string (cfg, GDM_KEY_GTK_THEME);
- GdmScanTime = ve_config_get_int (cfg, GDM_KEY_SCAN);
- GdmHostDefaultIcon = ve_config_get_string (cfg, GDM_KEY_HOST);
- GdmHostIconDir = ve_config_get_string (cfg, GDM_KEY_HOSTDIR);
- GdmIconMaxWidth = ve_config_get_int (cfg, GDM_KEY_ICONWIDTH);
- GdmIconMaxHeight = ve_config_get_int (cfg, GDM_KEY_ICONHEIGHT);
+ GdmScanTime = ve_config_get_int (cfg, GDM_KEY_SCAN_TIME);
+ GdmHostDefaultIcon = ve_config_get_string (cfg, GDM_KEY_DEFAULT_HOST_IMG);
+ GdmHostIconDir = ve_config_get_string (cfg, GDM_KEY_HOST_IMAGE_DIR);
+ GdmIconMaxWidth = ve_config_get_int (cfg, GDM_KEY_ICON_WIDTH);
+ GdmIconMaxHeight = ve_config_get_int (cfg, GDM_KEY_ICON_HEIGHT);
GdmDebug = ve_config_get_bool (cfg, GDM_KEY_DEBUG);
- GdmBackgroundColor = ve_config_get_string (cfg, GDM_KEY_BACKGROUNDCOLOR);
- GdmBackgroundType = ve_config_get_int (cfg, GDM_KEY_BACKGROUNDTYPE);
+ GdmBackgroundColor = ve_config_get_string (cfg, GDM_KEY_BACKGROUND_COLOR);
+ GdmBackgroundType = ve_config_get_int (cfg, GDM_KEY_BACKGROUND_TYPE);
#ifdef ENABLE_IPV6
GdmMulticast = ve_config_get_bool (cfg, GDM_KEY_MULTICAST);
GdmMulticastAddr = ve_config_get_string (cfg, GDM_KEY_MULTICAST_ADDR);
#endif
- GdmAllowAdd = ve_config_get_bool (cfg, GDM_KEY_ALLOWADD);
+ GdmAllowAdd = ve_config_get_bool (cfg, GDM_KEY_ALLOW_ADD);
/* note that command line arguments will prevail over these */
GdmHosts = ve_config_get_string (cfg, GDM_KEY_HOSTS);
@@ -1901,13 +1901,13 @@ gdm_reread_config (int sig, gpointer data)
if ( ! string_same (config, GdmHostsOrig, GDM_KEY_HOSTS) ||
! string_same (config, GdmGtkRC, GDM_KEY_GTKRC) ||
! string_same (config, GdmGtkTheme, GDM_KEY_GTK_THEME) ||
- ! string_same (config, GdmHostDefaultIcon, GDM_KEY_HOST) ||
- ! string_same (config, GdmHostIconDir, GDM_KEY_HOSTDIR) ||
+ ! string_same (config, GdmHostDefaultIcon, GDM_KEY_DEFAULT_HOST_IMG) ||
+ ! string_same (config, GdmHostIconDir, GDM_KEY_HOST_IMAGE_DIR) ||
! int_same (config,
- GdmXineramaScreen, GDM_KEY_XINERAMASCREEN) ||
- ! int_same (config, GdmIconMaxWidth, GDM_KEY_ICONWIDTH) ||
- ! int_same (config, GdmIconMaxHeight, GDM_KEY_ICONHEIGHT) ||
- ! int_same (config, GdmScanTime, GDM_KEY_SCAN) ||
+ GdmXineramaScreen, GDM_KEY_XINERAMA_SCREEN) ||
+ ! int_same (config, GdmIconMaxWidth, GDM_KEY_ICON_WIDTH) ||
+ ! int_same (config, GdmIconMaxHeight, GDM_KEY_ICON_HEIGHT) ||
+ ! int_same (config, GdmScanTime, GDM_KEY_SCAN_TIME) ||
! bool_same (config, GdmDebug, GDM_KEY_DEBUG)) {
if (RUNNING_UNDER_GDM) {
/* Set busy cursor */
@@ -1922,8 +1922,8 @@ gdm_reread_config (int sig, gpointer data)
}
/* we only use the color and do it for all types except NONE */
- if ( ! string_same (config, GdmBackgroundColor, GDM_KEY_BACKGROUNDCOLOR) ||
- ! int_same (config, GdmBackgroundType, GDM_KEY_BACKGROUNDTYPE)) {
+ if ( ! string_same (config, GdmBackgroundColor, GDM_KEY_BACKGROUND_COLOR) ||
+ ! int_same (config, GdmBackgroundType, GDM_KEY_BACKGROUND_TYPE)) {
if (GdmBackgroundType != GDM_BACKGROUND_NONE) {
setup_background_color (GdmBackgroundColor);
diff --git a/gui/gdmcomm.c b/gui/gdmcomm.c
index 68d81b87..c292dc15 100644
--- a/gui/gdmcomm.c
+++ b/gui/gdmcomm.c
@@ -381,7 +381,7 @@ gdmcomm_check (gchar *config_file, gboolean gui_bitching)
return FALSE;
pidfile = ve_config_get_string (ve_config_get (config_file),
- GDM_KEY_PIDFILE);
+ GDM_KEY_PID_FILE);
pid = 0;
if (pidfile != NULL)
diff --git a/gui/gdmdynamic.c b/gui/gdmdynamic.c
index 332ea71a..9c2b350d 100644
--- a/gui/gdmdynamic.c
+++ b/gui/gdmdynamic.c
@@ -159,7 +159,7 @@ main (int argc, char *argv[])
}
GdmServAuthDir = ve_config_get_string (ve_config_get (config_file),
- GDM_KEY_SERVAUTH);
+ GDM_KEY_SERV_AUTHDIR);
g_free (config_file);
filename = g_build_filename (GdmServAuthDir, ".cookie", NULL);
diff --git a/gui/gdmflexiserver.c b/gui/gdmflexiserver.c
index cc168e28..8a81fb5f 100644
--- a/gui/gdmflexiserver.c
+++ b/gui/gdmflexiserver.c
@@ -545,7 +545,7 @@ read_servers (gchar *config_file)
while (iter) {
if (strncmp (k, "server-", strlen ("server-")) == 0) {
char *section;
- GdmXServer *svr;
+ GdmXserver *svr;
section = g_strdup_printf ("=%s=/%s/", config_file, k);
gnome_config_push_prefix (section);
@@ -560,7 +560,7 @@ read_servers (gchar *config_file)
continue;
}
- svr = g_new0 (GdmXServer, 1);
+ svr = g_new0 (GdmXserver, 1);
svr->id = g_strdup (k + strlen ("server-"));
svr->name = gnome_config_get_string
@@ -632,7 +632,7 @@ choose_server (void)
}
for (li = xservers; li != NULL; li = li->next) {
- GdmXServer *svr = li->data;
+ GdmXserver *svr = li->data;
w = gtk_radio_button_new_with_label
(group, svr->name ? svr->name : svr->id);
gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 0);
diff --git a/gui/gdmlogin.c b/gui/gdmlogin.c
index 37fb4ec3..96655556 100644
--- a/gui/gdmlogin.c
+++ b/gui/gdmlogin.c
@@ -885,9 +885,9 @@ gdm_login_parse_config (void)
}
if (ve_string_empty (g_getenv ("GDM_IS_LOCAL"))) {
- greeter_Welcome_key = GDM_KEY_REMOTEWELCOME;
- greeter_DefaultWelcome_key = GDM_KEY_DEFAULT_REMOTEWELCOME;
- greeter_DefaultWelcomeBacktest_key = GDM_KEY_DEFAULT_REMOTEWELCOME_BACKTEST;
+ greeter_Welcome_key = GDM_KEY_REMOTE_WELCOME;
+ greeter_DefaultWelcome_key = GDM_KEY_DEFAULT_REMOTE_WELCOME;
+ greeter_DefaultWelcomeBacktest_key = GDM_KEY_DEFAULT_REMOTE_WELCOME_BACKTEST;
} else {
greeter_Welcome_key = GDM_KEY_WELCOME;
greeter_DefaultWelcome_key = GDM_KEY_DEFAULT_WELCOME;
@@ -896,12 +896,12 @@ gdm_login_parse_config (void)
config = ve_config_get (config_file);
- GdmAllowRoot = ve_config_get_bool (config, GDM_KEY_ALLOWROOT);
- GdmAllowRemoteRoot = ve_config_get_bool (config, GDM_KEY_ALLOWREMOTEROOT);
+ GdmAllowRoot = ve_config_get_bool (config, GDM_KEY_ALLOW_ROOT);
+ GdmAllowRemoteRoot = ve_config_get_bool (config, GDM_KEY_ALLOW_REMOTE_ROOT);
GdmBrowser = ve_config_get_bool (config, GDM_KEY_BROWSER);
GdmLogo = ve_config_get_string (config, GDM_KEY_LOGO);
GdmQuiver = ve_config_get_bool (config, GDM_KEY_QUIVER);
- GdmSystemMenuReal = GdmSystemMenu = ve_config_get_bool (config, GDM_KEY_SYSMENU);
+ GdmSystemMenuReal = GdmSystemMenu = ve_config_get_bool (config, GDM_KEY_SYSTEM_MENU);
GdmChooserButtonReal = GdmChooserButton = ve_config_get_bool (config, GDM_KEY_CHOOSER_BUTTON);
GdmHalt = ve_config_get_string (config, GDM_KEY_HALT);
GdmReboot = ve_config_get_string (config, GDM_KEY_REBOOT);
@@ -911,9 +911,9 @@ gdm_login_parse_config (void)
GdmInfoMsgFile = ve_config_get_string (config, GDM_KEY_INFO_MSG_FILE);
GdmInfoMsgFont = ve_config_get_string (config, GDM_KEY_INFO_MSG_FONT);
GdmTitleBar = ve_config_get_bool (config, GDM_KEY_TITLE_BAR);
- GdmLocaleFile = ve_config_get_string (config, GDM_KEY_LOCFILE);
- GdmSessionDir = ve_config_get_string (config, GDM_KEY_SESSDIR);
- GdmDefaultSession = ve_config_get_string (config, GDM_KEY_DEFAULTSESSION);
+ GdmLocaleFile = ve_config_get_string (config, GDM_KEY_LOCALE_FILE);
+ GdmSessionDir = ve_config_get_string (config, GDM_KEY_SESSION_DESKTOP_DIR);
+ GdmDefaultSession = ve_config_get_string (config, GDM_KEY_DEFAULT_SESSION);
GdmWelcome = ve_config_get_translated_string (config, greeter_Welcome_key);
GdmDefaultWelcome = ve_config_get_bool (config, greeter_DefaultWelcome_key);
@@ -929,8 +929,8 @@ gdm_login_parse_config (void)
} else {
GdmDefaultWelcome = FALSE;
}
- } else if (strcmp (greeter_Welcome_key, GDM_KEY_REMOTEWELCOME) == 0) {
- if (strcmp (ve_sure_string (GdmWelcome), GDM_DEFAULT_REMOTEWELCOME_MSG) == 0) {
+ } else if (strcmp (greeter_Welcome_key, GDM_KEY_REMOTE_WELCOME) == 0) {
+ if (strcmp (ve_sure_string (GdmWelcome), GDM_DEFAULT_REMOTE_WELCOME_MSG) == 0) {
GdmDefaultWelcome = TRUE;
} else {
GdmDefaultWelcome = FALSE;
@@ -945,38 +945,38 @@ gdm_login_parse_config (void)
g_free (GdmWelcome);
GdmWelcome = g_strdup (_(GDM_DEFAULT_WELCOME_MSG));
} else if (GdmDefaultWelcome &&
- strcmp (greeter_Welcome_key, GDM_KEY_REMOTEWELCOME) == 0) {
+ strcmp (greeter_Welcome_key, GDM_KEY_REMOTE_WELCOME) == 0) {
g_free (GdmWelcome);
- GdmWelcome = g_strdup (_(GDM_DEFAULT_REMOTEWELCOME_MSG));
+ GdmWelcome = g_strdup (_(GDM_DEFAULT_REMOTE_WELCOME_MSG));
}
- GdmBackgroundProg = ve_config_get_string (config, GDM_KEY_BACKGROUNDPROG);
- GdmRunBackgroundProgAlways = ve_config_get_bool (config, GDM_KEY_RUNBACKGROUNDPROGALWAYS);
- GdmBackgroundProgInitialDelay = ve_config_get_int (config, GDM_KEY_BACKGROUNDPROGINITIALDELAY);
- GdmRestartBackgroundProgram = ve_config_get_bool (config, GDM_KEY_RESTARTBACKGROUNDPROG);
- GdmBackgroundProgRestartDelay = ve_config_get_int (config, GDM_KEY_BACKGROUNDPROGRESTARTDELAY);
- GdmBackgroundImage = ve_config_get_string (config, GDM_KEY_BACKGROUNDIMAGE);
- GdmBackgroundColor = ve_config_get_string (config, GDM_KEY_BACKGROUNDCOLOR);
- GdmBackgroundType = ve_config_get_int (config, GDM_KEY_BACKGROUNDTYPE);
- GdmBackgroundScaleToFit = ve_config_get_bool (config, GDM_KEY_BACKGROUNDSCALETOFIT);
- GdmBackgroundRemoteOnlyColor = ve_config_get_bool (config, GDM_KEY_BACKGROUNDREMOTEONLYCOLOR);
+ GdmBackgroundProg = ve_config_get_string (config, GDM_KEY_BACKGROUND_PROGRAM);
+ GdmRunBackgroundProgAlways = ve_config_get_bool (config, GDM_KEY_RUN_BACKGROUND_PROGRAM_ALWAYS);
+ GdmBackgroundProgInitialDelay = ve_config_get_int (config, GDM_KEY_BACKGROUND_PROGRAM_INITIAL_DELAY);
+ GdmRestartBackgroundProgram = ve_config_get_bool (config, GDM_KEY_RESTART_BACKGROUND_PROGRAM);
+ GdmBackgroundProgRestartDelay = ve_config_get_int (config, GDM_KEY_BACKGROUND_PROGRAM_RESTART_DELAY);
+ GdmBackgroundImage = ve_config_get_string (config, GDM_KEY_BACKGROUND_IMAGE);
+ GdmBackgroundColor = ve_config_get_string (config, GDM_KEY_BACKGROUND_COLOR);
+ GdmBackgroundType = ve_config_get_int (config, GDM_KEY_BACKGROUND_TYPE);
+ GdmBackgroundScaleToFit = ve_config_get_bool (config, GDM_KEY_BACKGROUND_SCALE_TO_FIT);
+ GdmBackgroundRemoteOnlyColor = ve_config_get_bool (config, GDM_KEY_BACKGROUND_REMOTE_ONLY_COLOR);
GdmGtkRC = ve_config_get_string (config, GDM_KEY_GTKRC);
- GdmIncludeAll = ve_config_get_bool (config, GDM_KEY_INCLUDEALL);
+ GdmIncludeAll = ve_config_get_bool (config, GDM_KEY_INCLUDE_ALL);
GdmInclude = ve_config_get_string (config, GDM_KEY_INCLUDE);
GdmExclude = ve_config_get_string (config, GDM_KEY_EXCLUDE);
- GdmMinimalUID = ve_config_get_int (config, GDM_KEY_MINIMALUID);
- GdmGlobalFaceDir = ve_config_get_string (config, GDM_KEY_FACEDIR);
+ GdmMinimalUID = ve_config_get_int (config, GDM_KEY_MINIMAL_UID);
+ GdmGlobalFaceDir = ve_config_get_string (config, GDM_KEY_FACE_DIR);
GdmDefaultFace = ve_config_get_string (config, GDM_KEY_FACE);
GdmDebug = ve_config_get_bool (config, GDM_KEY_DEBUG);
- GdmIconMaxWidth = ve_config_get_int (config, GDM_KEY_ICONWIDTH);
- GdmIconMaxHeight = ve_config_get_int (config, GDM_KEY_ICONHEIGHT);
- GdmXineramaScreen = ve_config_get_int (config, GDM_KEY_XINERAMASCREEN);
+ GdmIconMaxWidth = ve_config_get_int (config, GDM_KEY_ICON_WIDTH);
+ GdmIconMaxHeight = ve_config_get_int (config, GDM_KEY_ICON_HEIGHT);
+ GdmXineramaScreen = ve_config_get_int (config, GDM_KEY_XINERAMA_SCREEN);
GdmUseCirclesInEntry = ve_config_get_bool (config, GDM_KEY_ENTRY_CIRCLES);
GdmUseInvisibleInEntry = ve_config_get_bool (config, GDM_KEY_ENTRY_INVISIBLE);
GdmLockPosition = ve_config_get_bool (config, GDM_KEY_LOCK_POSITION);
GdmSetPosition = ve_config_get_bool (config, GDM_KEY_SET_POSITION);
- GdmPositionX = ve_config_get_int (config, GDM_KEY_POSITIONX);
- GdmPositionY = ve_config_get_int (config, GDM_KEY_POSITIONY);
+ GdmPositionX = ve_config_get_int (config, GDM_KEY_POSITION_X);
+ GdmPositionY = ve_config_get_int (config, GDM_KEY_POSITION_Y);
GdmAllowGtkThemeChange = ve_config_get_bool (config, GDM_KEY_ALLOW_GTK_THEME_CHANGE);
GdmGtkThemesToAllow = ve_config_get_string (config, GDM_KEY_GTK_THEMES_TO_ALLOW);
@@ -1878,14 +1878,14 @@ get_parent_display (void)
char *old_xauth = g_strdup (g_getenv ("XAUTHORITY"));
if (g_getenv ("GDM_PARENT_XAUTHORITY") != NULL)
{
- ve_setenv ("XAUTHORITY",
+ g_setenv ("XAUTHORITY",
g_getenv ("GDM_PARENT_XAUTHORITY"), TRUE);
}
dsp = XOpenDisplay (g_getenv ("GDM_PARENT_DISPLAY"));
if (old_xauth != NULL)
- ve_setenv ("XAUTHORITY", old_xauth, TRUE);
+ g_setenv ("XAUTHORITY", old_xauth, TRUE);
else
- ve_unsetenv ("XAUTHORITY");
+ g_unsetenv ("XAUTHORITY");
g_free (old_xauth);
}
@@ -3404,10 +3404,10 @@ gdm_reread_config (int sig, gpointer data)
! gdm_common_string_same (config, GdmInfoMsgFile, GDM_KEY_INFO_MSG_FILE) ||
! gdm_common_string_same (config, GdmInfoMsgFont, GDM_KEY_INFO_MSG_FONT) ||
! gdm_common_int_same (config,
- GdmXineramaScreen, GDM_KEY_XINERAMASCREEN) ||
- ! gdm_common_bool_same (config, GdmSystemMenu, GDM_KEY_SYSMENU) ||
+ GdmXineramaScreen, GDM_KEY_XINERAMA_SCREEN) ||
+ ! gdm_common_bool_same (config, GdmSystemMenu, GDM_KEY_SYSTEM_MENU) ||
! gdm_common_bool_same (config, GdmBrowser, GDM_KEY_BROWSER) ||
- ! gdm_common_bool_same (config, GdmIncludeAll, GDM_KEY_INCLUDEALL) ||
+ ! gdm_common_bool_same (config, GdmIncludeAll, GDM_KEY_INCLUDE_ALL) ||
! gdm_common_string_same (config, GdmInclude, GDM_KEY_INCLUDE) ||
! gdm_common_string_same (config, GdmExclude, GDM_KEY_EXCLUDE) ||
! gdm_common_bool_same (config, GdmConfigAvailable, GDM_KEY_CONFIG_AVAILABLE) ||
@@ -3424,20 +3424,20 @@ gdm_reread_config (int sig, gpointer data)
return TRUE;
}
- if ( ! gdm_common_string_same (config, GdmBackgroundImage, GDM_KEY_BACKGROUNDIMAGE) ||
- ! gdm_common_string_same (config, GdmBackgroundColor, GDM_KEY_BACKGROUNDCOLOR) ||
- ! gdm_common_int_same (config, GdmBackgroundType, GDM_KEY_BACKGROUNDTYPE) ||
+ if ( ! gdm_common_string_same (config, GdmBackgroundImage, GDM_KEY_BACKGROUND_IMAGE) ||
+ ! gdm_common_string_same (config, GdmBackgroundColor, GDM_KEY_BACKGROUND_COLOR) ||
+ ! gdm_common_int_same (config, GdmBackgroundType, GDM_KEY_BACKGROUND_TYPE) ||
! gdm_common_bool_same (config,
GdmBackgroundScaleToFit,
- GDM_KEY_BACKGROUNDSCALETOFIT) ||
+ GDM_KEY_BACKGROUND_SCALE_TO_FIT) ||
! gdm_common_bool_same (config,
GdmBackgroundRemoteOnlyColor,
- GDM_KEY_BACKGROUNDREMOTEONLYCOLOR)) {
- GdmBackgroundImage = ve_config_get_string (config, GDM_KEY_BACKGROUNDIMAGE);
- GdmBackgroundColor = ve_config_get_string (config, GDM_KEY_BACKGROUNDCOLOR);
- GdmBackgroundType = ve_config_get_int (config, GDM_KEY_BACKGROUNDTYPE);
- GdmBackgroundScaleToFit = ve_config_get_bool (config, GDM_KEY_BACKGROUNDSCALETOFIT);
- GdmBackgroundRemoteOnlyColor = ve_config_get_bool (config, GDM_KEY_BACKGROUNDREMOTEONLYCOLOR);
+ GDM_KEY_BACKGROUND_REMOTE_ONLY_COLOR)) {
+ GdmBackgroundImage = ve_config_get_string (config, GDM_KEY_BACKGROUND_IMAGE);
+ GdmBackgroundColor = ve_config_get_string (config, GDM_KEY_BACKGROUND_COLOR);
+ GdmBackgroundType = ve_config_get_int (config, GDM_KEY_BACKGROUND_TYPE);
+ GdmBackgroundScaleToFit = ve_config_get_bool (config, GDM_KEY_BACKGROUND_SCALE_TO_FIT);
+ GdmBackgroundRemoteOnlyColor = ve_config_get_bool (config, GDM_KEY_BACKGROUND_REMOTE_ONLY_COLOR);
gdm_kill_thingies ();
setup_background ();
@@ -3522,8 +3522,8 @@ gdm_reread_config (int sig, gpointer data)
} else {
GdmDefaultWelcome = FALSE;
}
- } else if (strcmp (greeter_Welcome_key, GDM_KEY_REMOTEWELCOME) == 0) {
- if (strcmp (ve_sure_string (GdmWelcome), GDM_DEFAULT_REMOTEWELCOME_MSG) == 0) {
+ } else if (strcmp (greeter_Welcome_key, GDM_KEY_REMOTE_WELCOME) == 0) {
+ if (strcmp (ve_sure_string (GdmWelcome), GDM_DEFAULT_REMOTE_WELCOME_MSG) == 0) {
GdmDefaultWelcome = TRUE;
} else {
GdmDefaultWelcome = FALSE;
@@ -3535,9 +3535,9 @@ gdm_reread_config (int sig, gpointer data)
if (strcmp (greeter_Welcome_key, GDM_KEY_WELCOME) == 0) {
g_free (GdmWelcome);
GdmWelcome = g_strdup (_(GDM_DEFAULT_WELCOME_MSG));
- } else if (strcmp (greeter_Welcome_key, GDM_KEY_REMOTEWELCOME) == 0) {
+ } else if (strcmp (greeter_Welcome_key, GDM_KEY_REMOTE_WELCOME) == 0) {
g_free (GdmWelcome);
- GdmWelcome = g_strdup (_(GDM_DEFAULT_REMOTEWELCOME_MSG));
+ GdmWelcome = g_strdup (_(GDM_DEFAULT_REMOTE_WELCOME_MSG));
}
resize = TRUE;
} else {
diff --git a/gui/gdmphotosetup.c b/gui/gdmphotosetup.c
index ef2da86c..65c219b5 100644
--- a/gui/gdmphotosetup.c
+++ b/gui/gdmphotosetup.c
@@ -489,12 +489,12 @@ main (int argc, char *argv[])
gnome_config_push_prefix (config_prefix);
face_browser = gnome_config_get_bool (GDM_KEY_BROWSER);
- max_size = gnome_config_get_int (GDM_KEY_MAXFILE);
- max_width = gnome_config_get_int (GDM_KEY_ICONWIDTH);
- max_height = gnome_config_get_int (GDM_KEY_ICONHEIGHT);
+ max_size = gnome_config_get_int (GDM_KEY_USER_MAX_FILE);
+ max_width = gnome_config_get_int (GDM_KEY_ICON_WIDTH);
+ max_height = gnome_config_get_int (GDM_KEY_ICON_HEIGHT);
greeter = gnome_config_get_string (GDM_KEY_GREETER);
- facedir = gnome_config_get_string (GDM_KEY_FACEDIR);
+ facedir = gnome_config_get_string (GDM_KEY_FACE_DIR);
gnome_config_pop_prefix ();
g_free (config_prefix);
diff --git a/gui/gdmsetup.c b/gui/gdmsetup.c
index aad29744..232fd7a0 100644
--- a/gui/gdmsetup.c
+++ b/gui/gdmsetup.c
@@ -477,7 +477,7 @@ xservers_get_server_definitions()
const char *sec = li->data;
if (strncmp (sec, GDM_KEY_SERVER_PREFIX,
strlen (GDM_KEY_SERVER_PREFIX)) == 0) {
- GdmXServer *svr = g_new0 (GdmXServer, 1);
+ GdmXserver *svr = g_new0 (GdmXserver, 1);
char buf[256];
svr->id = g_strdup (sec + strlen (GDM_KEY_SERVER_PREFIX));
@@ -513,7 +513,7 @@ xserver_update_delete_sensitivity()
GtkListStore *store;
GtkTreeIter iter;
GSList *xservers;
- GdmXServer *xserver;
+ GdmXserver *xserver;
gchar *text;
gchar *selected;
gboolean valid;
@@ -577,7 +577,7 @@ void init_servers_combobox (int index)
GtkWidget *flexible_checkbutton;
GtkListStore *store;
GSList *xservers;
- GdmXServer *xserver;
+ GdmXserver *xserver;
mod_combobox = glade_helper_get (xml_xservers, "xserver_mod_combobox",
GTK_TYPE_COMBO_BOX);
@@ -706,7 +706,7 @@ refresh_remote_tab (void)
local_style = gtk_combo_box_get_active (GTK_COMBO_BOX (local_greeter));
remote_style = ve_config_get_string (ve_config_get (config_file),
- GDM_KEY_REMOTEGREETER);
+ GDM_KEY_REMOTE_GREETER);
if (ve_config_get_bool (ve_config_get (config_file), GDM_KEY_XDMCP) == FALSE) {
@@ -827,7 +827,7 @@ combobox_timeout (GtkWidget *combo_box)
g_free (new_key_val);
}
/* Remote Greeter Comboboxes */
- else if (strcmp (key, GDM_KEY_REMOTEGREETER) == 0) {
+ else if (strcmp (key, GDM_KEY_REMOTE_GREETER) == 0) {
if (selected == REMOTE_DISABLED) {
ve_config_set_bool (config, GDM_KEY_XDMCP, FALSE);
@@ -870,7 +870,7 @@ combobox_timeout (GtkWidget *combo_box)
return FALSE;
}
/* Automatic Login Combobox */
- } else if (strcmp (key, GDM_KEY_AUTOMATICLOGIN) == 0 ||
+ } else if (strcmp (key, GDM_KEY_AUTOMATIC_LOGIN) == 0 ||
strcmp (key, GDM_KEY_TIMED_LOGIN) == 0) {
GtkTreeIter iter;
@@ -1019,7 +1019,7 @@ combobox_changed (GtkWidget *combobox)
gtk_widget_hide (local_themed_vbox);
}
}
- else if (strcmp (key, GDM_KEY_REMOTEGREETER) == 0) {
+ else if (strcmp (key, GDM_KEY_REMOTE_GREETER) == 0) {
GtkWidget *remote_plain_vbox;
GtkWidget *remote_themed_vbox;
@@ -1916,7 +1916,7 @@ browser_apply (GtkWidget *button, gpointer data)
GdmExclude = ve_config_get_string (ve_config_get (config_file),
GDM_KEY_EXCLUDE);
setup_user_combobox_list ("autologin_combo",
- GDM_KEY_AUTOMATICLOGIN);
+ GDM_KEY_AUTOMATIC_LOGIN);
setup_user_combobox_list ("timedlogin_combo",
GDM_KEY_TIMED_LOGIN);
gtk_widget_set_sensitive (button, FALSE);
@@ -2111,7 +2111,7 @@ greeter_toggle_timeout (GtkWidget *toggle)
if ( ! ve_bool_equal (val, GTK_TOGGLE_BUTTON (toggle)->active)) {
- if (strcmp (key, GDM_KEY_BACKGROUNDSCALETOFIT) == 0) {
+ if (strcmp (key, GDM_KEY_BACKGROUND_SCALE_TO_FIT) == 0) {
if (gtk_notebook_get_current_page (GTK_NOTEBOOK (setup_notebook)) == LOCAL_TAB) {
@@ -2208,19 +2208,19 @@ local_background_type_toggle_timeout (GtkWidget *toggle)
if (image_value == TRUE && color_value == TRUE) {
/* Image & color */
- ve_config_set_int (ve_config_get (config_file), GDM_KEY_BACKGROUNDTYPE, 1);
+ ve_config_set_int (ve_config_get (config_file), GDM_KEY_BACKGROUND_TYPE, 1);
}
else if (image_value == FALSE && color_value == TRUE) {
/* Color only */
- ve_config_set_int (ve_config_get (config_file), GDM_KEY_BACKGROUNDTYPE, 2);
+ ve_config_set_int (ve_config_get (config_file), GDM_KEY_BACKGROUND_TYPE, 2);
}
else if (image_value == TRUE && color_value == FALSE) {
/* Image only*/
- ve_config_set_int (ve_config_get (config_file), GDM_KEY_BACKGROUNDTYPE, 3);
+ ve_config_set_int (ve_config_get (config_file), GDM_KEY_BACKGROUND_TYPE, 3);
}
else {
/* No Background */
- ve_config_set_int (ve_config_get (config_file), GDM_KEY_BACKGROUNDTYPE, 0);
+ ve_config_set_int (ve_config_get (config_file), GDM_KEY_BACKGROUND_TYPE, 0);
}
ve_config_save (config, FALSE);
@@ -2244,7 +2244,7 @@ include_all_toggle (GtkWidget *toggle)
GdmIncludeAll = FALSE;
setup_user_combobox_list ("autologin_combo",
- GDM_KEY_AUTOMATICLOGIN);
+ GDM_KEY_AUTOMATIC_LOGIN);
setup_user_combobox_list ("timedlogin_combo",
GDM_KEY_TIMED_LOGIN);
}
@@ -2571,35 +2571,35 @@ xdmcp_button_clicked (void)
"xdmcp/PARAMETERS");
setup_xdmcp_intspin ("udpport",
- GDM_KEY_UDPPORT,
- GDM_KEY_UDPPORT);
+ GDM_KEY_UDP_PORT,
+ GDM_KEY_UDP_PORT);
setup_xdmcp_intspin ("maxpending",
- GDM_KEY_MAXPEND,
+ GDM_KEY_MAX_PENDING,
"xdmcp/PARAMETERS");
setup_xdmcp_intspin ("maxpendingindirect",
- GDM_KEY_MAXINDIR,
+ GDM_KEY_MAX_INDIRECT,
"xdmcp/PARAMETERS");
setup_xdmcp_intspin ("maxremotesessions",
- GDM_KEY_MAXSESS,
+ GDM_KEY_MAX_SESSIONS,
"xdmcp/PARAMETERS");
setup_xdmcp_intspin ("maxwait",
- GDM_KEY_MAXWAIT,
+ GDM_KEY_MAX_WAIT,
"xdmcp/PARAMETERS");
setup_xdmcp_intspin ("maxwaitindirect",
- GDM_KEY_MAXINDWAIT,
+ GDM_KEY_MAX_WAIT_INDIRECT,
"xdmcp/PARAMETERS");
setup_xdmcp_intspin ("displaysperhost",
- GDM_KEY_DISPERHOST,
+ GDM_KEY_DISPLAYS_PER_HOST,
"xdmcp/PARAMETERS");
setup_xdmcp_intspin ("pinginterval",
- GDM_KEY_PINGINTERVAL,
+ GDM_KEY_PING_INTERVAL,
"xdmcp/PARAMETERS");
}
gtk_dialog_run (GTK_DIALOG (dialog));
@@ -2670,7 +2670,7 @@ setup_greeter_combobox (const char *name,
}
}
/* Set initial state of remote style combo box. */
- else if (strcmp (key, GDM_KEY_REMOTEGREETER) == 0) {
+ else if (strcmp (key, GDM_KEY_REMOTE_GREETER) == 0) {
refresh_remote_tab ();
}
g_free (val);
@@ -2923,7 +2923,7 @@ static void
setup_users_tab (void)
{
setup_greeter_toggle ("fb_allusers",
- GDM_KEY_INCLUDEALL);
+ GDM_KEY_INCLUDE_ALL);
setup_face ();
}
@@ -4310,7 +4310,7 @@ xserver_entry_changed (GtkWidget *entry)
}
static void
-xserver_append_combobox(GdmXServer *xserver, GtkComboBox *combobox)
+xserver_append_combobox(GdmXserver *xserver, GtkComboBox *combobox)
{
gtk_combo_box_append_text (combobox, xserver->id);
}
@@ -4849,13 +4849,13 @@ setup_security_tab (void)
/* Setup Local administrator login setttings */
setup_notify_toggle ("allowroot",
- GDM_KEY_ALLOWROOT,
- GDM_KEY_ALLOWROOT);
+ GDM_KEY_ALLOW_ROOT,
+ GDM_KEY_ALLOW_ROOT);
/* Setup Remote administrator login setttings */
setup_notify_toggle ("allowremoteroot",
- GDM_KEY_ALLOWREMOTEROOT,
- GDM_KEY_ALLOWREMOTEROOT);
+ GDM_KEY_ALLOW_REMOTE_ROOT,
+ GDM_KEY_ALLOW_REMOTE_ROOT);
/* Setup Enable debug message to system log */
setup_notify_toggle ("enable_debug",
@@ -4864,13 +4864,13 @@ setup_security_tab (void)
/* Setup Deny TCP connections to Xserver */
setup_notify_toggle ("disallow_tcp",
- GDM_KEY_DISALLOWTCP,
- GDM_KEY_DISALLOWTCP);
+ GDM_KEY_DISALLOW_TCP,
+ GDM_KEY_DISALLOW_TCP);
/* Setup Retry delay */
setup_intspin ("retry_delay",
- GDM_KEY_RETRYDELAY,
- GDM_KEY_RETRYDELAY);
+ GDM_KEY_RETRY_DELAY,
+ GDM_KEY_RETRY_DELAY);
/* Bold the Enable automatic login label */
checkbox = glade_helper_get (xml, "autologin",
@@ -4886,9 +4886,9 @@ setup_security_tab (void)
/* Setup Enable automatic login */
setup_user_combobox ("autologin_combo",
- GDM_KEY_AUTOMATICLOGIN);
+ GDM_KEY_AUTOMATIC_LOGIN);
setup_notify_toggle ("autologin",
- GDM_KEY_AUTOMATICLOGIN_ENABLE,
+ GDM_KEY_AUTOMATIC_LOGIN_ENABLE,
NULL);
/* Setup Enable timed login */
@@ -4903,8 +4903,8 @@ setup_security_tab (void)
/* Setup Allow remote timed logins */
setup_notify_toggle ("allowremoteauto",
- GDM_KEY_ALLOWREMOTEAUTOLOGIN,
- GDM_KEY_ALLOWREMOTEAUTOLOGIN);
+ GDM_KEY_ALLOW_REMOTE_AUTOLOGIN,
+ GDM_KEY_ALLOW_REMOTE_AUTOLOGIN);
/* Setup Configure XDMCP button */
XDMCPbutton = glade_helper_get (xml, "config_xserverbutton",
@@ -5352,21 +5352,21 @@ hookup_plain_background (void)
GTK_TYPE_CHECK_BUTTON);
setup_greeter_color ("local_background_colorbutton",
- GDM_KEY_BACKGROUNDCOLOR);
+ GDM_KEY_BACKGROUND_COLOR);
setup_greeter_toggle ("sg_scale_background",
- GDM_KEY_BACKGROUNDSCALETOFIT);
+ GDM_KEY_BACKGROUND_SCALE_TO_FIT);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (image_scale_to_fit),
ve_config_get_bool (ve_config_get (config_file),
- GDM_KEY_BACKGROUNDSCALETOFIT));
+ GDM_KEY_BACKGROUND_SCALE_TO_FIT));
background_filename = ve_config_get_string (ve_config_get (config_file),
- GDM_KEY_BACKGROUNDIMAGE);
+ GDM_KEY_BACKGROUND_IMAGE);
gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (image_filechooser),
background_filename);
- switch (ve_config_get_int (ve_config_get (config_file), GDM_KEY_BACKGROUNDTYPE)) {
+ switch (ve_config_get_int (ve_config_get (config_file), GDM_KEY_BACKGROUND_TYPE)) {
case BACKGROUND_IMAGE_AND_COLOR: {
/* Image & Color background type */
@@ -5429,19 +5429,19 @@ hookup_plain_background (void)
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (image_filechooser), filter);
g_object_set_data (G_OBJECT (color_radiobutton), "key",
- GDM_KEY_BACKGROUNDTYPE);
+ GDM_KEY_BACKGROUND_TYPE);
g_object_set_data (G_OBJECT (color_colorbutton), "key",
- GDM_KEY_BACKGROUNDCOLOR);
+ GDM_KEY_BACKGROUND_COLOR);
g_object_set_data (G_OBJECT (image_radiobutton), "key",
- GDM_KEY_BACKGROUNDTYPE);
+ GDM_KEY_BACKGROUND_TYPE);
g_object_set_data (G_OBJECT (image_filechooser), "key",
- GDM_KEY_BACKGROUNDIMAGE);
+ GDM_KEY_BACKGROUND_IMAGE);
g_object_set_data (G_OBJECT (image_scale_to_fit), "key",
- GDM_KEY_BACKGROUNDSCALETOFIT);
+ GDM_KEY_BACKGROUND_SCALE_TO_FIT);
g_signal_connect (G_OBJECT (image_radiobutton), "toggled",
G_CALLBACK (local_background_type_toggled), NULL);
@@ -5552,8 +5552,8 @@ setup_plain_menubar (void)
{
/* Initialize and hookup callbacks for plain menu bar settings */
setup_notify_toggle ("sysmenu",
- GDM_KEY_SYSMENU,
- GDM_KEY_SYSMENU /* notify_key */);
+ GDM_KEY_SYSTEM_MENU,
+ GDM_KEY_SYSTEM_MENU /* notify_key */);
setup_notify_toggle ("config_available",
GDM_KEY_CONFIG_AVAILABLE,
GDM_KEY_CONFIG_AVAILABLE /* notify_key */);
@@ -5579,10 +5579,10 @@ setup_remote_welcome_message (void)
{
/* Initialize and hookup callbacks for local welcome message settings */
setup_greeter_toggle ("sg_defaultwelcomeremote",
- GDM_KEY_DEFAULT_REMOTEWELCOME);
+ GDM_KEY_DEFAULT_REMOTE_WELCOME);
setup_greeter_untranslate_entry ("welcomeremote",
- GDM_KEY_REMOTEWELCOME);
+ GDM_KEY_REMOTE_WELCOME);
}
static void
@@ -5646,24 +5646,24 @@ hookup_remote_plain_background (void)
GTK_TYPE_CHECK_BUTTON);
setup_greeter_color ("remote_background_colorbutton",
- GDM_KEY_BACKGROUNDCOLOR);
+ GDM_KEY_BACKGROUND_COLOR);
setup_greeter_toggle ("sg_scale_background_remote",
- GDM_KEY_BACKGROUNDSCALETOFIT);
+ GDM_KEY_BACKGROUND_SCALE_TO_FIT);
setup_greeter_toggle ("sg_remote_color_only",
- GDM_KEY_BACKGROUNDREMOTEONLYCOLOR);
+ GDM_KEY_BACKGROUND_REMOTE_ONLY_COLOR);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (image_scale_to_fit),
ve_config_get_bool (ve_config_get (config_file),
- GDM_KEY_BACKGROUNDSCALETOFIT));
+ GDM_KEY_BACKGROUND_SCALE_TO_FIT));
background_filename = ve_config_get_string (ve_config_get (config_file),
- GDM_KEY_BACKGROUNDIMAGE);
+ GDM_KEY_BACKGROUND_IMAGE);
gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (image_filechooser),
background_filename);
- switch (ve_config_get_int (ve_config_get (config_file), GDM_KEY_BACKGROUNDTYPE)) {
+ switch (ve_config_get_int (ve_config_get (config_file), GDM_KEY_BACKGROUND_TYPE)) {
case BACKGROUND_IMAGE_AND_COLOR: {
/* Image & Color background type */
@@ -5726,19 +5726,19 @@ hookup_remote_plain_background (void)
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (image_filechooser), filter);
g_object_set_data (G_OBJECT (color_radiobutton), "key",
- GDM_KEY_BACKGROUNDTYPE);
+ GDM_KEY_BACKGROUND_TYPE);
g_object_set_data (G_OBJECT (color_colorbutton), "key",
- GDM_KEY_BACKGROUNDCOLOR);
+ GDM_KEY_BACKGROUND_COLOR);
g_object_set_data (G_OBJECT (image_radiobutton), "key",
- GDM_KEY_BACKGROUNDTYPE);
+ GDM_KEY_BACKGROUND_TYPE);
g_object_set_data (G_OBJECT (image_filechooser), "key",
- GDM_KEY_BACKGROUNDIMAGE);
+ GDM_KEY_BACKGROUND_IMAGE);
g_object_set_data (G_OBJECT (image_scale_to_fit), "key",
- GDM_KEY_BACKGROUNDSCALETOFIT);
+ GDM_KEY_BACKGROUND_SCALE_TO_FIT);
g_signal_connect (G_OBJECT (image_radiobutton), "toggled",
G_CALLBACK (local_background_type_toggled), NULL);
@@ -5866,7 +5866,7 @@ setup_remote_plain_settings (void)
/* Style setting */
setup_greeter_combobox ("remote_greeter",
- GDM_KEY_REMOTEGREETER);
+ GDM_KEY_REMOTE_GREETER);
/* Plain background settings */
hookup_remote_plain_background ();
@@ -6321,13 +6321,13 @@ main (int argc, char *argv[])
/* XXX: the setup proggie using a greeter config var for it's
* ui? Say it ain't so. Our config sections are SUCH A MESS */
GdmIconMaxHeight = ve_config_get_int (ve_config_get (config_file),
- GDM_KEY_ICONHEIGHT);
+ GDM_KEY_ICON_HEIGHT);
GdmIconMaxWidth = ve_config_get_int (ve_config_get (config_file),
- GDM_KEY_ICONWIDTH);
+ GDM_KEY_ICON_WIDTH);
GdmMinimalUID = ve_config_get_int (ve_config_get (config_file),
- GDM_KEY_MINIMALUID);
+ GDM_KEY_MINIMAL_UID);
GdmIncludeAll = ve_config_get_bool (ve_config_get (config_file),
- GDM_KEY_INCLUDEALL);
+ GDM_KEY_INCLUDE_ALL);
GdmInclude = ve_config_get_string (ve_config_get (config_file),
GDM_KEY_INCLUDE);
GdmExclude = ve_config_get_string (ve_config_get (config_file),
@@ -6335,9 +6335,9 @@ main (int argc, char *argv[])
GdmSoundProgram = ve_config_get_string (ve_config_get (config_file),
GDM_KEY_SOUND_PROGRAM);
GdmAllowRoot = ve_config_get_bool (ve_config_get (config_file),
- GDM_KEY_ALLOWROOT);
+ GDM_KEY_ALLOW_ROOT);
GdmAllowRemoteRoot = ve_config_get_bool (ve_config_get (config_file),
- GDM_KEY_ALLOWREMOTEROOT);
+ GDM_KEY_ALLOW_REMOTE_ROOT);
if (ve_string_empty (GdmSoundProgram) ||
access (GdmSoundProgram, X_OK) != 0) {
g_free (GdmSoundProgram);
diff --git a/gui/greeter/greeter.c b/gui/greeter/greeter.c
index 63f4b035..55dc3ea3 100644
--- a/gui/greeter/greeter.c
+++ b/gui/greeter/greeter.c
@@ -185,9 +185,9 @@ greeter_parse_config (void)
}
if (ve_string_empty (g_getenv ("GDM_IS_LOCAL"))) {
- greeter_Welcome_key = GDM_KEY_REMOTEWELCOME;
- greeter_DefaultWelcome_key = GDM_KEY_DEFAULT_REMOTEWELCOME;
- greeter_DefaultWelcomeBacktest_key = GDM_KEY_DEFAULT_REMOTEWELCOME_BACKTEST;
+ greeter_Welcome_key = GDM_KEY_REMOTE_WELCOME;
+ greeter_DefaultWelcome_key = GDM_KEY_DEFAULT_REMOTE_WELCOME;
+ greeter_DefaultWelcomeBacktest_key = GDM_KEY_DEFAULT_REMOTE_WELCOME_BACKTEST;
} else {
greeter_Welcome_key = GDM_KEY_WELCOME;
greeter_DefaultWelcome_key = GDM_KEY_DEFAULT_WELCOME;
@@ -219,17 +219,17 @@ greeter_parse_config (void)
g_free (GdmGraphicalThemeDir);
GdmGraphicalThemeDir = g_strdup (GREETERTHEMEDIR);
}
- GdmXineramaScreen = ve_config_get_int (config, GDM_KEY_XINERAMASCREEN);
+ GdmXineramaScreen = ve_config_get_int (config, GDM_KEY_XINERAMA_SCREEN);
GdmUseCirclesInEntry = ve_config_get_bool (config, GDM_KEY_ENTRY_CIRCLES);
GdmUseInvisibleInEntry = ve_config_get_bool (config, GDM_KEY_ENTRY_INVISIBLE);
GdmShowXtermFailsafeSession = ve_config_get_bool (config, GDM_KEY_SHOW_XTERM_FAILSAFE);
GdmShowGnomeFailsafeSession = ve_config_get_bool (config, GDM_KEY_SHOW_GNOME_FAILSAFE);
GdmShowLastSession = ve_config_get_bool (config, GDM_KEY_SHOW_LAST_SESSION);
- GdmSessionDir = ve_config_get_string (config, GDM_KEY_SESSDIR);
- GdmDefaultSession = ve_config_get_string (config, GDM_KEY_DEFAULTSESSION);
- GdmLocaleFile = ve_config_get_string (config, GDM_KEY_LOCFILE);
- GdmSystemMenu = ve_config_get_bool (config, GDM_KEY_SYSMENU);
+ GdmSessionDir = ve_config_get_string (config, GDM_KEY_SESSION_DESKTOP_DIR);
+ GdmDefaultSession = ve_config_get_string (config, GDM_KEY_DEFAULT_SESSION);
+ GdmLocaleFile = ve_config_get_string (config, GDM_KEY_LOCALE_FILE);
+ GdmSystemMenu = ve_config_get_bool (config, GDM_KEY_SYSTEM_MENU);
GdmConfigAvailable = ve_config_get_bool (config, GDM_KEY_CONFIG_AVAILABLE);
GdmChooserButton = ve_config_get_bool (config, GDM_KEY_CHOOSER_BUTTON);
GdmHalt = ve_config_get_string (config, GDM_KEY_HALT);
@@ -238,7 +238,7 @@ greeter_parse_config (void)
GdmConfigurator = ve_config_get_string (config, GDM_KEY_CONFIGURATOR);
GdmGtkRC = ve_config_get_string (config, GDM_KEY_GTKRC);
GdmGtkTheme = ve_config_get_string (config, GDM_KEY_GTK_THEME);
- GdmServAuthDir = ve_config_get_string (config, GDM_KEY_SERVAUTH);
+ GdmServAuthDir = ve_config_get_string (config, GDM_KEY_SERV_AUTHDIR);
GdmInfoMsgFile = ve_config_get_string (config, GDM_KEY_INFO_MSG_FILE);
GdmInfoMsgFont = ve_config_get_string (config, GDM_KEY_INFO_MSG_FONT);
@@ -258,7 +258,7 @@ greeter_parse_config (void)
if (GdmDefaultWelcomeBacktest == FALSE) {
if (strcmp (ve_sure_string (GdmWelcome), GDM_DEFAULT_WELCOME_MSG) == 0)
GdmDefaultWelcome == TRUE;
- else if (strcmp (ve_sure_string (GdmWelcome), GDM_DEFAULT_REMOTEWELCOME_MSG) == 0)
+ else if (strcmp (ve_sure_string (GdmWelcome), GDM_DEFAULT_REMOTE_WELCOME_MSG) == 0)
GdmDefaultWelcome == TRUE;
else
GdmDefaultWelcome = FALSE;
@@ -269,18 +269,18 @@ greeter_parse_config (void)
if (GdmDefaultWelcome && strcmp (greeter_Welcome_key, GDM_KEY_WELCOME) == 0) {
g_free (GdmWelcome);
GdmWelcome = g_strdup (_(GDM_DEFAULT_WELCOME_MSG));
- } else if (GdmDefaultWelcome && strcmp (greeter_Welcome_key, GDM_KEY_REMOTEWELCOME) == 0) {
+ } else if (GdmDefaultWelcome && strcmp (greeter_Welcome_key, GDM_KEY_REMOTE_WELCOME) == 0) {
g_free (GdmWelcome);
- GdmWelcome = g_strdup (_(GDM_DEFAULT_REMOTEWELCOME_MSG));
+ GdmWelcome = g_strdup (_(GDM_DEFAULT_REMOTE_WELCOME_MSG));
}
GdmTimedLoginEnable = ve_config_get_bool (config, GDM_KEY_TIMED_LOGIN_ENABLE);
- GdmIncludeAll = ve_config_get_bool (config, GDM_KEY_INCLUDEALL);
+ GdmIncludeAll = ve_config_get_bool (config, GDM_KEY_INCLUDE_ALL);
GdmInclude = ve_config_get_string (config, GDM_KEY_INCLUDE);
GdmExclude = ve_config_get_string (config, GDM_KEY_EXCLUDE);
- GdmMinimalUID = ve_config_get_int (config, GDM_KEY_MINIMALUID);
- GdmAllowRoot = ve_config_get_bool (config, GDM_KEY_ALLOWROOT);
- GdmAllowRemoteRoot = ve_config_get_bool (config, GDM_KEY_ALLOWREMOTEROOT);
+ GdmMinimalUID = ve_config_get_int (config, GDM_KEY_MINIMAL_UID);
+ GdmAllowRoot = ve_config_get_bool (config, GDM_KEY_ALLOW_ROOT);
+ GdmAllowRemoteRoot = ve_config_get_bool (config, GDM_KEY_ALLOW_REMOTE_ROOT);
GdmTimedLoginDelay = ve_config_get_int (config, GDM_KEY_TIMED_LOGIN_DELAY);
/* Note: TimedLogin here is not gotten out of the config
@@ -312,9 +312,9 @@ greeter_parse_config (void)
GdmUse24Clock = gdm_common_select_time_format (config);
- GdmIconMaxWidth = ve_config_get_int (config, GDM_KEY_ICONWIDTH);
- GdmIconMaxHeight = ve_config_get_int (config, GDM_KEY_ICONHEIGHT);
- GdmGlobalFaceDir = ve_config_get_string (config, GDM_KEY_FACEDIR);
+ GdmIconMaxWidth = ve_config_get_int (config, GDM_KEY_ICON_WIDTH);
+ GdmIconMaxHeight = ve_config_get_int (config, GDM_KEY_ICON_HEIGHT);
+ GdmGlobalFaceDir = ve_config_get_string (config, GDM_KEY_FACE_DIR);
GdmDefaultFace = ve_config_get_string (config, GDM_KEY_FACE);
GdmSoundProgram = ve_config_get_string (config, GDM_KEY_SOUND_PROGRAM);
@@ -952,17 +952,17 @@ greeter_reread_config (int sig, gpointer data)
strcmp (theme_dir, GdmGraphicalThemeDir) != 0 ||
! gdm_common_string_same (config, GdmGtkRC, GDM_KEY_GTKRC) ||
! gdm_common_string_same (config, GdmGtkTheme, GDM_KEY_GTK_THEME) ||
- ! gdm_common_int_same (config, GdmXineramaScreen, GDM_KEY_XINERAMASCREEN) ||
+ ! gdm_common_int_same (config, GdmXineramaScreen, GDM_KEY_XINERAMA_SCREEN) ||
! gdm_common_bool_same (config, GdmUseCirclesInEntry, GDM_KEY_ENTRY_CIRCLES) ||
! gdm_common_bool_same (config, GdmUseInvisibleInEntry, GDM_KEY_ENTRY_INVISIBLE) ||
! gdm_common_bool_same (config, GdmShowXtermFailsafeSession, GDM_KEY_SHOW_XTERM_FAILSAFE) ||
! gdm_common_bool_same (config, GdmShowGnomeFailsafeSession, GDM_KEY_SHOW_GNOME_FAILSAFE) ||
- ! gdm_common_bool_same (config, GdmIncludeAll, GDM_KEY_INCLUDEALL) ||
+ ! gdm_common_bool_same (config, GdmIncludeAll, GDM_KEY_INCLUDE_ALL) ||
! gdm_common_string_same (config, GdmInclude, GDM_KEY_INCLUDE) ||
! gdm_common_string_same (config, GdmExclude, GDM_KEY_EXCLUDE) ||
- ! gdm_common_string_same (config, GdmSessionDir, GDM_KEY_SESSDIR) ||
- ! gdm_common_string_same (config, GdmLocaleFile, GDM_KEY_LOCFILE) ||
- ! gdm_common_bool_same (config, GdmSystemMenu, GDM_KEY_SYSMENU) ||
+ ! gdm_common_string_same (config, GdmSessionDir, GDM_KEY_SESSION_DESKTOP_DIR) ||
+ ! gdm_common_string_same (config, GdmLocaleFile, GDM_KEY_LOCALE_FILE) ||
+ ! gdm_common_bool_same (config, GdmSystemMenu, GDM_KEY_SYSTEM_MENU) ||
! gdm_common_string_same (config, GdmHalt, GDM_KEY_HALT) ||
! gdm_common_string_same (config, GdmReboot, GDM_KEY_REBOOT) ||
! gdm_common_string_same (config, GdmSuspend, GDM_KEY_SUSPEND) ||
@@ -1016,7 +1016,7 @@ greeter_reread_config (int sig, gpointer data)
if (GdmDefaultWelcomeBacktest == FALSE) {
if (strcmp (ve_sure_string (GdmWelcome), GDM_DEFAULT_WELCOME_MSG) == 0)
GdmDefaultWelcome == TRUE;
- else if (strcmp (ve_sure_string (GdmWelcome), GDM_DEFAULT_REMOTEWELCOME_MSG) == 0)
+ else if (strcmp (ve_sure_string (GdmWelcome), GDM_DEFAULT_REMOTE_WELCOME_MSG) == 0)
GdmDefaultWelcome == TRUE;
else
GdmDefaultWelcome = FALSE;
@@ -1026,9 +1026,9 @@ greeter_reread_config (int sig, gpointer data)
if (strcmp (greeter_Welcome_key, GDM_KEY_WELCOME) == 0) {
g_free (GdmWelcome);
GdmWelcome = g_strdup (_(GDM_DEFAULT_WELCOME_MSG));
- } else if (strcmp (greeter_Welcome_key, GDM_KEY_REMOTEWELCOME) == 0) {
+ } else if (strcmp (greeter_Welcome_key, GDM_KEY_REMOTE_WELCOME) == 0) {
g_free (GdmWelcome);
- GdmWelcome = g_strdup (_(GDM_DEFAULT_REMOTEWELCOME_MSG));
+ GdmWelcome = g_strdup (_(GDM_DEFAULT_REMOTE_WELCOME_MSG));
}
if (welcome_string_info != NULL) {
@@ -1285,7 +1285,7 @@ main (int argc, char *argv[])
bg_color = ve_config_get_string (config, GDM_KEY_GRAPHICAL_THEME_COLOR);
/* If a graphical theme color does not exist fallback to the plain color */
if (ve_string_empty (bg_color)) {
- bg_color = ve_config_get_string (config, GDM_KEY_BACKGROUNDCOLOR);
+ bg_color = ve_config_get_string (config, GDM_KEY_BACKGROUND_COLOR);
}
setup_background_color (bg_color);
greeter_session_init ();
diff --git a/gui/greeter/greeter_item_capslock.c b/gui/greeter/greeter_item_capslock.c
index cdfbcbce..a9646f18 100644
--- a/gui/greeter/greeter_item_capslock.c
+++ b/gui/greeter/greeter_item_capslock.c
@@ -48,14 +48,14 @@ get_parent_display (void)
char *old_xauth = g_strdup (g_getenv ("XAUTHORITY"));
if (g_getenv ("GDM_PARENT_XAUTHORITY") != NULL)
{
- ve_setenv ("XAUTHORITY",
- g_getenv ("GDM_PARENT_XAUTHORITY"), TRUE);
+ g_setenv ("XAUTHORITY",
+ g_getenv ("GDM_PARENT_XAUTHORITY"), TRUE);
}
dsp = XOpenDisplay (g_getenv ("GDM_PARENT_DISPLAY"));
if (old_xauth != NULL)
- ve_setenv ("XAUTHORITY", old_xauth, TRUE);
+ g_setenv ("XAUTHORITY", old_xauth, TRUE);
else
- ve_unsetenv ("XAUTHORITY");
+ g_unsetenv ("XAUTHORITY");
g_free (old_xauth);
}
diff --git a/utils/gdm-dmx-reconnect-proxy.c b/utils/gdm-dmx-reconnect-proxy.c
index 61a581c3..60ff683a 100644
--- a/utils/gdm-dmx-reconnect-proxy.c
+++ b/utils/gdm-dmx-reconnect-proxy.c
@@ -66,7 +66,7 @@ get_dmx_display (const char *display_name,
const char *old_authfile;
old_authfile = getenv ("XAUTHORITY");
- ve_setenv ("XAUTHORITY", authfile, TRUE);
+ g_setenv ("XAUTHORITY", authfile, TRUE);
if ((display = XOpenDisplay (display_name)) == NULL)
g_printerr (_("Failed to open display \"%s\"\n"), display_name);
@@ -78,7 +78,7 @@ get_dmx_display (const char *display_name,
display = NULL;
}
- ve_setenv ("XAUTHORITY", old_authfile, TRUE);
+ g_setenv ("XAUTHORITY", old_authfile, TRUE);
return display;
}