diff options
author | George Lebl <jirka@5z.com> | 2002-08-23 18:00:00 +0000 |
---|---|---|
committer | George Lebl <jirka@src.gnome.org> | 2002-08-23 18:00:00 +0000 |
commit | 6028ae111b90eb8da0b75b46aed73dfbc37980fd (patch) | |
tree | 850534a3bcab03a976a5052b66f7aa3ad09bea26 | |
parent | 9625066537a642c82a42e9b8c9c15cad759198ae (diff) | |
download | gdm-6028ae111b90eb8da0b75b46aed73dfbc37980fd.tar.gz |
Whack DefaultLocale as that setting was on crack to begin with. If the
Fri Aug 23 11:04:38 2002 George Lebl <jirka@5z.com>
* daemon/gdm.[ch], daemon/slave.c, gui/gdmlogin.c,
gui/greeter/greeter.c: Whack DefaultLocale as that
setting was on crack to begin with. If the system default
is being used just don't set anything. If you want gdm
to use some language other then the system default, change
the gdm startup script, but that doesn't seem to make much
sense. Check for language existance and if it doesn't exist
use the system default. Now bsd and non-bsd language setup
is not different (And is still bsd-setusercontext-nice).
Whack the unaliasing of languages. That was complete nonsense,
* daemon/auth.c: when UserAuthDir is ~ make it the home dir,
when it starts with ~/, prepend the home dir. This actually
makes this setting usable
* config/gdm.conf.in: lot more documentation comments. I really
REALLY should write docs for gdm at some point.
* gui/gdmchooser.c: also accept <host>.png as host images. That's
really a lot more sane and nicer.
-rw-r--r-- | ChangeLog | 23 | ||||
-rw-r--r-- | NEWS | 19 | ||||
-rw-r--r-- | config/gdm.conf.in | 79 | ||||
-rw-r--r-- | daemon/auth.c | 24 | ||||
-rw-r--r-- | daemon/gdm.c | 2 | ||||
-rw-r--r-- | daemon/gdm.h | 1 | ||||
-rw-r--r-- | daemon/slave.c | 98 | ||||
-rw-r--r-- | gui/gdmchooser.c | 4 | ||||
-rw-r--r-- | gui/gdmlogin.c | 11 | ||||
-rw-r--r-- | gui/greeter/greeter.c | 14 |
10 files changed, 159 insertions, 116 deletions
@@ -1,3 +1,26 @@ +Fri Aug 23 11:04:38 2002 George Lebl <jirka@5z.com> + + * daemon/gdm.[ch], daemon/slave.c, gui/gdmlogin.c, + gui/greeter/greeter.c: Whack DefaultLocale as that + setting was on crack to begin with. If the system default + is being used just don't set anything. If you want gdm + to use some language other then the system default, change + the gdm startup script, but that doesn't seem to make much + sense. Check for language existance and if it doesn't exist + use the system default. Now bsd and non-bsd language setup + is not different (And is still bsd-setusercontext-nice). + Whack the unaliasing of languages. That was complete nonsense, + + * daemon/auth.c: when UserAuthDir is ~ make it the home dir, + when it starts with ~/, prepend the home dir. This actually + makes this setting usable + + * config/gdm.conf.in: lot more documentation comments. I really + REALLY should write docs for gdm at some point. + + * gui/gdmchooser.c: also accept <host>.png as host images. That's + really a lot more sane and nicer. + Fri Aug 23 01:56:21 2002 George Lebl <jirka@5z.com> * configure.in, NEWS: prepare for 2.4.0.9 @@ -16,8 +16,27 @@ Ahh news... each language. We also don't list locales that don't work. This way by default we can use the .utf8 locales if they exist. +- DefaultLocale no longer exists, the system setup is used. This + was really broken. + +- We no longer setup locale to a language which doesn't exist. + We also don't unalias languages as this was broken. Just pick + an existing language (I doubt anyone has a setting which requires + unaliasing anyway) + +- More comments in the default config file as a bad excuse for + documentation + +- The chooser can also read <host>.png from the host image + directory and not just <host> + +- UserAuthDir can now use the ~/ prefix so that this setting can + now be useful. But better left empty anyway. + - A bunch of minor fixes and cleanup. +- Translation updates (Christian Neumair) + 2.4.0.8 stuff: - New script to aid in testing graphical greeter themes, gdmthemetester. diff --git a/config/gdm.conf.in b/config/gdm.conf.in index 356a87de..1eefd5ba 100644 --- a/config/gdm.conf.in +++ b/config/gdm.conf.in @@ -74,9 +74,13 @@ XKeepsCrashing=@EXPANDED_SYSCONFDIR@/gdm/XKeepsCrashing RebootCommand=/sbin/shutdown -r now;/usr/sbin/shutdown -r now HaltCommand=/usr/bin/poweroff;/sbin/poweroff;/sbin/shutdown -h now;/usr/sbin/shutdown -h now SuspendCommand= +# Probably should not touch the below this is the standard setup ServAuthDir=@EXPANDED_AUTHDIR@ SessionDir=@EXPANDED_SYSCONFDIR@/gdm/Sessions/ +# Better leave this blank and HOME will be used. You can use syntax ~/ below +# to indicate home directory of the user UserAuthDir= +# Fallback if home directory not writable UserAuthFBDir=/tmp UserAuthFile=.Xauthority # The X server to use if we can't figure out what else to run. @@ -100,70 +104,126 @@ AllowRoot=true AllowRemoteRoot=true # This will allow remote timed login AllowRemoteAutoLogin=false +# 0 is the most anal, 1 allows group write permissions, 2 allows all write permissions RelaxPermissions=0 RetryDelay=3 +# Maximum size of a file we wish to read. This makes it hard for a user to DoS us +# by using a large file. UserMaxFile=65536 +# Maximum size of the session file. This is larger because it matters less as we +# never keep it all in memory. Just has an upper limit so that we don't go into too +# long of a loop SessionMaxFile=524388 +# XDMCP is the protocol that allows remote login. If you want to log into +# gdm remotely (I'd never turn this on on open network, use ssh for such +# remote usage that). You can then run X with -query <thishost> to log in, +# or -indirect <thishost> to run a chooser. Look for the 'Terminal' server +# type at the bottom of this config file. [xdmcp] # Distributions: Ship with this off. It is never a safe thing to leave # out on the net. Alternatively you can set up /etc/hosts.allow and # /etc/hosts.deny to only allow say local access. Enable=false +# Honour indirect queries, we run a chooser for these, and then redirect +# the user to the chosen host. Otherwise we just log the user in locally. HonorIndirect=true +# Maximum pending requests MaxPending=4 MaxPendingIndirect=4 +# Maximum open XDMCP sessions at any point in time MaxSessions=16 +# Maximum wait times MaxWait=15 MaxWaitIndirect=15 +# How many times can a person log in from a single host. Usually better to +# keep at 1 to fend off DoS attacks by running many logins from a single +# host DisplaysPerHost=1 +# The port. 177 is the standard port so better keep it that way Port=177 # Willing script, none is shipped and by default we'll send -# hostname system id +# hostname system id. But if you supply something here, the +# output of this script will be sent as status of this host so that +# the chooser can display it. You could for example send load, +# or mail details for some user, or some such. Willing=@EXPANDED_SYSCONFDIR@/gdm/Xwilling [gui] +# The 'theme'. By default we're using the default gtk theme +# Of course assuming that gtk got installed in the same prefix, +# if not change this. GtkRC=@EXPANDED_DATADIR@/themes/Default/gtk/gtkrc +# Maximum size of an icon, larger icons are scaled down MaxIconWidth=128 MaxIconHeight=128 [greeter] +# Greeter has a nice title bar that the user can move TitleBar=true +# Configuration is available from the system menu of the greeter ConfigAvailable=true +# Face browser is enabled. This only works currently for the +# standard greeter as it is not yet enabled in the graphical greeter. Browser=false +# The default picture in the browser DefaultFace=@EXPANDED_PIXMAPDIR@/nobody.png -DefaultLocale=en_US # These are things excluded from the face browser, not from logging in Exclude=bin,daemon,adm,lp,sync,shutdown,halt,mail,news,uucp,operator,nobody,gdm,postgres,pvm,rpm # As an alternative to the above this is the minimum uid to show MinimalUID=100 +# If user or user.png exists in this dir it will be used as his picture GlobalFaceDir=@EXPANDED_DATADIR@/faces/ +# Icon we use Icon=@EXPANDED_PIXMAPDIR@/gdm.png +# File which contains the locale we show to the user. Likely you want to use +# the one shipped with gdm and edit it. It is not a standard locale.alias file, +# although gdm will be able to read a standard locale.alias file as well. LocaleFile=@EXPANDED_LOCALEDIR@/locale.alias +# Logo shown in the standard greeter Logo=@EXPANDED_PIXMAPDIR@/gdm-foot-logo.png +# The standard greeter should shake if a user entered the wrong username or +# password. Kind of cool looking Quiver=true +# The system menu is shown in the greeter SystemMenu=true # Note to distributors, if you wish to have a different Welcome string # and wish to have this translated you can have entries such as # Welcome[cs]=Vitejte na %n # Just make sure the string is in utf-8 Welcome=Welcome to %n +# Don't allow user to move the standard greeter window. Only makes sense +# if TitleBar is on LockPosition=false +# Set a position rather then just centering the window. If you enter +# negative values for the position it is taken as an offset from the +# right or bottom edge. SetPosition=false PositionX=0 PositionY=0 +# Xinerama screen we use to display the greeter on. Not for true +# multihead, currently only works for Xinerama. XineramaScreen=0 -#Type can be 0=None, 1=Image, 2=Color +# Background settings for the standard greeter: +# Type can be 0=None, 1=Image, 2=Color BackgroundType=2 BackgroundImage= BackgroundScaleToFit=true BackgroundColor=#363047 +# XDMCP session should only get a color, this is the sanest setting since +# you don't want to take up too much bandwidth BackgroundRemoteOnlyColor=true +# Program to run to draw the background in the standard greeter. Perhaps +# something like an xscreensaver hack or some such. BackgroundProgram= # if this is true then the background program is run always, otherwise # it is only run when the BackgroundType is 0 (None) RunBackgroundProgramAlways=false +# Show the chooser (you can choose a specific saved gnome session) session ShowGnomeChooserSession=true +# Show the Failsafe sessions. These are much MUCH nicer (focus for xterm for +# example) and more failsafe then those supplied by scripts so distros should +# use this rather then just running an xterm from a script. ShowGnomeFailsafeSession=true ShowXtermFailsafeSession=true # Always use 24 hour clock no matter what the locale. @@ -175,16 +235,27 @@ UseCirclesInEntry=false GraphicalTheme=circles GraphicalThemeDir=@EXPANDED_DATADIR@/gdm/themes/ +# The chooser is what's displayed when a user wants an indirect XDMCP +# session [chooser] +# Default image for hosts DefaultHostImg=@EXPANDED_PIXMAPDIR@/nohost.png +# Directory with host images, they are named by the hosts: host or host.png HostImageDir=@EXPANDED_DATADIR@/hosts/ +# Time we scan for hosts (well only the time we tell the user we are +# scanning actually) ScanTime=3 +# A comma separated lists of hosts to automatically add (if they answer to +# a query of course). You can use this to reach hosts that broadcast cannot +# reach. Hosts= +# Broadcast a query to get all hosts on the current network that answer Broadcast=true [debug] # This will enable debugging into the syslog, usually not neccessary -# and it creates a LOT of spew of random stuff to the syslog +# and it creates a LOT of spew of random stuff to the syslog. However it +# can be useful in determining when something is going very wrong. Enable=false [servers] diff --git a/daemon/auth.c b/daemon/auth.c index 0b60a3f6..8ab5c529 100644 --- a/daemon/auth.c +++ b/daemon/auth.c @@ -384,7 +384,7 @@ try_open_append (const char *file) gboolean gdm_auth_user_add (GdmDisplay *d, uid_t user, const char *homedir) { - const char *authdir; + char *authdir; gint authfd; FILE *af; GSList *auths = NULL; @@ -397,16 +397,22 @@ gdm_auth_user_add (GdmDisplay *d, uid_t user, const char *homedir) gdm_debug ("gdm_auth_user_add: Adding cookie for %d", user); + /* Determine whether UserAuthDir is specified. Otherwise ~user is used */ + if ( ! ve_string_empty (GdmUserAuthDir) && + strcmp (GdmUserAuthDir, "~") != 0) { + if (strncmp (GdmUserAuthDir, "~/", 2) == 0) { + authdir = g_strconcat (homedir, &GdmUserAuthDir[1], NULL); + } else { + authdir = g_strdup (GdmUserAuthDir); + } + } else { + authdir = g_strdup (homedir); + } + try_user_add_again: locked = FALSE; - /* Determine whether UserAuthDir is specified. Otherwise ~user is used */ - if ( ! ve_string_empty (GdmUserAuthDir)) - authdir = GdmUserAuthDir; - else - authdir = homedir; - umask (077); if (authdir == NULL) @@ -434,6 +440,7 @@ try_user_add_again: umask (022); + g_free (authdir); return FALSE; } @@ -474,6 +481,8 @@ try_user_add_again: goto try_user_add_again; } + g_free (authdir); + return FALSE; } @@ -516,6 +525,7 @@ try_user_add_again: umask (022); + g_free (authdir); return ret; } diff --git a/daemon/gdm.c b/daemon/gdm.c index a8a4cca1..7c812b30 100644 --- a/daemon/gdm.c +++ b/daemon/gdm.c @@ -133,7 +133,6 @@ gchar *GdmUserAuthFB = NULL; gchar *GdmPidFile = NULL; gchar *GdmDefaultPath = NULL; gchar *GdmRootPath = NULL; -gchar *GdmDefaultLocale = NULL; gboolean GdmKillInitClients = FALSE; gint GdmUserMaxFile = 0; gint GdmSessionMaxFile = 0; @@ -258,7 +257,6 @@ gdm_config_parse (void) GdmReboot = gnome_config_get_string (GDM_KEY_REBOOT); GdmRetryDelay = gnome_config_get_int (GDM_KEY_RETRYDELAY); GdmRootPath = gnome_config_get_string (GDM_KEY_ROOTPATH); - GdmDefaultLocale = gnome_config_get_string (GDM_KEY_LOCALE); GdmServAuthDir = gnome_config_get_string (GDM_KEY_SERVAUTH); GdmSessDir = gnome_config_get_string (GDM_KEY_SESSDIR); GdmSuspend = gnome_config_get_string (GDM_KEY_SUSPEND); diff --git a/daemon/gdm.h b/daemon/gdm.h index bda48c66..47c8604e 100644 --- a/daemon/gdm.h +++ b/daemon/gdm.h @@ -206,7 +206,6 @@ enum { #define GDM_KEY_FACE "greeter/DefaultFace=" EXPANDED_PIXMAPDIR "nobody.png" #define GDM_KEY_FACEDIR "greeter/GlobalFaceDir=" EXPANDED_DATADIR "/faces/" #define GDM_KEY_ICON "greeter/Icon=" EXPANDED_PIXMAPDIR "/gdm.png" -#define GDM_KEY_LOCALE "greeter/DefaultLocale=english" #define GDM_KEY_LOCFILE "greeter/LocaleFile=" EXPANDED_LOCALEDIR "/locale.alias" #define GDM_KEY_LOGO "greeter/Logo=" EXPANDED_PIXMAPDIR "/gdm-foot-logo.png" #define GDM_KEY_QUIVER "greeter/Quiver=true" diff --git a/daemon/slave.c b/daemon/slave.c index 4fc19c65..2fc24208 100644 --- a/daemon/slave.c +++ b/daemon/slave.c @@ -2141,50 +2141,6 @@ find_prog (const char *name, const char *args, char **retpath) return NULL; } -/* this is for the unforunate case when something went seriously wrong, the - * sysadmin's a wanker or the user has an old language setting */ -static char * -unaliaslang (const char *origlang) -{ - FILE *langlist; - char curline[256]; - - if (ve_string_empty (GdmLocaleFile)) - return g_strdup (origlang); - - langlist = fopen (GdmLocaleFile, "r"); - - if (langlist == NULL) - return g_strdup (origlang); - - while (fgets (curline, sizeof (curline), langlist)) { - char *name; - char *lang; - - if (curline[0] <= ' ' || - curline[0] == '#') - continue; - - name = strtok (curline, " \t\r\n"); - if (name == NULL) - continue; - - lang = strtok (NULL, " \t\r\n"); - if (lang == NULL) - continue; - - if (g_ascii_strcasecmp (name, origlang) == 0) { - fclose (langlist); - return g_strdup (lang); - } - } - - fclose (langlist); - - return g_strdup (origlang); - -} - static char * dequote (const char *in) { @@ -2213,7 +2169,6 @@ session_child_run (struct passwd *pwent, const char *session, const char *save_session, const char *language, - gboolean def_language, const char *gnome_session, gboolean usrcfgok, gboolean savesess, @@ -2331,11 +2286,18 @@ session_child_run (struct passwd *pwent, else gnome_setenv ("PATH", GdmDefaultPath, TRUE); - /* Eeeeek, this no lookie as a correct language code, let's - * try unaliasing it */ - if (strlen (language) < 3 || - language[2] != '_') { - language = unaliaslang (language); + /* Eeeeek, this no lookie as a correct language code, + * just use the system default */ + if ( ! ve_string_empty (language) && + ! ve_locale_exists (language)) { + /* FIXME: give this error message! */ + /* Must wait till string freeze is over */ + /* XXX STRING XXX + char *msg = g_strdup_printf (_("Language %s does not exist, using %s"), + language, _("System default")); + gdm_error_box (d, GTK_MESSAGE_ERROR, msg); + */ + language = NULL; } setpgid (0, 0); @@ -2362,26 +2324,19 @@ session_child_run (struct passwd *pwent, _("%s: setusercontext() failed for %s. " "Aborting."), "gdm_slave_session_start", login); - - /* A different language was selected, or taken from the saved - * prefs of the user */ - if ( ! def_language) { - gnome_setenv ("LANG", language, TRUE); - gnome_setenv ("GDM_LANG", language, TRUE); - } #else if (setuid (pwent->pw_uid) < 0) gdm_child_exit (DISPLAY_REMANAGE, _("gdm_slave_session_start: Could not become %s. Aborting."), login); +#endif - /* Set locale */ - gnome_setenv ("LANG", language, TRUE); /* Only force GDM_LANG to something if there is other then - * default selected. Else let the session do whatever it + * system default selected. Else let the session do whatever it * does since we're using sys default */ - if ( ! def_language) + if ( ! ve_string_empty (language)) { + gnome_setenv ("LANG", language, TRUE); gnome_setenv ("GDM_LANG", language, TRUE); -#endif + } chdir (home_dir); @@ -2401,7 +2356,7 @@ session_child_run (struct passwd *pwent, gchar *cfgstr = g_strconcat ("=", home_dir, "/.gnome2/gdm=/session/lang", NULL); /* we chose the system default language so wipe the lang key */ - if (def_language) + if (ve_string_empty (language)) gnome_config_clean_key (cfgstr); else gnome_config_set_string (cfgstr, language); @@ -2601,7 +2556,6 @@ gdm_slave_session_start (void) char *gnome_session = NULL; gboolean savesess = FALSE, savelang = FALSE, savegnomesess = FALSE; gboolean usrcfgok = FALSE, sessoptok = FALSE, authok = FALSE; - gboolean def_language = FALSE; const char *home_dir = NULL; gboolean home_dir_ok = FALSE; time_t session_start_time, end_time; @@ -2728,21 +2682,8 @@ gdm_slave_session_start (void) } if (ve_string_empty (language)) { - const char *lang = g_getenv ("LANG"); - g_free (language); - - if ( ! ve_string_empty (lang)) - language = g_strdup (lang); - else - language = g_strdup (GdmDefaultLocale); - - if (ve_string_empty (language)) { - g_free (language); - language = g_strdup ("C"); - } - - def_language = TRUE; + language = NULL; } /* save this session as the users session */ @@ -2856,7 +2797,6 @@ gdm_slave_session_start (void) session, save_session, language, - def_language, gnome_session, usrcfgok, savesess, diff --git a/gui/gdmchooser.c b/gui/gdmchooser.c index 1aabb446..8691c9db 100644 --- a/gui/gdmchooser.c +++ b/gui/gdmchooser.c @@ -224,6 +224,10 @@ gdm_chooser_host_alloc (const char *hostname, return host; hostimg = g_strconcat (GdmHostIconDir, "/", hostname, NULL); + if (access (hostimg, R_OK) != 0) { + g_free (hostimg); + hostimg = g_strconcat (GdmHostIconDir, "/", hostname, ".png", NULL); + } if (access (hostimg, R_OK) == 0 && (img = gdk_pixbuf_new_from_file (hostimg, NULL)) != NULL) { diff --git a/gui/gdmlogin.c b/gui/gdmlogin.c index d120f2d4..225b4572 100644 --- a/gui/gdmlogin.c +++ b/gui/gdmlogin.c @@ -115,7 +115,6 @@ static gchar *GdmGtkRC; static gchar *GdmIcon; static gchar *GdmSessionDir; static gchar *GdmLocaleFile; -static gchar *GdmDefaultLocale; static gchar *GdmExclude; static int GdmMinimalUID; static gchar *GdmGlobalFaceDir; @@ -866,7 +865,6 @@ gdm_login_parse_config (void) GdmConfigurator = ve_config_get_string (config, GDM_KEY_CONFIGURATOR); GdmTitleBar = ve_config_get_bool (config, GDM_KEY_TITLE_BAR); GdmLocaleFile = ve_config_get_string (config, GDM_KEY_LOCFILE); - GdmDefaultLocale = ve_config_get_string (config, GDM_KEY_LOCALE); GdmSessionDir = ve_config_get_string (config, GDM_KEY_SESSDIR); GdmWelcome = ve_config_get_translated_string (config, GDM_KEY_WELCOME); /* A hack! */ @@ -4034,14 +4032,7 @@ main (int argc, char *argv[]) gdm_login_parse_config (); - /* no language set, use the GdmDefaultLocale */ - if ( ! ve_string_empty (GdmDefaultLocale) && - g_getenv ("LANG") == NULL && - g_getenv ("LC_ALL") == NULL) { - setlocale (LC_ALL, GdmDefaultLocale); - } else { - setlocale (LC_ALL, ""); - } + setlocale (LC_ALL, ""); tooltips = gtk_tooltips_new (); diff --git a/gui/greeter/greeter.c b/gui/greeter/greeter.c index 0e9aee54..e1e71261 100644 --- a/gui/greeter/greeter.c +++ b/gui/greeter/greeter.c @@ -35,7 +35,6 @@ GtkWidget *canvas; char *GdmGraphicalTheme = NULL; char *GdmGraphicalThemeDir = NULL; -char *GdmDefaultLocale = NULL; int GdmXineramaScreen = 0; gboolean GdmShowGnomeChooserSession = FALSE; gboolean GdmShowGnomeFailsafeSession = FALSE; @@ -91,7 +90,6 @@ greeter_parse_config (void) g_free (GdmGraphicalThemeDir); GdmGraphicalThemeDir = g_strdup (GREETERTHEMEDIR); } - GdmDefaultLocale = ve_config_get_string (config, GDM_KEY_LOCALE); GdmXineramaScreen = ve_config_get_int (config, GDM_KEY_XINERAMASCREEN); GdmUseCirclesInEntry = ve_config_get_bool (config, GDM_KEY_ENTRY_CIRCLES); @@ -820,9 +818,6 @@ greeter_reread_config (int sig, gpointer data) if (strcmp (theme, GdmGraphicalTheme) != 0 || strcmp (theme_dir, GdmGraphicalThemeDir) != 0 || ! string_same (config, - GdmDefaultLocale, - GDM_KEY_LOCALE) || - ! string_same (config, GdmGtkRC, GDM_KEY_GTKRC) || ! int_same (config, @@ -994,14 +989,7 @@ main (int argc, char *argv[]) greeter_parse_config (); - /* no language set, use the GdmDefaultLocale */ - if (GdmDefaultLocale != NULL && - strlen (GdmDefaultLocale) != 0 && - g_getenv ("LANG") == NULL && - g_getenv ("LC_ALL") == NULL) - setlocale (LC_ALL, GdmDefaultLocale); - else - setlocale (LC_ALL, ""); + setlocale (LC_ALL, ""); gtk_init (&argc, &argv); |