summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AUTHORS27
-rw-r--r--ChangeLog29
-rw-r--r--HACKING8
-rw-r--r--Makefile.am2
-rw-r--r--README10
-rw-r--r--README.install12
-rw-r--r--RELEASENOTES15
-rw-r--r--TODO4
-rw-r--r--acconfig.h1
-rw-r--r--config/gdm.conf.in94
-rw-r--r--configure.in11
-rw-r--r--daemon/Makefile.am2
-rw-r--r--daemon/auth.c343
-rw-r--r--daemon/cookie.c47
-rw-r--r--daemon/filecheck.c115
-rw-r--r--daemon/gdm.c605
-rw-r--r--daemon/gdm.h76
-rw-r--r--daemon/md5.c207
-rw-r--r--daemon/md5.h20
-rw-r--r--daemon/misc.c279
-rw-r--r--daemon/server.c333
-rw-r--r--daemon/slave.c772
-rw-r--r--daemon/verify.c289
-rw-r--r--daemon/xdmcp.c889
-rw-r--r--docs/gdm-manual.txt39
-rw-r--r--gui/Makefile.am9
-rw-r--r--gui/gdmchooser.c577
-rw-r--r--gui/gdmlogin.c1636
-rw-r--r--pixmaps/Makefile.am2
-rw-r--r--pixmaps/nohost.pngbin0 -> 1051 bytes
-rw-r--r--po/POTFILES.in1
-rw-r--r--po/de.po675
-rw-r--r--po/es.po768
-rw-r--r--po/fr.po677
-rw-r--r--po/no.po624
-rw-r--r--po/sv.po642
36 files changed, 5322 insertions, 4518 deletions
diff --git a/AUTHORS b/AUTHORS
index 7c7f47a8..08abfb2b 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1 +1,26 @@
-Martin Kasper Petersen <mkp@SunSITE.auc.dk>
+Author:
+ Martin K. Petersen <mkp@mkp.net>
+
+Contributions from:
+ Alan Cox <alan@redhat.com>
+ Carsten Schaar <nhadcasc@fs-maphy.uni-hannover.de>
+ Christopher Blizzard <blizzard@redhat.com>
+ Elliot Lee <sopwith@redhat.com>
+ Federico Mena Quintero <federico@nuclecu.unam.mx>
+ Gregory McLean <gregm@comstar.net>
+ Jacob Berkman <jberk+@cmu.edu>
+ Jeff Garzik <jgarzik@pobox.com>
+ Jochen Friedrich <jochen@scram.de>
+ Karsten Weiss <karsten@addx.au.s.shuttle.de>
+ Kevin Vajk <kvajk@ricochet.net>
+ Michael K. Johnson <johnsonm@redhat.com>
+ Miguel de Icaza <miguel@kernel.org>
+ Owen Taylor <otaylor@redhat.com>
+ nalin@thermo.stat.ncsu.edu
+
+Translators:
+ Anders Carlsson <anders.carlsson@tordata.se>
+ Kjartan Maraas <kmaraas@online.no>
+ Pablo Saratxaga <srtxg@chanae.alphanet.ch>
+ Vincent Renardias <vincent@debian.org>
+ Tristan Tarrant <ttarrant@etnoteam.it>
diff --git a/ChangeLog b/ChangeLog
index 8d13cd1d..301e6ba8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,36 @@
+1999-08-11 <mkp@mkp.net>
+
+ * daemon/auth.c: Nailed down the bug that has been haunting me the
+ past couple of days. gdm no longer corrupts ~user/.Xauthority if
+ it contains ``foreign'' cookies.
+
+1999-08-08 <mkp@mkp.net>
+
+ Finally merged the Ottawa megapatch:
+
+ * daemon/auth.c: Real XAuth implementation. Doesn't rely on
+ /usr/bin/X11/xauth anymore.
+
+ * gui/gdmlogin.c: Implemented browser functionality.
+
+ * gui/gdmconfig.c: First shot at a graphical configuration tool.
+
+ * gui/gdmface.c: Face selector capplet.
+
+1999-08-07 <mkp@mkp.net>
+
+ * Replaced gdm_putenv() with calls to setenv() as putenv() is
+ broken by specification.
+
1999-08-07 Anders Carlsson <anders.carlsson@tordata.se>
* configure.in (ALL_LINGUAS): Added sv to ALL_LINGUAS.
+1999-08-02 <mkp@mkp.net>
+
+ * md5.c, md5.h, cookie.c: Fixed MD5 endianness problem (Reported
+ by <gewrgiou@imbc.gr>, bugzilla 3898).
+
1999-07-24 Tristan Tarrant <ttarrant@etnoteam.it>
* gui/gdmchooser.c (main): centre all dialogs
diff --git a/HACKING b/HACKING
new file mode 100644
index 00000000..8e82190e
--- /dev/null
+++ b/HACKING
@@ -0,0 +1,8 @@
+
+This package is actively developed and maintained.
+
+Don't commit changes without asking mkp@mkp.net first unless you are
+doing translation stuff.
+
+
+Martin
diff --git a/Makefile.am b/Makefile.am
index e0bd2dd1..e906dacb 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,4 +1,4 @@
SUBDIRS = config macros pixmaps daemon gui docs intl po
-EXTRA_DIST = ChangeLog README.install gdm.spec
+EXTRA_DIST = ChangeLog README.install RELEASENOTES
diff --git a/README b/README
index 1ebaf631..27a8aa24 100644
--- a/README
+++ b/README
@@ -4,10 +4,9 @@
The Gnome Display Manager is a re-implementation of the well known xdm
-program. gdm consists of four separate parts: A small daemon, two
-slightly different graphical login programs and a host chooser.
+program.
-gdm 2.0 implements all significant features required for managing
+gdm 2.0beta1 implements all significant features required for managing
local and remote displays.
gdm daemon:
@@ -26,6 +25,7 @@ gdmlogin:
o Iconified login window
o Session selection support
o Language selection support
+ o Face browser
gdmchooser:
@@ -52,7 +52,3 @@ logging (see README.install) and include your syslog and
Martin K. Petersen, The Gnome Project
-
-PS. If you find gdm useful and have a spare Sun E450 please don't
-hesitate in donating it to me. Mail me for details. Thanks.
-
diff --git a/README.install b/README.install
index fd07aeec..5da600bf 100644
--- a/README.install
+++ b/README.install
@@ -1,9 +1,13 @@
QUICK NOTES ON INSTALLATION/USE:
-For security reasons a dedicated group id is needed for proper
-operation! gdm assumes that the group is called `gdm'. Furthermore gdm
-relies on the existence of a `nobody' user. Create these before
-running make install.
+First of all: gdm is a *daemon* -- not a common user application. It
+requires extensive knowledge about your system setup to install and
+configure. gdm isn't - and never will be - Plug and Play
+(i.e. ./configure ; make install).
+
+For security reasons a dedicated user and group id are required for
+proper operation! gdm assumes that both the user and the group are
+called `gdm'. Create these before running make install.
You should run ``make install'' as root to get the permissions right
on the authentication directory.
diff --git a/RELEASENOTES b/RELEASENOTES
new file mode 100644
index 00000000..470ff968
--- /dev/null
+++ b/RELEASENOTES
@@ -0,0 +1,15 @@
+
+Indirect choosing was ripped out again. Broke too much and was way too ugly.
+I came up with a better design that will definitely go in before 2.0-proper.
+Otherwise all opcodes of the XDMCP 1.0 spec are supported.
+
+gdmconfig doesn't work. It's only GUI code so far.
+
+gdm-manual.txt should be updated and converted to SGML before gdm2 release.
+
+I haven't quite made up my mind whether tab-completion goes back in or not.
+
+gdmlogin should honour user geometry parameters.
+
+
+
diff --git a/TODO b/TODO
index 9b174220..e69de29b 100644
--- a/TODO
+++ b/TODO
@@ -1,4 +0,0 @@
-WORK IN PROGRESS:
-
- o Picon capplet for selecting the bitmap to appear in the browser.
- o gdmconfig - a program for configuring the gdm.conf file.
diff --git a/acconfig.h b/acconfig.h
index ede6d248..f29e8e2b 100644
--- a/acconfig.h
+++ b/acconfig.h
@@ -1,7 +1,6 @@
#undef PACKAGE
#undef VERSION
#undef HAVE_LIBSM
-#undef GDM_XAUTH_PATH
#undef ENABLE_NLS
#undef HAVE_CATGETS
#undef HAVE_GETTEXT
diff --git a/config/gdm.conf.in b/config/gdm.conf.in
index 75102990..b1ec40f5 100644
--- a/config/gdm.conf.in
+++ b/config/gdm.conf.in
@@ -1,59 +1,67 @@
-[appearance]
-Browser=1
-Completion=1
-Logo=1
-LogoImage=@pixmapdir@/gnome-logo-large.png
-NoFaceImage=@pixmapdir@/nophoto.png
-GlobalImageDir=@datadir@/faces/
-Quiver=1
-Iconify=1
-IconFile=@pixmapdir@/gdm.xpm
-Gtkrc=
-
-[system]
-ShutdownMenu=0
-SuspendCommand=
-UserFileCutoffSize=65536
-UserIconMaxWidth=128
-UserIconMaxHeight=128
-DefaultPath=@bindir@:/usr/local/bin:/usr/bin/X11:/usr/bin:/bin
-VerboseAuth=0
-AllowRoot=0
-RelaxPermissions=0
-RetryDelay=3
-LocaleFile=@localedir@/locale.alias
-
-[messages]
-Welcome=Welcome to %h
-
[daemon]
-SessionDir=@sysconfdir@/gdm/Sessions
-PidFile=/var/run/gdm.pid
-Greeter=@bindir@/gdmlogin --disable-sound
Chooser=@bindir@/gdmchooser --disable-sound
-User=gdm
+Greeter=@bindir@/gdmlogin --disable-sound
Group=gdm
+HaltCommand=shutdown -h now
DisplayInitDir=@sysconfdir@/gdm/Init
KillInitClients=1
-PreSessionScriptDir=@sysconfdir@/gdm/PreSession
-PostSessionScriptDir=@sysconfdir@/gdm/PostSession
-AuthDir=@authdir@
LogDir=@authdir@
+DefaultPath=/bin:/usr/bin:/usr/bin/X11:/usr/local/bin
+PidFile=/var/run/gdm.pid
+PostSessionScriptDir=@sysconfdir@/gdm/PostSession/
+PreSessionScriptDir=@sysconfdir@/gdm/PreSession/
+RebootCommand=shutdown -r now
+RootPath=/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/X11:/usr/local/bin
+ServAuthDir=@authdir@
+SessionDir=@sysconfdir@/gdm/Sessions/
+UserAuthDir=
+UserAuthFBDir=/tmp
+UserAuthFile=.Xauthority
+User=gdm
-[servers]
-0=/usr/bin/X11/X
-#1=/usr/bin/X11/X
+[security]
+AllowRoot=0
+UserMaxFile=65536
+RelaxPermissions=0
+RetryDelay=3
+VerboseAuth=1
[xdmcp]
-Enable=1
+Enable=0
MaxPending=4
-MaxManageWait=20
-MaxSessions=4
+MaxSessions=16
+MaxWait=30
Port=177
+[gui]
+GtkRC=
+MaxIconWidth=128
+MaxIconHeight=128
+
+[greeter]
+Browser=0
+Exclude=bin,daemon,adm,lp,sync,shutdown,halt,mail,news,uucp,operator,nobody
+DefaultFace=@pixmapdir@/nobody.png
+GlobalFaceDir=@datadir@/faces/
+Font=-adobe-helvetica-bold-r-normal-*-*-180-*-*-*-*-*-*
+Icon=@pixmapdir@/gdm.xpm
+DefaultLocale=english
+LocaleFile=@localedir@/locale.alias
+Logo=@pixmapdir@/gnome-logo-large.png
+Quiver=1
+SystemMenu=0
+Welcome=Welcome to %h
+
[chooser]
-ImageDir=@datadir@/hosts
-DefaultImage=@pixmapdir@/nohost.png
+ScanTime=3
+DefaultHostImg=@pixmapdir@/nohost.png
+HostImageDir=@datadir@/hosts/
[debug]
Enable=0
+
+[servers]
+0=/usr/bin/X11/X
+#1=/usr/bin/X11/X
+
+
diff --git a/configure.in b/configure.in
index d47da4d0..c06ff2e7 100644
--- a/configure.in
+++ b/configure.in
@@ -1,7 +1,7 @@
AC_INIT(daemon/gdm.h)
AM_CONFIG_HEADER(config.h)
-AM_INIT_AUTOMAKE(gdm,2.0.0)
+AM_INIT_AUTOMAKE(gdm,2.0beta1)
AM_MAINTAINER_MODE
AM_ACLOCAL_INCLUDE(macros)
@@ -64,9 +64,10 @@ for I in $LDFLAGS $LIBS -L/usr/lib; do
fi
esac
done
+
if test -n "$LIBWRAP_PATH"; then
AC_MSG_RESULT(yes)
- AC_HAVE_LIBRARY(nsl, LIBS="$LIBS -lnsl")
+ AC_CHECK_LIB(nsl, ypbind, LIBS="$LIBS -lnsl")
else
AC_MSG_RESULT(no)
fi
@@ -88,12 +89,6 @@ if test -n "$LIBWRAP_PATH"; then
fi
LIBS="$LIBS $LIBWRAP_PATH"
-AC_PATH_PROG(ac_xauth, xauth)
-GDM_XAUTH_PATH=$ac_xauth
-
-AC_DEFINE_UNQUOTED(GDM_XAUTH_PATH, "$ac_xauth")
-
-
AC_OUTPUT([
Makefile
daemon/Makefile
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index f59882b4..1f470283 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -26,5 +26,5 @@ gdm_SOURCES = \
md5.c \
md5.h
-gdm_LDADD = $(GNOME_LIBDIR) $(GNOME_LIBS) -lXdmcp -lX11 $(INTLLIBS)
+gdm_LDADD = $(GNOME_LIBDIR) $(GNOME_LIBS) -lXdmcp -lXau -lX11 $(INTLLIBS)
diff --git a/daemon/auth.c b/daemon/auth.c
index c8ccea4c..5f8caca1 100644
--- a/daemon/auth.c
+++ b/daemon/auth.c
@@ -16,8 +16,8 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-/*
- * This file contains the X Authentication code
+/* Code for cookie handling. This really needs to be modularized to
+ * support other XAuth types and possibly DECnet...
*/
#include <config.h>
@@ -28,130 +28,297 @@
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
+#include <netdb.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <X11/Xauth.h>
#include "gdm.h"
static const gchar RCSid[]="$Id$";
-extern gchar *GdmAuthDir;
-extern gid_t GdmGroupId;
+extern gchar *GdmServAuthDir;
+extern gchar *GdmUserAuthDir;
+extern gchar *GdmUserAuthFile;
+extern gchar *GdmUserAuthFB;
+extern gint GdmUserMaxFile;
+extern gint GdmRelaxPerms;
-extern gchar **gdm_arg_munch(gchar *);
-extern void gdm_cookie_generate(GdmDisplay *d);
-extern void *gdm_debug(const gchar *, ...);
-extern void *gdm_error(const gchar *, ...);
+extern void gdm_cookie_generate (GdmDisplay *d);
+extern void gdm_debug (const gchar *, ...);
+extern void gdm_error (const gchar *, ...);
+extern gboolean gdm_file_check (gchar *caller, uid_t user, gchar *dir, gchar *file,
+ gboolean absentok, gint maxsize, gint perms);
-void gdm_auth_secure_display(GdmDisplay *d);
-void gdm_auth_user_add(GdmDisplay *d, gchar *home);
-void gdm_auth_user_remove(GdmDisplay *d, gchar *home);
+gboolean gdm_auth_secure_display (GdmDisplay *d);
+gboolean gdm_auth_user_add (GdmDisplay *d, uid_t user, gchar *homedir);
+void gdm_auth_user_remove (GdmDisplay *d, uid_t user);
-void gdm_auth_secure_display(GdmDisplay *d)
+gboolean
+gdm_auth_secure_display (GdmDisplay *d)
{
- gchar *authstr;
- gchar **argv;
- pid_t authpid;
+ FILE *af;
+ struct hostent *hentry;
+ struct in_addr *ia;
+ gchar *addr;
+ Xauth *xa;
+ guint i;
- gdm_debug("gdm_auth_secure_display: Securing %s", d->name);
+ if (!d)
+ return (FALSE);
- gdm_cookie_generate(d);
+ gdm_debug ("gdm_auth_secure_display: Setting up access for %s", d->name);
- d->auth=g_strconcat(GdmAuthDir, "/", d->name, ".xauth", NULL);
+ if (!d->authfile)
+ d->authfile = g_strconcat (GdmServAuthDir, "/", d->name, ".Xauth", NULL);
- if(unlink(d->auth) == -1)
- gdm_debug(_("gdm_auth_secure_display: Could not unlink %s file: %s"),\
- d->auth, strerror(errno));
-
- authstr=g_strconcat(GDM_XAUTH_PATH, " -i -f ", d->auth, \
- " add ", d->name, " . ", d->cookie, NULL);
- argv=gdm_arg_munch(authstr);
-
- switch(authpid=fork()) {
-
- case 0:
- execv(argv[0], argv);
- gdm_error(_("gdm_auth_secure_display: Error starting xauth process: %s. Running insecure!"), strerror(errno));
- return;
-
- case -1:
- gdm_error(_("gdm_auth_secure_display: Error forking xauth process. Running insecure!"));
- return;
+ unlink (d->authfile);
+
+ af = fopen (d->authfile, "w");
+
+ if (!af)
+ return (FALSE);
+
+ gdm_cookie_generate (d);
+
+ /* FQDN or IP of display host */
+ hentry = gethostbyname (d->hostname);
+
+ if (!hentry) {
+ gdm_error ("gdm_auth_secure_display: Error getting hentry for %s", d->hostname);
+ return (FALSE);
+ }
+
+ /* Local access */
+ if (d->type == DISPLAY_LOCAL) {
+ gdm_debug ("gdm_auth_secure_display: Setting up socket access");
+
+ xa = g_new0 (Xauth, 1);
- default:
- waitpid(authpid, 0, 0); /* Wait for xauth to finish */
- chown(d->auth, 0, GdmGroupId);
- chmod(d->auth, S_IRUSR|S_IWUSR|S_IRGRP);
- break;
+ if (!xa)
+ return (FALSE);
+
+ xa->family = FamilyLocal;
+ xa->address = d->hostname;
+ xa->address_length = strlen (d->hostname);
+ xa->number = g_strdup_printf ("%d", d->dispnum);
+ xa->number_length = 1;
+ xa->name = "MIT-MAGIC-COOKIE-1";
+ xa->name_length = 18;
+ xa->data = d->bcookie;
+ xa->data_length = strlen (d->bcookie);
+ XauWriteAuth (af, xa);
+ d->auths = g_slist_append (d->auths, xa);
+ }
+
+ gdm_debug ("gdm_auth_secure_display: Setting up network access");
+
+ /* Network access */
+ for (i=0 ; i < hentry->h_length ; i++) {
+ xa = g_new0 (Xauth, 1);
+
+ if (!xa)
+ return (FALSE);
+
+ xa->family = FamilyInternet;
+
+ addr = g_new0 (gchar, 4);
+
+ if (!addr)
+ return (FALSE);
+
+ ia = (struct in_addr *) hentry->h_addr_list[i];
+
+ if (!ia)
+ break;
+
+ memcpy (addr, &ia->s_addr, 4);
+ xa->address = addr;
+ xa->address_length = 4;
+ xa->number = g_strdup_printf ("%d", d->dispnum);
+ xa->number_length = 1;
+ xa->name = "MIT-MAGIC-COOKIE-1";
+ xa->name_length = 18;
+ xa->data = d->bcookie;
+ xa->data_length = strlen (d->bcookie);
+
+ XauWriteAuth (af, xa);
+
+ d->auths = g_slist_append (d->auths, xa);
}
+ fclose (af);
+ setenv ("XAUTHORITY", d->authfile, TRUE);
+
+ gdm_debug ("gdm_auth_secure_display: Setting up access for %s ... done", d->name);
+
+ return (TRUE);
}
-void gdm_auth_user_add(GdmDisplay *d, gchar *home)
+gboolean
+gdm_auth_user_add (GdmDisplay *d, uid_t user, gchar *homedir)
{
- gchar *authfile, *authstr;
- gchar **argv;
- pid_t authpid;
+ gchar *authdir;
+ gint authfd;
+ FILE *af;
+ GSList *auths = NULL;
- gdm_debug("gdm_auth_user_add: Adding cookie to %s", home);
+ if (!d || !user)
+ return (FALSE);
- authfile=g_strconcat(home, "/.Xauthority", NULL);
- authstr=g_strconcat(GDM_XAUTH_PATH, " -i -f ", authfile, \
- " add ", d->name, " . ", d->cookie, NULL);
+ gdm_debug ("gdm_auth_user_add: Adding cookie for %d", user);
- argv=gdm_arg_munch(authstr);
- g_free(authstr);
+ /* Determine whether UserAuthDir is specified. Otherwise ~user is used */
+ if (strlen (GdmUserAuthDir))
+ authdir = GdmUserAuthDir;
+ else
+ authdir = homedir;
- switch(authpid=fork()) {
-
- case 0:
- execv(argv[0], argv);
- gdm_error(_("gdm_auth_user_add: Error starting xauth process: %s"), strerror(errno));
- return;
-
- case -1:
- gdm_error(_("gdm_auth_user_add: Error forking xauth process."));
- return;
-
- default:
- waitpid(authpid, 0,0); /* Wait for xauth to finish */
- chmod(authfile, S_IRUSR|S_IWUSR);
- g_free(authfile);
- break;
+ umask (077);
+ /* Find out if the Xauthority file passes the paranoia check */
+ if (! gdm_file_check ("gdm_auth_user_add", user, authdir, GdmUserAuthFile,
+ TRUE, GdmUserMaxFile, GdmRelaxPerms)) {
+
+ /* No go. Let's create a fallback file in GdmUserAuthFB (/tmp) */
+ d->authfb = TRUE;
+ d->userauth = g_strconcat (GdmUserAuthFB, "/.gdmXXXXXX", NULL);
+ authfd = mkstemp (d->userauth);
+
+ if (authfd == -1) {
+ g_free (d->userauth);
+ d->userauth = NULL;
+ return (FALSE);
+ }
+
+ af = fdopen (authfd, "w");
}
+ else { /* User's Xauthority file is ok */
+ d->authfb = FALSE;
+ d->userauth = g_strconcat (authdir, "/", GdmUserAuthFile, NULL);
+
+ /* FIXME: Better implement my own locking. The libXau one is not kosher */
+ if (XauLockAuth (d->userauth, 3, 3, 0) != LOCK_SUCCESS) {
+ g_free (d->userauth);
+ d->userauth = NULL;
+ return (FALSE);
+ }
+
+ af = fopen (d->userauth, "a+");
+ }
+
+ if (!af) {
+ /* Really no need to clean up here - this process is a goner anyway */
+ XauUnlockAuth (d->userauth);
+ g_free (d->userauth);
+ d->userauth = NULL;
+ return (FALSE);
+ }
+
+ gdm_debug ("gdm_auth_user_add: Using %s for cookies", d->userauth);
+
+ /* Write the authlist for the display to the cookie file */
+ auths = d->auths;
+
+ while (auths) {
+ XauWriteAuth (af, auths->data);
+ auths = auths->next;
+ }
+
+ fclose (af);
+ XauUnlockAuth (d->userauth);
+ setenv ("XAUTHORITY", d->userauth, TRUE);
+
+ gdm_debug ("gdm_auth_user_add: Done");
+
+ return (TRUE);
}
-void gdm_auth_user_remove(GdmDisplay *d, gchar *home)
+void
+gdm_auth_user_remove (GdmDisplay *d, uid_t user)
{
- gchar *authstr;
- gchar **argv;
- pid_t authpid;
+ FILE *af;
+ Xauth *xa;
+ GSList *keep = NULL;
+ gchar *authfile, *authdir;
- gdm_debug("gdm_auth_user_remove: Removing cookie from %s", home);
+ if (!d || !d->userauth)
+ return;
- authstr=g_strconcat(GDM_XAUTH_PATH, " -i -f ", home, "/.Xauthority", \
- " remove ", d->name, NULL);
- argv=gdm_arg_munch(authstr);
- g_free(authstr);
+ gdm_debug ("gdm_auth_user_remove: Removing cookie from %s (%d)", d->userauth, d->authfb);
- switch(authpid=fork()) {
-
- case 0:
- execv(argv[0], argv);
- gdm_error(_("gdm_auth_user_remove: Error starting xauth process: %s"), strerror(errno));
+ /* If we are using the fallback cookie location, simply nuke the
+ * cookie file */
+ if (d->authfb) {
+ unlink (d->userauth);
+ g_free (d->userauth);
+ d->userauth = NULL;
return;
-
- case -1:
- gdm_error(_("gdm_auth_user_remove: Error forking xauth process."));
+ }
+
+ authfile = g_basename (d->userauth);
+ authdir = g_dirname (d->userauth);
+
+ /* Now, the cookie file could be owned by a malicious user who
+ * decided to concatenate something like /dev/kcore or his entire
+ * MP3 collection to it. So we better play it safe... */
+
+ if (! gdm_file_check ("gdm_auth_user_remove", user, authdir, authfile,
+ FALSE, GdmUserMaxFile, GdmRelaxPerms)) {
+ gdm_error (_("gdm_auth_user_remove: Ignoring suspicious looking cookie file %s"), d->userauth);
+ return;
+ }
+
+ g_free (authfile);
+ g_free (authdir);
+
+ if (XauLockAuth (d->userauth, 3, 3, 0) != LOCK_SUCCESS)
return;
-
- default:
- waitpid(authpid, 0, 0); /* Wait for xauth to finish */
- break;
+ af = fopen (d->userauth, "r");
+
+ if (!af) {
+ XauUnlockAuth (d->userauth);
+ return;
+ }
+
+ /* Read the user's entire Xauth file into memory to avoid temporary file
+ * issues */
+ while ( (xa = XauReadAuth (af)) )
+ if (memcmp (d->bcookie, xa->data, xa->data_length))
+ keep = g_slist_append (keep, xa);
+ else
+ XauDisposeAuth (xa);
+
+ fclose (af);
+
+ /* Truncate and write out all cookies not belonging to this display */
+ af = fopen (d->userauth, "w");
+
+ if (!af) {
+ XauUnlockAuth (d->userauth);
+ return;
}
+
+ while (keep) {
+ XauWriteAuth (af, keep->data);
+ XauDisposeAuth (keep->data);
+ keep = keep->next;
+ }
+
+ g_slist_free (keep);
+
+ fclose (af);
+ XauUnlockAuth (d->userauth);
+
+ g_free (d->userauth);
+ d->userauth = NULL;
+
+ return;
}
+
/* EOF */
diff --git a/daemon/cookie.c b/daemon/cookie.c
index 301f479c..d02d7228 100644
--- a/daemon/cookie.c
+++ b/daemon/cookie.c
@@ -19,7 +19,7 @@
/*
* Functions for generating MIT-MAGIC-COOKIEs.
*
- * This code was derived (stolen!) from mcookie.c written by Rik Faith
+ * This code was derived (i.e. stolen) from mcookie.c written by Rik Faith
* <faith@cs.unc.edu>
*
*/
@@ -51,13 +51,13 @@ struct rngs {
#define RNGS (sizeof(rngs)/sizeof(struct rngs))
-void gdm_cookie_generate(GdmDisplay *);
+void gdm_cookie_generate (GdmDisplay *);
void
-gdm_cookie_generate(GdmDisplay *d)
+gdm_cookie_generate (GdmDisplay *d)
{
int i;
- struct MD5Context ctx;
+ struct GdmMD5Context ctx;
unsigned char digest[16];
unsigned char buf[MAXBUFFERSIZE];
int fd;
@@ -68,38 +68,43 @@ gdm_cookie_generate(GdmDisplay *d)
char sub[8];
char cookie[40];
- sub[0]='\0';
- cookie[0]='\0';
+ sub[0] = '\0';
+ cookie[0] = '\0';
- MD5Init( &ctx );
- gettimeofday( &tv, &tz );
- MD5Update( &ctx, (unsigned char *)&tv, sizeof( tv ) );
+ gdm_md5_init (&ctx);
+ gettimeofday (&tv, &tz);
+ gdm_md5_update (&ctx, (unsigned char *) &tv, sizeof (tv));
pid = getppid();
- MD5Update( &ctx, (unsigned char *)&pid, sizeof( pid ));
+ gdm_md5_update (&ctx, (unsigned char *) &pid, sizeof (pid));
pid = getpid();
- MD5Update( &ctx, (unsigned char *)&pid, sizeof( pid ));
+ gdm_md5_update (&ctx, (unsigned char *) &pid, sizeof (pid));
for (i = 0; i < RNGS; i++) {
- if ((fd = open( rngs[i].path, O_RDONLY|O_NONBLOCK )) >= 0) {
- r = read( fd, buf, sizeof( buf ) );
+ if ((fd = open (rngs[i].path, O_RDONLY|O_NONBLOCK)) >= 0) {
+
+ r = read (fd, buf, sizeof (buf));
+
if (r > 0)
- MD5Update( &ctx, buf, r );
+ gdm_md5_update (&ctx, buf, r);
else
r = 0;
- close( fd );
- if (r >= rngs[i].length) break;
+
+ close (fd);
+
+ if (r >= rngs[i].length)
+ break;
}
}
- MD5Final(digest, &ctx);
+ gdm_md5_final (digest, &ctx);
for (i = 0; i < 16; i++) {
- sprintf(sub, "%02x", digest[i]);
- strcat(cookie, sub);
+ sprintf (sub, "%02x", digest[i]);
+ strcat (cookie, sub);
}
- d->cookie=g_strdup(cookie);
- d->bcookie=g_strndup(digest, 16);
+ d->cookie = g_strdup (cookie);
+ d->bcookie = g_strndup (digest, 16);
}
diff --git a/daemon/filecheck.c b/daemon/filecheck.c
index a2623dd6..1289a8e5 100644
--- a/daemon/filecheck.c
+++ b/daemon/filecheck.c
@@ -1,5 +1,5 @@
/* GDM - The Gnome Display Manager
- * Copyright (C) 1998, 1999 Martin Kasper Petersen <mkp@SunSITE.auc.dk>
+ * Copyright (C) 1998, 1999 Martin Kasper 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
@@ -30,91 +30,106 @@
static const gchar RCSid[]="$Id$";
-gboolean gdm_file_check(gchar *caller, uid_t user, gchar *dir, gchar *file, gboolean absentok);
-
-extern gint GdmUserMaxFile;
-extern gint GdmRelaxPerms;
+gboolean gdm_file_check (gchar *caller, uid_t user, gchar *dir, gchar *file,
+ gboolean absentok, gint maxsize, gint perms);
+
+/**
+ * gdm_file_check:
+ * @caller: String to be prepended to syslog error messages.
+ * @user: User id for the user owning the file/dir.
+ * @dir: Directory to be examined.
+ * @file: File to be examined.
+ * @absentok: Accept absent files if TRUE.
+ * @maxsize: Maximum acceptable filesize in KB. 0 to disable.
+ * @perms: 0 to allow user writable file/dir only. 1 to allow group and 2 to allow global writable file/dir.
+ *
+ * Examines a file to determine whether it is safe for the daemon to write to it.
+ */
gboolean
-gdm_file_check(gchar *caller, uid_t user, gchar *dir, gchar *file, gboolean absentok)
+gdm_file_check (gchar *caller, uid_t user, gchar *dir, gchar *file,
+ gboolean absentok, gint maxsize, gint perms)
{
struct stat statbuf;
- gchar *str;
+ gchar *fullpath;
/* Stat directory */
- if(stat(dir, &statbuf) == -1)
- return(FALSE);
+ if (stat (dir, &statbuf) == -1) {
+ syslog (LOG_WARNING, _("%s: Directory %s does not exist."), caller, dir);
+ return (FALSE);
+ }
- /* Check if dir is owned by the user */
- if(statbuf.st_uid != user) {
- syslog(LOG_WARNING, _("%s: %s is not owned by uid %d."), caller, dir, user);
- return(FALSE);
+ /* Check if dir is owned by the user ... */
+ if (statbuf.st_uid != user) {
+ syslog (LOG_WARNING, _("%s: %s is not owned by uid %d."), caller, dir, user);
+ return (FALSE);
}
- /* Check if group has write permission */
- if(GdmRelaxPerms<1 && (statbuf.st_mode & S_IWGRP) == S_IWGRP) {
- syslog(LOG_WARNING, _("%s: %s is writable by group."), caller, dir);
- return(FALSE);
+ /* ... if group has write permission ... */
+ if (perms < 1 && (statbuf.st_mode & S_IWGRP) == S_IWGRP) {
+ syslog (LOG_WARNING, _("%s: %s is writable by group."), caller, dir);
+ return (FALSE);
}
- /* Check if other has write permission */
- if(GdmRelaxPerms<2 && (statbuf.st_mode & S_IWOTH) == S_IWOTH) {
- syslog(LOG_WARNING, _("%s: %s is writable by other."), caller, dir);
- return(FALSE);
+ /* ... and if others have write permission. */
+ if (perms < 2 && (statbuf.st_mode & S_IWOTH) == S_IWOTH) {
+ syslog (LOG_WARNING, _("%s: %s is writable by other."), caller, dir);
+ return (FALSE);
}
- str=g_strconcat(dir, "/", file, NULL);
+ fullpath = g_strconcat(dir, "/", file, NULL);
/* Stat file */
- if(stat(str, &statbuf) == -1) {
- g_free(str);
+ if (stat (fullpath, &statbuf) == -1) {
+ g_free (fullpath);
- /* Return true if file is absent and that is ok */
- if(absentok)
- return(TRUE);
+ /* Return true if file does not exist and that is ok */
+ if (absentok)
+ return (TRUE);
else
- return(FALSE);
+ return (FALSE);
}
/* Check that it is a regular file ... */
- if(! S_ISREG(statbuf.st_mode)) {
- syslog(LOG_WARNING,_("%s: %s is not a regular file."), caller, str);
- g_free(str);
- return(FALSE);
+ if (! S_ISREG (statbuf.st_mode)) {
+ syslog (LOG_WARNING,_("%s: %s is not a regular file."), caller, fullpath);
+ g_free (fullpath);
+ return (FALSE);
}
/* ... owned by the user ... */
- if(statbuf.st_uid != user) {
- syslog(LOG_WARNING, _("%s: %s is not owned by uid %d."), caller, str, user);
- g_free(str);
- return(FALSE);
+ if (statbuf.st_uid != user) {
+ syslog (LOG_WARNING, _("%s: %s is not owned by uid %d."), caller, fullpath, user);
+ g_free (fullpath);
+ return (FALSE);
}
/* ... unwritable by group ... */
- if(GdmRelaxPerms<1 && (statbuf.st_mode & S_IWGRP) == S_IWGRP) {
- syslog(LOG_WARNING, _("%s: %s is writable by group."), caller, str);
- g_free(str);
- return(FALSE);
+ if (perms < 1 && (statbuf.st_mode & S_IWGRP) == S_IWGRP) {
+ syslog (LOG_WARNING, _("%s: %s is writable by group."), caller, fullpath);
+ g_free (fullpath);
+ return (FALSE);
}
/* ... unwritable by others ... */
- if(GdmRelaxPerms<2 && (statbuf.st_mode & S_IWOTH) == S_IWOTH) {
- syslog(LOG_WARNING, _("%s: %s is writable by group/other."), caller, str);
- g_free(str);
- return(FALSE);
+ if (perms < 2 && (statbuf.st_mode & S_IWOTH) == S_IWOTH) {
+ syslog (LOG_WARNING, _("%s: %s is writable by group/other."), caller, fullpath);
+ g_free (fullpath);
+ return (FALSE);
}
/* ... and smaller than sysadmin specified limit. */
- if(statbuf.st_size > GdmUserMaxFile) {
- syslog(LOG_WARNING, _("%s: %s is bigger than sysadmin specified maximum file size."), caller, str);
- g_free(str);
- return(FALSE);
+ if (maxsize && statbuf.st_size > maxsize) {
+ syslog (LOG_WARNING, _("%s: %s is bigger than sysadmin specified maximum file size."),
+ caller, fullpath);
+ g_free (fullpath);
+ return (FALSE);
}
- g_free(str);
+ g_free (fullpath);
/* Yeap, this file is ok */
- return(TRUE);
+ return (TRUE);
}
/* EOF */
diff --git a/daemon/gdm.c b/daemon/gdm.c
index 40907616..702c7ae5 100644
--- a/daemon/gdm.c
+++ b/daemon/gdm.c
@@ -31,29 +31,30 @@
#include <errno.h>
#include <ctype.h>
#include <config.h>
+#include <X11/Xauth.h>
#include "gdm.h"
static const gchar RCSid[]="$Id$";
-extern void gdm_slave_start(GdmDisplay *);
-extern gchar **gdm_arg_munch(const gchar *p);
-extern void gdm_fail(const gchar *, ...);
-extern void gdm_info(const gchar *, ...);
-extern void gdm_error(const gchar *, ...);
-extern GdmDisplay *gdm_server_alloc(gint id, gchar *command);
-extern void gdm_server_start(GdmDisplay *d);
-extern void gdm_server_stop(GdmDisplay *d);
-extern void gdm_server_restart(GdmDisplay *d);
-extern void gdm_debug(const gchar *format, ...);
-extern int gdm_xdmcp_init(void);
-extern void gdm_xdmcp_run(void);
-extern void gdm_xdmcp_close(void);
-
-gint gdm_display_manage(GdmDisplay *d);
+extern void gdm_slave_start (GdmDisplay *);
+extern gchar **gdm_arg_munch (const gchar *p);
+extern void gdm_fail (const gchar *, ...);
+extern void gdm_info (const gchar *, ...);
+extern void gdm_error (const gchar *, ...);
+extern GdmDisplay *gdm_server_alloc (gint id, gchar *command);
+extern void gdm_server_start (GdmDisplay *d);
+extern void gdm_server_stop (GdmDisplay *d);
+extern void gdm_server_restart (GdmDisplay *d);
+extern void gdm_debug (const gchar *format, ...);
+extern int gdm_xdmcp_init (void);
+extern void gdm_xdmcp_run (void);
+extern void gdm_xdmcp_close (void);
+
+gint gdm_display_manage (GdmDisplay *d);
void gdm_display_dispose (GdmDisplay *d);
-static void gdm_local_servers_start(GdmDisplay *d);
-static void gdm_display_unmanage(GdmDisplay *d);
+static void gdm_local_servers_start (GdmDisplay *d);
+static void gdm_display_unmanage (GdmDisplay *d);
GSList *displays;
gint sessions=0;
@@ -65,17 +66,20 @@ uid_t GdmUserId;
gid_t GdmGroupId;
gchar *GdmSessDir = NULL;
gchar *GdmGreeter = NULL;
+gchar *GdmChooser = NULL;
gchar *GdmLogDir = NULL;
gchar *GdmDisplayInit = NULL;
gchar *GdmPreSession = NULL;
gchar *GdmPostSession = NULL;
gchar *GdmHalt = NULL;
gchar *GdmReboot = NULL;
-gchar *GdmAuthDir = NULL;
+gchar *GdmServAuthDir = NULL;
+gchar *GdmUserAuthDir = NULL;
gchar *GdmUserAuthFile = NULL;
-gchar *GdmSuspend = NULL;
+gchar *GdmUserAuthFB = NULL;
gchar *GdmPidFile = NULL;
gchar *GdmDefaultPath = NULL;
+gchar *GdmRootPath = NULL;
gint GdmKillInitClients = 0;
gint GdmUserMaxFile = 0;
gint GdmXdmcp;
@@ -96,29 +100,51 @@ struct _childstat { pid_t pid; gint status; };
void
gdm_display_dispose (GdmDisplay *d)
{
- if(d->type == DISPLAY_XDMCP) {
- displays=g_slist_remove(displays, d);
+ GSList *tmpauth;
+
+ if (!d)
+ return;
+
+ if (d->type == DISPLAY_XDMCP) {
+ displays = g_slist_remove (displays, d);
sessions--;
}
- if(d->name) {
- gdm_debug("gdm_display_dispose: Disposing %s", d->name);
- g_free(d->name);
+ if (d->name) {
+ gdm_debug ("gdm_display_dispose: Disposing %s", d->name);
+ g_free (d->name);
}
- if(d->auth)
- g_free(d->auth);
+ if (d->hostname)
+ g_free (d->hostname);
- if(d->command)
- g_free(d->command);
+ if (d->authfile)
+ g_free (d->authfile);
- if(d->cookie)
- g_free(d->cookie);
+ if (d->auths) {
+ tmpauth = d->auths;
- if(d->bcookie)
- g_free(d->bcookie);
+ while (tmpauth && tmpauth->data) {
+ /* XauDisposeAuth ((Xauth *) tmpauth->data); */
+ tmpauth = tmpauth->next;
+ }
+
+ g_slist_free (d->auths);
+ }
- g_free(d);
+ if (d->userauth)
+ g_free (d->userauth);
+
+ if (d->command)
+ g_free (d->command);
+
+ if (d->cookie)
+ g_free (d->cookie);
+
+ if (d->bcookie)
+ g_free (d->bcookie);
+
+ g_free (d);
}
@@ -133,394 +159,406 @@ gdm_config_parse (void)
displays = NULL;
- if(stat(GDM_CONFIG_FILE, &statbuf) == -1)
- gdm_fail(_("gdm_config_parse: No configuration file: %s. Aborting."), GDM_CONFIG_FILE);
+ if (stat (GDM_CONFIG_FILE, &statbuf) == -1)
+ gdm_fail (_("gdm_config_parse: No configuration file: %s. Aborting."), GDM_CONFIG_FILE);
gnome_config_push_prefix ("=" GDM_CONFIG_FILE "=/");
- GdmPidFile=g_strdup(gnome_config_get_string("daemon/pidfile=/var/run/gdm.pid"));
- GdmUser=g_strdup(gnome_config_get_string("daemon/user=gdm"));
- GdmGroup=g_strdup(gnome_config_get_string("daemon/group=gdm"));
- GdmGreeter=g_strdup(gnome_config_get_string("daemon/greeter"));
- GdmSessDir=g_strdup(gnome_config_get_string("daemon/sessiondir"));
- GdmLogDir=g_strdup(gnome_config_get_string("daemon/logdir"));
- GdmDisplayInit=g_strdup(gnome_config_get_string("daemon/displayinitdir"));
- GdmPreSession=g_strdup(gnome_config_get_string("daemon/presessionscriptdir"));
- GdmPostSession=g_strdup(gnome_config_get_string("daemon/postsessionscriptdir"));
- GdmHalt=g_strdup(gnome_config_get_string("daemon/haltcommand=/sbin/shutdown -h now"));
- GdmReboot=g_strdup(gnome_config_get_string("daemon/rebootcommand=/sbin/shutdown -r now"));
- GdmSuspend=g_strdup(gnome_config_get_string("daemon/suspendcommand"));
- GdmAuthDir=g_strdup(gnome_config_get_string("daemon/authdir"));
- GdmUserAuthFile=g_strdup(gnome_config_get_string("daemon/userauthfile=.Xauthority"));
- GdmKillInitClients=gnome_config_get_int("daemon/killinitclients=1");
- GdmVerboseAuth=gnome_config_get_int("system/verboseauth=1");
- GdmAllowRoot=gnome_config_get_int("system/allowroot=0");
- GdmRelaxPerms=gnome_config_get_int("system/relaxpermissions=0");
- GdmRetryDelay=gnome_config_get_int("system/retrydelay=3");
- GdmUserMaxFile=gnome_config_get_int("system/userfilecutoffsize=65536");
- GdmXdmcp=gnome_config_get_int("xdmcp/enable=1");
- GdmMaxPending=gnome_config_get_int("xdmcp/maxpending=4");
- GdmMaxManageWait=gnome_config_get_int("xdmcp/maxmanagewait=20");
- GdmMaxSessions=gnome_config_get_int("xdmcp/maxsessions=4");
- GdmPort=gnome_config_get_int("xdmcp/port=177");
- GdmDebug=gnome_config_get_int("debug/enable=0");
- GdmDefaultPath=g_strdup(gnome_config_get_string("system/defaultpath=/bin:/usr/bin:/usr/X11/bin:/usr/local/bin"));
-
- if(GdmGreeter==NULL && stat("/usr/local/bin/gdmgreeter", &statbuf)==0)
- GdmGreeter="/usr/local/bin/gdmgreeter";
-
- if(GdmGreeter==NULL && stat("/usr/bin/gdmgreeter", &statbuf)==0)
- GdmGreeter="/usr/bin/gdmgreeter";
-
- if(GdmGreeter==NULL && stat("/opt/gnome/bin/gdmgreeter", &statbuf)==0)
- GdmGreeter="/opt/gnome/bin/gdmgreeter";
+
+ GdmChooser = gnome_config_get_string (GDM_KEY_CHOOSER);
+ GdmDefaultPath = gnome_config_get_string (GDM_KEY_PATH);
+ GdmDisplayInit = gnome_config_get_string (GDM_KEY_INITDIR);
+ GdmGreeter = gnome_config_get_string (GDM_KEY_GREETER);
+ GdmGroup = gnome_config_get_string (GDM_KEY_GROUP);
+ GdmHalt = gnome_config_get_string (GDM_KEY_HALT);
+ GdmKillInitClients = gnome_config_get_int (GDM_KEY_KILLIC);
+ GdmLogDir= gnome_config_get_string (GDM_KEY_LOGDIR);
+ GdmPidFile = gnome_config_get_string (GDM_KEY_PIDFILE);
+ GdmPostSession = gnome_config_get_string (GDM_KEY_POSTSESS);
+ GdmPreSession = gnome_config_get_string (GDM_KEY_PRESESS);
+ GdmReboot = gnome_config_get_string (GDM_KEY_REBOOT);
+ GdmRetryDelay = gnome_config_get_int (GDM_KEY_RETRYDELAY);
+ GdmRootPath = gnome_config_get_string (GDM_KEY_ROOTPATH);
+ GdmServAuthDir = gnome_config_get_string (GDM_KEY_SERVAUTH);
+ GdmSessDir= gnome_config_get_string (GDM_KEY_SESSDIR);
+ GdmUser = gnome_config_get_string (GDM_KEY_USER);
+ GdmUserAuthDir = gnome_config_get_string (GDM_KEY_UAUTHDIR);
+ GdmUserAuthFile = gnome_config_get_string (GDM_KEY_UAUTHFILE);
+ GdmUserAuthFB = gnome_config_get_string (GDM_KEY_UAUTHFB);
+
+ GdmAllowRoot = gnome_config_get_int (GDM_KEY_ALLOWROOT);
+ GdmRelaxPerms = gnome_config_get_int (GDM_KEY_RELAXPERM);
+ GdmUserMaxFile = gnome_config_get_int (GDM_KEY_MAXFILE);
+ GdmVerboseAuth = gnome_config_get_int (GDM_KEY_VERBAUTH);
+
+ GdmXdmcp = gnome_config_get_int (GDM_KEY_XDMCP);
+ GdmMaxPending = gnome_config_get_int (GDM_KEY_MAXPEND);
+ GdmMaxManageWait = gnome_config_get_int (GDM_KEY_MAXWAIT);
+ GdmMaxSessions = gnome_config_get_int (GDM_KEY_MAXSESS);
+ GdmPort = gnome_config_get_int (GDM_KEY_UDPPORT);
+
+ GdmDebug = gnome_config_get_int (GDM_KEY_DEBUG);
+
+ if (GdmGreeter==NULL && stat ("/usr/local/bin/gdmlogin", &statbuf)==0)
+ GdmGreeter = "/usr/local/bin/gdmlogin";
+
+ if (GdmGreeter==NULL && stat ("/usr/bin/gdmlogin", &statbuf)==0)
+ GdmGreeter = "/usr/bin/gdmlogin";
+
+ if (GdmGreeter==NULL && stat ("/opt/gnome/bin/gdmlogin", &statbuf)==0)
+ GdmGreeter = "/opt/gnome/bin/gdmlogin";
- if(GdmGreeter==NULL)
- gdm_fail(_("gdm_config_parse: No greeter specified and default not found."));
+ if (GdmGreeter==NULL)
+ gdm_fail (_("gdm_config_parse: No greeter specified and default not found."));
- if(GdmAuthDir==NULL && stat("/var/gdm", &statbuf)==0)
- GdmAuthDir="/var/gdm";
+ if (GdmServAuthDir==NULL && stat ("/var/gdm", &statbuf)==0)
+ GdmServAuthDir = "/var/gdm";
- if(GdmAuthDir==NULL && stat("/var/lib/gdm", &statbuf)==0)
- GdmAuthDir="/var/lib/gdm";
+ if (GdmServAuthDir==NULL && stat ("/var/lib/gdm", &statbuf)==0)
+ GdmServAuthDir = "/var/lib/gdm";
- if(GdmAuthDir==NULL && stat("/opt/gnome/var/gdm", &statbuf)==0)
- GdmAuthDir="/opt/gnome/var/gdm";
+ if (GdmServAuthDir==NULL && stat ("/opt/gnome/var/gdm", &statbuf)==0)
+ GdmServAuthDir = "/opt/gnome/var/gdm";
- if(GdmAuthDir==NULL)
- gdm_fail(_("gdm_config_parse: No authdir specified and default not found."));
+ if (GdmServAuthDir==NULL)
+ gdm_fail (_("gdm_config_parse: No authdir specified and default not found."));
- if(GdmLogDir==NULL)
- GdmLogDir=GdmAuthDir;
+ if (GdmLogDir==NULL)
+ GdmLogDir = GdmServAuthDir;
- if(GdmSessDir==NULL && stat("/usr/local/etc/gdm/Sessions", &statbuf)==0)
- GdmSessDir="/usr/local/etc/gdm/Sessions";
+ if (GdmSessDir==NULL && stat ("/usr/local/etc/gdm/Sessions", &statbuf)==0)
+ GdmSessDir = "/usr/local/etc/gdm/Sessions";
- if(GdmSessDir==NULL && stat("/usr/etc/gdm/Sessions", &statbuf)==0)
- GdmSessDir="/usr/etc/gdm/Sessions";
+ if (GdmSessDir==NULL && stat ("/usr/etc/gdm/Sessions", &statbuf)==0)
+ GdmSessDir = "/usr/etc/gdm/Sessions";
- if(GdmSessDir==NULL && stat("/etc/gdm/Sessions", &statbuf)==0)
- GdmSessDir="/etc/gdm/Sessions";
+ if (GdmSessDir==NULL && stat ("/etc/gdm/Sessions", &statbuf)==0)
+ GdmSessDir = "/etc/gdm/Sessions";
- if(GdmSessDir==NULL && stat("/etc/X11/gdm/Sessions", &statbuf)==0)
- GdmSessDir="/etc/X11/gdm/Sessions";
+ if (GdmSessDir==NULL && stat ("/etc/X11/gdm/Sessions", &statbuf)==0)
+ GdmSessDir = "/etc/X11/gdm/Sessions";
- if(GdmSessDir==NULL)
- gdm_fail(_("gdm_config_parse: No sessions directory specified and default not found."));
+ if (GdmSessDir==NULL)
+ gdm_fail (_("gdm_config_parse: No sessions directory specified and default not found."));
gnome_config_pop_prefix();
- iter=gnome_config_init_iterator("=" GDM_CONFIG_FILE "=/servers");
- iter=gnome_config_iterator_next (iter, &k, &v);
+ iter = gnome_config_init_iterator ("=" GDM_CONFIG_FILE "=/" GDM_KEY_SERVERS);
+ iter = gnome_config_iterator_next (iter, &k, &v);
while (iter) {
- if(isdigit(*k))
- displays=g_slist_append(displays, gdm_server_alloc(atoi(k), v));
+ if (isdigit(*k))
+ displays = g_slist_append (displays, gdm_server_alloc (atoi(k), v));
else
- gdm_info(_("gdm_config_parse: Invalid server line in config file. Ignoring!"));
+ gdm_info (_("gdm_config_parse: Invalid server line in config file. Ignoring!"));
- iter=gnome_config_iterator_next (iter, &k, &v);
+ iter = gnome_config_iterator_next (iter, &k, &v);
}
- if(!displays && !GdmXdmcp)
- gdm_fail(_("gdm_config_parse: Xdmcp disabled and no local servers defined. Aborting!"));
+ if (!displays && !GdmXdmcp)
+ gdm_fail (_("gdm_config_parse: Xdmcp disabled and no local servers defined. Aborting!"));
- pwent = getpwnam(GdmUser);
+ pwent = getpwnam (GdmUser);
- if(!pwent)
- gdm_fail(_("gdm_config_parse: Can't find the gdm user (%s). Aborting!"), GdmUser);
+ if (!pwent)
+ gdm_fail (_("gdm_config_parse: Can't find the gdm user (%s). Aborting!"), GdmUser);
else
- GdmUserId=pwent->pw_uid;
+ GdmUserId = pwent->pw_uid;
- if(GdmUserId==0)
- gdm_fail(_("gdm_config_parse: The gdm user should not be root. Aborting!"));
+ if (GdmUserId==0)
+ gdm_fail (_("gdm_config_parse: The gdm user should not be root. Aborting!"));
- grent = getgrnam(GdmGroup);
+ grent = getgrnam (GdmGroup);
- if(!grent)
- gdm_fail(_("gdm_config_parse: Can't find the gdm group (%s). Aborting!"), GdmGroup);
+ if (!grent)
+ gdm_fail (_("gdm_config_parse: Can't find the gdm group (%s). Aborting!"), GdmGroup);
else
- GdmGroupId=grent->gr_gid;
+ GdmGroupId = grent->gr_gid;
+ if (GdmGroupId==0)
+ gdm_fail (_("gdm_config_parse: The gdm group should not be root. Aborting!"));
- if(GdmGroupId==0)
- gdm_fail(_("gdm_config_parse: The gdm group should not be root. Aborting!"));
-
- setegid(GdmGroupId); /* gid remains `gdm' */
- seteuid(GdmUserId);
+ setegid (GdmGroupId); /* gid remains `gdm' */
+ seteuid (GdmUserId);
/* Enter paranoia mode */
- if(stat(GdmAuthDir, &statbuf) == -1)
- gdm_fail(_("gdm_config_parse: Authdir %s does not exist. Aborting."), GdmAuthDir);
+ if (stat (GdmServAuthDir, &statbuf) == -1)
+ gdm_fail (_("gdm_config_parse: Authdir %s does not exist. Aborting."), GdmServAuthDir);
- if(! S_ISDIR(statbuf.st_mode))
- gdm_fail(_("gdm_config_parse: Authdir %s is not a directory. Aborting."), GdmAuthDir);
+ if (! S_ISDIR (statbuf.st_mode))
+ gdm_fail (_("gdm_config_parse: Authdir %s is not a directory. Aborting."), GdmServAuthDir);
- if(statbuf.st_uid != GdmUserId || statbuf.st_gid != GdmGroupId)
- gdm_fail(_("gdm_config_parse: Authdir %s is not owned by user %s, group %s. Aborting."), GdmAuthDir, GdmUser, GdmGroup);
+ if (statbuf.st_uid != GdmUserId || statbuf.st_gid != GdmGroupId)
+ gdm_fail (_("gdm_config_parse: Authdir %s is not owned by user %s, group %s. Aborting."),
+ GdmServAuthDir, GdmUser, GdmGroup);
- if(statbuf.st_mode != (S_IFDIR|S_IRWXU|S_IRGRP|S_IXGRP))
- gdm_fail(_("gdm_config_parse: Authdir %s has wrong permissions. Should be 750. Aborting."), GdmAuthDir, statbuf.st_mode);
+ if (statbuf.st_mode != (S_IFDIR|S_IRWXU|S_IRGRP|S_IXGRP))
+ gdm_fail (_("gdm_config_parse: Authdir %s has wrong permissions. Should be 750. Aborting."),
+ GdmServAuthDir, statbuf.st_mode);
- seteuid(0);
+ seteuid (0);
}
static void
-gdm_local_servers_start(GdmDisplay *d)
+gdm_local_servers_start (GdmDisplay *d)
{
- if(d && d->type == DISPLAY_LOCAL) {
- gdm_debug("gdm_local_servers_start: Starting %s", d->name);
- gdm_server_start(d);
+ if (d && d->type == DISPLAY_LOCAL) {
+ gdm_debug ("gdm_local_servers_start: Starting %s", d->name);
+ gdm_server_start (d);
}
}
gint
-gdm_display_manage(GdmDisplay *d)
+gdm_display_manage (GdmDisplay *d)
{
sigset_t mask, omask;
- if(!d)
- return(FALSE);
+ if (!d)
+ return (FALSE);
- gdm_debug("gdm_display_manage: Managing %s", d->name);
+ gdm_debug ("gdm_display_manage: Managing %s", d->name);
/* If we have an old slave process hanging around, kill it */
- if(d->slavepid) {
- sigemptyset(&mask);
- sigaddset(&mask, SIGCHLD);
- sigprocmask(SIG_BLOCK, &mask, &omask);
+ if (d->slavepid) {
+ sigemptyset (&mask);
+ sigaddset (&mask, SIGCHLD);
+ sigprocmask (SIG_BLOCK, &mask, &omask);
- kill(d->slavepid, SIGINT);
- waitpid(d->slavepid, 0, 0);
+ kill (d->slavepid, SIGINT);
+ waitpid (d->slavepid, 0, 0);
- sigprocmask(SIG_SETMASK, &omask, NULL);
+ sigprocmask (SIG_SETMASK, &omask, NULL);
}
- switch(d->slavepid=fork()) {
+ switch (d->slavepid=fork()) {
case 0:
- setpgid(0, 0);
+ setpgid (0, 0);
/* Close XDMCP fd in slave process */
- gdm_xdmcp_close();
+ if (GdmXdmcp)
+ gdm_xdmcp_close();
- if(d->type == DISPLAY_LOCAL && d->servstat == SERVER_RUNNING)
- gdm_slave_start(d);
+ if (d->type == DISPLAY_LOCAL && d->servstat == SERVER_RUNNING)
+ gdm_slave_start (d);
- if(d->type == DISPLAY_XDMCP && d->dispstat == XDMCP_MANAGED)
- gdm_slave_start(d);
+ if (d->type == DISPLAY_XDMCP && d->dispstat == XDMCP_MANAGED)
+ gdm_slave_start (d);
break;
case -1:
- gdm_error(_("gdm_display_manage: Failed forking gdm slave process for %d"), d->name);
- return(FALSE);
+ gdm_error (_("gdm_display_manage: Failed forking gdm slave process for %d"), d->name);
+ return (FALSE);
default:
- gdm_debug("gdm_display_manage: Forked slave: %d", d->slavepid);
+ gdm_debug ("gdm_display_manage: Forked slave: %d", d->slavepid);
break;
}
- return(TRUE);
+ return (TRUE);
}
static void
-gdm_child_handler(gint sig)
+gdm_child_handler (gint sig)
{
pid_t pid;
- gint exitstatus, status=0;
- GSList *list=displays;
+ gint exitstatus = 0, status = 0;
+ GSList *list = displays;
GdmDisplay *d;
gchar **argv;
/* Get status from all dead children */
- while((pid=waitpid(-1, &exitstatus, WNOHANG)) > 0) {
+ while ((pid=waitpid (-1, &exitstatus, WNOHANG)) > 0) {
- if(WIFEXITED(exitstatus))
- status=WEXITSTATUS(exitstatus);
+ if (WIFEXITED (exitstatus))
+ status=WEXITSTATUS (exitstatus);
- gdm_debug("gdm_child_handler: child %d returned %d", pid, status);
+ gdm_debug ("gdm_child_handler: child %d returned %d", pid, status);
- if(pid < 1)
+ if (pid < 1)
return;
- while(list && list->data) {
+ while (list && list->data) {
- d=list->data;
- gdm_debug("gdm_child_handler: %s", d->name);
+ d = list->data;
+ gdm_debug ("gdm_child_handler: %s", d->name);
/* X server died */
- if(pid == d->servpid) {
- d->servpid=0;
+ if (pid == d->servpid) {
+ d->servpid = 0;
- switch(status) {
+ switch (status) {
case SERVER_SUCCESS:
case SERVER_FAILURE:
- gdm_server_start(d);
+ gdm_server_start (d);
break;
case SERVER_NOTFOUND:
case SERVER_ABORT:
- gdm_display_unmanage(d);
+ gdm_display_unmanage (d);
break;
default:
- gdm_debug("gdm_child_handler: Server process returned unknown status %d", status);
- gdm_display_unmanage(d);
+ gdm_debug ("gdm_child_handler: Server process returned unknown status %d", status);
+ gdm_display_unmanage (d);
break;
}
}
/* Slave died */
- if(pid==d->slavepid) {
- d->slavepid=0;
+ if (pid==d->slavepid) {
+ d->slavepid = 0;
- switch(status) {
+ switch (status) {
case DISPLAY_REMANAGE:
- if(d->type == DISPLAY_LOCAL && d->dispstat != DISPLAY_ABORT) {
- d->dispstat=DISPLAY_DEAD;
- gdm_server_restart(d);
+ if (d->type == DISPLAY_LOCAL && d->dispstat != DISPLAY_ABORT) {
+ d->dispstat = DISPLAY_DEAD;
+ gdm_server_restart (d);
}
- if(d->type == DISPLAY_XDMCP)
- gdm_display_unmanage(d);
+ if (d->type == DISPLAY_XDMCP)
+ gdm_display_unmanage (d);
break;
case DISPLAY_ABORT:
- gdm_info(_("gdm_child_action: Aborting display %s"), d->name);
- gdm_display_unmanage(d);
+ gdm_info (_("gdm_child_action: Aborting display %s"), d->name);
+ gdm_display_unmanage (d);
break;
case DISPLAY_REBOOT:
- gdm_info(_("gdm_child_action: Master rebooting..."));
- g_slist_foreach(displays, (GFunc) gdm_display_unmanage, NULL);
+ gdm_info (_("gdm_child_action: Master rebooting..."));
+ g_slist_foreach (displays, (GFunc) gdm_display_unmanage, NULL);
closelog();
- unlink(GdmPidFile);
- argv=gdm_arg_munch(GdmReboot);
- execv(argv[0], argv);
- gdm_error(_("gdm_child_action: Reboot failed: %s"), strerror(errno));
+ unlink (GdmPidFile);
+ argv = gdm_arg_munch (GdmReboot);
+ execv (argv[0], argv);
+ gdm_error (_("gdm_child_action: Reboot failed: %s"), strerror(errno));
break;
case DISPLAY_HALT:
- gdm_info(_("gdm_child_action: Master halting..."));
- g_slist_foreach(displays, (GFunc) gdm_display_unmanage, NULL);
+ gdm_info (_("gdm_child_action: Master halting..."));
+ g_slist_foreach (displays, (GFunc) gdm_display_unmanage, NULL);
closelog();
- unlink(GdmPidFile);
- argv=gdm_arg_munch(GdmHalt);
- execv(argv[0], argv);
- gdm_error(_("gdm_child_action: Halt failed: %s"), strerror(errno));
+ unlink (GdmPidFile);
+ argv = gdm_arg_munch (GdmHalt);
+ execv (argv[0], argv);
+ gdm_error (_("gdm_child_action: Halt failed: %s"), strerror(errno));
break;
case DISPLAY_RESERVER:
default:
- gdm_debug("gdm_child_action: Slave process returned %d", status);
+ gdm_debug ("gdm_child_action: Slave process returned %d", status);
- if(d->type == DISPLAY_LOCAL && d->dispstat != DISPLAY_ABORT) {
- d->dispstat=DISPLAY_DEAD;
- gdm_server_start(d);
+ if (d->type == DISPLAY_LOCAL && d->dispstat != DISPLAY_ABORT) {
+ d->dispstat = DISPLAY_DEAD;
+ gdm_server_start (d);
}
- if(d->type == DISPLAY_XDMCP)
- gdm_display_unmanage(d);
+ if (d->type == DISPLAY_XDMCP)
+ gdm_display_unmanage (d);
break;
}
}
- list=list->next;
+ list = list->next;
}
}
}
static void
-gdm_display_unmanage(GdmDisplay *d)
+gdm_display_unmanage (GdmDisplay *d)
{
- if(!d)
+ if (!d)
return;
- gdm_debug("gdm_display_unmanage: Stopping %s", d->name);
+ gdm_debug ("gdm_display_unmanage: Stopping %s", d->name);
- if(d->type == DISPLAY_LOCAL) {
+ if (d->type == DISPLAY_LOCAL) {
/* Kill slave and all its children */
- if(d->slavepid) {
- kill(-(d->slavepid), SIGTERM);
- waitpid(d->slavepid, 0, 0);
- d->slavepid=0;
+ if (d->slavepid) {
+ kill (-(d->slavepid), SIGTERM);
+ waitpid (d->slavepid, 0, 0);
+ d->slavepid = 0;
}
- if(d->servpid) {
- gdm_server_stop(d);
+ if (d->servpid) {
+ gdm_server_stop (d);
}
- d->dispstat=DISPLAY_DEAD;
+ d->dispstat = DISPLAY_DEAD;
}
else { /* DISPLAY_XDMCP */
- if(d->slavepid) {
- kill(d->slavepid, SIGTERM);
- waitpid(d->slavepid, 0, 0);
- d->slavepid=0;
+ if (d->slavepid) {
+ kill (d->slavepid, SIGTERM);
+ waitpid (d->slavepid, 0, 0);
+ d->slavepid = 0;
}
- gdm_display_dispose(d);
+ gdm_display_dispose (d);
}
}
static void
-gdm_term_handler(int sig)
+gdm_term_handler (int sig)
{
sigset_t mask;
- gdm_debug("gdm_term_handler: Got TERM/INT. Going down!");
+ gdm_debug ("gdm_term_handler: Got TERM/INT. Going down!");
- sigemptyset(&mask);
- sigaddset(&mask, SIGCHLD);
- sigprocmask(SIG_BLOCK, &mask, NULL);
+ sigemptyset (&mask);
+ sigaddset (&mask, SIGCHLD);
+ sigprocmask (SIG_BLOCK, &mask, NULL);
- g_slist_foreach(displays, (GFunc) gdm_display_unmanage, NULL);
+ g_slist_foreach (displays, (GFunc) gdm_display_unmanage, NULL);
closelog();
- unlink(GdmPidFile);
- exit(EXIT_SUCCESS);
+ unlink (GdmPidFile);
+
+ exit (EXIT_SUCCESS);
}
static void
-gdm_daemonify(void)
+gdm_daemonify (void)
{
FILE *pf;
pid_t pid;
- if((pid=fork())) {
- if((pf=fopen(GdmPidFile, "w"))) {
- fprintf(pf, "%d\n", pid);
- fclose(pf);
+ if ((pid=fork())) {
+
+ if ((pf = fopen (GdmPidFile, "w"))) {
+ fprintf (pf, "%d\n", pid);
+ fclose (pf);
}
- exit(EXIT_SUCCESS);
+
+ exit (EXIT_SUCCESS);
}
- if(pid<0)
- gdm_fail(_("gdm_daemonify: fork() failed!"));
+ if (pid<0)
+ gdm_fail (_("gdm_daemonify: fork() failed!"));
- if(setsid() < 0)
- gdm_fail(_("gdm_daemonify: setsid() failed: %s!"), strerror(errno));
+ if (setsid() < 0)
+ gdm_fail (_("gdm_daemonify: setsid() failed: %s!"), strerror(errno));
- chdir(GdmAuthDir);
- umask(022);
+ chdir (GdmServAuthDir);
+ umask (022);
- close(0);
- close(1);
- close(2);
+ close (0);
+ close (1);
+ close (2);
open ("/dev/null", O_RDONLY);
dup2 (0, 1);
@@ -534,43 +572,49 @@ main (int argc, char *argv[])
sigset_t mask;
struct sigaction term, child;
FILE *pf;
- GMainLoop *main_loop;
+ GMainLoop *main_loop;
- /* xdm compatible error message */
- if(getuid()) {
- fprintf(stderr, _("Only root wants to run gdm\n"));
- exit(EXIT_FAILURE);
+ if (getuid()) {
+
+ /* XDM compliant error message */
+ fprintf (stderr, _("Only root wants to run x^hgdm\n"));
+
+ exit (EXIT_FAILURE);
}
umask (022);
- gnomelib_init("gdm", VERSION);
- main_loop = g_main_new(FALSE);
- openlog("gdm", LOG_PID, LOG_DAEMON);
+ gnome_do_not_create_directories = TRUE;
+ gnomelib_init ("gdm", VERSION);
+ main_loop = g_main_new (FALSE);
+ openlog ("gdm", LOG_PID, LOG_DAEMON);
gdm_config_parse();
- if(!access(GdmPidFile, R_OK)) {
+ if (!access (GdmPidFile, R_OK)) {
/* Check the process is still alive. Don't abort otherwise. */
int pidv;
- pf=fopen(GdmPidFile, "r");
- if(pf && fscanf(pf, "%d", &pidv)==1 && kill(pidv,0)!=-1) {
- fclose(pf);
- fprintf(stderr, _("gdm already running. Aborting!\n\n"));
- exit(EXIT_FAILURE);
+ pf = fopen (GdmPidFile, "r");
+ if (pf && fscanf (pf, "%d", &pidv)==1 && kill (pidv,0)!=-1) {
+
+ fclose (pf);
+ fprintf (stderr, _("gdm already running. Aborting!\n\n"));
+
+ exit (EXIT_FAILURE);
}
- fclose(pf);
- fprintf(stderr, _("According to %s, gdm was already running (%d),\n"
- "but seems to have been murdered mysteriously.\n"), GdmPidFile, pidv);
- unlink(GdmPidFile);
+ fclose (pf);
+ fprintf (stderr, _("According to %s, gdm was already running (%d),\n"
+ "but seems to have been murdered mysteriously.\n"),
+ GdmPidFile, pidv);
+ unlink (GdmPidFile);
}
/* Become daemon unless started in -nodaemon mode or child of init */
- if( (argc==2 && strcmp(argv[1],"-nodaemon")==0) || getppid()==1) {
- if((pf=fopen(GdmPidFile, "w"))) {
- fprintf(pf, "%d\n", getpid());
- fclose(pf);
+ if ( (argc==2 && strcmp (argv[1],"-nodaemon")==0) || getppid()==1) {
+ if ((pf = fopen (GdmPidFile, "w"))) {
+ fprintf (pf, "%d\n", getpid());
+ fclose (pf);
}
}
else
@@ -579,47 +623,44 @@ main (int argc, char *argv[])
/* Signal handling */
term.sa_handler = gdm_term_handler;
term.sa_flags = SA_RESTART;
- sigemptyset(&term.sa_mask);
+ sigemptyset (&term.sa_mask);
- if(sigaction(SIGTERM, &term, NULL) < 0)
- gdm_fail(_("gdm_main: Error setting up TERM signal handler"));
+ if (sigaction (SIGTERM, &term, NULL) < 0)
+ gdm_fail (_("gdm_main: Error setting up TERM signal handler"));
- if(sigaction(SIGINT, &term, NULL) < 0)
- gdm_fail(_("gdm_main: Error setting up INT signal handler"));
+ if (sigaction (SIGINT, &term, NULL) < 0)
+ gdm_fail (_("gdm_main: Error setting up INT signal handler"));
child.sa_handler = gdm_child_handler;
child.sa_flags = SA_RESTART|SA_NOCLDSTOP;
- sigemptyset(&child.sa_mask);
- sigaddset(&child.sa_mask, SIGCHLD);
+ sigemptyset (&child.sa_mask);
+ sigaddset (&child.sa_mask, SIGCHLD);
- if(sigaction(SIGCHLD, &child, NULL) < 0)
- gdm_fail(_("gdm_main: Error setting up CHLD signal handler"));
+ if (sigaction (SIGCHLD, &child, NULL) < 0)
+ gdm_fail (_("gdm_main: Error setting up CHLD signal handler"));
- sigemptyset(&mask);
- sigaddset(&mask, SIGINT);
- sigaddset(&mask, SIGTERM);
- sigaddset(&mask, SIGCHLD);
- sigprocmask(SIG_UNBLOCK, &mask, &sysmask); /* Save system sigmask */
+ sigemptyset (&mask);
+ sigaddset (&mask, SIGINT);
+ sigaddset (&mask, SIGTERM);
+ sigaddset (&mask, SIGCHLD);
+ sigprocmask (SIG_UNBLOCK, &mask, &sysmask); /* Save system sigmask */
- gdm_debug("gdm_main: Here we go...");
+ gdm_debug ("gdm_main: Here we go...");
/* Init XDMCP if applicable */
- if(GdmXdmcp)
+ if (GdmXdmcp)
gdm_xdmcp_init();
/* Start local X servers */
- g_slist_foreach(displays, (GFunc) gdm_local_servers_start, NULL);
+ g_slist_foreach (displays, (GFunc) gdm_local_servers_start, NULL);
/* Accept remote connections */
- if(GdmXdmcp) {
- gdm_debug("Accepting XDMCP connections...");
+ if (GdmXdmcp) {
+ gdm_debug ("Accepting XDMCP connections...");
gdm_xdmcp_run();
}
- g_main_run(main_loop);
-
- for(;;)
- pause();
+ g_main_run (main_loop);
return (EXIT_SUCCESS);
}
diff --git a/daemon/gdm.h b/daemon/gdm.h
index 00c0f9ee..37bcce35 100644
--- a/daemon/gdm.h
+++ b/daemon/gdm.h
@@ -1,5 +1,5 @@
/* GDM - The Gnome Display Manager
- * Copyright (C) 1998 Martin Kasper Petersen <mkp@mkp.net>
+ * Copyright (C) 1998, 1999 Martin Kasper 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
@@ -42,6 +42,10 @@
#define XDMCP_PENDING 1
#define XDMCP_MANAGED 2
+
+/* Opcodes for the highly sophisticated protocol used for
+ daemon<->greeter communications */
+
#define GDM_MSGERR 'D'
#define GDM_NOECHO 'U'
#define GDM_PROMPT 'N'
@@ -56,24 +60,88 @@
#define FIELD_SIZE 64
#define PIPE_SIZE 1024
+/* Configuration constants */
+#define GDM_KEY_CHOOSER "daemon/Chooser=gdmchooser"
+#define GDM_KEY_GREETER "daemon/Greeter=gdmlogin"
+#define GDM_KEY_GROUP "daemon/Group=gdm"
+#define GDM_KEY_HALT "daemon/HaltCommand=shutdown -h now"
+#define GDM_KEY_INITDIR "daemon/DisplayInitDir="
+#define GDM_KEY_KILLIC "daemon/KillInitClients=1"
+#define GDM_KEY_LOGDIR "daemon/LogDir="
+#define GDM_KEY_PATH "daemon/DefaultPath=/bin:/usr/bin:/usr/bin/X11:/usr/local/bin"
+#define GDM_KEY_PIDFILE "daemon/PidFile=/var/run/gdm.pid"
+#define GDM_KEY_POSTSESS "daemon/PostSessionScriptDir="
+#define GDM_KEY_PRESESS "daemon/PreSessionScriptDir="
+#define GDM_KEY_REBOOT "daemon/RebootCommand=shutdown -r now"
+#define GDM_KEY_ROOTPATH "daemon/RootPath=/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/X11:/usr/local/bin"
+#define GDM_KEY_SERVAUTH "daemon/ServAuthDir=/var/gdm"
+#define GDM_KEY_SESSDIR "daemon/SessionDir="
+#define GDM_KEY_UAUTHDIR "daemon/UserAuthDir="
+#define GDM_KEY_UAUTHFB "daemon/UserAuthFBDir=/tmp"
+#define GDM_KEY_UAUTHFILE "daemon/UserAuthFile=.Xauthority"
+#define GDM_KEY_USER "daemon/User=gdm"
+
+#define GDM_KEY_ALLOWROOT "security/AllowRoot=1"
+#define GDM_KEY_MAXFILE "security/UserMaxFile=65536"
+#define GDM_KEY_RELAXPERM "security/RelaxPermissions=0"
+#define GDM_KEY_RETRYDELAY "security/RetryDelay=3"
+#define GDM_KEY_VERBAUTH "security/VerboseAuth=1"
+
+#define GDM_KEY_XDMCP "xdmcp/Enable=1"
+#define GDM_KEY_MAXPEND "xdmcp/MaxPending=4"
+#define GDM_KEY_MAXSESS "xdmcp/MaxSessions=16"
+#define GDM_KEY_MAXWAIT "xdmcp/MaxWait=30"
+#define GDM_KEY_UDPPORT "xdmcp/Port=177"
+
+#define GDM_KEY_GTKRC "gui/GtkRC="
+#define GDM_KEY_ICONWIDTH "gui/MaxIconWidth=128"
+#define GDM_KEY_ICONHEIGHT "gui/MaxIconHeight=128"
+
+#define GDM_KEY_BROWSER "greeter/Browser=0"
+#define GDM_KEY_EXCLUDE "greeter/Exclude=bin,daemon,adm,lp,sync,shutdown,halt,mail,news,uucp,operator,nobody"
+#define GDM_KEY_FACE "greeter/DefaultFace=nobody.png"
+#define GDM_KEY_FACEDIR "greeter/GlobalFaceDir="
+#define GDM_KEY_FONT "greeter/Font=-adobe-helvetica-bold-r-normal-*-*-180-*-*-*-*-*-*"
+#define GDM_KEY_ICON "greeter/Icon=gdm.xpm"
+#define GDM_KEY_LOCALE "greeter/DefaultLocale=english"
+#define GDM_KEY_LOCFILE "greeter/LocaleFile="
+#define GDM_KEY_LOGO "greeter/Logo="
+#define GDM_KEY_QUIVER "greeter/Quiver=1"
+#define GDM_KEY_SYSMENU "greeter/SystemMenu=0"
+#define GDM_KEY_WELCOME "greeter/Welcome=Welcome to %h"
+
+#define GDM_KEY_SCAN "chooser/ScanTime=3"
+#define GDM_KEY_HOST "chooser/DefaultHostImg=nohost.png"
+#define GDM_KEY_HOSTDIR "chooser/HostImageDir="
+
+#define GDM_KEY_DEBUG "debug/Enable=0"
+
+#define GDM_KEY_SERVERS "servers"
+
+
+#include <glib.h>
#include <X11/Xlib.h>
#include <X11/Xmd.h>
+#include <X11/Xauth.h>
typedef struct _GdmDisplay GdmDisplay;
struct _GdmDisplay {
CARD32 sessionid;
Display *dsp;
- gchar *auth;
+ gchar *authfile;
+ GSList *auths;
+ gchar *userauth;
+ gboolean authfb;
gchar *command;
gchar *cookie;
gchar *bcookie;
gchar *name;
+ gchar *hostname;
gint dispstat;
- gint id;
+ gint dispnum;
gint servstat;
gint type;
- gint dispnum;
pid_t greetpid;
pid_t servpid;
pid_t sesspid;
diff --git a/daemon/md5.c b/daemon/md5.c
index 005568b5..c9e26cfd 100644
--- a/daemon/md5.c
+++ b/daemon/md5.c
@@ -10,19 +10,29 @@
* with every copy.
*
* To compute the message digest of a chunk of bytes, declare an
- * MD5Context structure, pass it to MD5Init, call MD5Update as
- * needed on buffers full of bytes, and then call MD5Final, which
- * will fill a supplied 16-byte array with the digest.
+ * GdmMD5Context structure, pass it to gdm_md5_init, call
+ * gdm_md5_update as needed on buffers full of bytes, and then call
+ * gdm_md5_final, which will fill a supplied 16-byte array with the
+ * digest.
+ *
+ * Changed all names to avoid namespace pollution -- mkp
+ *
*/
+
#include <string.h> /* for memcpy() */
+
+#ifdef __LINUX__
+#include <endian.h>
+#endif
+
#include "md5.h"
-#ifndef HIGHFIRST
+#if BYTE_ORDER == LITTLE_ENDIAN
#define byteReverse(buf, len) /* Nothing */
#else
+
void byteReverse(unsigned char *buf, unsigned longs);
-#ifndef ASM_MD5
/*
* Note: this code is harmless on little-endian machines.
*/
@@ -36,14 +46,15 @@ void byteReverse(unsigned char *buf, unsigned longs)
buf += 4;
} while (--longs);
}
-#endif
+
#endif
/*
* Start MD5 accumulation. Set bit count to 0 and buffer to mysterious
* initialization constants.
*/
-void MD5Init(struct MD5Context *ctx)
+void
+gdm_md5_init (struct GdmMD5Context *ctx)
{
ctx->buf[0] = 0x67452301;
ctx->buf[1] = 0xefcdab89;
@@ -58,7 +69,8 @@ void MD5Init(struct MD5Context *ctx)
* Update context to reflect the concatenation of another buffer full
* of bytes.
*/
-void MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len)
+void
+gdm_md5_update (struct GdmMD5Context *ctx, unsigned char const *buf, unsigned len)
{
uint32 t;
@@ -78,21 +90,22 @@ void MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len)
t = 64 - t;
if (len < t) {
- memcpy(p, buf, len);
+ memcpy (p, buf, len);
return;
}
- memcpy(p, buf, t);
- byteReverse(ctx->in, 16);
- MD5Transform(ctx->buf, (uint32 *) ctx->in);
+ memcpy (p, buf, t);
+ byteReverse (ctx->in, 16);
+ gdm_md5_transform (ctx->buf, (uint32 *) ctx->in);
buf += t;
len -= t;
}
+
/* Process data in 64-byte chunks */
while (len >= 64) {
- memcpy(ctx->in, buf, 64);
- byteReverse(ctx->in, 16);
- MD5Transform(ctx->buf, (uint32 *) ctx->in);
+ memcpy (ctx->in, buf, 64);
+ byteReverse (ctx->in, 16);
+ gdm_md5_transform (ctx->buf, (uint32 *) ctx->in);
buf += 64;
len -= 64;
}
@@ -106,7 +119,8 @@ void MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len)
* Final wrapup - pad to 64-byte boundary with the bit pattern
* 1 0* (64-bit count of bits processed, MSB-first)
*/
-void MD5Final(unsigned char digest[16], struct MD5Context *ctx)
+void
+gdm_md5_final (unsigned char digest[16], struct GdmMD5Context *ctx)
{
unsigned count;
unsigned char *p;
@@ -125,9 +139,9 @@ void MD5Final(unsigned char digest[16], struct MD5Context *ctx)
/* Pad out to 56 mod 64 */
if (count < 8) {
/* Two lots of padding: Pad the first block to 64 bytes */
- memset(p, 0, count);
- byteReverse(ctx->in, 16);
- MD5Transform(ctx->buf, (uint32 *) ctx->in);
+ memset (p, 0, count);
+ byteReverse (ctx->in, 16);
+ gdm_md5_transform (ctx->buf, (uint32 *) ctx->in);
/* Now fill the next block with 56 bytes */
memset(ctx->in, 0, 56);
@@ -141,32 +155,31 @@ void MD5Final(unsigned char digest[16], struct MD5Context *ctx)
((uint32 *) ctx->in)[14] = ctx->bits[0];
((uint32 *) ctx->in)[15] = ctx->bits[1];
- MD5Transform(ctx->buf, (uint32 *) ctx->in);
- byteReverse((unsigned char *) ctx->buf, 4);
- memcpy(digest, ctx->buf, 16);
- memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */
+ gdm_md5_transform (ctx->buf, (uint32 *) ctx->in);
+ byteReverse ((unsigned char *) ctx->buf, 4);
+ memcpy (digest, ctx->buf, 16);
+ memset (ctx, 0, sizeof(ctx)); /* In case it's sensitive */
}
-#ifndef ASM_MD5
/* The four core functions - F1 is optimized somewhat */
-/* #define F1(x, y, z) (x & y | ~x & z) */
#define F1(x, y, z) (z ^ (x & (y ^ z)))
-#define F2(x, y, z) F1(z, x, y)
+#define F2(x, y, z) F1 (z, x, y)
#define F3(x, y, z) (x ^ y ^ z)
#define F4(x, y, z) (y ^ (x | ~z))
/* This is the central step in the MD5 algorithm. */
-#define MD5STEP(f, w, x, y, z, data, s) \
+#define gdm_md5_step(f, w, x, y, z, data, s) \
( w += f(x, y, z) + data, w = w<<s | w>>(32-s), w += x )
/*
* The core of the MD5 algorithm, this alters an existing MD5 hash to
- * reflect the addition of 16 longwords of new data. MD5Update blocks
+ * reflect the addition of 16 longwords of new data. GdmMD5Update blocks
* the data and converts bytes into longwords for this routine.
*/
-void MD5Transform(uint32 buf[4], uint32 const in[16])
+void
+gdm_md5_transform (uint32 buf[4], uint32 const in[16])
{
register uint32 a, b, c, d;
@@ -175,73 +188,73 @@ void MD5Transform(uint32 buf[4], uint32 const in[16])
c = buf[2];
d = buf[3];
- MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
- MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
- MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
- MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
- MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
- MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
- MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
- MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
- MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
- MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
- MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
- MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
- MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
- MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
- MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
- MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
-
- MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
- MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
- MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
- MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
- MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
- MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
- MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
- MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
- MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
- MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
- MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
- MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
- MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
- MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
- MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
- MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
-
- MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
- MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
- MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
- MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
- MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
- MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
- MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
- MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
- MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
- MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
- MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
- MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
- MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
- MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
- MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
- MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
-
- MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
- MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
- MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
- MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
- MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
- MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
- MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
- MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
- MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
- MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
- MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
- MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
- MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
- MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
- MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
- MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
+ gdm_md5_step(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
+ gdm_md5_step(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
+ gdm_md5_step(F1, c, d, a, b, in[2] + 0x242070db, 17);
+ gdm_md5_step(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
+ gdm_md5_step(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
+ gdm_md5_step(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
+ gdm_md5_step(F1, c, d, a, b, in[6] + 0xa8304613, 17);
+ gdm_md5_step(F1, b, c, d, a, in[7] + 0xfd469501, 22);
+ gdm_md5_step(F1, a, b, c, d, in[8] + 0x698098d8, 7);
+ gdm_md5_step(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
+ gdm_md5_step(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
+ gdm_md5_step(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
+ gdm_md5_step(F1, a, b, c, d, in[12] + 0x6b901122, 7);
+ gdm_md5_step(F1, d, a, b, c, in[13] + 0xfd987193, 12);
+ gdm_md5_step(F1, c, d, a, b, in[14] + 0xa679438e, 17);
+ gdm_md5_step(F1, b, c, d, a, in[15] + 0x49b40821, 22);
+
+ gdm_md5_step(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
+ gdm_md5_step(F2, d, a, b, c, in[6] + 0xc040b340, 9);
+ gdm_md5_step(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
+ gdm_md5_step(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
+ gdm_md5_step(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
+ gdm_md5_step(F2, d, a, b, c, in[10] + 0x02441453, 9);
+ gdm_md5_step(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
+ gdm_md5_step(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
+ gdm_md5_step(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
+ gdm_md5_step(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
+ gdm_md5_step(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
+ gdm_md5_step(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
+ gdm_md5_step(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
+ gdm_md5_step(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
+ gdm_md5_step(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
+ gdm_md5_step(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
+
+ gdm_md5_step(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
+ gdm_md5_step(F3, d, a, b, c, in[8] + 0x8771f681, 11);
+ gdm_md5_step(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
+ gdm_md5_step(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
+ gdm_md5_step(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
+ gdm_md5_step(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
+ gdm_md5_step(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
+ gdm_md5_step(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
+ gdm_md5_step(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
+ gdm_md5_step(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
+ gdm_md5_step(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
+ gdm_md5_step(F3, b, c, d, a, in[6] + 0x04881d05, 23);
+ gdm_md5_step(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
+ gdm_md5_step(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
+ gdm_md5_step(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
+ gdm_md5_step(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
+
+ gdm_md5_step(F4, a, b, c, d, in[0] + 0xf4292244, 6);
+ gdm_md5_step(F4, d, a, b, c, in[7] + 0x432aff97, 10);
+ gdm_md5_step(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
+ gdm_md5_step(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
+ gdm_md5_step(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
+ gdm_md5_step(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
+ gdm_md5_step(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
+ gdm_md5_step(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
+ gdm_md5_step(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
+ gdm_md5_step(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
+ gdm_md5_step(F4, c, d, a, b, in[6] + 0xa3014314, 15);
+ gdm_md5_step(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
+ gdm_md5_step(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
+ gdm_md5_step(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
+ gdm_md5_step(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
+ gdm_md5_step(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
buf[0] += a;
buf[1] += b;
@@ -249,5 +262,5 @@ void MD5Transform(uint32 buf[4], uint32 const in[16])
buf[3] += d;
}
-#endif
+
diff --git a/daemon/md5.h b/daemon/md5.h
index e264f686..4899a3ef 100644
--- a/daemon/md5.h
+++ b/daemon/md5.h
@@ -1,5 +1,5 @@
-#ifndef MD5_H
-#define MD5_H
+#ifndef GdmMD5_H
+#define GdmMD5_H
#ifdef __alpha
typedef unsigned int uint32;
@@ -7,21 +7,21 @@ typedef unsigned int uint32;
typedef unsigned long uint32;
#endif
-struct MD5Context {
+struct GdmMD5Context {
uint32 buf[4];
uint32 bits[2];
unsigned char in[64];
};
-void MD5Init(struct MD5Context *context);
-void MD5Update(struct MD5Context *context, unsigned char const *buf,
- unsigned len);
-void MD5Final(unsigned char digest[16], struct MD5Context *context);
-void MD5Transform(uint32 buf[4], uint32 const in[16]);
+void gdm_md5_init (struct GdmMD5Context *context);
+void gdm_md5_update (struct GdmMD5Context *context, unsigned char const *buf,
+ unsigned len);
+void gdm_md5_final (unsigned char digest[16], struct GdmMD5Context *context);
+void gdm_md5_transform (uint32 buf[4], uint32 const in[16]);
/*
* This is needed to make RSAREF happy on some MS-DOS compilers.
*/
-typedef struct MD5Context MD5_CTX;
+/* typedef struct gdm_md5_Context gdm_md5__CTX; */
-#endif /* !MD5_H */
+#endif /* !GdmMD5_H */
diff --git a/daemon/misc.c b/daemon/misc.c
index eb1408f0..5b26473a 100644
--- a/daemon/misc.c
+++ b/daemon/misc.c
@@ -31,259 +31,232 @@
static const gchar RCSid[]="$Id$";
-gchar **gdm_arg_munch(gchar *p);
-gint gdm_exec_script(GdmDisplay *d, gchar *dir);
-void gdm_exec_command(gchar *cmd);
-void gdm_fail(const gchar *format, ...);
-void gdm_abort(const gchar *format, ...);
-void gdm_info(const gchar *format, ...);
-void gdm_error(const gchar *format, ...);
-void gdm_debug(const gchar *format, ...);
-void gdm_remanage(const gchar *format, ...);
-void gdm_putenv(gchar *s);
+gchar **gdm_arg_munch (gchar *p);
+gint gdm_exec_script (GdmDisplay *d, gchar *dir);
+void gdm_fail (const gchar *format, ...);
+void gdm_abort (const gchar *format, ...);
+void gdm_info (const gchar *format, ...);
+void gdm_error (const gchar *format, ...);
+void gdm_debug (const gchar *format, ...);
+void gdm_remanage (const gchar *format, ...);
+
extern gchar *GdmPidFile;
-extern gchar *GdmDefaultPath;
+extern gchar *GdmRootPath;
extern gint GdmDebug;
+/* Written by Alan Cox <alan@redhat.com> */
gchar **
-gdm_arg_munch(gchar *p)
+gdm_arg_munch (gchar *p)
{
- gchar *x=strdup(p);
- gint quoted=0;
- gint argn=0;
- static gchar *argv[16];
+ gchar *x = strdup (p);
+ gint quoted = 0;
+ gint argn = 0;
+ static gchar *argv[16];
+
+ while (*x) {
+ while (*x && isspace (*x))
+ x++;
- while(*x)
- {
- while(*x && isspace(*x))
- x++;
-
- if(*x=='"')
- {
- quoted=1;
- x++;
- }
-
- argv[argn]=x;
-
- while(*x)
- {
- if(*x=='"' && quoted)
- break;
- if(*x==' ' && !quoted)
- break;
- x++;
- }
-
- if(*x)
- *x++=0;
- argn++;
- if(argn==16)
- break;
+ if (*x=='"') {
+ quoted = 1;
+ x++;
}
-
- while(argn<=16) {
- argv[argn]=NULL;
- argn++;
- };
-
- return argv;
+
+ argv[argn] = x;
+
+ while (*x) {
+
+ if (*x=='"' && quoted)
+ break;
+
+ if (*x==' ' && !quoted)
+ break;
+
+ x++;
+ }
+
+ if (*x)
+ *x++ = 0;
+
+ argn++;
+
+ if (argn==16)
+ break;
+ }
+
+ while (argn<=16) {
+ argv[argn] = NULL;
+ argn++;
+ }
+
+ return (argv);
}
-/* Execute a script and wait for it to finish */
-gint
-gdm_exec_script(GdmDisplay *d, gchar *dir)
+/* Execute a script and wait for it to finish. Returns exit status of
+ * the executed script.
+ */
+gint
+gdm_exec_script (GdmDisplay *d, gchar *dir)
{
pid_t pid;
gchar *script, *defscript, *scr;
gchar **argv;
gint status;
- script = g_strconcat(dir, "/", d->name, NULL);
- defscript = g_strconcat(dir, "/Default", NULL);
+ if (!d || !dir)
+ return (EXIT_SUCCESS);
+
+ script = g_strconcat (dir, "/", d->name, NULL);
+ defscript = g_strconcat (dir, "/Default", NULL);
- if(!access(script, R_OK|X_OK))
- scr=script;
- else if (!access(defscript, R_OK|X_OK))
- scr=defscript;
+ if (! access (script, R_OK|X_OK))
+ scr = script;
+ else if (! access (defscript, R_OK|X_OK))
+ scr = defscript;
else
- return(EXIT_SUCCESS);
+ return (EXIT_SUCCESS);
- switch(pid=fork()) {
+ switch (pid = fork()) {
case 0:
- gdm_putenv(g_strconcat("PATH=", GdmDefaultPath, NULL));
- argv=gdm_arg_munch(scr);
- execv(argv[0], argv);
- syslog(LOG_ERR, _("gdm_exec_script: Failed starting: %s"), scr);
- return(EXIT_SUCCESS);
+ setenv ("PATH", GdmRootPath, TRUE);
+ argv = gdm_arg_munch (scr);
+ execv (argv[0], argv);
+ syslog (LOG_ERR, _("gdm_exec_script: Failed starting: %s"), scr);
+ return (EXIT_SUCCESS);
case -1:
- syslog(LOG_ERR, _("gdm_exec_script: Can't fork script process!"));
- return(EXIT_SUCCESS);
+ syslog (LOG_ERR, _("gdm_exec_script: Can't fork script process!"));
+ return (EXIT_SUCCESS);
default:
- waitpid(pid, &status, 0); /* Wait for script to finish */
+ waitpid (pid, &status, 0); /* Wait for script to finish */
- if(WIFEXITED(status))
- return(WEXITSTATUS(status));
+ if (WIFEXITED (status))
+ return (WEXITSTATUS (status));
else
- return(EXIT_SUCCESS);
- };
-}
-
-
-void
-gdm_exec_command(gchar *cmd)
-{
- pid_t pid;
- gchar **argv;
-
- if(!cmd) return;
-
- switch(pid=fork()) {
-
- case 0:
- gdm_putenv(g_strconcat("PATH=", GdmDefaultPath, NULL));
- argv=gdm_arg_munch(cmd);
- execvp(argv[0], argv);
- syslog(LOG_ERR, _("gdm_exec_command: Failed starting: %s"), cmd);
- exit(EXIT_FAILURE);
-
- case -1:
- syslog(LOG_ERR, _("gdm_exec_command: Can't fork process!"));
- break;
-
- default:
- break;
- };
+ return (EXIT_SUCCESS);
+ }
}
/* Log error and abort master daemon */
void
-gdm_fail(const gchar *format, ...)
+gdm_fail (const gchar *format, ...)
{
va_list args;
gchar *s;
- va_start(args, format);
- s=g_strdup_vprintf(format, args);
- va_end(args);
+ va_start (args, format);
+ s = g_strdup_vprintf (format, args);
+ va_end (args);
- syslog(LOG_ERR, s);
- fprintf(stderr, s);
- fprintf(stderr, "\n");
- fflush(stderr);
+ syslog (LOG_ERR, s);
+ fprintf (stderr, s);
+ fprintf (stderr, "\n");
+ fflush (stderr);
- g_free(s);
- unlink(GdmPidFile);
+ g_free (s);
+ unlink (GdmPidFile);
closelog();
- exit(EXIT_FAILURE);
+ exit (EXIT_FAILURE);
}
/* Log error and abort the slave daemon */
void
-gdm_abort(const gchar *format, ...)
+gdm_abort (const gchar *format, ...)
{
va_list args;
gchar *s;
- va_start(args, format);
- s=g_strdup_vprintf(format, args);
- va_end(args);
+ va_start (args, format);
+ s = g_strdup_vprintf (format, args);
+ va_end (args);
- syslog(LOG_ERR, s);
+ syslog (LOG_ERR, s);
- g_free(s);
+ g_free (s);
- exit(DISPLAY_ABORT);
+ exit (DISPLAY_ABORT);
}
/* Remanage display */
void
-gdm_remanage(const gchar *format, ...)
+gdm_remanage (const gchar *format, ...)
{
va_list args;
gchar *s;
- va_start(args, format);
- s=g_strdup_vprintf(format, args);
- va_end(args);
+ va_start (args, format);
+ s = g_strdup_vprintf (format, args);
+ va_end (args);
- syslog(LOG_ERR, s);
+ syslog (LOG_ERR, s);
- g_free(s);
+ g_free (s);
- exit(DISPLAY_REMANAGE);
+ exit (DISPLAY_REMANAGE);
}
/* Log non fatal error/message */
void
-gdm_info(const gchar *format, ...)
+gdm_info (const gchar *format, ...)
{
va_list args;
gchar *s;
- va_start(args, format);
- s=g_strdup_vprintf(format, args);
- va_end(args);
+ va_start (args, format);
+ s = g_strdup_vprintf (format, args);
+ va_end (args);
- syslog(LOG_INFO, s);
+ syslog (LOG_INFO, s);
- g_free(s);
+ g_free (s);
}
/* Log error condition */
void
-gdm_error(const gchar *format, ...)
+gdm_error (const gchar *format, ...)
{
va_list args;
gchar *s;
- va_start(args, format);
- s=g_strdup_vprintf(format, args);
- va_end(args);
+ va_start (args, format);
+ s = g_strdup_vprintf (format, args);
+ va_end (args);
- syslog(LOG_ERR, s);
+ syslog (LOG_ERR, s);
- g_free(s);
+ g_free (s);
}
/* Log debug messages */
void
-gdm_debug(const gchar *format, ...)
+gdm_debug (const gchar *format, ...)
{
va_list args;
gchar *s;
- if(GdmDebug) {
- va_start(args, format);
- s=g_strdup_vprintf(format, args);
- va_end(args);
-
- syslog(LOG_DEBUG, s);
+ if (GdmDebug) {
+ va_start (args, format);
+ s = g_strdup_vprintf (format, args);
+ va_end (args);
+
+ /* FIXME */
+ syslog (LOG_ERR, s);
- g_free(s);
+ g_free (s);
}
}
-void
-gdm_putenv(gchar *s)
-{
- putenv(s);
- g_free(s);
-}
-
-
/* EOF */
diff --git a/daemon/server.c b/daemon/server.c
index 457f4a7d..c3a62608 100644
--- a/daemon/server.c
+++ b/daemon/server.c
@@ -8,12 +8,12 @@
*
* 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
+ * 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
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* This file contains functions for controlling local X servers */
@@ -36,23 +36,22 @@
static const gchar RCSid[]="$Id$";
extern gchar *GdmDisplayInit;
-extern gchar *GdmAuthDir;
+extern gchar *GdmServAuthDir;
extern gchar *GdmLogDir;
-extern gint GdmXdmcp;
+extern gint GdmXdmcp;
-extern gchar **gdm_arg_munch(const gchar *p);
-extern void gdm_auth_secure_display(GdmDisplay *);
-extern void gdm_debug(const gchar *, ...);
-extern void gdm_error(const gchar *, ...);
-extern gint gdm_display_manage(GdmDisplay *);
-extern void gdm_putenv(gchar *);
+extern gchar **gdm_arg_munch (const gchar *p);
+extern gboolean gdm_auth_secure_display (GdmDisplay *);
+extern void gdm_debug (const gchar *, ...);
+extern void gdm_error (const gchar *, ...);
+extern gint gdm_display_manage (GdmDisplay *);
extern void gdm_xdmcp_close();
-void gdm_server_start(GdmDisplay *d);
-void gdm_server_stop(GdmDisplay *d);
-void gdm_server_restart(GdmDisplay *d);
-void gdm_server_usr1_handler(gint);
-void gdm_server_alarm_handler(gint);
+void gdm_server_start (GdmDisplay *d);
+void gdm_server_stop (GdmDisplay *d);
+void gdm_server_restart (GdmDisplay *d);
+void gdm_server_usr1_handler (gint);
+void gdm_server_alarm_handler (gint);
GdmDisplay *gdm_server_alloc (gint id, gchar *command);
@@ -61,245 +60,248 @@ sigset_t mask, omask;
void
-gdm_server_start(GdmDisplay *disp)
+gdm_server_start (GdmDisplay *disp)
{
struct sigaction usr1;
sigset_t usr1mask;
- gchar *srvcmd=NULL;
- gchar **argv=NULL;
+ gchar *srvcmd = NULL;
+ gchar **argv = NULL;
int logfd;
- d=disp;
-
- gdm_debug("gdm_server_start: %s", d->name);
-
+ if (!disp)
+ return;
+
+ d = disp;
+
+ gdm_debug ("gdm_server_start: %s", d->name);
+
/* Catch USR1 from X server */
usr1.sa_handler = gdm_server_usr1_handler;
usr1.sa_flags = SA_RESTART|SA_RESETHAND;
- sigemptyset(&usr1.sa_mask);
-
- if(sigaction(SIGUSR1, &usr1, NULL) < 0) {
- gdm_error(_("gdm_server_start: Error setting up USR1 signal handler"));
- exit(SERVER_ABORT);
+ sigemptyset (&usr1.sa_mask);
+
+ if (sigaction (SIGUSR1, &usr1, NULL) < 0) {
+ gdm_error (_("gdm_server_start: Error setting up USR1 signal handler"));
+ exit (SERVER_ABORT);
}
-
- sigemptyset(&usr1mask);
- sigaddset(&usr1mask, SIGUSR1);
- sigprocmask(SIG_UNBLOCK, &usr1mask, NULL);
-
+
+ sigemptyset (&usr1mask);
+ sigaddset (&usr1mask, SIGUSR1);
+ sigprocmask (SIG_UNBLOCK, &usr1mask, NULL);
+
/* Log all output from spawned programs to a file */
- logfd=open(g_strconcat(GdmLogDir, "/", d->name, ".log", NULL),
- O_CREAT|O_TRUNC|O_APPEND|O_WRONLY, 0666);
+ logfd = open (g_strconcat (GdmLogDir, "/", d->name, ".log", NULL),
+ O_CREAT|O_TRUNC|O_APPEND|O_WRONLY, 0666);
- if(logfd != -1) {
- dup2(logfd, 1);
- dup2(logfd, 2);
+ if (logfd != -1) {
+ dup2 (logfd, 1);
+ dup2 (logfd, 2);
}
else
- gdm_error(_("gdm_server_start: Could not open logfile for display %s!"), d->name);
-
+ gdm_error (_("gdm_server_start: Could not open logfile for display %s!"), d->name);
+
/* Just in case we have an old server hanging around */
- if(d->servpid) {
- gdm_debug("gdm_server_start: Old server found (%d). Killing.", d->servpid);
- gdm_server_stop(d);
+ if (d->servpid) {
+ gdm_debug ("gdm_server_start: Old server found (%d). Killing.", d->servpid);
+ gdm_server_stop (d);
}
-
+
/* Secure display with cookie */
- gdm_auth_secure_display(d);
- gdm_putenv(g_strconcat("XAUTHORITY=", d->auth, NULL));
- gdm_putenv(g_strconcat("DISPLAY=", d->name, NULL));
-
- /* Fork into two processes. Parent remains the gdm slave
- * process. Child becomes the X server.
+ gdm_auth_secure_display (d);
+ setenv ("DISPLAY", d->name, TRUE);
+
+ /* Fork into two processes. Parent remains the gdm process. Child
+ * becomes the X server.
*/
-
- switch(d->servpid=fork()) {
+
+ switch (d->servpid = fork()) {
case 0:
/* Close the XDMCP fd inherited by the daemon process */
- if(GdmXdmcp)
+ if (GdmXdmcp)
gdm_xdmcp_close();
-
+
/* The X server expects USR1 to be SIG_IGN */
usr1.sa_handler = SIG_IGN;
usr1.sa_flags = SA_RESTART;
- sigemptyset(&usr1.sa_mask);
-
- if(sigaction(SIGUSR1, &usr1, NULL) < 0) {
- gdm_error(_("gdm_server_start: Error setting USR1 to SIG_IGN"));
- exit(SERVER_ABORT);
+ sigemptyset (&usr1.sa_mask);
+
+ if (sigaction (SIGUSR1, &usr1, NULL) < 0) {
+ gdm_error (_("gdm_server_start: Error setting USR1 to SIG_IGN"));
+ exit (SERVER_ABORT);
}
- srvcmd=g_strconcat(d->command, " -auth ", GdmAuthDir, \
- "/", d->name, ".xauth ",
+ srvcmd = g_strconcat (d->command, " -auth ", GdmServAuthDir, \
+ "/", d->name, ".Xauth ",
d->name, NULL);
-
- gdm_debug("gdm_server_start: '%s'", srvcmd);
- argv=gdm_arg_munch(srvcmd);
- g_free(srvcmd);
-
- setpgid(0, 0);
-
- execv(argv[0], argv);
-
- gdm_error(_("gdm_server_start: Xserver not found: %s"), d->command);
-
- exit(SERVER_ABORT);
+ gdm_debug ("gdm_server_start: '%s'", srvcmd);
+
+ argv = gdm_arg_munch (srvcmd);
+ g_free (srvcmd);
+
+ setpgid (0, 0);
+
+ execv (argv[0], argv);
+
+ gdm_error (_("gdm_server_start: Xserver not found: %s"), d->command);
+
+ exit (SERVER_ABORT);
break;
case -1:
- gdm_error(_("gdm_server_start: Can't fork Xserver process!"));
- d->servpid=0;
+ gdm_error (_("gdm_server_start: Can't fork Xserver process!"));
+ d->servpid = 0;
break;
default:
break;
}
-
- d->servstat=SERVER_STARTED;
-
+
+ d->servstat = SERVER_STARTED;
+
/* Wait for X server to send ready signal */
pause();
}
void
-gdm_server_stop(GdmDisplay *d)
+gdm_server_stop (GdmDisplay *d)
{
- gdm_debug("gdm_server_stop: Server for %s going down!", d->name);
-
- kill(d->servpid, SIGTERM);
- waitpid(d->servpid, 0, 0);
- d->servpid=0;
- d->servstat=SERVER_DEAD;
-
- if(unlink(d->auth) == -1)
- gdm_error(_("gdm_server_stop: Could not unlink auth file: %s!"), strerror(errno));
+ gdm_debug ("gdm_server_stop: Server for %s going down!", d->name);
+
+ kill (d->servpid, SIGTERM);
+ waitpid (d->servpid, 0, 0);
+ d->servpid = 0;
+ d->servstat = SERVER_DEAD;
+
+ if (unlink (d->authfile) == -1)
+ gdm_error (_("gdm_server_stop: Could not unlink auth file: %s!"), strerror (errno));
}
-/* FIXME: We have a race here. What if USR1 is delivered before we enable the handler?
- * This only succeeds because the X server takes ages to shut down...
- * Maybe we should jump directly to display_manage and bail out on error?
- * Needs thinking for sure...
- */
-
void
-gdm_server_restart(GdmDisplay *d)
+gdm_server_restart (GdmDisplay *d)
{
sigset_t usr1mask;
struct sigaction usr1, sigalarm;
-
- gdm_debug("gdm_server_restart: Server for %s restarting!", d->name);
-
- if(d->servpid && kill(d->servpid, 0)<0) {
- gdm_debug("gdm_server_restart: Old server for %s still alive. Killing!", d->name);
- gdm_server_stop(d);
- gdm_server_start(d);
+
+ gdm_debug ("gdm_server_restart: Server for %s restarting!", d->name);
+
+ if (d->servpid && kill (d->servpid, 0) < 0) {
+ gdm_debug ("gdm_server_restart: Old server for %s still alive. Killing!", d->name);
+ gdm_server_stop (d);
+ gdm_server_start (d);
}
-
+
/* Create new cookie */
- gdm_auth_secure_display(d);
- gdm_putenv(g_strconcat("XAUTHORITY=", d->auth, NULL));
- gdm_putenv(g_strconcat("DISPLAY=", d->name, NULL));
-
+ gdm_auth_secure_display (d);
+ setenv ("DISPLAY", d->name, TRUE);
+
/* Catch USR1 from X server */
usr1.sa_handler = gdm_server_usr1_handler;
usr1.sa_flags = SA_RESTART|SA_RESETHAND;
- sigemptyset(&usr1.sa_mask);
-
- if(sigaction(SIGUSR1, &usr1, NULL) < 0) {
- gdm_error(_("gdm_server_start: Error setting up USR1 signal handler"));
- exit(SERVER_ABORT);
+ sigemptyset (&usr1.sa_mask);
+
+ if (sigaction (SIGUSR1, &usr1, NULL) < 0) {
+ gdm_error (_("gdm_server_start: Error setting up USR1 signal handler"));
+ exit (SERVER_ABORT);
}
+
+ sigemptyset (&usr1mask);
+ sigaddset (&usr1mask, SIGUSR1);
+ sigprocmask (SIG_UNBLOCK, &usr1mask, NULL);
+
+ /* Reset X and force auth file reread. XCloseDisplay works on most
+ * servers but just like young Zaphod, we play it safe */
- sigemptyset(&usr1mask);
- sigaddset(&usr1mask, SIGUSR1);
- sigprocmask(SIG_UNBLOCK, &usr1mask, NULL);
-
- /* Reset X and force auth file reread. XCloseDisplay works on most servers but we play it safe */
- gdm_debug("gdm_server_restart: Servpid=%d", d->servpid);
- kill(d->servpid, SIGHUP);
-
+ gdm_debug ("gdm_server_restart: Servpid=%d", d->servpid);
+ kill (d->servpid, SIGHUP);
+
d->servstat=SERVER_STARTED;
-
- /* We add a timeout in case the X server fails to start. This
+
+ /* We add a timeout in case the X server fails to start. This
* might happen because X servers take a while to die, close their
* sockets etc. If the old X server isn't completely dead, the new
* one will fail and we'll hang here forever */
-
+
sigalarm.sa_handler = gdm_server_alarm_handler;
sigalarm.sa_flags = 0;
- sigemptyset(&sigalarm.sa_mask);
+ sigemptyset (&sigalarm.sa_mask);
- if(sigaction(SIGALRM, &sigalarm, NULL) < 0) {
- gdm_error(_("gdm_server_restart: Error setting up ALARM signal handler"));
+ if (sigaction (SIGALRM, &sigalarm, NULL) < 0) {
+ gdm_error (_("gdm_server_restart: Error setting up ALARM signal handler"));
return;
}
-
- sigemptyset(&mask);
- sigaddset(&mask, SIGALRM);
- sigprocmask(SIG_UNBLOCK, &mask, &omask);
-
- alarm(10);
-
+
+ sigemptyset (&mask);
+ sigaddset (&mask, SIGALRM);
+ sigprocmask (SIG_UNBLOCK, &mask, &omask);
+
+ alarm (10);
+
/* Wait for X server to send ready signal */
pause();
}
void
-gdm_server_alarm_handler(gint signal)
+gdm_server_alarm_handler (gint signal)
{
- /* Unset alarm and try again */
- alarm(0);
- sigprocmask(SIG_SETMASK, &omask, NULL);
-
- waitpid(d->servpid, 0, WNOHANG);
-
- gdm_debug("gdm_server_alarm_handler: Temporary server failure");
- gdm_server_restart(d);
+ /* Unset alarm and try again */
+ alarm (0);
+ sigprocmask (SIG_SETMASK, &omask, NULL);
+
+ waitpid (d->servpid, 0, WNOHANG);
+
+ gdm_debug ("gdm_server_alarm_handler: Temporary server failure");
+ gdm_server_restart (d);
}
void
-gdm_server_usr1_handler(gint sig)
+gdm_server_usr1_handler (gint sig)
{
sigset_t usr1mask;
-
+
/* Unset alarm */
- alarm(0);
- sigprocmask(SIG_SETMASK, &omask, NULL);
+ alarm (0);
+ sigprocmask (SIG_SETMASK, &omask, NULL);
+
+ gdm_debug ("gdm_server_usr1_handler: Starting display %s!", d->name);
+
+ d->servstat = SERVER_RUNNING;
- gdm_debug("gdm_server_usr1_handler: Starting display %s!", d->name);
-
- d->servstat=SERVER_RUNNING;
-
/* Block USR1 */
- sigemptyset(&usr1mask);
- sigaddset(&usr1mask, SIGUSR1);
- sigprocmask(SIG_BLOCK, &usr1mask, NULL);
-
- gdm_display_manage(d);
+ sigemptyset (&usr1mask);
+ sigaddset (&usr1mask, SIGUSR1);
+ sigprocmask (SIG_BLOCK, &usr1mask, NULL);
+
+ gdm_display_manage (d);
}
GdmDisplay *
gdm_server_alloc (gint id, gchar *command)
{
- gchar dname[1024];
-
- GdmDisplay *d = g_malloc(sizeof(GdmDisplay));
-
- sprintf(dname, ":%d", id);
- d->auth = NULL;
- d->command = g_strdup(command);
+ gchar *dname = g_new0 (gchar, 1024);
+ gchar *hostname = g_new0 (gchar, 1024);
+ GdmDisplay *d = g_new0 (GdmDisplay, 1);
+
+ if (gethostname (hostname, 1023) == -1)
+ return (NULL);
+
+ sprintf (dname, ":%d", id);
+ d->authfile = NULL;
+ d->auths = NULL;
+ d->userauth = NULL;
+ d->command = g_strdup (command);
d->cookie = NULL;
d->dispstat = DISPLAY_DEAD;
d->greetpid = 0;
- d->id = id;
- d->name = strdup(dname);
+ d->name = g_strdup (dname);
+ d->hostname = g_strdup (hostname);
+ d->dispnum = id;
d->servpid = 0;
d->servstat = SERVER_DEAD;
d->sessionid = 0;
@@ -309,9 +311,12 @@ gdm_server_alloc (gint id, gchar *command)
d->sessionid = 0;
d->acctime = 0;
d->dsp = NULL;
+
+ g_free (dname);
+ g_free (hostname);
return (d);
}
-
+
/* EOF */
diff --git a/daemon/slave.c b/daemon/slave.c
index 1453fee2..bb2eb85e 100644
--- a/daemon/slave.c
+++ b/daemon/slave.c
@@ -8,12 +8,12 @@
*
* 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
+ * 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
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* This is the gdm slave process. gdmslave runs the chooser, greeter
@@ -48,340 +48,373 @@ extern gchar *GdmPreSession;
extern gchar *GdmPostSession;
extern gchar *GdmSuspend;
extern gchar *GdmDefaultPath;
-extern gint GdmKillInitClients;
-extern gint GdmRetryDelay;
+extern gchar *GdmRootPath;
+extern gchar *GdmUserAuthFile;
+extern gint GdmUserMaxFile;
+extern gint GdmRelaxPerms;
+extern gint GdmKillInitClients;
+extern gint GdmRetryDelay;
extern sigset_t sysmask;
-extern gboolean gdm_file_check(gchar *caller, uid_t user, gchar *dir, gchar *file, gboolean absentok);
-extern gchar **gdm_arg_munch(const gchar *p);
-extern gint gdm_exec_script(GdmDisplay*, gchar *dir);
-extern void gdm_abort(const char*, ...);
-extern void gdm_error(const char*, ...);
-extern void gdm_debug(const char*, ...);
-extern void gdm_remanage(const char*, ...);
+extern gboolean gdm_file_check (gchar *caller, uid_t user, gchar *dir, gchar *file,
+ gboolean absentok, gint maxsize, gint perms);
+extern gchar **gdm_arg_munch (const gchar *p);
+extern gint gdm_exec_script (GdmDisplay*, gchar *dir);
+extern void gdm_abort (const char*, ...);
+extern void gdm_error (const char*, ...);
+extern void gdm_debug (const char*, ...);
+extern void gdm_remanage (const char*, ...);
extern void gdm_verify_cleanup (void);
-extern void gdm_auth_user_add(GdmDisplay *d, gchar *home);
-extern void gdm_auth_user_remove(GdmDisplay *d, gchar *home);
-extern void gdm_exec_command(gchar *cmd);
-extern void gdm_putenv(gchar *s);
+extern gboolean gdm_auth_user_add (GdmDisplay *d, uid_t user, gchar *homedir);
+extern void gdm_auth_user_remove (GdmDisplay *d, uid_t user);
+extern void gdm_exec_command (gchar *cmd);
extern gchar *gdm_verify_user (gchar *display);
-void gdm_slave_start(GdmDisplay *d);
-static gint gdm_slave_xerror_handler(Display *disp, XErrorEvent *evt);
-static gint gdm_slave_xioerror_handler(Display *disp);
-static void gdm_slave_greeter(void);
-static void gdm_slave_session_start(gchar *login, gchar *session, gboolean savesess, gchar *lang, gboolean savelang);
-static void gdm_slave_session_stop(void);
-static void gdm_slave_session_cleanup(void);
-static void gdm_slave_term_handler(int sig);
-static void gdm_slave_child_handler(int sig);
-static void gdm_slave_windows_kill(void);
-static void gdm_slave_xsync_handler(int sig);
-static gboolean gdm_slave_xsync_ping(void);
-gchar *gdm_slave_greeter_ctl(gchar cmd, gchar *str);
+void gdm_slave_start (GdmDisplay *d);
+static gint gdm_slave_xerror_handler (Display *disp, XErrorEvent *evt);
+static gint gdm_slave_xioerror_handler (Display *disp);
+static void gdm_slave_greeter (void);
+static void gdm_slave_session_start (gchar *login, gchar *session, gboolean savesess, gchar *lang, gboolean savelang);
+static void gdm_slave_session_stop (void);
+static void gdm_slave_session_cleanup (void);
+static void gdm_slave_term_handler (int sig);
+static void gdm_slave_child_handler (int sig);
+static void gdm_slave_windows_kill (void);
+static void gdm_slave_xsync_handler (int sig);
+static gboolean gdm_slave_xsync_ping (void);
+gchar *gdm_slave_greeter_ctl (gchar cmd, gchar *str);
GdmDisplay *d;
struct passwd *pwent;
sigset_t mask, omask;
gboolean pingack;
-gboolean greet=TRUE;
+gboolean greet = TRUE;
FILE *greeter;
void
-gdm_slave_start(GdmDisplay *display)
-{
+gdm_slave_start (GdmDisplay *display)
+{
struct sigaction term, child;
- gint openretries=0;
-
- gdm_debug("gdm_slave_start: Starting slave process for %s", display->name);
-
- d=display;
-
- gdm_putenv(g_strconcat("XAUTHORITY=", d->auth, NULL));
- gdm_putenv(g_strconcat("DISPLAY=", d->name, NULL));
+ gint openretries = 0;
+
+ if (!display)
+ return;
+ gdm_debug ("gdm_slave_start: Starting slave process for %s", display->name);
+
+ d = display;
+
+ setenv ("XAUTHORITY", d->authfile, TRUE);
+ setenv ("DISPLAY", d->name, TRUE);
+
/* Handle a INT/TERM signals from gdm master */
term.sa_handler = gdm_slave_term_handler;
term.sa_flags = SA_RESTART;
- sigemptyset(&term.sa_mask);
- sigaddset(&term.sa_mask, SIGTERM);
- sigaddset(&term.sa_mask, SIGINT);
+ sigemptyset (&term.sa_mask);
+ sigaddset (&term.sa_mask, SIGTERM);
+ sigaddset (&term.sa_mask, SIGINT);
+
+ if ((sigaction (SIGTERM, &term, NULL) < 0) || (sigaction (SIGINT, &term, NULL) < 0))
+ gdm_abort (_("gdm_slave_init: Error setting up TERM/INT signal handler"));
- if((sigaction(SIGTERM, &term, NULL) < 0) || (sigaction(SIGINT, &term, NULL) < 0))
- gdm_abort(_("gdm_slave_init: Error setting up TERM/INT signal handler"));
-
/* Child handler. Keeps an eye on greeter/session */
child.sa_handler = gdm_slave_child_handler;
child.sa_flags = SA_RESTART|SA_NOCLDSTOP;
- sigemptyset(&child.sa_mask);
+ sigemptyset (&child.sa_mask);
+
+ if (sigaction (SIGCHLD, &child, NULL) < 0)
+ gdm_abort (_("gdm_slave_init: Error setting up CHLD signal handler"));
- if(sigaction(SIGCHLD, &child, NULL) < 0)
- gdm_abort(_("gdm_slave_init: Error setting up CHLD signal handler"));
-
/* The signals we wish to listen to */
- sigfillset(&mask);
- sigdelset(&mask, SIGINT);
- sigdelset(&mask, SIGTERM);
- sigdelset(&mask, SIGCHLD);
- sigprocmask(SIG_SETMASK, &mask, NULL);
-
- /* X error handlers to avoid the default ones: exit(1) */
- XSetErrorHandler(gdm_slave_xerror_handler);
- XSetIOErrorHandler(gdm_slave_xioerror_handler);
-
+ sigfillset (&mask);
+ sigdelset (&mask, SIGINT);
+ sigdelset (&mask, SIGTERM);
+ sigdelset (&mask, SIGCHLD);
+ sigprocmask (SIG_SETMASK, &mask, NULL);
+
+ /* X error handlers to avoid the default one (i.e. exit (1)) */
+ XSetErrorHandler (gdm_slave_xerror_handler);
+ XSetIOErrorHandler (gdm_slave_xioerror_handler);
+
/* We keep our own (windowless) connection (dsp) open to avoid the
* X server resetting due to lack of active connections. */
- gdm_debug("gdm_slave_start: Opening display %s", d->name);
- d->dsp=NULL;
-
- while(openretries < 10 && d->dsp==NULL) {
- d->dsp=XOpenDisplay(d->name);
-
- if(!d->dsp) {
- gdm_debug("gdm_slave_start: Sleeping %d on a retry", openretries*2);
- sleep(openretries*2);
+ gdm_debug ("gdm_slave_start: Opening display %s", d->name);
+ d->dsp = NULL;
+
+ while (openretries < 10 && d->dsp == NULL) {
+ d->dsp = XOpenDisplay (d->name);
+
+ if (!d->dsp) {
+ gdm_debug ("gdm_slave_start: Sleeping %d on a retry", openretries*2);
+ sleep (openretries*2);
openretries++;
}
}
- if(d->dsp)
- gdm_slave_greeter(); /* Start the greeter */
+ if (d->dsp)
+ gdm_slave_greeter(); /* Start the greeter */
else
- exit(DISPLAY_ABORT);
+ exit (DISPLAY_ABORT);
}
static void
-gdm_slave_greeter(void)
+gdm_slave_greeter (void)
{
- gint pipe1[2], pipe2[2];
- gchar *login=NULL, *session, *language;
- gboolean savesess=FALSE, savelang=FALSE;
+ gint pipe1[2], pipe2[2];
+ gchar *login = NULL, *session, *language;
+ gboolean savesess = FALSE, savelang = FALSE;
gchar **argv;
- gdm_debug("gdm_slave_greeter: Running greeter on %s", d->name);
-
+ gdm_debug ("gdm_slave_greeter: Running greeter on %s", d->name);
+
/* Run the init script. gdmslave suspends until script has terminated */
- gdm_exec_script(d, GdmDisplayInit);
-
+ gdm_exec_script (d, GdmDisplayInit);
+
/* Open a pipe for greeter communications */
- if(pipe(pipe1) < 0 || pipe(pipe2) < 0)
- gdm_abort(_("gdm_slave_greeter: Can't init pipe to gdmgreeter"));
-
- greet=TRUE;
+ if (pipe (pipe1) < 0 || pipe (pipe2) < 0)
+ gdm_abort (_("gdm_slave_greeter: Can't init pipe to gdmgreeter"));
+
+ greet = TRUE;
/* Fork. Parent is gdmslave, child is greeter process. */
- switch(d->greetpid=fork()) {
+ switch (d->greetpid = fork()) {
case 0:
- sigfillset(&mask);
- sigdelset(&mask, SIGINT);
- sigdelset(&mask, SIGTERM);
- sigdelset(&mask, SIGHUP);
- sigprocmask(SIG_SETMASK, &mask, NULL);
-
+ sigfillset (&mask);
+ sigdelset (&mask, SIGINT);
+ sigdelset (&mask, SIGTERM);
+ sigdelset (&mask, SIGHUP);
+ sigprocmask (SIG_SETMASK, &mask, NULL);
+
/* Plumbing */
- close(pipe1[1]);
- close(pipe2[0]);
-
- if(pipe1[0] != STDIN_FILENO)
- dup2(pipe1[0], STDIN_FILENO);
-
- if(pipe2[1] != STDOUT_FILENO)
- dup2(pipe2[1], STDOUT_FILENO);
-
- if(setgid(GdmGroupId) < 0)
- gdm_abort(_("gdm_slave_greeter: Couldn't set groupid to %d"), GdmGroupId);
-
- if(setuid(GdmUserId) < 0)
- gdm_abort(_("gdm_slave_greeter: Couldn't set userid to %d"), GdmUserId);
-
- gdm_putenv(g_strconcat("XAUTHORITY=", d->auth, NULL));
- gdm_putenv(g_strconcat("DISPLAY=", d->name, NULL));
- gdm_putenv(g_strconcat("HOME=/", NULL)); /* Hack */
- gdm_putenv(g_strconcat("PATH=", GdmDefaultPath, NULL));
-
- argv=gdm_arg_munch(GdmGreeter);
- execv(argv[0], argv);
+ close (pipe1[1]);
+ close (pipe2[0]);
+
+ if (pipe1[0] != STDIN_FILENO)
+ dup2 (pipe1[0], STDIN_FILENO);
+
+ if (pipe2[1] != STDOUT_FILENO)
+ dup2 (pipe2[1], STDOUT_FILENO);
+
+ if (setgid (GdmGroupId) < 0)
+ gdm_abort (_("gdm_slave_greeter: Couldn't set groupid to %d"), GdmGroupId);
+
+ if (setuid (GdmUserId) < 0)
+ gdm_abort (_("gdm_slave_greeter: Couldn't set userid to %d"), GdmUserId);
+
+ setenv ("XAUTHORITY", d->authfile, TRUE);
+ setenv ("DISPLAY", d->name, TRUE);
+ setenv ("HOME", "/", TRUE); /* Hack */
+ setenv ("PATH", GdmDefaultPath, TRUE);
- gdm_abort(_("gdm_slave_greeter: Error starting greeter on display %s"), d->name);
+ argv = gdm_arg_munch (GdmGreeter);
+ execv (argv[0], argv);
+
+ gdm_abort (_("gdm_slave_greeter: Error starting greeter on display %s"), d->name);
case -1:
- gdm_abort(_("gdm_slave_greeter: Can't fork gdmgreeter process"));
+ gdm_abort (_("gdm_slave_greeter: Can't fork gdmgreeter process"));
default:
- close(pipe1[0]);
- close(pipe2[1]);
+ close (pipe1[0]);
+ close (pipe2[1]);
- if(pipe1[1] != STDOUT_FILENO)
- dup2(pipe1[1], STDOUT_FILENO);
+ if (pipe1[1] != STDOUT_FILENO)
+ dup2 (pipe1[1], STDOUT_FILENO);
- if(pipe2[0] != STDIN_FILENO)
- dup2(pipe2[0], STDIN_FILENO);
+ if (pipe2[0] != STDIN_FILENO)
+ dup2 (pipe2[0], STDIN_FILENO);
- greeter=fdopen(STDIN_FILENO, "r");
-
- gdm_debug("gdm_slave_greeter: Greeter on pid %d", d->greetpid);
+ greeter=fdopen (STDIN_FILENO, "r");
+
+ gdm_debug ("gdm_slave_greeter: Greeter on pid %d", d->greetpid);
break;
}
-
+
/* Chat with greeter */
- while(login==NULL) {
- login=gdm_verify_user(d->name);
-
- if(login==NULL) {
- gdm_slave_greeter_ctl(GDM_RESET, "");
- sleep(GdmRetryDelay);
+ while (login == NULL) {
+ login = gdm_verify_user (d->name);
+
+ if (login == NULL) {
+ gdm_slave_greeter_ctl (GDM_RESET, "");
+ sleep (GdmRetryDelay);
}
}
-
- session= gdm_slave_greeter_ctl(GDM_SESS, "");
- language=gdm_slave_greeter_ctl(GDM_LANG, "");
-
- if(strlen(gdm_slave_greeter_ctl(GDM_SSESS, "")))
- savesess=TRUE;
-
- if(strlen(gdm_slave_greeter_ctl(GDM_SLANG, "")))
- savelang=TRUE;
-
- sigemptyset(&mask);
- sigaddset(&mask, SIGCHLD);
- sigprocmask(SIG_BLOCK, &mask, &omask);
-
+
+ session = gdm_slave_greeter_ctl (GDM_SESS, "");
+ language = gdm_slave_greeter_ctl (GDM_LANG, "");
+
+ if (strlen (gdm_slave_greeter_ctl (GDM_SSESS, "")))
+ savesess = TRUE;
+
+ if (strlen (gdm_slave_greeter_ctl (GDM_SLANG, "")))
+ savelang = TRUE;
+
+ gdm_debug ("gdm_slave_greeter: Authentication completed. Whacking greeter");
+
+ sigemptyset (&mask);
+ sigaddset (&mask, SIGCHLD);
+ sigprocmask (SIG_BLOCK, &mask, &omask);
+
greet=FALSE;
/* Kill greeter and wait for it to die */
- kill(d->greetpid, SIGINT);
- waitpid(d->greetpid, 0, 0);
- d->greetpid=0;
-
- sigprocmask(SIG_UNBLOCK, &omask, NULL);
+ kill (d->greetpid, SIGINT);
+ waitpid (d->greetpid, 0, 0);
+ d->greetpid = 0;
+
+ sigprocmask (SIG_UNBLOCK, &omask, NULL);
- if(GdmKillInitClients)
+ if (GdmKillInitClients)
gdm_slave_windows_kill();
- gdm_slave_session_start(login, session, savesess, language, savelang);
+ gdm_slave_session_start (login, session, savesess, language, savelang);
}
static void
-gdm_slave_session_start(gchar *login, gchar *session, gboolean savesess, gchar *lang, gboolean savelang)
+gdm_slave_session_start (gchar *login, gchar *session, gboolean savesess, gchar *lang, gboolean savelang)
{
gchar *sessdir, *cfgdir, *cfgstr;
struct stat statbuf;
+ gboolean authok;
+
+ if (!login || !session || !lang) {
+ gdm_debug ("gdm_slave_session_start: Insufficient parameters");
+ return;
+ }
- gdm_debug("gdm_slave_session_start: %s on %s", login, d->name);
-
- pwent=getpwnam(login);
-
+ gdm_error ("gdm_slave_session_start: %s on %s", login, d->name);
+
+ pwent = getpwnam (login);
+
/* If the user doesn't exist, reset the X server and restart greeter */
- if(!pwent)
- gdm_remanage(_("gdm_slave_session_init: User '%s' not found. Aborting."), login);
-
- gdm_putenv(g_strconcat("XAUTHORITY=", pwent->pw_dir, "/.Xauthority", NULL));
- gdm_putenv(g_strconcat("DISPLAY=", d->name, NULL));
- gdm_putenv(g_strconcat("LOGNAME=", login, NULL));
- gdm_putenv(g_strconcat("USER=", login, NULL));
- gdm_putenv(g_strconcat("USERNAME=", login, NULL));
- gdm_putenv(g_strconcat("HOME=", pwent->pw_dir, NULL));
- gdm_putenv(g_strconcat("GDMSESSION=", session, NULL));
- gdm_putenv(g_strconcat("SHELL=", pwent->pw_shell, NULL));
- gdm_putenv(g_strconcat("PATH=", GdmDefaultPath, NULL));
-
- if(!strcasecmp(lang, "english"))
- putenv("LANG=C");
+ if (!pwent)
+ gdm_remanage (_("gdm_slave_session_init: User '%s' not found. Aborting."), login);
+
+ setenv ("DISPLAY", d->name, TRUE);
+ setenv ("LOGNAME", login, TRUE);
+ setenv ("USER", login, TRUE);
+ setenv ("USERNAME", login, TRUE);
+ setenv ("HOME", pwent->pw_dir, TRUE);
+ setenv ("GDMSESSION", session, TRUE);
+ setenv ("SHELL", pwent->pw_shell, TRUE);
+
+ /* Special PATH for root */
+ if(pwent->pw_uid == 0)
+ setenv ("PATH", GdmRootPath, TRUE);
else
- gdm_putenv(g_strconcat("LANG=", lang, NULL));
+ setenv ("PATH", GdmDefaultPath, TRUE);
+ /* Set locale */
+ if (!strcasecmp (lang, "english"))
+ setenv ("LANG", "C", TRUE);
+ else
+ setenv ("LANG", lang, TRUE);
+
/* If script fails reset X server and restart greeter */
- if(gdm_exec_script(d, GdmPreSession) != EXIT_SUCCESS)
- gdm_remanage(_("gdm_slave_session_init: Execution of PreSession script returned > 0. Aborting."));
-
- switch(d->sesspid=fork()) {
-
- case -1:
- gdm_abort(_("gdm_slave_session_init: Error forking user session"));
-
- case 0:
- setpgid(0, 0);
-
- umask(022);
-
- if(setgid(pwent->pw_gid) < 0)
- gdm_remanage(_("gdm_slave_session_init: Could not setgid %d. Aborting."), pwent->pw_gid);
+ if (gdm_exec_script (d, GdmPreSession) != EXIT_SUCCESS)
+ gdm_remanage (_("gdm_slave_session_init: Execution of PreSession script returned > 0. Aborting."));
- if(initgroups(login, pwent->pw_gid) < 0)
- gdm_remanage(_("gdm_slave_session_init: initgroups() failed for %s. Aborting."), login);
+ /* Setup cookie -- We need this information during cleanup, thus
+ * cookie handling is done before fork()ing */
- if(setuid(pwent->pw_uid) < 0)
- gdm_remanage(_("gdm_slave_session_init: Could not become %s. Aborting."), login);
+ setegid (pwent->pw_gid);
+ seteuid (pwent->pw_uid);
- chdir(pwent->pw_dir);
+ authok = gdm_auth_user_add (d, pwent->pw_uid, pwent->pw_dir);
- /* Run sanity check on ~user/.Xauthority and setup cookie */
- if(!gdm_file_check("gdm_slave_session_init", pwent->pw_uid, pwent->pw_dir, ".Xauthority", TRUE)) {
- XCloseDisplay(d->dsp);
- exit(DISPLAY_REMANAGE);
- }
-
- gdm_auth_user_add(d, pwent->pw_dir);
+ setegid (GdmGroupId);
+ seteuid (0);
+
+ if (!authok) {
+ gdm_slave_session_stop();
+ gdm_slave_session_cleanup();
+
+ exit (DISPLAY_REMANAGE);
+ }
+ /* Start user process */
+ switch (d->sesspid = fork()) {
+
+ case -1:
+ gdm_abort (_("gdm_slave_session_init: Error forking user session"));
+
+ case 0:
+ setpgid (0, 0);
+
+ umask (022);
+
+ if (setgid (pwent->pw_gid) < 0)
+ gdm_remanage (_("gdm_slave_session_init: Could not setgid %d. Aborting."), pwent->pw_gid);
+
+ if (initgroups (login, pwent->pw_gid) < 0)
+ gdm_remanage (_("gdm_slave_session_init: initgroups() failed for %s. Aborting."), login);
+
+ if (setuid (pwent->pw_uid) < 0)
+ gdm_remanage (_("gdm_slave_session_init: Could not become %s. Aborting."), login);
+
+ chdir (pwent->pw_dir);
+
/* Check if ~user/.gnome exists. Create it otherwise. */
- cfgdir=g_strconcat(pwent->pw_dir, "/.gnome", NULL);
-
- if(stat(cfgdir, &statbuf) == -1) { /* FIXME: Maybe I need to be a bit paranoid here! */
- mkdir(cfgdir, S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH);
- chmod(cfgdir, S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH);
+ cfgdir = g_strconcat (pwent->pw_dir, "/.gnome", NULL);
+
+ if (stat (cfgdir, &statbuf) == -1) { /* FIXME: Maybe I need to be a bit more paranoid here! */
+ mkdir (cfgdir, S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH);
+ chmod (cfgdir, S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH);
}
-
+
/* Sanity check on ~user/.gnome/gdm */
- if(!gdm_file_check("gdm_slave_session_init", pwent->pw_uid, cfgdir, "gdm", TRUE)) {
+ if (!gdm_file_check ("gdm_slave_session_init", pwent->pw_uid, cfgdir, "gdm",
+ TRUE, GdmUserMaxFile, GdmRelaxPerms)) {
gdm_slave_session_cleanup();
- XCloseDisplay(d->dsp);
- exit(DISPLAY_REMANAGE);
+ XCloseDisplay (d->dsp);
+ exit (DISPLAY_REMANAGE);
}
-
- g_free(cfgdir);
-
- if(savesess) {
+
+ g_free (cfgdir);
+
+ if (savesess) {
/* libgnome sets home to ~root, so we have to write the path ourselves */
- cfgstr = g_strconcat("=", pwent->pw_dir, "/.gnome/gdm=/session/last", NULL);
- gnome_config_set_string(cfgstr, session);
+ cfgstr = g_strconcat ("=", pwent->pw_dir, "/.gnome/gdm=/session/last", NULL);
+ gnome_config_set_string (cfgstr, session);
gnome_config_sync();
- g_free(cfgstr);
+ g_free (cfgstr);
}
-
- if(savelang) {
- cfgstr = g_strconcat("=", pwent->pw_dir, "/.gnome/gdm=/session/lang", NULL);
- gnome_config_set_string(cfgstr, lang);
+
+ if (savelang) {
+ cfgstr = g_strconcat ("=", pwent->pw_dir, "/.gnome/gdm=/session/lang", NULL);
+ gnome_config_set_string (cfgstr, lang);
gnome_config_sync();
- g_free(cfgstr);
+ g_free (cfgstr);
}
-
- sessdir = g_strconcat(GdmSessDir, "/", session, NULL);
-
- gdm_debug("Running %s for %s on %s", sessdir, login, d->name);
-
- /* Restore system inherited sigmask */
- sigprocmask(SIG_SETMASK, &sysmask, NULL);
-
- execl(sessdir, NULL);
- gdm_error(_("gdm_slave_session_init: Could not start session `%s'"), sessdir);
-
+ sessdir = g_strconcat (GdmSessDir, "/", session, NULL);
+
+ gdm_debug ("Running %s for %s on %s", sessdir, login, d->name);
+
+ /* Restore sigmask inherited from init */
+ sigprocmask (SIG_SETMASK, &sysmask, NULL);
+
+ execl (sessdir, NULL);
+
+ gdm_error (_("gdm_slave_session_init: Could not start session `%s'"), sessdir);
+
gdm_slave_session_stop();
gdm_slave_session_cleanup();
-
- exit(DISPLAY_REMANAGE);
+
+ exit (DISPLAY_REMANAGE);
default:
break;
}
-
- waitpid(d->sesspid, 0, 0);
+
+ /* Wait for the user's session to exit */
+ waitpid (d->sesspid, 0, 0);
gdm_slave_session_stop();
gdm_slave_session_cleanup();
@@ -389,94 +422,94 @@ gdm_slave_session_start(gchar *login, gchar *session, gboolean savesess, gchar *
static void
-gdm_slave_session_stop(void)
+gdm_slave_session_stop (void)
{
- gdm_debug("gdm_slave_session_stop: %s on %s", pwent->pw_name, d->name);
-
- kill(-(d->sesspid), SIGTERM);
-
+ gdm_debug ("gdm_slave_session_stop: %s on %s", pwent->pw_name, d->name);
+
+ kill (- (d->sesspid), SIGTERM);
+
gdm_verify_cleanup();
-
+
/* Remove display from ~user/.Xauthority */
- setegid(pwent->pw_gid);
- seteuid(pwent->pw_uid);
-
- if(gdm_file_check("gdm_slave_session_stop", pwent->pw_uid, pwent->pw_dir, ".Xauthority", FALSE))
- gdm_auth_user_remove(d, pwent->pw_dir);
+ setegid (pwent->pw_gid);
+ seteuid (pwent->pw_uid);
- setegid(GdmGroupId);
- seteuid(0);
+ gdm_auth_user_remove (d, pwent->pw_uid);
+
+ setegid (GdmGroupId);
+ seteuid (0);
}
/* Only executed if display is still alive */
static void
-gdm_slave_session_cleanup(void)
+gdm_slave_session_cleanup (void)
{
- gdm_debug("gdm_slave_session_cleanup: %s on %s", pwent->pw_name, d->name);
-
- if(d->dsp && gdm_slave_xsync_ping()) {
-
+ gdm_debug ("gdm_slave_session_cleanup: %s on %s", pwent->pw_name, d->name);
+
+ if (d->dsp && gdm_slave_xsync_ping()) {
+
/* Execute post session script */
- gdm_debug("gdm_slave_session_cleanup: Running post session script");
- gdm_exec_script(d, GdmPostSession);
-
+ gdm_debug ("gdm_slave_session_cleanup: Running post session script");
+ gdm_exec_script (d, GdmPostSession);
+
/* Cleanup */
- gdm_debug("gdm_slave_session_cleanup: Killing windows");
+ gdm_debug ("gdm_slave_session_cleanup: Killing windows");
gdm_slave_windows_kill();
-
- XCloseDisplay(d->dsp);
+
+ XCloseDisplay (d->dsp);
}
-
- exit(DISPLAY_REMANAGE);
+
+ exit (DISPLAY_REMANAGE);
}
static void
-gdm_slave_term_handler(int sig)
+gdm_slave_term_handler (int sig)
{
- gdm_debug("gdm_slave_term_handler: %s got TERM signal", d->name);
-
- if(d->greetpid) {
- gdm_debug("gdm_slave_term_handler: Whacking greeter");
- kill(d->greetpid, SIGINT);
- waitpid(d->greetpid, 0, 0);
- d->greetpid=0;
+ gdm_debug ("gdm_slave_term_handler: %s got TERM signal", d->name);
+
+ if (d->greetpid) {
+ gdm_debug ("gdm_slave_term_handler: Whacking greeter");
+ kill (d->greetpid, SIGINT);
+ waitpid (d->greetpid, 0, 0);
+ d->greetpid = 0;
}
- else if(pwent)
+ else if (pwent)
gdm_slave_session_stop();
-
- gdm_debug("gdm_slave_term_handler: Whacking client connections");
+
+ gdm_debug ("gdm_slave_term_handler: Whacking client connections");
gdm_slave_windows_kill();
- XCloseDisplay(d->dsp);
- exit(DISPLAY_ABORT);
+ XCloseDisplay (d->dsp);
+
+ exit (DISPLAY_ABORT);
}
/* Called on every SIGCHLD */
static void
-gdm_slave_child_handler(int sig)
+gdm_slave_child_handler (int sig)
{
gint status;
pid_t pid;
-
- while((pid=waitpid(-1, &status, WNOHANG)) > 0) {
- gdm_debug("gdm_slave_child_handler: %d died", pid);
-
- if(WIFEXITED(status))
- gdm_debug("gdm_slave_child_handler: %d returned %d", pid, WEXITSTATUS(status));
-
- if(pid==d->greetpid && greet)
- if(WIFEXITED(status))
- exit(WEXITSTATUS(status));
+
+ while ((pid = waitpid (-1, &status, WNOHANG)) > 0) {
+ gdm_debug ("gdm_slave_child_handler: %d died", pid);
+
+ if (WIFEXITED (status))
+ gdm_debug ("gdm_slave_child_handler: %d returned %d", pid, WEXITSTATUS (status));
+
+ if (pid == d->greetpid && greet)
+ if (WIFEXITED (status))
+ exit (WEXITSTATUS (status));
else {
- if(d && d->dsp)
- XCloseDisplay(d->dsp);
-
- exit(DISPLAY_REMANAGE);
+ if (d && d->dsp)
+ XCloseDisplay (d->dsp);
+
+ exit (DISPLAY_REMANAGE);
}
- if(pid==d->sesspid) {
+ if (pid && pid == d->sesspid) {
gdm_slave_session_stop();
gdm_slave_session_cleanup();
}
@@ -486,130 +519,131 @@ gdm_slave_child_handler(int sig)
/* Only kills clients, not connections. This keeps the server alive */
static void
-gdm_slave_windows_kill(void)
+gdm_slave_windows_kill (void)
{
Window root, parent, *children;
gint child, screen, nchildren;
- Display *disp=NULL;
-
- disp=XOpenDisplay(d->name);
-
- if(!disp) {
- gdm_debug("gdm_slave_windows_kill: Could not open display %s", d->name);
+ Display *disp = NULL;
+
+ disp=XOpenDisplay (d->name);
+
+ if (!disp) {
+ gdm_debug ("gdm_slave_windows_kill: Could not open display %s", d->name);
return;
}
-
- gdm_debug("gdm_slave_windows_kill: Killing windows on %s", d->name);
-
- gdm_putenv(g_strconcat("XAUTHORITY=", d->auth, NULL));
- gdm_putenv(g_strconcat("DISPLAY=", d->name, NULL));
-
- for(screen=0 ; screen<ScreenCount(disp) ; screen++) {
-
- nchildren=0;
-
- while(XQueryTree(disp, RootWindow(disp, screen), &root, &parent,
- &children, &nchildren) && nchildren>0) {
+
+ gdm_debug ("gdm_slave_windows_kill: Killing windows on %s", d->name);
+
+ setenv ("XAUTHORITY", d->authfile, TRUE);
+ setenv ("DISPLAY", d->name, TRUE);
+
+ for (screen = 0 ; screen < ScreenCount (disp) ; screen++) {
+
+ nchildren = 0;
+
+ while (XQueryTree (disp, RootWindow (disp, screen), &root, &parent,
+ &children, &nchildren) && nchildren>0) {
- for(child=0 ; child<nchildren ; child++) {
- gdm_debug("gdm_slave_windows_kill: Killing child 0x%x", children[child]);
- XKillClient(disp, children[child]);
+ for (child = 0 ; child < nchildren ; child++) {
+ gdm_debug ("gdm_slave_windows_kill: Killing child 0x%x", children[child]);
+ XKillClient (disp, children[child]);
}
- XFree(children);
+ XFree (children);
}
-
+
}
-
- XSync(disp, FALSE);
+
+ XSync (disp, FALSE);
}
-
+
/* Minor X faults */
static gint
-gdm_slave_xerror_handler(Display *disp, XErrorEvent *evt)
+gdm_slave_xerror_handler (Display *disp, XErrorEvent *evt)
{
- gdm_debug("gdm_slave_windows_kill_error_handler: Blam");
- pingack=FALSE;
- return(TRUE);
+ gdm_debug ("gdm_slave_windows_kill_error_handler: X error - display doesn't respond");
+ pingack = FALSE;
+ return (TRUE);
}
/* We respond to fatal errors by restarting the display */
static gint
-gdm_slave_xioerror_handler(Display *disp)
+gdm_slave_xioerror_handler (Display *disp)
{
- gdm_debug("gdm_slave_xioerror_handler: I/O error for display %s", d->name);
-
- if(pwent)
+ gdm_debug ("gdm_slave_xioerror_handler: I/O error for display %s", d->name);
+
+ if (pwent)
gdm_slave_session_stop();
-
- gdm_error(_("gdm_slave_windows_kill_ioerror_handler: Fatal X error - Restarting %s"), d->name);
-
- exit(DISPLAY_RESERVER);
+
+ gdm_error (_("gdm_slave_windows_kill_ioerror_handler: Fatal X error - Restarting %s"), d->name);
+
+ exit (DISPLAY_RESERVER);
}
static void
-gdm_slave_xsync_handler(int sig)
+gdm_slave_xsync_handler (int sig)
{
- gdm_debug("gdm_slave_xsync_handler: Xping failed for display %s", d->name);
- pingack=FALSE;
+ gdm_debug ("gdm_slave_xsync_handler: Xping failed for display %s", d->name);
+ pingack = FALSE;
}
static gboolean
-gdm_slave_xsync_ping(void)
+gdm_slave_xsync_ping (void)
{
struct sigaction sigalarm;
sigset_t mask, omask;
-
- gdm_debug("gdm_slave_xsync_ping: Pinging %s", d->name);
-
- pingack=TRUE;
-
- XSetErrorHandler(gdm_slave_xerror_handler);
- XSetIOErrorHandler(gdm_slave_xioerror_handler);
-
+
+ gdm_debug ("gdm_slave_xsync_ping: Pinging %s", d->name);
+
+ pingack = TRUE;
+
+ XSetErrorHandler (gdm_slave_xerror_handler);
+ XSetIOErrorHandler (gdm_slave_xioerror_handler);
+
sigalarm.sa_handler = gdm_slave_xsync_handler;
sigalarm.sa_flags = 0;
- sigemptyset(&sigalarm.sa_mask);
+ sigemptyset (&sigalarm.sa_mask);
- if(sigaction(SIGALRM, &sigalarm, NULL) < 0)
- gdm_abort(_("gdm_slave_xsync_ping: Error setting up ALARM signal handler"));
-
- sigemptyset(&mask);
- sigaddset(&mask, SIGALRM);
- sigprocmask(SIG_UNBLOCK, &mask, &omask);
-
- alarm(10);
-
- XSync(d->dsp, TRUE);
-
- alarm(0);
- sigprocmask(SIG_SETMASK, &omask, NULL);
-
- gdm_debug("gdm_slave_xsync_ping: %s returned %d", d->name, pingack);
-
- return(pingack);
+ if (sigaction (SIGALRM, &sigalarm, NULL) < 0)
+ gdm_abort (_("gdm_slave_xsync_ping: Error setting up ALARM signal handler"));
+
+ sigemptyset (&mask);
+ sigaddset (&mask, SIGALRM);
+ sigprocmask (SIG_UNBLOCK, &mask, &omask);
+
+ alarm (10);
+
+ XSync (d->dsp, TRUE);
+
+ alarm (0);
+ sigprocmask (SIG_SETMASK, &omask, NULL);
+
+ gdm_debug ("gdm_slave_xsync_ping: %s returned %d", d->name, pingack);
+
+ return (pingack);
}
gchar *
-gdm_slave_greeter_ctl(gchar cmd, gchar *str)
+gdm_slave_greeter_ctl (gchar cmd, gchar *str)
{
gchar buf[FIELD_SIZE];
-
- g_print("%c%s\n", cmd, str);
-
- fgets(buf, FIELD_SIZE-1, greeter);
-
- if(strlen(buf)) {
- buf[strlen(buf)-1]='\0';
- return(g_strndup(buf, strlen(buf)));
+
+ g_print ("%c%s\n", cmd, str);
+
+ fgets (buf, FIELD_SIZE-1, greeter);
+
+ if (strlen (buf)) {
+ buf[strlen (buf)-1] = '\0';
+ return (g_strndup (buf, strlen (buf)));
}
else
- return(NULL);
+ return (NULL);
}
+
/* EOF */
diff --git a/daemon/verify.c b/daemon/verify.c
index dd68a878..b00d1922 100644
--- a/daemon/verify.c
+++ b/daemon/verify.c
@@ -1,5 +1,5 @@
/* GDM - The Gnome Display Manager
- * Copyright (C) 1998, 1999 Martin Kasper Petersen <mkp@SunSITE.auc.dk>
+ * Copyright (C) 1998, 1999 Martin Kasper 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
@@ -8,12 +8,12 @@
*
* 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
+ * 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
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <stdio.h>
@@ -28,21 +28,21 @@
#include <gnome.h>
#ifdef HAVE_PAM
- #include <security/pam_appl.h>
+ #include <security/pam_appl.h>
#endif /* HAVE_PAM */
#ifdef HAVE_SHADOW
- #include <shadow.h>
+ #include <shadow.h>
#endif /* HAVE_SHADOW */
#include "gdm.h"
static const gchar RCSid[]="$Id$";
-extern void gdm_abort(const char*, ...);
-extern void gdm_debug(const char*, ...);
-extern void gdm_error(const char*, ...);
-extern gchar *gdm_slave_greeter_ctl(gchar cmd, gchar *str);
+extern void gdm_abort (const char*, ...);
+extern void gdm_debug (const char*, ...);
+extern void gdm_error (const char*, ...);
+extern gchar *gdm_slave_greeter_ctl (gchar cmd, gchar *str);
extern gboolean GdmVerboseAuth;
extern gboolean GdmAllowRoot;
@@ -57,53 +57,53 @@ pam_handle_t *pamh;
static gint
-gdm_verify_pam_conv(int num_msg, const struct pam_message **msg,
- struct pam_response **resp,
- void *appdata_ptr)
+gdm_verify_pam_conv (int num_msg, const struct pam_message **msg,
+ struct pam_response **resp,
+ void *appdata_ptr)
{
gint replies = 0;
struct pam_response *reply = NULL;
gchar *s;
- reply=g_new0(struct pam_response, num_msg);
-
- if(!reply)
+ reply = g_new0 (struct pam_response, num_msg);
+
+ if (!reply)
return PAM_CONV_ERR;
- for(replies=0; replies<num_msg; replies++) {
-
- switch(msg[replies]->msg_style) {
-
+ for (replies = 0; replies < num_msg; replies++) {
+
+ switch (msg[replies]->msg_style) {
+
case PAM_PROMPT_ECHO_ON:
- s=gdm_slave_greeter_ctl(GDM_PROMPT, (gchar *)msg[replies]->msg);
- reply[replies].resp_retcode=PAM_SUCCESS;
- reply[replies].resp=g_strdup(s);
- g_free(s);
+ s = gdm_slave_greeter_ctl (GDM_PROMPT, (gchar *) msg[replies]->msg);
+ reply[replies].resp_retcode = PAM_SUCCESS;
+ reply[replies].resp = g_strdup (s);
+ g_free (s);
break;
-
+
case PAM_PROMPT_ECHO_OFF:
- s=gdm_slave_greeter_ctl(GDM_NOECHO, (gchar *)msg[replies]->msg);
- reply[replies].resp_retcode=PAM_SUCCESS;
- reply[replies].resp=g_strdup(s);
- g_free(s);
+ s = gdm_slave_greeter_ctl (GDM_NOECHO, (gchar *) msg[replies]->msg);
+ reply[replies].resp_retcode = PAM_SUCCESS;
+ reply[replies].resp = g_strdup (s);
+ g_free (s);
break;
-
+
case PAM_ERROR_MSG:
case PAM_TEXT_INFO:
- gdm_slave_greeter_ctl(GDM_MSGERR, (gchar *)msg[replies]->msg);
- reply[replies].resp_retcode=PAM_SUCCESS;
- reply[replies].resp=NULL;
+ gdm_slave_greeter_ctl (GDM_MSGERR, (gchar *) msg[replies]->msg);
+ reply[replies].resp_retcode = PAM_SUCCESS;
+ reply[replies].resp = NULL;
break;
-
+
default:
- g_free(reply);
- return PAM_CONV_ERR;
+ g_free (reply);
+ return (PAM_CONV_ERR);
}
-
+
}
- *resp=reply;
- return(PAM_SUCCESS);
+ *resp = reply;
+ return (PAM_SUCCESS);
}
@@ -120,159 +120,168 @@ gdm_verify_user (gchar *display)
gchar *login;
gchar **pamenv;
struct passwd *pwent;
-
- login=gdm_slave_greeter_ctl(GDM_PROMPT, _("Login:"));
-
- if(!login)
- return(NULL);
-
- pwent=getpwnam(login);
-
- if(!pwent) {
- gdm_error(_("Couldn't authenticate %s"), login);
-
- if(GdmVerboseAuth)
- gdm_slave_greeter_ctl(GDM_MSGERR, _("User unknown"));
-
- return(NULL);
+
+ login = gdm_slave_greeter_ctl (GDM_PROMPT, _("Login:"));
+
+ if (!login)
+ return (NULL);
+
+ pwent = getpwnam (login);
+
+ if (!pwent) {
+ gdm_error (_("Couldn't authenticate %s"), login);
+
+ if (GdmVerboseAuth)
+ gdm_slave_greeter_ctl (GDM_MSGERR, _("User unknown"));
+
+ return (NULL);
}
-
- if(GdmAllowRoot && pwent->pw_uid == 0) {
- gdm_error(_("Root login disallowed on display '%s'"), display);
-
- if(GdmVerboseAuth)
- gdm_slave_greeter_ctl(GDM_MSGERR, _("Root login disallowed"));
-
- return(NULL);
+
+ if (GdmAllowRoot && pwent->pw_uid == 0) {
+ gdm_error (_("Root login disallowed on display '%s'"), display);
+
+ if (GdmVerboseAuth)
+ gdm_slave_greeter_ctl (GDM_MSGERR, _("Root login disallowed"));
+
+ return (NULL);
}
-
- if((pamerr=pam_start("gdm", login, &pamc, &pamh)) != PAM_SUCCESS) {
- gdm_error(_("Can't find /etc/pam.d/gdm!"));
+
+ if ((pamerr = pam_start ("gdm", login, &pamc, &pamh)) != PAM_SUCCESS) {
+ gdm_error (_("Can't find /etc/pam.d/gdm!"));
}
- if((pamerr=pam_set_item(pamh, PAM_TTY, display)) != PAM_SUCCESS) {
- gdm_error(_("Can't set PAM_TTY=%s"), ":0");
+ if ((pamerr = pam_set_item (pamh, PAM_TTY, display)) != PAM_SUCCESS) {
+ gdm_error (_("Can't set PAM_TTY=%s"), ":0");
goto pamerr;
}
- if((pamerr=pam_authenticate(pamh, 0)) != PAM_SUCCESS) {
- gdm_error(_("Couldn't authenticate %s"), login);
+ if ((pamerr = pam_authenticate (pamh, 0)) != PAM_SUCCESS) {
+ gdm_error (_("Couldn't authenticate %s"), login);
goto pamerr;
}
-
- if((pamerr=pam_acct_mgmt(pamh, 0)) != PAM_SUCCESS) {
- gdm_error(_("Couldn't set acct. mgmt for %s"), login);
+
+ if ((pamerr = pam_acct_mgmt (pamh, 0)) != PAM_SUCCESS) {
+ gdm_error (_("Couldn't set acct. mgmt for %s"), login);
goto pamerr;
}
-
- if((pamerr=pam_setcred(pamh, 0)) != PAM_SUCCESS) {
- gdm_error(_("Couldn't set credentials for %s"), login);
+
+ if ((pamerr = pam_setcred (pamh, 0)) != PAM_SUCCESS) {
+ gdm_error (_("Couldn't set credentials for %s"), login);
goto pamerr;
}
-
- if((pamerr=pam_open_session(pamh, 0)) != PAM_SUCCESS) {
- gdm_error(_("Couldn't open session for %s"), login);
+
+ if ((pamerr = pam_open_session (pamh, 0)) != PAM_SUCCESS) {
+ gdm_error (_("Couldn't open session for %s"), login);
goto pamerr;
}
-
- if((pamenv=pam_getenvlist(pamh))) {
- for(i=0 ; pamenv[i] ; i++) {
- putenv(pamenv[i]);
- }
+
+ if ((pamenv = pam_getenvlist (pamh))) {
+ for (i = 0 ; pamenv[i] ; i++) {
+ putenv (pamenv[i]);
+ }
}
-
- return(login);
-
+
+ return (login);
+
pamerr:
-
- if(GdmVerboseAuth)
- gdm_slave_greeter_ctl(GDM_MSGERR, (gchar *)pam_strerror(pamh, pamerr));
-
- pam_end(pamh, pamerr);
- pamh=NULL;
-
+
+ if (GdmVerboseAuth)
+ gdm_slave_greeter_ctl (GDM_MSGERR, (gchar *) pam_strerror (pamh, pamerr));
+
+ pam_end (pamh, pamerr);
+ pamh = NULL;
+
/* Workaround to avoid gdm messages being logged as PAM_pwdb */
closelog();
- openlog("gdm", LOG_PID, LOG_DAEMON);
-
- return(NULL);
+ openlog ("gdm", LOG_PID, LOG_DAEMON);
+
+ return (NULL);
}
+
#else /* HAVE_PAM */
+
gchar *
gdm_verify_user (gchar *display)
{
gchar *login, *passwd, *ppasswd;
struct passwd *pwent;
-
+
#ifdef HAVE_SHADOW
struct spwd *sp;
#endif
-
- login=gdm_slave_greeter_ctl(GDM_PROMPT, _("Login:"));
- pwent=getpwnam(login);
-
- if(!pwent) {
- gdm_error(_("Couldn't authenticate %s"), login);
-
- if(GdmVerboseAuth)
- gdm_slave_greeter_ctl(GDM_MSGERR, _("User unknown"));
-
- return(NULL);
+
+ login = gdm_slave_greeter_ctl (GDM_PROMPT, _("Login:"));
+ pwent = getpwnam (login);
+
+ if (!pwent) {
+ gdm_error (_("Couldn't authenticate %s"), login);
+
+ if (GdmVerboseAuth)
+ gdm_slave_greeter_ctl (GDM_MSGERR, _("User unknown"));
+
+ return (NULL);
}
-
- if(GdmAllowRoot && pwent->pw_uid == 0) {
- gdm_error(_("Root login disallowed on display '%s'"), display);
-
- if(GdmVerboseAuth)
- gdm_slave_greeter_ctl(GDM_MSGERR, _("Root login disallowed"));
-
- return(NULL);
+
+ if (GdmAllowRoot && pwent->pw_uid == 0) {
+ gdm_error (_("Root login disallowed on display '%s'"), display);
+
+ if (GdmVerboseAuth)
+ gdm_slave_greeter_ctl (GDM_MSGERR, _("Root login disallowed"));
+
+ return (NULL);
}
-
- ppasswd=!pwent ? NULL : pwent->pw_passwd;
-
+
+ ppasswd = !pwent ? NULL : pwent->pw_passwd;
+
#ifdef HAVE_SHADOW
- sp=getspnam(login);
-
- if(sp)
- ppasswd=sp->sp_pwdp;
+ sp = getspnam (login);
+
+ if (sp)
+ ppasswd = sp->sp_pwdp;
+
endspent();
-#endif /* HAVE_SHADOW */
- passwd=gdm_slave_greeter_ctl(GDM_NOECHO, _("Password:"));
-
- if (!passwd || !ppasswd || strcmp(crypt(passwd, ppasswd), ppasswd)) {
-
- if(GdmVerboseAuth)
- gdm_slave_greeter_ctl(GDM_MSGERR, _("Incorrect password"));
-
- return(NULL);
+#endif /* HAVE_SHADOW */
+
+ passwd = gdm_slave_greeter_ctl (GDM_NOECHO, _("Password:"));
+
+ if (!passwd || !ppasswd || strcmp (crypt (passwd, ppasswd), ppasswd)) {
+
+ if (GdmVerboseAuth)
+ gdm_slave_greeter_ctl (GDM_MSGERR, _("Incorrect password"));
+
+ return (NULL);
}
-
- return(login);
+
+ return (login);
}
+
#endif /* HAVE_PAM */
void
gdm_verify_cleanup (void)
{
+
#ifdef HAVE_PAM
- gdm_debug("gdm_verify_cleanup: Closing session %d", pamh);
- if(pamh) {
- pam_close_session(pamh, 0);
- pam_end(pamh, PAM_SUCCESS);
- pamh=NULL;
+ gdm_debug ("gdm_verify_cleanup: Closing session %d", pamh);
+
+ if (pamh) {
+ pam_close_session (pamh, 0);
+ pam_end (pamh, PAM_SUCCESS);
+ pamh = NULL;
}
-
+
/* Workaround to avoid gdm messages being logged as PAM_pwdb */
closelog();
- openlog("gdm", LOG_PID, LOG_DAEMON);
+ openlog ("gdm", LOG_PID, LOG_DAEMON);
+
#endif /* HAVE_PAM */
+
}
/* EOF */
diff --git a/daemon/xdmcp.c b/daemon/xdmcp.c
index 7d399400..79672cef 100644
--- a/daemon/xdmcp.c
+++ b/daemon/xdmcp.c
@@ -51,7 +51,7 @@
*
* Similarly the manager xpings the display once in a while and shuts
* down the connection on failure.
- *
+ *
*/
#include <config.h>
@@ -72,6 +72,7 @@
#include <netdb.h>
#include <sys/types.h>
#include <sys/stat.h>
+#include <sys/utsname.h>
#include <fcntl.h>
#ifdef HAVE_TCPWRAPPERS
@@ -91,6 +92,7 @@ gint deny_severity = LOG_WARNING;
gint xdmcpfd;
gint globsessid;
gint pending=0;
+static gchar *sysid;
static ARRAY8 servhost;
static XdmcpBuffer buf;
@@ -113,331 +115,332 @@ extern gint GdmPort; /* UDP port number */
* keys from all X terminals on your LAN. Fun, fun, fun.
*
* Furthermore user passwords go over the wire in cleartext anyway so
- * protecting cookies is not that important.
+ * protecting cookies is not that important.
*/
typedef struct _XdmAuth {
- ARRAY8 authentication;
- ARRAY8 authorization;
+ ARRAY8 authentication;
+ ARRAY8 authorization;
} XdmAuthRec, *XdmAuthPtr;
static XdmAuthRec serv_authlist = {
- { (CARD16) 0, (CARD8 *) 0 },
- { (CARD16) 0, (CARD8 *) 0 }
+ { (CARD16) 0, (CARD8 *) 0 },
+ { (CARD16) 0, (CARD8 *) 0 }
};
-extern gchar *gdm_cookie_generate(void);
-extern void gdm_abort(const gchar *format, ...);
-extern void gdm_debug(const gchar *format, ...);
-extern void gdm_error(const gchar *format, ...);
-extern void gdm_putenv(gchar *s);
-extern void gdm_auth_secure_display(GdmDisplay *d);
-extern gint gdm_display_manage(GdmDisplay *d);
-extern void gdm_display_dispose(GdmDisplay *d);
+extern gchar *gdm_cookie_generate (void);
+extern void gdm_abort (const gchar *format, ...);
+extern void gdm_debug (const gchar *format, ...);
+extern void gdm_error (const gchar *format, ...);
+extern gboolean gdm_auth_secure_display (GdmDisplay *d);
+extern gint gdm_display_manage (GdmDisplay *d);
+extern void gdm_display_dispose (GdmDisplay *d);
-int gdm_xdmcp_init(void);
-void gdm_xdmcp_run(void);
-void gdm_xdmcp_close(void);
+int gdm_xdmcp_init (void);
+void gdm_xdmcp_run (void);
+void gdm_xdmcp_close (void);
static void gdm_xdmcp_decode_packet (void);
static void gdm_xdmcp_handle_query (struct sockaddr_in *clnt_sa, gint len, gint type);
-static void gdm_xdmcp_handle_forward_query(struct sockaddr_in *clnt_sa, gint len);
-static void gdm_xdmcp_handle_request(struct sockaddr_in *clnt_sa, gint len);
+static void gdm_xdmcp_handle_forward_query (struct sockaddr_in *clnt_sa, gint len);
+static void gdm_xdmcp_handle_request (struct sockaddr_in *clnt_sa, gint len);
static void gdm_xdmcp_handle_manage (struct sockaddr_in *clnt_sa, gint len);
static void gdm_xdmcp_handle_keepalive (struct sockaddr_in *clnt_sa, gint len);
static void gdm_xdmcp_send_willing (struct sockaddr_in *clnt_sa);
-static void gdm_xdmcp_send_unwilling(struct sockaddr_in *clnt_sa, gint type);
-static void gdm_xdmcp_send_accept (struct sockaddr_in *clnt_sa, gint displaynum);
+static void gdm_xdmcp_send_unwilling (struct sockaddr_in *clnt_sa, gint type);
+static void gdm_xdmcp_send_accept (struct sockaddr_in *clnt_sa, gint displaynum);
static void gdm_xdmcp_send_decline (struct sockaddr_in *clnt_sa);
-static void gdm_xdmcp_send_refuse (struct sockaddr_in *clnt_sa, CARD32 sessid);
-static void gdm_xdmcp_send_failed (struct sockaddr_in *clnt_sa, CARD32 sessid);
-static void gdm_xdmcp_send_alive (struct sockaddr_in *clnt_sa, CARD32 sessid);
-static gboolean gdm_xdmcp_host_allow(struct sockaddr_in *cnlt_sa);
+static void gdm_xdmcp_send_refuse (struct sockaddr_in *clnt_sa, CARD32 sessid);
+static void gdm_xdmcp_send_failed (struct sockaddr_in *clnt_sa, CARD32 sessid);
+static void gdm_xdmcp_send_alive (struct sockaddr_in *clnt_sa, CARD32 sessid);
+static gboolean gdm_xdmcp_host_allow (struct sockaddr_in *cnlt_sa);
static GdmDisplay *gdm_xdmcp_display_alloc (struct sockaddr_in *, gint);
-static GdmDisplay *gdm_xdmcp_display_lookup(CARD32 sessid);
-static void gdm_xdmcp_display_dispose_check(gchar *name);
-static void gdm_xdmcp_displays_check(void);
+static GdmDisplay *gdm_xdmcp_display_lookup (CARD32 sessid);
+static void gdm_xdmcp_display_dispose_check (gchar *name);
+static void gdm_xdmcp_displays_check (void);
int
-gdm_xdmcp_init(void)
+gdm_xdmcp_init (void)
{
struct sockaddr_in serv_sa;
gchar hostbuf[256];
-
- globsessid=time(NULL);
-
+ struct utsname name;
+
+ globsessid = time (NULL);
+
/* Fetch and store local hostname in XDMCP friendly format */
- if(gethostname(hostbuf, 255))
- gdm_abort(_("gdm_xdmcp_init: Could not get server hostname: %s!"), strerror(errno));
-
- servhost.data=g_strdup(hostbuf);
- servhost.length=strlen(servhost.data);
-
- gdm_debug("Start up on host %s, port %d", hostbuf, GdmPort);
-
+ if (gethostname (hostbuf, 255))
+ gdm_abort (_("gdm_xdmcp_init: Could not get server hostname: %s!"), strerror (errno));
+
+ servhost.data = g_strdup (hostbuf);
+ servhost.length = strlen (servhost.data);
+
+ gdm_debug ("Start up on host %s, port %d", hostbuf, GdmPort);
+
/* Open socket for communications */
- xdmcpfd = socket(AF_INET, SOCK_DGRAM, 0); /* UDP */
-
- if(xdmcpfd == -1)
- gdm_abort(_("gdm_xdmcp_init: Could not create socket!"));
-
+ xdmcpfd = socket (AF_INET, SOCK_DGRAM, 0); /* UDP */
+
+ if (xdmcpfd == -1)
+ gdm_abort (_("gdm_xdmcp_init: Could not create socket!"));
+
serv_sa.sin_family = AF_INET;
serv_sa.sin_port = htons (GdmPort); /* UDP 177 */
serv_sa.sin_addr.s_addr = htonl (INADDR_ANY);
+
+ if (bind (xdmcpfd, (struct sockaddr_in *) &serv_sa, sizeof (serv_sa)) == -1)
+ gdm_abort (_("gdm_xdmcp_init: Could not bind to XDMCP socket!"));
- if(bind(xdmcpfd, (struct sockaddr_in *) &serv_sa, sizeof(serv_sa)) == -1)
- gdm_abort(_("gdm_xdmcp_init: Could not bind to XDMCP socket!"));
+ uname (&name);
+ sysid = g_strconcat (name.sysname, " ", name.release, NULL);
- return (0);
+ return (TRUE);
}
void
-gdm_xdmcp_run(void)
+gdm_xdmcp_run (void)
{
GIOChannel *channel;
-
- channel = g_io_channel_unix_new(xdmcpfd);
- g_io_add_watch_full(channel, G_PRIORITY_DEFAULT,
- G_IO_IN|G_IO_PRI|G_IO_ERR|G_IO_HUP|G_IO_NVAL,
- (GIOFunc) gdm_xdmcp_decode_packet,
- GINT_TO_POINTER(xdmcpfd), NULL);
- g_io_channel_unref(channel);
+
+ channel = g_io_channel_unix_new (xdmcpfd);
+ g_io_add_watch_full (channel, G_PRIORITY_DEFAULT,
+ G_IO_IN|G_IO_PRI|G_IO_ERR|G_IO_HUP|G_IO_NVAL,
+ (GIOFunc) gdm_xdmcp_decode_packet,
+ GINT_TO_POINTER (xdmcpfd), NULL);
+ g_io_channel_unref (channel);
}
void
-gdm_xdmcp_close(void)
+gdm_xdmcp_close (void)
{
- close(xdmcpfd);
+ close (xdmcpfd);
}
static void
-gdm_xdmcp_decode_packet(void)
+gdm_xdmcp_decode_packet (void)
{
struct sockaddr_in clnt_sa;
- gint sa_len=sizeof(clnt_sa);
+ gint sa_len = sizeof (clnt_sa);
XdmcpHeader header;
-
- if(!XdmcpFill(xdmcpfd, &buf, &clnt_sa, &sa_len)) {
- gdm_error(_("gdm_xdmcp_decode: Could not create XDMCP buffer!"));
+
+ if (!XdmcpFill (xdmcpfd, &buf, &clnt_sa, &sa_len)) {
+ gdm_error (_("gdm_xdmcp_decode: Could not create XDMCP buffer!"));
return;
}
-
- if(!XdmcpReadHeader(&buf, &header)) {
- gdm_error(_("gdm_xdmcp_decode: Could not read XDMCP header!"));
+
+ if (!XdmcpReadHeader (&buf, &header)) {
+ gdm_error (_("gdm_xdmcp_decode: Could not read XDMCP header!"));
return;
}
- if(header.version != XDM_PROTOCOL_VERSION) {
- gdm_error(_("gdm_xdmcp_decode: Incorrect XDMCP version!"));
+ if (header.version != XDM_PROTOCOL_VERSION) {
+ gdm_error (_("gdm_xdmcp_decode: Incorrect XDMCP version!"));
return;
}
-
- switch(header.opcode) {
+
+ switch (header.opcode) {
case BROADCAST_QUERY:
- gdm_xdmcp_handle_query(&clnt_sa, header.length, BROADCAST_QUERY);
+ gdm_xdmcp_handle_query (&clnt_sa, header.length, BROADCAST_QUERY);
break;
-
+
case QUERY:
- gdm_xdmcp_handle_query(&clnt_sa, header.length, QUERY);
+ gdm_xdmcp_handle_query (&clnt_sa, header.length, QUERY);
break;
case INDIRECT_QUERY:
- gdm_xdmcp_handle_query(&clnt_sa, header.length, INDIRECT_QUERY);
+ gdm_xdmcp_handle_query (&clnt_sa, header.length, INDIRECT_QUERY);
break;
case FORWARD_QUERY:
- gdm_xdmcp_handle_forward_query(&clnt_sa, header.length);
+ gdm_xdmcp_handle_forward_query (&clnt_sa, header.length);
break;
case REQUEST:
- /* Purge pending displays */
- gdm_xdmcp_displays_check();
-
- gdm_xdmcp_handle_request(&clnt_sa, header.length);
+ gdm_xdmcp_displays_check(); /* Purge pending displays */
+ gdm_xdmcp_handle_request (&clnt_sa, header.length);
break;
case MANAGE:
- gdm_xdmcp_handle_manage(&clnt_sa, header.length);
+ gdm_xdmcp_handle_manage (&clnt_sa, header.length);
break;
case KEEPALIVE:
- gdm_xdmcp_handle_keepalive(&clnt_sa, header.length);
+ gdm_xdmcp_handle_keepalive (&clnt_sa, header.length);
break;
-
+
default:
- gdm_error(_("gdm_xdmcp_decode_packet: Unknown opcode from host %s"),
- inet_ntoa(clnt_sa.sin_addr));
+ gdm_error (_("gdm_xdmcp_decode_packet: Unknown opcode from host %s"),
+ inet_ntoa (clnt_sa.sin_addr));
break;
}
}
static void
-gdm_xdmcp_handle_query(struct sockaddr_in *clnt_sa, gint len, gint type)
+gdm_xdmcp_handle_query (struct sockaddr_in *clnt_sa, gint len, gint type)
{
ARRAYofARRAY8 clnt_authlist;
- gint i, explen=1;
-
- gdm_debug("gdm_xdmcp_handle_query: Opcode %d from %s",
- type, inet_ntoa(clnt_sa->sin_addr));
-
+ gint i = 0, explen = 1;
+
+ gdm_debug ("gdm_xdmcp_handle_query: Opcode %d from %s",
+ type, inet_ntoa (clnt_sa->sin_addr));
+
/* Extract array of authentication names from Xdmcp packet */
- if(!XdmcpReadARRAYofARRAY8(&buf, &clnt_authlist)) {
- gdm_error(_("gdm_xdmcp_handle_query: Could not extract authlist from packet"));
+ if (! XdmcpReadARRAYofARRAY8 (&buf, &clnt_authlist)) {
+ gdm_error (_("gdm_xdmcp_handle_query: Could not extract authlist from packet"));
return;
}
-
+
/* Crude checksumming */
- for(i=0 ; i<clnt_authlist.length ; i++) {
- gdm_debug("gdm_xdmcp_handle_query: authlist: %s", clnt_authlist.data);
+ for (i = 0 ; i < clnt_authlist.length ; i++) {
+ gdm_debug ("gdm_xdmcp_handle_query: authlist: %s", clnt_authlist.data);
explen += 2+clnt_authlist.data[i].length;
}
-
- if(len!=explen) {
- gdm_error(_("gdm_xdmcp_handle_query: Error in checksum"));
+
+ if (len != explen) {
+ gdm_error (_("gdm_xdmcp_handle_query: Error in checksum"));
return;
}
-
+
/* Don't negotiate authentication - Unsupported */
- XdmcpDisposeARRAYofARRAY8(&clnt_authlist);
-
+ XdmcpDisposeARRAYofARRAY8 (&clnt_authlist);
+
/* Check with tcp_wrappers if client is allowed to access */
- if(gdm_xdmcp_host_allow(clnt_sa))
- gdm_xdmcp_send_willing(clnt_sa);
+ if (gdm_xdmcp_host_allow (clnt_sa))
+ gdm_xdmcp_send_willing (clnt_sa);
else
- gdm_xdmcp_send_unwilling(clnt_sa, type);
+ gdm_xdmcp_send_unwilling (clnt_sa, type);
}
static void
-gdm_xdmcp_handle_forward_query(struct sockaddr_in *clnt_sa, gint len)
+gdm_xdmcp_handle_forward_query (struct sockaddr_in *clnt_sa, gint len)
{
ARRAY8 clnt_addr;
ARRAY8 clnt_port;
ARRAYofARRAY8 clnt_authlist;
- gint i, explen=1;
+ gint i = 0, explen = 1;
static struct sockaddr_in *disp_sa;
- guint port=0;
+ guint port = 0;
struct in_addr ia;
-
- gdm_debug("gdm_xdmcp_handle_forward_query: ForwardQuery from %s",
- inet_ntoa(clnt_sa->sin_addr));
-
+
+ gdm_debug ("gdm_xdmcp_handle_forward_query: ForwardQuery from %s",
+ inet_ntoa (clnt_sa->sin_addr));
+
/* Read display address */
- if(!XdmcpReadARRAY8 (&buf, &clnt_addr)) {
- gdm_error(_("gdm_xdmcp_handle_forward_query: Could not read display address"));
+ if (! XdmcpReadARRAY8 (&buf, &clnt_addr)) {
+ gdm_error (_("gdm_xdmcp_handle_forward_query: Could not read display address"));
return;
}
-
+
/* Read display port */
- if(!XdmcpReadARRAY8 (&buf, &clnt_port)) {
- gdm_error(_("gdm_xdmcp_handle_forward_query: Could not read display port number"));
+ if (! XdmcpReadARRAY8 (&buf, &clnt_port)) {
+ gdm_error (_("gdm_xdmcp_handle_forward_query: Could not read display port number"));
return;
}
-
+
/* Extract array of authentication names from Xdmcp packet */
- if(!XdmcpReadARRAYofARRAY8(&buf, &clnt_authlist)) {
- gdm_error(_("gdm_xdmcp_handle_forward_query: Could not extract authlist from packet"));
+ if (! XdmcpReadARRAYofARRAY8 (&buf, &clnt_authlist)) {
+ gdm_error (_("gdm_xdmcp_handle_forward_query: Could not extract authlist from packet"));
return;
}
-
+
/* Crude checksumming */
- explen=1;
- explen+=2+clnt_addr.length;
- explen+=2+clnt_port.length;
-
- for(i=0 ; i<clnt_authlist.length ; i++) {
- gdm_debug("gdm_xdmcp_handle_forward_query: authlist: %s", clnt_authlist.data);
+ explen = 1;
+ explen += 2+clnt_addr.length;
+ explen += 2+clnt_port.length;
+
+ for (i = 0 ; i < clnt_authlist.length ; i++) {
+ gdm_debug ("gdm_xdmcp_handle_forward_query: authlist: %s", clnt_authlist.data);
explen += 2+clnt_authlist.data[i].length;
}
-
- if(len!=explen) {
- gdm_error(_("gdm_xdmcp_handle_forward_query: Error in checksum"));
+
+ if (len != explen) {
+ gdm_error (_("gdm_xdmcp_handle_forward_query: Error in checksum"));
return;
}
-
+
/* Find client port number */
- for(i=0 ; i<clnt_port.length ; i++)
- port=port*256+clnt_port.data[i];
-
- /* Find client address. Ugly, uglu. Endianness sucks... */
- memmove(&ia.s_addr, clnt_addr.data, clnt_addr.length);
-
- gdm_debug("gdm_xdmcp_handle_forward_query: Got FORWARD_QUERY from display: %s, port %d",
- inet_ntoa(ia), port);
-
+ for (i = 0 ; i < clnt_port.length ; i++)
+ port = port*256+clnt_port.data[i];
+
+ /* Find client address. Ugly, ugly. Endianness sucks... */
+ memmove (&ia.s_addr, clnt_addr.data, clnt_addr.length);
+
+ gdm_debug ("gdm_xdmcp_handle_forward_query: Got FORWARD_QUERY from display: %s, port %d",
+ inet_ntoa (ia), port);
+
/* Assemble sockaddr_in struct to pass on */
- disp_sa=g_new0(struct sockaddr_in, 1);
+ disp_sa = g_new0 (struct sockaddr_in, 1);
disp_sa->sin_family = AF_INET;
- disp_sa->sin_port = htons(port);
+ disp_sa->sin_port = htons (port);
disp_sa->sin_addr.s_addr = ia.s_addr;
-
+
/* Cleanup */
- XdmcpDisposeARRAYofARRAY8(&clnt_authlist);
-
+ XdmcpDisposeARRAYofARRAY8 (&clnt_authlist);
+
/* Check with tcp_wrappers if display is allowed to access */
- if(gdm_xdmcp_host_allow(disp_sa))
- gdm_xdmcp_send_willing(disp_sa);
+ if (gdm_xdmcp_host_allow (disp_sa))
+ gdm_xdmcp_send_willing (disp_sa);
else
- gdm_xdmcp_send_unwilling(disp_sa, FORWARD_QUERY);
+ gdm_xdmcp_send_unwilling (disp_sa, FORWARD_QUERY);
}
static void
-gdm_xdmcp_send_willing(struct sockaddr_in *clnt_sa)
+gdm_xdmcp_send_willing (struct sockaddr_in *clnt_sa)
{
ARRAY8 status;
XdmcpHeader header;
-
- gdm_debug("gdm_xdmcp_send_willing: Sending WILLING to %s", inet_ntoa(clnt_sa->sin_addr));
-
- status.data=_("GNOME");
- status.length=strlen(status.data);
-
- header.opcode = (CARD16) WILLING;
- header.length = 6 + serv_authlist.authentication.length;
+
+ gdm_debug ("gdm_xdmcp_send_willing: Sending WILLING to %s", inet_ntoa (clnt_sa->sin_addr));
+
+ status.data = sysid;
+ status.length = strlen (sysid);
+
+ header.opcode = (CARD16) WILLING;
+ header.length = 6 + serv_authlist.authentication.length;
header.length += servhost.length + status.length;
header.version = XDM_PROTOCOL_VERSION;
XdmcpWriteHeader (&buf, &header);
-
+
XdmcpWriteARRAY8 (&buf, &serv_authlist.authentication); /* Hardcoded authentication */
XdmcpWriteARRAY8 (&buf, &servhost);
XdmcpWriteARRAY8 (&buf, &status);
- XdmcpFlush (xdmcpfd, &buf, clnt_sa, sizeof(struct sockaddr_in));
+ XdmcpFlush (xdmcpfd, &buf, clnt_sa, sizeof (struct sockaddr_in));
}
static void
-gdm_xdmcp_send_unwilling(struct sockaddr_in *clnt_sa, gint type)
+gdm_xdmcp_send_unwilling (struct sockaddr_in *clnt_sa, gint type)
{
ARRAY8 status;
XdmcpHeader header;
-
- gdm_debug("gdm_xdmcp_send_unwilling: Sending UNWILLING to %s", inet_ntoa(clnt_sa->sin_addr));
-
- gdm_error(_("Denied XDMCP query from host %s"), inet_ntoa(clnt_sa->sin_addr));
-
- status.data=_("Display not authorized to connect");
- status.length=strlen(status.data);
-
- header.opcode = (CARD16) UNWILLING;
- header.length = 4 + servhost.length + status.length;
+
+ gdm_debug ("gdm_xdmcp_send_unwilling: Sending UNWILLING to %s", inet_ntoa (clnt_sa->sin_addr));
+
+ gdm_error (_("Denied XDMCP query from host %s"), inet_ntoa (clnt_sa->sin_addr));
+
+ status.data = _("Display not authorized to connect");
+ status.length = strlen (status.data);
+
+ header.opcode = (CARD16) UNWILLING;
+ header.length = 4 + servhost.length + status.length;
header.version = XDM_PROTOCOL_VERSION;
XdmcpWriteHeader (&buf, &header);
-
+
XdmcpWriteARRAY8 (&buf, &servhost);
XdmcpWriteARRAY8 (&buf, &status);
- XdmcpFlush (xdmcpfd, &buf, clnt_sa, sizeof(struct sockaddr_in));
+ XdmcpFlush (xdmcpfd, &buf, clnt_sa, sizeof (struct sockaddr_in));
}
static void
-gdm_xdmcp_handle_request(struct sockaddr_in *clnt_sa, gint len)
+gdm_xdmcp_handle_request (struct sockaddr_in *clnt_sa, gint len)
{
static CARD16 clnt_dspnum;
static ARRAY16 clnt_conntyp;
@@ -448,99 +451,99 @@ gdm_xdmcp_handle_request(struct sockaddr_in *clnt_sa, gint len)
static ARRAY8 clnt_manufacturer;
gint explen;
gint i;
- gboolean mitauth=FALSE;
-
- gdm_debug("gdm_xdmcp_handle_request: Got REQUEST from %s",
- inet_ntoa(clnt_sa->sin_addr));
-
+ gboolean mitauth = FALSE;
+
+ gdm_debug ("gdm_xdmcp_handle_request: Got REQUEST from %s",
+ inet_ntoa (clnt_sa->sin_addr));
+
/* Check with tcp_wrappers if client is allowed to access */
- if(!gdm_xdmcp_host_allow(clnt_sa)) {
- gdm_error(_("gdm_xdmcp_handle_request: Got REQUEST from banned host %s"),
- inet_ntoa(clnt_sa->sin_addr));
+ if (! gdm_xdmcp_host_allow (clnt_sa)) {
+ gdm_error (_("gdm_xdmcp_handle_request: Got REQUEST from banned host %s"),
+ inet_ntoa (clnt_sa->sin_addr));
return;
}
-
+
/* Remote display number */
- if(!XdmcpReadCARD16(&buf, &clnt_dspnum)) {
- gdm_error(_("gdm_xdmcp_handle_request: Could not read Display Number"));
+ if (! XdmcpReadCARD16 (&buf, &clnt_dspnum)) {
+ gdm_error (_("gdm_xdmcp_handle_request: Could not read Display Number"));
return;
}
-
+
/* We don't care about connection type. Address says it all */
- if(!XdmcpReadARRAY16(&buf, &clnt_conntyp)) {
- gdm_error(_("gdm_xdmcp_handle_request: Could not read Connection Type"));
+ if (! XdmcpReadARRAY16 (&buf, &clnt_conntyp)) {
+ gdm_error (_("gdm_xdmcp_handle_request: Could not read Connection Type"));
return;
}
-
+
/* This is TCP/IP - we don't care */
- if(!XdmcpReadARRAYofARRAY8 (&buf, &clnt_addr)) {
- gdm_error(_("gdm_xdmcp_handle_request: Could not read Client Address"));
+ if (! XdmcpReadARRAYofARRAY8 (&buf, &clnt_addr)) {
+ gdm_error (_("gdm_xdmcp_handle_request: Could not read Client Address"));
return;
}
-
+
/* Read authentication type */
- if(!XdmcpReadARRAY8 (&buf, &clnt_authname)) {
- gdm_error(_("gdm_xdmcp_handle_request: Could not read Authentication Names"));
+ if (! XdmcpReadARRAY8 (&buf, &clnt_authname)) {
+ gdm_error (_("gdm_xdmcp_handle_request: Could not read Authentication Names"));
return;
}
-
+
/* Read authentication data */
- if(!XdmcpReadARRAY8 (&buf, &clnt_authdata)) {
- gdm_error(_("gdm_xdmcp_handle_request: Could not read Authentication Data"));
+ if (! XdmcpReadARRAY8 (&buf, &clnt_authdata)) {
+ gdm_error (_("gdm_xdmcp_handle_request: Could not read Authentication Data"));
return;
}
-
+
/* Read and select from supported authorization list */
- if(!XdmcpReadARRAYofARRAY8(&buf, &clnt_authorization)) {
- gdm_error(_("gdm_xdmcp_handle_request: Could not read Authorization List"));
+ if (! XdmcpReadARRAYofARRAY8 (&buf, &clnt_authorization)) {
+ gdm_error (_("gdm_xdmcp_handle_request: Could not read Authorization List"));
return;
}
-
+
/* libXdmcp doesn't terminate strings properly so we cheat and use strncmp() */
- for(i=0 ; i<clnt_authorization.length ; i++)
- if(!strncmp(clnt_authorization.data[i].data, "MIT-MAGIC-COOKIE-1", 18))
- mitauth=TRUE;
-
+ for (i = 0 ; i < clnt_authorization.length ; i++)
+ if (! strncmp (clnt_authorization.data[i].data, "MIT-MAGIC-COOKIE-1", 18))
+ mitauth = TRUE;
+
/* Manufacturer ID */
- if(!XdmcpReadARRAY8 (&buf, &clnt_manufacturer)) {
- gdm_error(_("gdm_xdmcp_handle_request: Could not read Manufacturer ID"));
+ if (! XdmcpReadARRAY8 (&buf, &clnt_manufacturer)) {
+ gdm_error (_("gdm_xdmcp_handle_request: Could not read Manufacturer ID"));
return;
}
-
+
/* Crude checksumming */
- explen = 2; /* Display Number */
+ explen = 2; /* Display Number */
explen += 1+2*clnt_conntyp.length; /* Connection Type */
- explen += 1; /* Connection Address */
- for(i=0 ; i<clnt_addr.length ; i++)
+ explen += 1; /* Connection Address */
+ for (i = 0 ; i < clnt_addr.length ; i++)
explen += 2+clnt_addr.data[i].length;
- explen += 2+clnt_authname.length; /* Authentication Name */
- explen += 2+clnt_authdata.length; /* Authentication Data */
- explen += 1; /* Authorization Names */
- for(i=0 ; i<clnt_authorization.length ; i++)
+ explen += 2+clnt_authname.length; /* Authentication Name */
+ explen += 2+clnt_authdata.length; /* Authentication Data */
+ explen += 1; /* Authorization Names */
+ for (i = 0 ; i < clnt_authorization.length ; i++)
explen += 2+clnt_authorization.data[i].length;
explen += 2+clnt_manufacturer.length;
-
- if(explen != len) {
- gdm_error(_("gdm_xdmcp_handle_request: Failed checksum from %s"),
- inet_ntoa(clnt_sa->sin_addr));
+
+ if (explen != len) {
+ gdm_error (_("gdm_xdmcp_handle_request: Failed checksum from %s"),
+ inet_ntoa (clnt_sa->sin_addr));
return;
}
-
- gdm_debug("gdm_xdmcp_handle_request: pending=%d, MaxPending=%d, sessions=%d, MaxSessions=%d",
- pending, GdmMaxPending, sessions, GdmMaxSessions);
-
- /* if load<maxload */
- if(mitauth &&
- pending < GdmMaxPending &&
- sessions < GdmMaxSessions)
- gdm_xdmcp_send_accept(clnt_sa, clnt_dspnum);
+
+ gdm_debug ("gdm_xdmcp_handle_request: pending=%d, MaxPending=%d, sessions=%d, MaxSessions=%d",
+ pending, GdmMaxPending, sessions, GdmMaxSessions);
+
+ /* Check if ok to manage display */
+ if (mitauth &&
+ pending < GdmMaxPending &&
+ sessions < GdmMaxSessions)
+ gdm_xdmcp_send_accept (clnt_sa, clnt_dspnum);
else
- gdm_xdmcp_send_decline(clnt_sa);
+ gdm_xdmcp_send_decline (clnt_sa);
}
static void
-gdm_xdmcp_send_accept(struct sockaddr_in *clnt_sa, gint displaynum)
+gdm_xdmcp_send_accept (struct sockaddr_in *clnt_sa, gint displaynum)
{
XdmcpHeader header;
ARRAY8 authentype;
@@ -548,24 +551,24 @@ gdm_xdmcp_send_accept(struct sockaddr_in *clnt_sa, gint displaynum)
ARRAY8 authname;
ARRAY8 authdata;
GdmDisplay *d;
-
- d=gdm_xdmcp_display_alloc(clnt_sa, displaynum);
-
- authentype.data=(CARD8 *) 0;
- authentype.length=(CARD16) 0;
-
- authendata.data=(CARD8 *) 0;
- authendata.length=(CARD16) 0;
-
- authname.data="MIT-MAGIC-COOKIE-1";
- authname.length=strlen(authname.data);
-
- authdata.data=d->bcookie;
- authdata.length=strlen(d->bcookie); /* I.e. 16 */
-
- header.version=XDM_PROTOCOL_VERSION;
- header.opcode=(CARD16) ACCEPT;
- header.length = 4;
+
+ d = gdm_xdmcp_display_alloc (clnt_sa, displaynum);
+
+ authentype.data = (CARD8 *) 0;
+ authentype.length = (CARD16) 0;
+
+ authendata.data = (CARD8 *) 0;
+ authendata.length = (CARD16) 0;
+
+ authname.data = "MIT-MAGIC-COOKIE-1";
+ authname.length = strlen (authname.data);
+
+ authdata.data = d->bcookie;
+ authdata.length = strlen (d->bcookie); /* I.e. 16 */
+
+ header.version = XDM_PROTOCOL_VERSION;
+ header.opcode = (CARD16) ACCEPT;
+ header.length = 4;
header.length += 2 + authentype.length;
header.length += 2 + authendata.length;
header.length += 2 + authname.length;
@@ -578,37 +581,37 @@ gdm_xdmcp_send_accept(struct sockaddr_in *clnt_sa, gint displaynum)
XdmcpWriteARRAY8 (&buf, &authendata);
XdmcpWriteARRAY8 (&buf, &authname);
XdmcpWriteARRAY8 (&buf, &authdata);
-
- XdmcpFlush (xdmcpfd, &buf, clnt_sa, sizeof(struct sockaddr_in));
-
- gdm_debug("gdm_xdmcp_send_accept: Sending ACCEPT to %s with SessionID=%d",
- inet_ntoa(clnt_sa->sin_addr), d->sessionid);
+
+ XdmcpFlush (xdmcpfd, &buf, clnt_sa, sizeof (struct sockaddr_in));
+
+ gdm_debug ("gdm_xdmcp_send_accept: Sending ACCEPT to %s with SessionID=%d",
+ inet_ntoa (clnt_sa->sin_addr), d->sessionid);
}
static void
-gdm_xdmcp_send_decline(struct sockaddr_in *clnt_sa)
+gdm_xdmcp_send_decline (struct sockaddr_in *clnt_sa)
{
XdmcpHeader header;
ARRAY8 authentype;
ARRAY8 authendata;
ARRAY8 status;
-
- gdm_debug("gdm_xdmcp_send_decline: Sending DECLINE to %s",
- inet_ntoa(clnt_sa->sin_addr));
-
- authentype.data=(CARD8 *) 0;
- authentype.length=(CARD16) 0;
-
- authendata.data=(CARD8 *) 0;
- authendata.length=(CARD16) 0;
-
- status.data="Service refused";
- status.length=strlen(status.data);
-
- header.version=XDM_PROTOCOL_VERSION;
- header.opcode=(CARD16) DECLINE;
- header.length = 2 + status.length;
+
+ gdm_debug ("gdm_xdmcp_send_decline: Sending DECLINE to %s",
+ inet_ntoa (clnt_sa->sin_addr));
+
+ authentype.data = (CARD8 *) 0;
+ authentype.length = (CARD16) 0;
+
+ authendata.data = (CARD8 *) 0;
+ authendata.length = (CARD16) 0;
+
+ status.data = "Service refused";
+ status.length = strlen (status.data);
+
+ header.version = XDM_PROTOCOL_VERSION;
+ header.opcode = (CARD16) DECLINE;
+ header.length = 2 + status.length;
header.length += 2 + authentype.length;
header.length += 2 + authendata.length;
XdmcpWriteHeader (&buf, &header);
@@ -616,13 +619,13 @@ gdm_xdmcp_send_decline(struct sockaddr_in *clnt_sa)
XdmcpWriteARRAY8 (&buf, &status);
XdmcpWriteARRAY8 (&buf, &authentype);
XdmcpWriteARRAY8 (&buf, &authendata);
-
- XdmcpFlush (xdmcpfd, &buf, clnt_sa, sizeof(struct sockaddr_in));
+
+ XdmcpFlush (xdmcpfd, &buf, clnt_sa, sizeof (struct sockaddr_in));
}
static void
-gdm_xdmcp_handle_manage(struct sockaddr_in *clnt_sa, gint len)
+gdm_xdmcp_handle_manage (struct sockaddr_in *clnt_sa, gint len)
{
CARD32 clnt_sessid;
CARD16 clnt_dspnum;
@@ -630,186 +633,183 @@ gdm_xdmcp_handle_manage(struct sockaddr_in *clnt_sa, gint len)
GdmDisplay *d;
gint logfd;
- gdm_debug("gdm_xdmcp_manage: Got MANAGE from %s", inet_ntoa(clnt_sa->sin_addr));
-
- /* if (RcvSessId == SavedSessId) { run session }
- elseif (SessId already in use) { nop; }
- else { send refuse };
- */
-
+ gdm_debug ("gdm_xdmcp_manage: Got MANAGE from %s", inet_ntoa (clnt_sa->sin_addr));
+
/* Check with tcp_wrappers if client is allowed to access */
- if(!gdm_xdmcp_host_allow(clnt_sa)) {
- gdm_error(_("gdm_xdmcp_handle_manage: Got Manage from banned host %s"),
- inet_ntoa(clnt_sa->sin_addr));
+ if (! gdm_xdmcp_host_allow (clnt_sa)) {
+ gdm_error (_("gdm_xdmcp_handle_manage: Got Manage from banned host %s"),
+ inet_ntoa (clnt_sa->sin_addr));
return;
}
-
+
/* SessionID */
- if(!XdmcpReadCARD32(&buf, &clnt_sessid)) {
- gdm_error(_("gdm_xdmcp_handle_manage: Could not read Session ID"));
+ if (! XdmcpReadCARD32 (&buf, &clnt_sessid)) {
+ gdm_error (_("gdm_xdmcp_handle_manage: Could not read Session ID"));
return;
}
-
+
/* Remote display number */
- if(!XdmcpReadCARD16(&buf, &clnt_dspnum)) {
- gdm_error(_("gdm_xdmcp_handle_manage: Could not read Display Number"));
+ if (! XdmcpReadCARD16 (&buf, &clnt_dspnum)) {
+ gdm_error (_("gdm_xdmcp_handle_manage: Could not read Display Number"));
return;
}
-
- gdm_debug("gdm_xdmcp_manage: Got Display=%d, SessionID=%d from %s",
- clnt_dspnum, clnt_sessid, inet_ntoa(clnt_sa->sin_addr));
-
+
+ gdm_debug ("gdm_xdmcp_manage: Got Display=%d, SessionID=%d from %s",
+ clnt_dspnum, clnt_sessid, inet_ntoa (clnt_sa->sin_addr));
+
/* Display Class */
- if(!XdmcpReadARRAY8(&buf, &clnt_dspclass)) {
- gdm_error(_("gdm_xdmcp_manage: Could not read Display Class"));
+ if (! XdmcpReadARRAY8 (&buf, &clnt_dspclass)) {
+ gdm_error (_("gdm_xdmcp_manage: Could not read Display Class"));
return;
}
+
+ d = gdm_xdmcp_display_lookup (clnt_sessid);
+
+ if (d && d->dispstat==XDMCP_PENDING) {
+ gchar *logfile;
- d=gdm_xdmcp_display_lookup(clnt_sessid);
-
- if(d && d->dispstat==XDMCP_PENDING) {
-
- gdm_debug("gdm_xdmcp_handle_manage: Looked up %s", d->name);
-
- /* Log all output from spawned programs to a file */
- logfd=open(g_strconcat(GdmLogDir, "/", d->name, ".log", NULL),
- O_CREAT|O_TRUNC|O_APPEND|O_WRONLY, 0666);
+ gdm_debug ("gdm_xdmcp_handle_manage: Looked up %s", d->name);
- if(logfd != -1) {
- dup2(logfd, 1);
- dup2(logfd, 2);
+ /* Log all output from spawned programs to a file */
+ logfile = g_strconcat (GdmLogDir, "/", d->name, ".log", NULL);
+ logfd = open (logfile, O_CREAT|O_TRUNC|O_APPEND|O_WRONLY, 0666);
+ g_free (logfile);
+
+ if (logfd != -1) {
+ dup2 (logfd, 1);
+ dup2 (logfd, 2);
}
else
- gdm_error(_("gdm_xdmcp_handle_manage: Could not open logfile for display %s!"), d->name);
+ gdm_error (_("gdm_xdmcp_handle_manage: Could not open logfile for display %s!"), d->name);
- d->dispstat=XDMCP_MANAGED;
+ d->dispstat = XDMCP_MANAGED;
sessions++;
pending--;
-
+
/* Start greeter/session */
- if(!gdm_display_manage(d)) {
- gdm_xdmcp_send_failed(clnt_sa, clnt_sessid);
+ if (!gdm_display_manage (d)) {
+ gdm_xdmcp_send_failed (clnt_sa, clnt_sessid);
return;
}
}
else if (d && d->dispstat==XDMCP_MANAGED) {
- gdm_debug("gdm_xdmcp_handle_manage: Session id %d already managed", clnt_sessid);
+ gdm_debug ("gdm_xdmcp_handle_manage: Session id %d already managed", clnt_sessid);
}
else {
- gdm_debug("gdm_xdmcp_handle_manage: Failed to look up session id %d", clnt_sessid);
- gdm_xdmcp_send_refuse(clnt_sa, clnt_sessid);
+ gdm_debug ("gdm_xdmcp_handle_manage: Failed to look up session id %d", clnt_sessid);
+ gdm_xdmcp_send_refuse (clnt_sa, clnt_sessid);
}
}
static void
-gdm_xdmcp_send_refuse(struct sockaddr_in *clnt_sa, CARD32 sessid)
+gdm_xdmcp_send_refuse (struct sockaddr_in *clnt_sa, CARD32 sessid)
{
XdmcpHeader header;
-
- gdm_debug("gdm_xdmcp_send_refuse: Sending REFUSE to %d", sessid);
-
- header.version=XDM_PROTOCOL_VERSION;
- header.opcode=(CARD16) REFUSE;
- header.length=4;
- XdmcpWriteHeader(&buf, &header);
- XdmcpWriteCARD32(&buf, sessid);
- XdmcpFlush(xdmcpfd, &buf, clnt_sa, sizeof(struct sockaddr_in));
+ gdm_debug ("gdm_xdmcp_send_refuse: Sending REFUSE to %d", sessid);
+
+ header.version = XDM_PROTOCOL_VERSION;
+ header.opcode= (CARD16) REFUSE;
+ header.length = 4;
+
+ XdmcpWriteHeader (&buf, &header);
+ XdmcpWriteCARD32 (&buf, sessid);
+ XdmcpFlush (xdmcpfd, &buf, clnt_sa, sizeof (struct sockaddr_in));
}
static void
-gdm_xdmcp_send_failed(struct sockaddr_in *clnt_sa, CARD32 sessid)
+gdm_xdmcp_send_failed (struct sockaddr_in *clnt_sa, CARD32 sessid)
{
XdmcpHeader header;
ARRAY8 status;
-
- gdm_debug("gdm_xdmcp_send_failed: Sending FAILED to %d", sessid);
-
- status.data=g_strdup("Failed to start session");
- status.length=strlen(status.data);
-
- header.version=XDM_PROTOCOL_VERSION;
- header.opcode=(CARD16) FAILED;
- header.length=6+status.length;
-
- XdmcpWriteHeader(&buf, &header);
- XdmcpWriteCARD32(&buf, sessid);
- XdmcpWriteARRAY8(&buf, &status);
- XdmcpFlush(xdmcpfd, &buf, clnt_sa, sizeof(struct sockaddr_in));
+
+ gdm_debug ("gdm_xdmcp_send_failed: Sending FAILED to %d", sessid);
+
+ status.data = "Failed to start session";
+ status.length = strlen (status.data);
+
+ header.version = XDM_PROTOCOL_VERSION;
+ header.opcode = (CARD16) FAILED;
+ header.length = 6+status.length;
+
+ XdmcpWriteHeader (&buf, &header);
+ XdmcpWriteCARD32 (&buf, sessid);
+ XdmcpWriteARRAY8 (&buf, &status);
+ XdmcpFlush (xdmcpfd, &buf, clnt_sa, sizeof (struct sockaddr_in));
}
static void
-gdm_xdmcp_handle_keepalive(struct sockaddr_in *clnt_sa, gint len)
+gdm_xdmcp_handle_keepalive (struct sockaddr_in *clnt_sa, gint len)
{
CARD16 clnt_dspnum;
CARD32 clnt_sessid;
-
- gdm_debug("gdm_xdmcp_handle_keepalive: Got KEEPALIVE from %s",
- inet_ntoa(clnt_sa->sin_addr));
-
+
+ gdm_debug ("gdm_xdmcp_handle_keepalive: Got KEEPALIVE from %s",
+ inet_ntoa (clnt_sa->sin_addr));
+
/* Check with tcp_wrappers if client is allowed to access */
- if(!gdm_xdmcp_host_allow(clnt_sa)) {
- gdm_error(_("gdm_xdmcp_handle_keepalive: Got KEEPALIVE from banned host %s"),
- inet_ntoa(clnt_sa->sin_addr));
+ if (! gdm_xdmcp_host_allow (clnt_sa)) {
+ gdm_error (_("gdm_xdmcp_handle_keepalive: Got KEEPALIVE from banned host %s"),
+ inet_ntoa (clnt_sa->sin_addr));
return;
}
-
+
/* Remote display number */
- if(!XdmcpReadCARD16(&buf, &clnt_dspnum)) {
- gdm_error(_("gdm_xdmcp_handle_keepalive: Could not read Display Number"));
+ if (! XdmcpReadCARD16 (&buf, &clnt_dspnum)) {
+ gdm_error (_("gdm_xdmcp_handle_keepalive: Could not read Display Number"));
return;
}
-
+
/* SessionID */
- if(!XdmcpReadCARD32(&buf, &clnt_sessid)) {
- gdm_error(_("gdm_xdmcp_handle_keepalive: Could not read Session ID"));
+ if (! XdmcpReadCARD32 (&buf, &clnt_sessid)) {
+ gdm_error (_("gdm_xdmcp_handle_keepalive: Could not read Session ID"));
return;
}
-
- gdm_xdmcp_send_alive(clnt_sa, clnt_sessid);
+
+ gdm_xdmcp_send_alive (clnt_sa, clnt_sessid);
}
static void
-gdm_xdmcp_send_alive(struct sockaddr_in *clnt_sa, CARD32 sessid)
+gdm_xdmcp_send_alive (struct sockaddr_in *clnt_sa, CARD32 sessid)
{
XdmcpHeader header;
-
- gdm_debug("Sending ALIVE to %d", sessid);
-
- header.version=XDM_PROTOCOL_VERSION;
- header.opcode=(CARD16) ALIVE;
- header.length=5;
-
- XdmcpWriteHeader(&buf, &header);
+
+ gdm_debug ("Sending ALIVE to %d", sessid);
+
+ header.version = XDM_PROTOCOL_VERSION;
+ header.opcode = (CARD16) ALIVE;
+ header.length = 5;
+
+ XdmcpWriteHeader (&buf, &header);
XdmcpWriteCARD8 (&buf, 1);
- XdmcpWriteCARD32(&buf, sessid);
- XdmcpFlush(xdmcpfd, &buf, clnt_sa, sizeof(struct sockaddr_in));
+ XdmcpWriteCARD32 (&buf, sessid);
+ XdmcpFlush (xdmcpfd, &buf, clnt_sa, sizeof (struct sockaddr_in));
}
static gboolean
-gdm_xdmcp_host_allow(struct sockaddr_in *clnt_sa)
+gdm_xdmcp_host_allow (struct sockaddr_in *clnt_sa)
{
#ifdef HAVE_TCPWRAPPERS
struct hostent *client_he;
gchar *client;
-
+
/* Find client hostname */
- client_he=gethostbyaddr((gchar *) &clnt_sa->sin_addr,
- sizeof(struct in_addr),
- AF_INET);
-
- client=(client_he && client_he->h_name) ? client_he->h_name : NULL;
-
+ client_he = gethostbyaddr ((gchar *) &clnt_sa->sin_addr,
+ sizeof (struct in_addr),
+ AF_INET);
+
+ client = (client_he && client_he->h_name) ? client_he->h_name : NULL;
+
/* Check with tcp_wrappers if client is allowed to access */
- return(hosts_ctl("gdm", client ? client : "unknown", inet_ntoa(clnt_sa->sin_addr), ""));
-#else
- return(TRUE);
-#endif
+ return (hosts_ctl ("gdm", client ? client : "unknown", inet_ntoa (clnt_sa->sin_addr), ""));
+#else /* HAVE_TCPWRAPPERS */
+ return (TRUE);
+#endif /* HAVE_TCPWRAPPERS */
}
@@ -818,12 +818,13 @@ gdm_xdmcp_display_alloc (struct sockaddr_in *clnt_sa, gint displaynum)
{
GdmDisplay *d;
struct hostent *client_he;
-
- d = g_malloc(sizeof(GdmDisplay));
- d->auth = NULL;
+
+ d = g_malloc (sizeof (GdmDisplay));
+ d->authfile = NULL;
+ d->auths = NULL;
+ d->userauth = NULL;
d->command = NULL;
d->greetpid = 0;
- d->id = 0;
d->servpid = 0;
d->servstat = 0;
d->sessionid = 0;
@@ -832,98 +833,108 @@ gdm_xdmcp_display_alloc (struct sockaddr_in *clnt_sa, gint displaynum)
d->type = DISPLAY_XDMCP;
d->dispstat = XDMCP_PENDING;
d->sessionid = globsessid++;
- d->acctime = time(NULL);
+ d->acctime = time (NULL);
d->dispnum = displaynum;
-
+
/* Find client hostname */
- client_he=gethostbyaddr((gchar *) &clnt_sa->sin_addr,
- sizeof(struct in_addr),
- AF_INET);
-
- if(client_he) {
- d->name=g_strdup_printf("%s:%d", client_he->h_name,
- displaynum);
+ client_he = gethostbyaddr ((gchar *) &clnt_sa->sin_addr,
+ sizeof (struct in_addr),
+ AF_INET);
+
+ if (client_he) {
+ d->name = g_strdup_printf ("%s:%d", client_he->h_name,
+ displaynum);
+ d->hostname = g_strdup (client_he->h_name);
}
- else
- d->name=g_strdup_printf("%s:%d", inet_ntoa(clnt_sa->sin_addr),
- displaynum);
-
+ else {
+ d->name = g_strdup_printf ("%s:%d", inet_ntoa (clnt_sa->sin_addr),
+ displaynum);
+ d->hostname = g_strdup (inet_ntoa (clnt_sa->sin_addr));
+ }
+
/* Check if we are already talking to this host */
- gdm_xdmcp_display_dispose_check(d->name);
-
+ gdm_xdmcp_display_dispose_check (d->name);
+
/* Secure display with cookie */
- gdm_auth_secure_display(d);
-
- displays=g_slist_append(displays, d);
+ if (! gdm_auth_secure_display (d))
+ gdm_error ("gdm_xdmcp_display_alloc: Error setting up cookies for %s", d->name);
+
+ displays = g_slist_append (displays, d);
pending++;
-
- gdm_debug("gdm_xdmcp_display_alloc: display=%s, session id=%d, pending=%d ",
- d->name, d->sessionid, pending);
- return(d);
+ gdm_debug ("gdm_xdmcp_display_alloc: display=%s, session id=%d, pending=%d ",
+ d->name, d->sessionid, pending);
+
+ return (d);
}
static GdmDisplay *
-gdm_xdmcp_display_lookup(CARD32 sessid)
+gdm_xdmcp_display_lookup (CARD32 sessid)
{
- GSList *dlist=displays;
+ GSList *dlist = displays;
GdmDisplay *d;
+
+ if(!sessid)
+ return (NULL);
- while(dlist) {
- d=(GdmDisplay *)dlist->data;
-
- if(d && d->sessionid == sessid)
- return(d);
-
- dlist=dlist->next;
+ while (dlist) {
+ d = (GdmDisplay *) dlist->data;
+
+ if (d && d->sessionid == sessid)
+ return (d);
+
+ dlist = dlist->next;
}
-
- return(NULL);
+
+ return (NULL);
}
static void
-gdm_xdmcp_display_dispose_check(gchar *name)
+gdm_xdmcp_display_dispose_check (gchar *name)
{
- GSList *dlist=displays;
+ GSList *dlist = displays;
GdmDisplay *d;
- gdm_debug("gdm_xdmcp_display_dispose_check(%s)", name);
-
- while(dlist) {
- d=(GdmDisplay *)dlist->data;
-
- if(d && !strcmp(d->name, name))
- gdm_display_dispose(d);
+ if (!name)
+ return;
+
+ gdm_debug ("gdm_xdmcp_display_dispose_check (%s)", name);
+
+ while (dlist) {
+ d = (GdmDisplay *) dlist->data;
- dlist=dlist->next;
+ if (d && !strcmp (d->name, name))
+ gdm_display_dispose (d);
+
+ dlist = dlist->next;
}
}
static void
-gdm_xdmcp_displays_check(void)
+gdm_xdmcp_displays_check (void)
{
- GSList *dlist=displays;
+ GSList *dlist = displays;
GdmDisplay *d;
-
- while(dlist) {
- d=(GdmDisplay *)dlist->data;
-
- if(d &&
- d->type==DISPLAY_XDMCP &&
- d->dispstat==XDMCP_PENDING &&
- time(NULL) > d->acctime + GdmMaxManageWait)
+
+ while (dlist) {
+ d = (GdmDisplay *) dlist->data;
+
+ if (d &&
+ d->type == DISPLAY_XDMCP &&
+ d->dispstat == XDMCP_PENDING &&
+ time (NULL) > d->acctime + GdmMaxManageWait)
{
- gdm_debug("gdm_xdmcp_displays_check: Disposing session id %d",
- d->sessionid);
- gdm_display_dispose(d);
+ gdm_debug ("gdm_xdmcp_displays_check: Disposing session id %d",
+ d->sessionid);
+ gdm_display_dispose (d);
pending--;
}
-
- dlist=dlist->next;
+
+ dlist = dlist->next;
}
}
diff --git a/docs/gdm-manual.txt b/docs/gdm-manual.txt
index 7ef1feb7..5dc46174 100644
--- a/docs/gdm-manual.txt
+++ b/docs/gdm-manual.txt
@@ -95,25 +95,6 @@ proper operation.
3. The Login Window
-gdm supports two different login modes (which happen to be selected
-by changing greeter programs).
-
-
-The gdmlogin program is a bare bones gui application providing only a
-few menus and a login prompt. A graphical version of the textmode
-login program, if you wish.
-
-gdmlogin was designed for use in environments, where usernames can't
-be exposed.
-
-
-gdmgreeter is slightly more powerful. It consists of a browser window
-containing faces of all users on the system.
-
-~user/.gnome/photo is expected to contain an Imlib supported
-image. gdmgreeter will scale down large images to the sysadmin
-specified maximum.
-
4. The config file
@@ -233,12 +214,20 @@ Welcome=Welcome to %h
4.4 Section: [daemon]
-SessionDir=@sysconfdir@/gdm/Sessions
- Directory containing the Session scripts.
-
PidFile=/var/run/gdm.pid
Name of the gdm daemon pidfile.
+User=gdm
+ The username under which gdm is run.
+
+Group=gdm
+ The group id under which gdmgreeter is run.
+
+
+
+SessionDir=@sysconfdir@/gdm/Sessions
+ Directory containing the Session scripts.
+
Greeter=@bindir@/gdmgreeter
Path and name of the login program executable.
@@ -249,12 +238,6 @@ Greeter=@bindir@/gdmgreeter
Chooser=@bindir@/gdmchooser
Path and name of the gdmchooser executable.
-User=gdm
- The username under which gdm is run.
-
-Group=gdm
- The group id under which gdmgreeter is run.
-
DisplayInitDir=@sysconfdir@/gdm/Init
Directory containing the Init scripts.
diff --git a/gui/Makefile.am b/gui/Makefile.am
index 4a226477..1e96a2ce 100644
--- a/gui/Makefile.am
+++ b/gui/Makefile.am
@@ -10,15 +10,20 @@ INCLUDES = -I. -I.. -I$(top_srcdir)/daemon -I$(includedir) \
-DLOCALEDIR=\"$(datadir)/locale\" \
$(GNOME_INCLUDEDIR)
-bin_PROGRAMS = gdmchooser gdmlogin
+bin_PROGRAMS = gdmchooser gdmlogin gdmconfig
gdmchooser_SOURCES = \
gdmchooser.c \
gdmchooser.h
gdmlogin_SOURCES = \
- gdmlogin.c
+ gdmlogin.c \
+ gdmlogin.h
+
+gdmconfig_SOURCES = \
+ gdmconfig.c
gdmchooser_LDADD = $(GNOME_LIBDIR) $(GNOME_LIBS) $(GNOMEUI_LIBS) -lXdmcp -lX11 $(INTLLIBS)
gdmlogin_LDADD = ../daemon/filecheck.o $(GNOME_LIBDIR) $(GNOME_LIBS) $(GNOMEUI_LIBS) $(INTLLIBS)
+gdmconfig_LDADD = $(GNOME_LIBDIR) $(GNOME_LIBS) $(GNOMEUI_LIBS) $(INTLLIBS)
diff --git a/gui/gdmchooser.c b/gui/gdmchooser.c
index f31a7a86..949e0c89 100644
--- a/gui/gdmchooser.c
+++ b/gui/gdmchooser.c
@@ -1,5 +1,5 @@
/* GDM - The Gnome Display Manager
- * Copyright (C) 1998, 1999 Martin Kasper Petersen <mkp@SunSITE.auc.dk>
+ * Copyright (C) 1998, 1999 Martin Kasper 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
@@ -16,22 +16,22 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+/* gdmchooser discovers hosts running XDMCP on the local network(s),
+ * presents a list of them and allows the user to choose one. The
+ * selected hostname will be printed on stdout.
+ */
+
#include <config.h>
#include <gnome.h>
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>
-#include <sys/stat.h>
#include <unistd.h>
-#include <X11/Xlib.h>
+#include <gdk/gdkx.h>
#include <X11/Xmd.h>
#include <X11/Xdmcp.h>
-#include <gdk/gdkx.h>
-#include <gdk/gdkkeysyms.h>
-#include <pwd.h>
#include <syslog.h>
-#include <ctype.h>
#include <signal.h>
#include <sys/socket.h>
#include <netinet/in.h>
@@ -44,16 +44,18 @@
#include <net/if.h>
#include "gdmchooser.h"
+#include "gdm.h"
static const gchar RCSid[]="$Id$";
-static void gdm_chooser_decode_packet(void);
static GdmChooserHost *gdm_chooser_host_alloc (gchar *hostname, gchar *description);
-static void gdm_chooser_abort(const gchar *format, ...);
-static void gdm_chooser_browser_update(void);
-static void gdm_chooser_xdmcp_init(void);
-static void gdm_chooser_host_dispose(GdmChooserHost *host);
+static void gdm_chooser_decode_packet (void);
+static void gdm_chooser_abort (const gchar *format, ...);
+static void gdm_chooser_browser_update (void);
+static void gdm_chooser_xdmcp_init (void);
+static void gdm_chooser_host_dispose (GdmChooserHost *host);
+/* Fixetyfix */
int XdmcpReallocARRAY8 (ARRAY8Ptr array, int length);
@@ -68,204 +70,204 @@ static XdmAuthRec authlist = {
};
-gint sockfd;
+static gint sockfd;
static XdmcpBuffer querybuf;
-GSList *bcaddr;
-
-gint GdmIconMaxHeight;
-gint GdmIconMaxWidth;
-gint GdmDebug;
-gint GdmRescanTime;
-gint GdmDeadTime;
-gchar *GdmHostIconDir;
-gchar *GdmHostDefaultIcon;
-gchar *GdmGtkRC;
-
-GtkWidget *chooser;
-GtkWidget *manage;
-GtkWidget *rescan;
-GtkWidget *cancel;
-
-gint maxwidth=0;
-guint tid;
-GIOChannel *channel;
-
-GList *hosts=NULL;
-GdkImlibImage *nohostimg;
-GnomeIconList *browser;
-
-GdmChooserHost *curhost;
+static GSList *bcaddr;
+
+static gint GdmIconMaxHeight;
+static gint GdmIconMaxWidth;
+static gint GdmDebug;
+static gint GdmScanTime;
+static gchar *GdmHostIconDir;
+static gchar *GdmHostDefaultIcon;
+static gchar *GdmGtkRC;
+
+static GtkWidget *chooser;
+static GtkWidget *manage;
+static GtkWidget *rescan;
+static GtkWidget *cancel;
+
+static gint maxwidth = 0;
+static guint tid = 0;
+static GIOChannel *channel;
+static GList *hosts = NULL;
+static GdkImlibImage *defhostimg;
+static GnomeIconList *browser;
+static GdmChooserHost *curhost;
static gint
gdm_chooser_sort_func(gpointer d1, gpointer d2)
{
- GdmChooserHost *a=d1;
- GdmChooserHost *b=d2;
+ GdmChooserHost *a = d1;
+ GdmChooserHost *b = d2;
+
+ if (!d1 || !d2)
+ return (0);
- return strcmp(a->name, b->name);
+ return (strcmp (a->name, b->name));
}
static void
-gdm_chooser_decode_packet(void)
+gdm_chooser_decode_packet (void)
{
struct sockaddr_in clnt_sa;
- gint sa_len=sizeof(clnt_sa);
+ gint sa_len = sizeof (clnt_sa);
static XdmcpBuffer buf;
XdmcpHeader header;
struct hostent *he;
- gchar *hostname, *status=NULL;
+ gchar *hostname = NULL;
+ gchar *status = NULL;
ARRAY8 auth, host, stat;
- if(!XdmcpFill(sockfd, &buf, &clnt_sa, &sa_len))
+ if (! XdmcpFill (sockfd, &buf, &clnt_sa, &sa_len))
return;
- if(!XdmcpReadHeader(&buf, &header))
+ if (! XdmcpReadHeader (&buf, &header))
return;
- if(header.version != XDM_PROTOCOL_VERSION)
+ if (header.version != XDM_PROTOCOL_VERSION)
return;
- if(header.opcode == WILLING) {
- if(!XdmcpReadARRAY8(&buf, &auth))
+ if (header.opcode == WILLING) {
+
+ if (! XdmcpReadARRAY8 (&buf, &auth))
goto done;
- if(!XdmcpReadARRAY8(&buf, &host))
+ if (! XdmcpReadARRAY8 (&buf, &host))
goto done;
- if(!XdmcpReadARRAY8(&buf, &stat))
+ if (! XdmcpReadARRAY8 (&buf, &stat))
goto done;
- status=g_strndup(stat.data, stat.length);
+ status = g_strndup (stat.data, stat.length);
- he=gethostbyaddr((gchar *) &clnt_sa.sin_addr,
- sizeof(struct in_addr),
- AF_INET);
+ he = gethostbyaddr ((gchar *) &clnt_sa.sin_addr,
+ sizeof (struct in_addr),
+ AF_INET);
- hostname=(he && he->h_name) ? he->h_name : inet_ntoa(clnt_sa.sin_addr);
+ hostname = (he && he->h_name) ? he->h_name : inet_ntoa (clnt_sa.sin_addr);
- hosts=g_list_insert_sorted(hosts,
- gdm_chooser_host_alloc(hostname, (gchar *) status),
- (GCompareFunc) gdm_chooser_sort_func);
+ hosts = g_list_insert_sorted (hosts,
+ gdm_chooser_host_alloc (hostname, (gchar *) status),
+ (GCompareFunc) gdm_chooser_sort_func);
done:
- XdmcpDisposeARRAY8(&auth);
- XdmcpDisposeARRAY8(&host);
- XdmcpDisposeARRAY8(&stat);
+ XdmcpDisposeARRAY8 (&auth);
+ XdmcpDisposeARRAY8 (&host);
+ XdmcpDisposeARRAY8 (&stat);
- g_free(status);
+ g_free (status);
return;
}
-
}
/* Find broadcast address for all active, non pointopoint interfaces */
static void
-gdm_chooser_find_bcaddr(void)
+gdm_chooser_find_bcaddr (void)
{
- gint i=0;
+ gint i = 0;
struct ifconf ifcfg;
struct ifreq ifr[MAXIF];
struct in_addr *ia;
- ifcfg.ifc_buf=(gchar *)&ifr;
- ifcfg.ifc_len=sizeof(ifr);
+ ifcfg.ifc_buf = (gchar *) &ifr;
+ ifcfg.ifc_len = sizeof (ifr);
- memset(ifr, 0, sizeof(ifr));
+ memset (ifr, 0, sizeof (ifr));
- if(ioctl(sockfd, SIOCGIFCONF, &ifcfg) < 0)
- gdm_chooser_abort("Could not get SIOCIFCONF");
+ if (ioctl (sockfd, SIOCGIFCONF, &ifcfg) < 0)
+ gdm_chooser_abort ("Could not get SIOCIFCONF");
- for(i=0 ; i < MAXIF ; i++)
- if(strlen(ifr[i].ifr_name)) {
+ for (i=0 ; i < MAXIF ; i++)
+ if (strlen (ifr[i].ifr_name)) {
struct ifreq *ifreq;
struct sockaddr_in *ba;
- ifreq=g_new0(struct ifreq, 1);
+ ifreq = g_new0 (struct ifreq, 1);
- strncpy(ifreq->ifr_name, ifr[i].ifr_name, sizeof(ifr[i].ifr_name));
+ strncpy (ifreq->ifr_name, ifr[i].ifr_name, sizeof (ifr[i].ifr_name));
- if(ioctl(sockfd, SIOCGIFFLAGS, ifreq) < 0)
- gdm_chooser_abort("Could not get SIOCGIFFLAGS for %s", ifr[i].ifr_name);
+ if (ioctl (sockfd, SIOCGIFFLAGS, ifreq) < 0)
+ gdm_chooser_abort ("Could not get SIOCGIFFLAGS for %s", ifr[i].ifr_name);
- if((ifreq->ifr_flags & IFF_UP) == 0)
+ if ((ifreq->ifr_flags & IFF_UP) == 0)
goto done;
- if((ifreq->ifr_flags & IFF_BROADCAST) == 0)
+ if ((ifreq->ifr_flags & IFF_BROADCAST) == 0)
goto done;
- if(ioctl(sockfd, SIOCGIFBRDADDR, ifreq) < 0) {
+ if (ioctl (sockfd, SIOCGIFBRDADDR, ifreq) < 0) {
goto done;
}
- ba=(struct sockaddr_in *)&ifreq->ifr_broadaddr;
+ ba = (struct sockaddr_in *) &ifreq->ifr_broadaddr;
- ia=g_new0(struct in_addr, 1);
+ ia = g_new0 (struct in_addr, 1);
ia->s_addr = ba->sin_addr.s_addr;
- bcaddr=g_slist_append(bcaddr, ia);
+ bcaddr = g_slist_append (bcaddr, ia);
done:
- g_free(ifreq);
+ g_free (ifreq);
}
}
static gboolean
-gdm_chooser_xdmcp_discover(void)
+gdm_chooser_xdmcp_discover (void)
{
struct sockaddr_in sock;
- GSList *bl=bcaddr;
+ GSList *bl = bcaddr;
struct in_addr *ia;
- GList *hl=hosts;
+ GList *hl = hosts;
- gtk_widget_set_sensitive (chooser, FALSE);
- gnome_icon_list_freeze(browser);
- gnome_icon_list_clear(browser);
+ gtk_widget_set_sensitive (GTK_WIDGET (chooser), FALSE);
+ gnome_icon_list_freeze (GNOME_ICON_LIST (browser));
+ gnome_icon_list_clear (GNOME_ICON_LIST (browser));
- while(hl) {
- gdm_chooser_host_dispose((GdmChooserHost *) hl->data);
- hl=hl->next;
+ while (hl) {
+ gdm_chooser_host_dispose ((GdmChooserHost *) hl->data);
+ hl = hl->next;
}
- g_list_free(hosts);
+ g_list_free (hosts);
- hosts=NULL;
+ hosts = NULL;
sock.sin_family = AF_INET;
sock.sin_port = htons (XDM_UDP_PORT);
- while(bl) {
- ia = (struct in_addr *)bl->data;
-
+ while (bl) {
+ ia = (struct in_addr *) bl->data;
sock.sin_addr.s_addr = ia->s_addr;
- XdmcpFlush (sockfd, &querybuf, &sock, sizeof(struct sockaddr_in));
- bl=bl->next;
+ XdmcpFlush (sockfd, &querybuf, &sock, sizeof (struct sockaddr_in));
+ bl = bl->next;
}
- tid=g_timeout_add(GdmRescanTime*1000,
- (GSourceFunc) gdm_chooser_browser_update, NULL);
+ tid = g_timeout_add (GdmScanTime*1000,
+ (GSourceFunc) gdm_chooser_browser_update, NULL);
- return(TRUE);
+ return (TRUE);
}
static void
-gdm_chooser_xdmcp_init(void)
+gdm_chooser_xdmcp_init (void)
{
static XdmcpHeader header;
- gint sockopts=1;
+ gint sockopts = 1;
/* Open socket for communication */
- if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
- gdm_chooser_abort("Could not create socket()!");
+ if ((sockfd = socket (AF_INET, SOCK_DGRAM, 0)) == -1)
+ gdm_chooser_abort ("Could not create socket()!");
- if(setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, (char *)&sockopts, sizeof (sockopts)) < 0)
- gdm_chooser_abort("Could not set socket options!");
+ if (setsockopt (sockfd, SOL_SOCKET, SO_BROADCAST, (char *) &sockopts, sizeof (sockopts)) < 0)
+ gdm_chooser_abort ("Could not set socket options!");
gdm_chooser_find_bcaddr();
@@ -273,154 +275,151 @@ gdm_chooser_xdmcp_init(void)
header.opcode = (CARD16) BROADCAST_QUERY;
header.length = 1;
header.version = XDM_PROTOCOL_VERSION;
- XdmcpWriteHeader(&querybuf, &header);
- XdmcpWriteARRAY8(&querybuf, &authlist.authentication);
+ XdmcpWriteHeader (&querybuf, &header);
+ XdmcpWriteARRAY8 (&querybuf, &authlist.authentication);
- channel = g_io_channel_unix_new(sockfd);
- g_io_add_watch_full(channel, G_PRIORITY_DEFAULT,
+ channel = g_io_channel_unix_new (sockfd);
+ g_io_add_watch_full (channel, G_PRIORITY_DEFAULT,
G_IO_IN|G_IO_PRI|G_IO_ERR|G_IO_HUP|G_IO_NVAL,
(GIOFunc) gdm_chooser_decode_packet,
- GINT_TO_POINTER(sockfd), NULL);
- g_io_channel_unref(channel);
+ GINT_TO_POINTER (sockfd), NULL);
+ g_io_channel_unref (channel);
gdm_chooser_xdmcp_discover();
}
static gboolean
-gdm_chooser_cancel(void)
+gdm_chooser_cancel (void)
{
closelog();
gtk_main_quit();
- return(TRUE);
+ return (TRUE);
}
static gboolean
-gdm_chooser_manage(void)
+gdm_chooser_manage (void)
{
- if(curhost)
- g_print("%s\n", curhost->name);
+ if (curhost)
+ g_print ("%s\n", curhost->name);
closelog();
gtk_main_quit();
- return(TRUE);
+ return (TRUE);
}
static void
-gdm_chooser_abort(const gchar *format, ...)
+gdm_chooser_abort (const gchar *format, ...)
{
va_list args;
gchar *s;
- va_start(args, format);
- s=g_strdup_vprintf(format, args);
- va_end(args);
+ va_start (args, format);
+ s = g_strdup_vprintf (format, args);
+ va_end (args);
- syslog(LOG_ERR, s);
+ syslog (LOG_ERR, s);
+ closelog ();
- closelog();
- exit(EXIT_FAILURE);
+ exit (EXIT_FAILURE);
}
static void
-gdm_chooser_parse_config(void)
+gdm_chooser_parse_config (void)
{
struct stat unused;
- if(stat(GDM_CONFIG_FILE, &unused) == -1)
- gdm_chooser_abort(_("gdm_chooser_parse_config: No configuration file: %s. Aborting."), GDM_CONFIG_FILE);
+ if (stat (GDM_CONFIG_FILE, &unused) == -1)
+ gdm_chooser_abort (_("gdm_chooser_parse_config: No configuration file: %s. Aborting."), GDM_CONFIG_FILE);
gnome_config_push_prefix ("=" GDM_CONFIG_FILE "=/");
- GdmGtkRC=gnome_config_get_string("appearance/gtkrc");
-
- GdmRescanTime=gnome_config_get_int("chooser/rescantime=3");
- GdmDeadTime=gnome_config_get_int("chooser/deadtime=3");
- GdmHostDefaultIcon=gnome_config_get_string("chooser/defaultimage=nohost.xpm");
- GdmHostIconDir=gnome_config_get_string("chooser/imagedir");
-
- GdmIconMaxWidth=gnome_config_get_int("system/UserIconMaxWidth=128");
- GdmIconMaxHeight=gnome_config_get_int("system/UserIconMaxHeight=128");
+ GdmGtkRC = gnome_config_get_string (GDM_KEY_GTKRC);
+ GdmScanTime = gnome_config_get_int (GDM_KEY_SCAN);
+ GdmHostDefaultIcon = gnome_config_get_string (GDM_KEY_HOST);
+ GdmHostIconDir = gnome_config_get_string (GDM_KEY_HOSTDIR);
+ GdmIconMaxWidth = gnome_config_get_int (GDM_KEY_ICONWIDTH);
+ GdmIconMaxHeight = gnome_config_get_int (GDM_KEY_ICONHEIGHT);
+ GdmDebug = gnome_config_get_int (GDM_KEY_DEBUG);
- GdmDebug=gnome_config_get_int("debug/enable=0");
-
- gnome_config_pop_prefix ();
+ gnome_config_pop_prefix();
}
static gboolean
-gdm_chooser_browser_select(GtkWidget *widget, gint selected, GdkEvent *event)
+gdm_chooser_browser_select (GtkWidget *widget, gint selected, GdkEvent *event)
{
- if(!event)
- return(TRUE);
- else
- switch(event->type) {
-
- case GDK_BUTTON_PRESS:
- case GDK_BUTTON_RELEASE:
- curhost=g_list_nth_data(hosts, selected);
- gtk_widget_set_sensitive (manage, TRUE);
- break;
-
- default:
- break;
- }
+ if (!widget || !event)
+ return (TRUE);
- return(TRUE);
+ switch (event->type) {
+
+ case GDK_BUTTON_PRESS:
+ case GDK_BUTTON_RELEASE:
+ curhost = g_list_nth_data (hosts, selected);
+ gtk_widget_set_sensitive (manage, TRUE);
+ break;
+
+ default:
+ break;
+ }
+
+ return (TRUE);
}
static gboolean
-gdm_chooser_browser_unselect(GtkWidget *widget, gint selected, GdkEvent *event)
+gdm_chooser_browser_unselect (GtkWidget *widget, gint selected, GdkEvent *event)
{
- if(event) {
- switch(event->type) {
-
- case GDK_BUTTON_PRESS:
- case GDK_BUTTON_RELEASE:
- curhost=NULL;
- gtk_widget_set_sensitive (manage, FALSE);
- break;
-
- default:
- break;
- }
+ if (!event)
+ return(TRUE);
+
+ switch (event->type) {
+
+ case GDK_BUTTON_PRESS:
+ case GDK_BUTTON_RELEASE:
+ curhost = NULL;
+ gtk_widget_set_sensitive (manage, FALSE);
+ break;
+
+ default:
+ break;
}
- return(TRUE);
+ return (TRUE);
}
static void
-gdm_chooser_browser_update(void)
+gdm_chooser_browser_update (void)
{
- GList *list=hosts;
+ GList *list = hosts;
- g_source_remove(tid);
+ g_source_remove (tid);
- while(list) {
+ while (list) {
GdmChooserHost *host;
gchar *temp;
- host=(GdmChooserHost *)list->data;
+ host = (GdmChooserHost *) list->data;
- temp=g_strconcat(host->name, "\n", host->desc, NULL);
- gnome_icon_list_append_imlib(browser, host->picture, temp);
- g_free(temp);
+ temp = g_strconcat (host->name, "\n", host->desc, NULL);
+ gnome_icon_list_append_imlib (GNOME_ICON_LIST (browser), host->picture, temp);
+ g_free (temp);
- list=list->next;
+ list = list->next;
}
- gnome_icon_list_thaw(browser);
+ gnome_icon_list_thaw (GNOME_ICON_LIST (browser));
- gtk_widget_set_sensitive(chooser, TRUE);
- gtk_widget_set_sensitive(manage, FALSE);
- gtk_widget_show_all(chooser);
+ gtk_widget_set_sensitive (GTK_WIDGET (chooser), TRUE);
+ gtk_widget_set_sensitive (GTK_WIDGET (manage), FALSE);
+ gtk_widget_show_all (GTK_WIDGET (chooser));
}
@@ -440,52 +439,52 @@ gdm_chooser_gui_init (void)
struct stat statbuf;
/* Enable theme */
- if(GdmGtkRC)
- gtk_rc_parse(GdmGtkRC);
+ if (GdmGtkRC)
+ gtk_rc_parse (GdmGtkRC);
/* Load default host image */
- if(stat(GdmHostDefaultIcon, &statbuf))
- gdm_chooser_abort(_("Can't open default host icon: %s"), GdmHostDefaultIcon);
+ if (stat (GdmHostDefaultIcon, &statbuf))
+ gdm_chooser_abort (_("Can't open default host icon: %s"), GdmHostDefaultIcon);
else {
- nohostimg=gdk_imlib_load_image(GdmHostDefaultIcon);
- maxwidth=nohostimg->rgb_width;
+ defhostimg = gdk_imlib_load_image (GdmHostDefaultIcon);
+ maxwidth = defhostimg->rgb_width;
}
/* Root Window */
- rootwin=gdk_window_foreign_new (GDK_ROOT_WINDOW ());
+ rootwin = gdk_window_foreign_new (GDK_ROOT_WINDOW ());
/* Main window */
- chooser = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ chooser = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_container_border_width (GTK_CONTAINER (chooser), 0);
/* 3D frame for main window */
- frame = gtk_frame_new(NULL);
- gtk_frame_set_shadow_type(GTK_FRAME (frame), GTK_SHADOW_OUT);
+ frame = gtk_frame_new (NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
gtk_container_border_width (GTK_CONTAINER (frame), 0);
- gtk_container_add(GTK_CONTAINER (chooser), frame);
+ gtk_container_add (GTK_CONTAINER (chooser), frame);
/* Vertical box containing browser box and button pane */
- vbox = gtk_vbox_new(FALSE, 10);
+ vbox = gtk_vbox_new (FALSE, 10);
gtk_container_border_width (GTK_CONTAINER (vbox), 10);
- gtk_container_add(GTK_CONTAINER (frame), vbox);
+ gtk_container_add (GTK_CONTAINER (frame), vbox);
/* Find background style for browser */
style = gtk_style_copy (chooser->style);
style->bg[GTK_STATE_NORMAL] = bbg;
- gtk_widget_push_style(style);
+ gtk_widget_push_style (style);
/* Icon list */
- if(maxwidth < GdmIconMaxWidth/2)
- maxwidth=(gint) GdmIconMaxWidth/2;
+ if (maxwidth < GdmIconMaxWidth/2)
+ maxwidth = (gint) GdmIconMaxWidth/2;
browser = GNOME_ICON_LIST (gnome_icon_list_new (maxwidth+20, NULL, FALSE));
gnome_icon_list_freeze (GNOME_ICON_LIST (browser));
- gnome_icon_list_set_separators (browser, " /-_.");
- gnome_icon_list_set_row_spacing (browser, 2);
- gnome_icon_list_set_col_spacing (browser, 2);
- gnome_icon_list_set_icon_border (browser, 2);
- gnome_icon_list_set_text_spacing (browser, 2);
- gnome_icon_list_set_selection_mode (browser, GTK_SELECTION_SINGLE);
+ gnome_icon_list_set_separators (GNOME_ICON_LIST (browser), " /-_.");
+ gnome_icon_list_set_row_spacing (GNOME_ICON_LIST (browser), 2);
+ gnome_icon_list_set_col_spacing (GNOME_ICON_LIST (browser), 2);
+ gnome_icon_list_set_icon_border (GNOME_ICON_LIST (browser), 2);
+ gnome_icon_list_set_text_spacing (GNOME_ICON_LIST (browser), 2);
+ gnome_icon_list_set_selection_mode (GNOME_ICON_LIST (browser), GTK_SELECTION_SINGLE);
gtk_signal_connect (GTK_OBJECT (browser), "select_icon",
GTK_SIGNAL_FUNC (gdm_chooser_browser_select), NULL);
gtk_signal_connect (GTK_OBJECT (browser), "unselect_icon",
@@ -493,9 +492,9 @@ gdm_chooser_gui_init (void)
gtk_widget_pop_style();
/* Browser 3D frame */
- bframe = gtk_frame_new(NULL);
- gtk_frame_set_shadow_type(GTK_FRAME (bframe), GTK_SHADOW_IN);
- gtk_container_add(GTK_CONTAINER(bframe), GTK_WIDGET(browser));
+ bframe = gtk_frame_new (NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (bframe), GTK_SHADOW_IN);
+ gtk_container_add (GTK_CONTAINER(bframe), GTK_WIDGET (browser));
/* Browser scroll bar */
adj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 0.0));
@@ -512,56 +511,56 @@ gdm_chooser_gui_init (void)
gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (bbox), TRUE, TRUE, 0);
/* Buttons */
- manage = gtk_button_new_with_label(_("Connect"));
- gtk_signal_connect(GTK_OBJECT (manage), "clicked",
- GTK_SIGNAL_FUNC (gdm_chooser_manage), NULL);
- GTK_WIDGET_SET_FLAGS(manage, GTK_CAN_DEFAULT);
- gtk_widget_set_sensitive (manage, FALSE);
- gtk_widget_show(manage);
-
- rescan = gtk_button_new_with_label(_("Rescan"));
+ manage = gtk_button_new_with_label (_("Connect"));
+ gtk_signal_connect (GTK_OBJECT (manage), "clicked",
+ GTK_SIGNAL_FUNC (gdm_chooser_manage), NULL);
+ GTK_WIDGET_SET_FLAGS (GTK_WIDGET (manage), GTK_CAN_DEFAULT);
+ gtk_widget_set_sensitive (GTK_WIDGET (manage), FALSE);
+ gtk_widget_show (GTK_WIDGET (manage));
+
+ rescan = gtk_button_new_with_label (_("Rescan"));
gtk_signal_connect(GTK_OBJECT (rescan), "clicked",
GTK_SIGNAL_FUNC (gdm_chooser_xdmcp_discover), NULL);
- GTK_WIDGET_SET_FLAGS(rescan, GTK_CAN_DEFAULT);
- gtk_widget_show(rescan);
+ GTK_WIDGET_SET_FLAGS (GTK_WIDGET (rescan), GTK_CAN_DEFAULT);
+ gtk_widget_show (GTK_WIDGET (rescan));
- cancel = gtk_button_new_with_label(_("Cancel"));
+ cancel = gtk_button_new_with_label (_("Cancel"));
gtk_signal_connect(GTK_OBJECT (cancel), "clicked",
GTK_SIGNAL_FUNC (gdm_chooser_cancel), NULL);
- GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT);
- gtk_widget_show(cancel);
+ GTK_WIDGET_SET_FLAGS(GTK_WIDGET (cancel), GTK_CAN_DEFAULT);
+ gtk_widget_show (GTK_WIDGET (cancel));
/* Button pane */
buttonpane = gtk_hbox_new(TRUE, 0);
- gtk_container_set_border_width(GTK_CONTAINER (buttonpane), 0);
- gtk_box_pack_start(GTK_BOX (buttonpane),
- manage, TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX (buttonpane),
- rescan, TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX (buttonpane),
- cancel, TRUE, TRUE, 0);
- gtk_window_set_default(GTK_WINDOW(chooser), GTK_WIDGET(manage));
- gtk_widget_show_all(buttonpane);
+ gtk_container_set_border_width ( GTK_CONTAINER (buttonpane), 0);
+ gtk_box_pack_start (GTK_BOX (buttonpane),
+ GTK_WIDGET (manage), TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (buttonpane),
+ GTK_WIDGET (rescan), TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (buttonpane),
+ GTK_WIDGET (cancel), TRUE, TRUE, 0);
+ gtk_window_set_default (GTK_WINDOW (chooser), GTK_WIDGET (manage));
+ gtk_widget_show_all (GTK_WIDGET (buttonpane));
/* Put button pane in main window */
- gtk_box_pack_end(GTK_BOX (vbox),
- buttonpane, FALSE, FALSE, 0);
+ gtk_box_pack_end (GTK_BOX (vbox),
+ GTK_WIDGET (buttonpane), FALSE, FALSE, 0);
- gtk_widget_show(vbox);
- gtk_widget_show(frame);
+ gtk_widget_show (GTK_WIDGET (vbox));
+ gtk_widget_show (GTK_WIDGET (frame));
- gtk_window_set_policy(GTK_WINDOW (chooser), 1, 1, 1);
- gtk_window_set_focus(GTK_WINDOW (chooser), manage);
+ gtk_window_set_policy (GTK_WINDOW (chooser), 1, 1, 1);
+ gtk_window_set_focus (GTK_WINDOW (chooser), GTK_WIDGET (manage));
/* Geometry fun */
- gtk_widget_show_all(GTK_WIDGET(browser));
+ gtk_widget_show_all (GTK_WIDGET (browser));
gnome_icon_list_thaw (GNOME_ICON_LIST (browser));
- gtk_widget_set_usize(GTK_WIDGET (chooser),
- (gint) gdk_screen_width() * 0.4,
- (gint) gdk_screen_height() * 0.6);
+ gtk_widget_set_usize (GTK_WIDGET (chooser),
+ (gint) gdk_screen_width() * 0.4,
+ (gint) gdk_screen_height() * 0.6);
- gtk_window_position(GTK_WINDOW (chooser), GTK_WIN_POS_CENTER);
- gtk_widget_show_all(chooser);
+ gtk_window_position (GTK_WINDOW (chooser), GTK_WIN_POS_CENTER);
+ gtk_widget_show_all (GTK_WIDGET (chooser));
}
@@ -573,26 +572,24 @@ gdm_chooser_signals_init(void)
hup.sa_handler = (void *) gdm_chooser_cancel;
hup.sa_flags = 0;
- sigemptyset(&hup.sa_mask);
+ sigemptyset (&hup.sa_mask);
- if(sigaction(SIGHUP, &hup, NULL) < 0)
- gdm_chooser_abort(_("main: Error setting up HUP signal handler"));
+ if (sigaction (SIGHUP, &hup, NULL) < 0)
+ gdm_chooser_abort (_("gdm_signals_init: Error setting up HUP signal handler"));
- if(sigaction(SIGINT, &hup, NULL) < 0)
- gdm_chooser_abort(_("main: Error setting up INT signal handler"));
+ if (sigaction (SIGINT, &hup, NULL) < 0)
+ gdm_chooser_abort (_("gdm_signals_init: Error setting up INT signal handler"));
- if(sigaction(SIGTERM, &hup, NULL) < 0)
- gdm_chooser_abort(_("main: Error setting up TERM signal handler"));
+ if (sigaction (SIGTERM, &hup, NULL) < 0)
+ gdm_chooser_abort (_("gdm_signals_init: Error setting up TERM signal handler"));
- sigfillset(&mask);
- sigdelset(&mask, SIGTERM);
- sigdelset(&mask, SIGHUP);
- sigdelset(&mask, SIGINT);
+ sigfillset (&mask);
+ sigdelset (&mask, SIGTERM);
+ sigdelset (&mask, SIGHUP);
+ sigdelset (&mask, SIGINT);
- if(sigprocmask(SIG_SETMASK, &mask, NULL) == -1) {
- syslog(LOG_ERR, "Could not set signal mask!");
- exit(EXIT_FAILURE);
- }
+ if (sigprocmask (SIG_SETMASK, &mask, NULL) == -1)
+ gdm_chooser_abort (_("Could not set signal mask!"));
}
static GdmChooserHost *
@@ -600,57 +597,57 @@ gdm_chooser_host_alloc (gchar *hostname, gchar *description)
{
GdmChooserHost *host;
GdkImlibImage *imlibimg;
- gint w, h;
gchar *hostimg;
struct stat statbuf;
- host=g_malloc(sizeof(GdmChooserHost));
- host->name=g_strdup(hostname);
- host->desc=g_strdup(description);
+ host = g_malloc (sizeof (GdmChooserHost));
+ host->name = g_strdup (hostname);
+ host->desc = g_strdup (description);
- hostimg=g_strconcat(GdmHostIconDir, "/", hostname, NULL);
+ hostimg = g_strconcat (GdmHostIconDir, "/", hostname, NULL);
- if (!stat(hostimg, &statbuf) && (imlibimg=gdk_imlib_load_image(hostimg))) {
+ if (!stat (hostimg, &statbuf) && (imlibimg = gdk_imlib_load_image (hostimg))) {
+ gint w, h;
- w=imlibimg->rgb_width;
- h=imlibimg->rgb_height;
+ w = imlibimg->rgb_width;
+ h = imlibimg->rgb_height;
- if(w>h && w>GdmIconMaxWidth) {
- h=h*((gfloat) GdmIconMaxWidth/w);
- w=GdmIconMaxWidth;
+ if (w>h && w>GdmIconMaxWidth) {
+ h = h * ((gfloat) GdmIconMaxWidth/w);
+ w = GdmIconMaxWidth;
}
- else if(h>GdmIconMaxHeight) {
- w=w*((gfloat) GdmIconMaxHeight/h);
- h=GdmIconMaxHeight;
+ else if (h>GdmIconMaxHeight) {
+ w = w * ((gfloat) GdmIconMaxHeight/h);
+ h = GdmIconMaxHeight;
}
- maxwidth=MAX(maxwidth, w);
+ maxwidth = MAX (maxwidth, w);
- host->picture=gdk_imlib_clone_scaled_image(imlibimg, w, h);
+ host->picture = gdk_imlib_clone_scaled_image (imlibimg, w, h);
- gdk_imlib_destroy_image(imlibimg);
+ gdk_imlib_destroy_image (imlibimg);
}
else
- host->picture=nohostimg;
+ host->picture = defhostimg;
- g_free(hostimg);
+ g_free (hostimg);
return (host);
}
static void
-gdm_chooser_host_dispose(GdmChooserHost *host)
+gdm_chooser_host_dispose (GdmChooserHost *host)
{
- if(!host)
+ if (!host)
return;
- if(host->picture != nohostimg)
- gdk_imlib_destroy_image(host->picture);
+ if (host->picture != defhostimg)
+ gdk_imlib_destroy_image (host->picture);
- g_free(host->name);
- g_free(host->desc);
- g_free(host);
+ g_free (host->name);
+ g_free (host->desc);
+ g_free (host);
}
@@ -660,21 +657,21 @@ main (int argc, char *argv[])
/* Avoid creating ~gdm/.gnome stuff */
gnome_do_not_create_directories = TRUE;
- openlog("gdmchooser", LOG_PID, LOG_DAEMON);
+ openlog ("gdmchooser", LOG_PID, LOG_DAEMON);
- gnome_init("gdmchooser", VERSION, argc, argv);
+ gnome_init ("gdmchooser", VERSION, argc, argv);
gnome_sound_shutdown();
gnome_preferences_set_dialog_position(GTK_WIN_POS_CENTER);
gdm_chooser_parse_config();
gdm_chooser_gui_init();
gdm_chooser_signals_init();
-
gdm_chooser_xdmcp_init();
gtk_main();
- exit(EXIT_SUCCESS);
+ exit (EXIT_SUCCESS);
}
+
/* EOF */
diff --git a/gui/gdmlogin.c b/gui/gdmlogin.c
index 03411238..eb9c1537 100644
--- a/gui/gdmlogin.c
+++ b/gui/gdmlogin.c
@@ -1,5 +1,5 @@
/* GDM - The Gnome Display Manager
- * Copyright (C) 1998, 1999 Martin Kasper Petersen <mkp@SunSITE.auc.dk>
+ * Copyright (C) 1998, 1999 Martin Kasper 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
@@ -16,14 +16,6 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-/* gdmlogin is a stripped down greeter for environments where:
- *
- * 1. Users are not trusted (i.e. gdmlogin is less vulnerable to DoS
- * attacks )
- *
- * 2. Usernames should not be exposed
- */
-
#include <config.h>
#include <gnome.h>
#include <stdio.h>
@@ -39,43 +31,52 @@
#include <pwd.h>
#include <sys/utsname.h>
+#include "gdmlogin.h"
#include "gdm.h"
static const gchar RCSid[]="$Id$";
-extern gboolean gdm_file_check(gchar *caller, uid_t user, gchar *dir, gchar *file, gboolean absentok);
-
-gint GdmDebug;
-gint GdmIconify;
-gint GdmShutdownMenu;
-gint GdmVerboseAuth;
-gint GdmQuiver;
-gint GdmChooserMenu;
-gint GdmRelaxPerms;
-gint GdmUserMaxFile;
-gchar *GdmLogoFilename;
-gchar *GdmMessageText;
-gchar *GdmMessageFont;
-gchar *GdmConfigFilename=GDM_CONFIG_FILE;
-gchar *GdmMessageFont;
-gchar *GdmGtkRC;
-gchar *GdmIconFile;
-gchar *GdmSessionDir;
-gchar *GdmLocaleFile;
-gchar *GdmDefaultLocale;
-
-GtkWidget *login;
-GtkWidget *label;
-GtkWidget *entry;
-GtkWidget *msg;
-GtkWidget *win;
-GtkWidget *sessmenu;
-GtkWidget *langmenu;
-GdkWindow *rootwin;
+extern gboolean gdm_file_check (gchar *caller, uid_t user, gchar *dir,
+ gchar *file, gboolean absentok,
+ gint maxsize, gint perms);
+
+static gint GdmBrowser;
+static gint GdmDebug;
+static gint GdmIconMaxHeight;
+static gint GdmIconMaxWidth;
+static gint GdmQuiver;
+static gint GdmRelaxPerms;
+static gint GdmSystemMenu;
+static gint GdmUserMaxFile;
+static gchar *GdmLogo;
+static gchar *GdmWelcome;
+static gchar *GdmFont;
+static gchar *GdmGtkRC;
+static gchar *GdmIcon;
+static gchar *GdmSessionDir;
+static gchar *GdmLocaleFile;
+static gchar *GdmDefaultLocale;
+static gchar *GdmExclude;
+static gchar *GdmGlobalFaceDir;
+static gchar *GdmDefaultFace;
+
+static GtkWidget *login;
+static GtkWidget *label;
+static GtkWidget *entry;
+static GtkWidget *msg;
+static GtkWidget *win;
+static GtkWidget *sessmenu;
+static GtkWidget *langmenu;
+static GdkWindow *rootwin;
+
+static GnomeIconList *browser;
+static GdkImlibImage *defface;
/* Eew. Loads of global vars. It's hard to be event controlled while maintaining state */
-GSList *sessions=NULL;
-GSList *languages=NULL;
+GSList *sessions = NULL;
+GSList *languages = NULL;
+GList *users = NULL;
+GSList *exclude = NULL;
gchar *defsess=NULL;
gchar *cursess=NULL;
@@ -88,89 +89,82 @@ gchar *language=NULL;
gboolean savesess;
gboolean savelang;
-
-
-/* Log debug messages */
-void
-static gdm_debug(const gchar *format, ...)
-{
- va_list args;
- gchar *s;
-
- if(GdmDebug) {
- va_start(args, format);
- s=g_strdup_vprintf(format, args);
- va_end(args);
-
- syslog(LOG_DEBUG, s);
-
- g_free(s);
- }
-}
-
+gint maxwidth;
static void
-gdm_login_done(void)
+gdm_login_done (void)
{
+ gdk_keyboard_ungrab (CurrentTime);
+
closelog();
gtk_main_quit();
- exit(DISPLAY_SUCCESS);
+
+ exit (DISPLAY_SUCCESS);
}
-typedef struct _cursoroffset {gint x,y;} CursorOffset;
+typedef struct _cursoroffset { gint x,y; } CursorOffset;
static void
-gdm_login_icon_pressed(GtkWidget *widget, GdkEventButton *event)
+gdm_login_icon_pressed (GtkWidget *widget, GdkEventButton *event)
{
CursorOffset *p;
+
+ if (!widget || !event)
+ return;
- if(event->type == GDK_2BUTTON_PRESS) {
- gtk_widget_destroy(win);
- gdk_window_show(login->window);
+ if (event->type == GDK_2BUTTON_PRESS) {
+ gtk_widget_destroy (GTK_WIDGET (win));
+ gdk_window_show (login->window);
return;
}
if (event->type != GDK_BUTTON_PRESS)
return;
- p=gtk_object_get_user_data(GTK_OBJECT (widget));
- p->x=(gint)event->x;
- p->y=(gint)event->y;
+ p = gtk_object_get_user_data (GTK_OBJECT (widget));
+ p->x = (gint) event->x;
+ p->y = (gint) event->y;
- gtk_grab_add(widget);
- gdk_pointer_grab(widget->window, TRUE,
- GDK_BUTTON_RELEASE_MASK |
- GDK_BUTTON_MOTION_MASK |
- GDK_POINTER_MOTION_HINT_MASK,
- NULL, NULL, 0);
+ gtk_grab_add (widget);
+ gdk_pointer_grab (widget->window, TRUE,
+ GDK_BUTTON_RELEASE_MASK |
+ GDK_BUTTON_MOTION_MASK |
+ GDK_POINTER_MOTION_HINT_MASK,
+ NULL, NULL, 0);
}
static void
-gdm_login_icon_released(GtkWidget *widget)
+gdm_login_icon_released (GtkWidget *widget)
{
- gtk_grab_remove(widget);
- gdk_pointer_ungrab(0);
+ if(!widget)
+ return;
+
+ gtk_grab_remove (widget);
+ gdk_pointer_ungrab (0);
}
static void
-gdm_login_icon_motion(GtkWidget *widget, GdkEventMotion *event)
+gdm_login_icon_motion (GtkWidget *widget, GdkEventMotion *event)
{
gint xp, yp;
CursorOffset *p;
GdkModifierType mask;
- p=gtk_object_get_user_data(GTK_OBJECT (widget));
- gdk_window_get_pointer(rootwin, &xp, &yp, &mask);
- gtk_widget_set_uposition(widget, xp-p->x, yp-p->y);
+ if(!widget || !event)
+ return;
+
+ p = gtk_object_get_user_data (GTK_OBJECT (widget));
+ gdk_window_get_pointer (rootwin, &xp, &yp, &mask);
+ gtk_widget_set_uposition (GTK_WIDGET (widget), xp-p->x, yp-p->y);
}
static gboolean
-gdm_login_iconify_handler(GtkWidget *widget, gpointer data)
+gdm_login_iconify_handler (GtkWidget *widget, gpointer data)
{
GtkWidget *fixed;
GtkWidget *icon;
@@ -179,143 +173,151 @@ gdm_login_iconify_handler(GtkWidget *widget, gpointer data)
CursorOffset *icon_pos;
gint rw, rh, iw, ih;
- gdk_window_hide(login->window);
- style=gtk_widget_get_default_style();
- gc=style->black_gc;
- win=gtk_window_new(GTK_WINDOW_POPUP);
+ gdk_window_hide (login->window);
+ style = gtk_widget_get_default_style();
+ gc = style->black_gc;
+ win = gtk_window_new (GTK_WINDOW_POPUP);
- gtk_widget_set_events(win,
- gtk_widget_get_events(win) |
- GDK_BUTTON_PRESS_MASK |
- GDK_BUTTON_MOTION_MASK |
- GDK_POINTER_MOTION_HINT_MASK);
+ gtk_widget_set_events (win,
+ gtk_widget_get_events (GTK_WIDGET (win)) |
+ GDK_BUTTON_PRESS_MASK |
+ GDK_BUTTON_MOTION_MASK |
+ GDK_POINTER_MOTION_HINT_MASK);
- gtk_widget_realize(win);
+ gtk_widget_realize (GTK_WIDGET (win));
- fixed=gtk_fixed_new();
- gtk_container_add(GTK_CONTAINER (win), fixed);
- gtk_widget_show(fixed);
+ fixed = gtk_fixed_new();
+ gtk_container_add (GTK_CONTAINER (win), fixed);
+ gtk_widget_show (fixed);
- icon=gnome_pixmap_new_from_file (GdmIconFile);
+ icon = gnome_pixmap_new_from_file (GdmIcon);
gdk_window_get_size ((GdkWindow *) GNOME_PIXMAP (icon)->pixmap, &iw, &ih);
- gtk_fixed_put(GTK_FIXED (fixed), icon, 0, 0);
- gtk_widget_show(icon);
+ gtk_fixed_put(GTK_FIXED (fixed), GTK_WIDGET (icon), 0, 0);
+ gtk_widget_show(GTK_WIDGET (icon));
- gtk_signal_connect(GTK_OBJECT (win), "button_press_event",
- GTK_SIGNAL_FUNC (gdm_login_icon_pressed),NULL);
- gtk_signal_connect(GTK_OBJECT (win), "button_release_event",
- GTK_SIGNAL_FUNC (gdm_login_icon_released),NULL);
- gtk_signal_connect(GTK_OBJECT (win), "motion_notify_event",
- GTK_SIGNAL_FUNC (gdm_login_icon_motion),NULL);
+ gtk_signal_connect (GTK_OBJECT (win), "button_press_event",
+ GTK_SIGNAL_FUNC (gdm_login_icon_pressed),NULL);
+ gtk_signal_connect (GTK_OBJECT (win), "button_release_event",
+ GTK_SIGNAL_FUNC (gdm_login_icon_released),NULL);
+ gtk_signal_connect (GTK_OBJECT (win), "motion_notify_event",
+ GTK_SIGNAL_FUNC (gdm_login_icon_motion),NULL);
- icon_pos=g_new(CursorOffset, 1);
- gtk_object_set_user_data(GTK_OBJECT(win), icon_pos);
+ icon_pos = g_new (CursorOffset, 1);
+ gtk_object_set_user_data (GTK_OBJECT (win), icon_pos);
- gtk_widget_show(win);
+ gtk_widget_show (GTK_WIDGET (win));
- rw=gdk_screen_width();
- rh=gdk_screen_height();
+ rw = gdk_screen_width();
+ rh = gdk_screen_height();
- gtk_widget_set_uposition(win, rw-iw, rh-ih);
+ gtk_widget_set_uposition (GTK_WIDGET (win), rw-iw, rh-ih);
return(TRUE);
}
static void
-gdm_login_abort(const gchar *format, ...)
+gdm_login_abort (const gchar *format, ...)
{
va_list args;
gchar *s;
- va_start(args, format);
- s=g_strdup_vprintf(format, args);
- va_end(args);
+ if (!format)
+ exit (DISPLAY_ABORT);
+
+ va_start (args, format);
+ s = g_strdup_vprintf (format, args);
+ va_end (args);
- syslog(LOG_ERR, s);
+ syslog (LOG_ERR, s);
closelog();
- exit(DISPLAY_ABORT);
+
+ exit (DISPLAY_ABORT);
}
+/* I *really* need to rewrite this crap */
static gchar *
-gdm_parse_enriched_string(gchar *s)
+gdm_parse_enriched_string (gchar *s)
{
gchar cmd, *buffer, *start;
gchar hostbuf[256];
gchar *hostname, *temp1, *temp2, *display;
struct utsname name;
- display=getenv("DISPLAY");
+ if (!s)
+ return(NULL);
+
+ display = getenv ("DISPLAY");
if(!display)
return(NULL);
- temp1=strchr(display, '.');
- temp2=strchr(display, ':');
+ temp1 = strchr (display, '.');
+ temp2 = strchr (display, ':');
- if(temp1)
- *temp1='\0';
- else if(temp2)
- *temp2='\0';
+ if (temp1)
+ *temp1 = '\0';
+ else if (temp2)
+ *temp2 = '\0';
else
- return(NULL); /* Display isn't */
+ return (NULL);
- gethostname(hostbuf, 255);
- hostname=g_strdup(hostbuf);
-
- if(!hostname)
- hostname=g_strdup("Gnome");
+ gethostname (hostbuf, 255);
+ hostname = g_strdup (hostbuf);
+
+ if (!hostname)
+ hostname = g_strdup ("Gnome");
- uname(&name);
+ uname (&name);
- if(strlen(s) > 1023) {
- syslog(LOG_ERR, _("gdm_parse_enriched_string: String too long!"));
- return(g_strconcat(_("Welcome to "), hostname, NULL));
+ if (strlen (s) > 1023) {
+ syslog (LOG_ERR, _("gdm_parse_enriched_string: String too long!"));
+ return (g_strconcat (_("Welcome to "), hostname, NULL));
}
- if(!(buffer = g_malloc(4096))) {
- syslog(LOG_ERR, _("gdm_parse_enriched_string: Could not malloc temporary buffer!"));
- return(NULL);
+ if (!(buffer = g_malloc (4096))) {
+ syslog (LOG_ERR, _("gdm_parse_enriched_string: Could not malloc temporary buffer!"));
+ return (NULL);
}
start = buffer;
- while(*s) {
+ while (*s) {
- if(*s=='%' && (cmd = s[1]) != 0) {
+ if (*s=='%' && (cmd = s[1]) != 0) {
s+=2;
- switch(cmd) {
+ switch (cmd) {
case 'h':
- memcpy(buffer, hostname, strlen(hostname));
- buffer+=strlen(hostname);
+ memcpy (buffer, hostname, strlen (hostname));
+ buffer += strlen (hostname);
break;
case 'd':
- memcpy(buffer, display, strlen(display));
- buffer+=strlen(display);
+ memcpy (buffer, display, strlen (display));
+ buffer += strlen (display);
break;
case 's':
- memcpy(buffer, name.sysname, strlen(name.sysname));
- buffer+=strlen(name.sysname);
+ memcpy (buffer, name.sysname, strlen (name.sysname));
+ buffer += strlen (name.sysname);
break;
case 'r':
- memcpy(buffer, name.release, strlen(name.release));
- buffer+=strlen(name.release);
+ memcpy (buffer, name.release, strlen (name.release));
+ buffer += strlen (name.release);
break;
case 'm':
- memcpy(buffer, name.machine, strlen(name.machine));
- buffer+=strlen(name.machine);
+ memcpy (buffer, name.machine, strlen (name.machine));
+ buffer += strlen (name.machine);
break;
case '%':
- *buffer++='%';
+ *buffer++ = '%';
break;
default:
@@ -323,144 +325,131 @@ gdm_parse_enriched_string(gchar *s)
};
}
else
- *buffer++=*s++;
+ *buffer++ = *s++;
}
- *buffer=0;
-
- return(g_strdup(start));
-}
+ *buffer = 0;
-
-static void
-gdm_login_about(void)
-{
- const gchar *authors[]={"Martin Kasper Petersen <mkp@mkp.net>", NULL};
-
- GtkWidget *about;
-
- about=gnome_about_new("Gnome Display Manager",
- "" VERSION "",
- "Copyright Martin K. Petersen (C) 1998, 1999",
- authors,
- _("gdm manages local and remote displays and provides the user with a login window."),
- NULL);
-
- gtk_widget_show(about);
+ return (g_strdup (start));
}
static gboolean
-gdm_login_query(gchar *msg)
+gdm_login_query (gchar *msg)
{
GtkWidget *req;
- req=gnome_message_box_new(msg,
- GNOME_MESSAGE_BOX_QUESTION,
- GNOME_STOCK_BUTTON_YES,
- GNOME_STOCK_BUTTON_NO,
- NULL);
+ req = gnome_message_box_new (msg,
+ GNOME_MESSAGE_BOX_QUESTION,
+ GNOME_STOCK_BUTTON_YES,
+ GNOME_STOCK_BUTTON_NO,
+ NULL);
- gtk_window_set_modal(GTK_WINDOW(req), TRUE);
- gtk_window_set_position(GTK_WINDOW(req), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal (GTK_WINDOW (req), TRUE);
+ gtk_window_set_position (GTK_WINDOW (req), GTK_WIN_POS_CENTER);
- return(!gnome_dialog_run(GNOME_DIALOG(req)));
+ return (!gnome_dialog_run (GNOME_DIALOG(req)));
}
static gboolean
-gdm_login_reboot_handler(void)
+gdm_login_reboot_handler (void)
{
- if(gdm_login_query(_("Are you sure you want to reboot the machine?"))) {
+ if (gdm_login_query (_("Are you sure you want to reboot the machine?"))) {
closelog();
- exit(DISPLAY_REBOOT);
+
+ exit (DISPLAY_REBOOT);
}
- return(TRUE);
+ return (TRUE);
}
static gboolean
-gdm_login_halt_handler(void)
+gdm_login_halt_handler (void)
{
- if(gdm_login_query(_("Are you sure you want to halt the machine?"))) {
+ if (gdm_login_query (_("Are you sure you want to halt the machine?"))) {
closelog();
- exit(DISPLAY_HALT);
+
+ exit (DISPLAY_HALT);
}
- return(TRUE);
+ return (TRUE);
}
static void
-gdm_login_parse_config(void)
+gdm_login_parse_config (void)
{
gchar *display;
struct stat unused;
- if(stat(GDM_CONFIG_FILE, &unused) == -1)
- gdm_login_abort(_("gdm_login_parse_config: No configuration file: %s. Aborting."), GDM_CONFIG_FILE);
+ if (stat (GDM_CONFIG_FILE, &unused) == -1)
+ gdm_login_abort (_("gdm_login_parse_config: No configuration file: %s. Aborting."), GDM_CONFIG_FILE);
gnome_config_push_prefix ("=" GDM_CONFIG_FILE "=/");
- GdmLogoFilename=gnome_config_get_string("appearance/logoimage");
- GdmMessageFont=gnome_config_get_string("appearance/msgfont=-adobe-helvetica-bold-r-normal-*-*-180-*-*-*-*-*-*");
- GdmGtkRC=gnome_config_get_string("appearance/gtkrc");
- GdmIconify=gnome_config_get_int("appearance/iconify=1");
- GdmIconFile=gnome_config_get_string("appearance/iconfile=gdm.xpm");
- GdmQuiver=gnome_config_get_int("appearance/quiver=1");
-
- GdmChooserMenu=gnome_config_get_int("system/choosermenu=0");
- GdmShutdownMenu=gnome_config_get_int("system/shutdownmenu=0");
- GdmUserMaxFile=gnome_config_get_int("system/UserFileCutoffSize=65536");
- GdmRelaxPerms=gnome_config_get_int("system/relaxpermissions=0");
-
- GdmLocaleFile=g_strdup(gnome_config_get_string("system/LocaleFile"));
- GdmDefaultLocale=g_strdup(gnome_config_get_string("system/DefaultLocale=english"));
- GdmSessionDir=gnome_config_get_string("daemon/sessiondir");
+ GdmBrowser = gnome_config_get_int (GDM_KEY_BROWSER);
+ GdmLogo = gnome_config_get_string (GDM_KEY_LOGO);
+ GdmFont = gnome_config_get_string (GDM_KEY_FONT);
+ GdmIcon = gnome_config_get_string (GDM_KEY_ICON);
+ GdmQuiver = gnome_config_get_int (GDM_KEY_QUIVER);
+ GdmSystemMenu = gnome_config_get_int (GDM_KEY_SYSMENU);
+ GdmUserMaxFile = gnome_config_get_int (GDM_KEY_MAXFILE);
+ GdmRelaxPerms = gnome_config_get_int (GDM_KEY_RELAXPERM);
+ GdmLocaleFile = gnome_config_get_string (GDM_KEY_LOCFILE);
+ GdmDefaultLocale = gnome_config_get_string (GDM_KEY_LOCALE);
+ GdmSessionDir = gnome_config_get_string (GDM_KEY_SESSDIR);
+ GdmWelcome=gnome_config_get_string (GDM_KEY_WELCOME);
+ GdmGtkRC = gnome_config_get_string (GDM_KEY_GTKRC);
+ GdmExclude = gnome_config_get_string (GDM_KEY_EXCLUDE);
+ GdmGlobalFaceDir = gnome_config_get_string (GDM_KEY_FACEDIR);
+ GdmDefaultFace = gnome_config_get_string (GDM_KEY_FACE);
+ GdmDebug = gnome_config_get_int (GDM_KEY_DEBUG);
+ GdmUserMaxFile = gnome_config_get_int (GDM_KEY_MAXFILE);
+ GdmRelaxPerms = gnome_config_get_int (GDM_KEY_RELAXPERM);
+ GdmIconMaxWidth = gnome_config_get_int (GDM_KEY_ICONWIDTH);
+ GdmIconMaxHeight = gnome_config_get_int (GDM_KEY_ICONHEIGHT);
+
+ gnome_config_pop_prefix();
+
+ if (stat (GdmLocaleFile, &unused) == -1)
+ gdm_login_abort ("gdm_login_parse_config: Could not open locale file %s. Aborting!", GdmLocaleFile);
- GdmMessageText=gnome_config_get_string(_("messages/welcome=Welcome to %h"));
-
- GdmDebug=gnome_config_get_int("debug/enable=0");
-
- gnome_config_pop_prefix ();
-
- if(stat(GdmLocaleFile, &unused) == -1)
- gdm_login_abort("gdm_login_parse_config: Could not open locale file %s. Aborting!", GdmLocaleFile);
/* Disable System menu on non-local displays */
- display=getenv("DISPLAY");
+ display = getenv ("DISPLAY");
- if(!display)
- gdm_login_abort("gdm_login_parse_config: DISPLAY variable not set!");
+ if (!display)
+ gdm_login_abort ("gdm_login_parse_config: DISPLAY variable not set!");
- if(strncmp(display, ":", 1))
- GdmShutdownMenu=0;
+ if (strncmp (display, ":", 1))
+ GdmSystemMenu = 0;
}
static gboolean
-gdm_login_list_lookup(GSList *l, gchar *data)
+gdm_login_list_lookup (GSList *l, gchar *data)
{
- GSList *list=l;
+ GSList *list = l;
- if(!list || !data)
+ if (!list || !data)
return(FALSE);
- while(list) {
+ while (list) {
- if(!strcasecmp(list->data, data))
- return(TRUE);
+ if (!strcasecmp (list->data, data))
+ return (TRUE);
- list=list->next;
+ list = list->next;
}
- return(FALSE);
+ return (FALSE);
}
static void
-gdm_login_sesslang_lookup(void) /* Input validation sucks */
+gdm_login_sesslang_lookup (void) /* Input validation sucks */
{
struct passwd *pwent;
gboolean fileok;
@@ -468,115 +457,119 @@ gdm_login_sesslang_lookup(void) /* Input validation sucks */
gchar *dir=NULL, *cfg=NULL;
gchar *usrlang=NULL, *usrsess=NULL;
- gtk_widget_set_sensitive(sessmenu, FALSE);
- gtk_widget_set_sensitive(langmenu, FALSE);
+ if(!curuser)
+ gdm_login_abort("gdm_login_sesslang_lookup: curuser==NULL. Mail <mkp@mkp.net> with " \
+ "information on your PAM setup");
+
+ gtk_widget_set_sensitive (GTK_WIDGET (sessmenu), FALSE);
+ gtk_widget_set_sensitive (GTK_WIDGET (langmenu), FALSE);
/* Lookup verified user */
- pwent=getpwnam(curuser);
+ pwent = getpwnam (curuser);
- dir=g_strconcat(pwent->pw_dir, "/.gnome", NULL);
- fileok=gdm_file_check("gdm_login_sesslang_lookup", pwent->pw_uid, dir, "gdm", TRUE);
- g_free(dir);
+ dir = g_strconcat (pwent->pw_dir, "/.gnome", NULL);
+ fileok = gdm_file_check ("gdm_login_sesslang_lookup", pwent->pw_uid, dir, "gdm", TRUE, GdmUserMaxFile, GdmRelaxPerms);
+ g_free (dir);
- if(!fileok) { /* User's settings can't be retrieved */
+ if (!fileok) { /* User's settings can't be retrieved */
/* If cursess==last use system default session */
- if(!strcasecmp(cursess, lastsess))
- session=defsess;
+ if (!strcasecmp (cursess, lastsess))
+ session = defsess;
else
- session=cursess;
+ session = cursess;
/* If curlang==last use default */
- if(!strcasecmp(curlang, lastlang))
- language=GdmDefaultLocale;
+ if (!strcasecmp (curlang, lastlang))
+ language = GdmDefaultLocale;
else
- language=curlang;
+ language = curlang;
- savesess=FALSE;
- savelang=FALSE;
+ savesess = FALSE;
+ savelang = FALSE;
return;
}
/* Find user's last session and language if available */
- cfg=g_strconcat("=", pwent->pw_dir, "/.gnome/gdm=/session/last", NULL);
- usrsess=gnome_config_get_string(cfg);
- g_free(cfg);
+ cfg = g_strconcat ("=", pwent->pw_dir, "/.gnome/gdm=/session/last", NULL);
+ usrsess = gnome_config_get_string (cfg);
+ g_free (cfg);
- cfg=g_strconcat("=", pwent->pw_dir, "/.gnome/gdm=/session/lang", NULL);
- usrlang=gnome_config_get_string(cfg);
- g_free(cfg);
+ cfg = g_strconcat ("=", pwent->pw_dir, "/.gnome/gdm=/session/lang", NULL);
+ usrlang = gnome_config_get_string (cfg);
+ g_free (cfg);
/* If ``Last'' session is selected */
- if(!strcasecmp(cursess, lastsess)) {
+ if (!strcasecmp (cursess, lastsess)) {
/* User has no saved session. Use default. */
- if(!usrsess) {
- session=defsess;
- savesess=TRUE;
+ if (!usrsess) {
+ session = defsess;
+ savesess = TRUE;
}
/* User's saved session exists on this box */
- else if(gdm_login_list_lookup(sessions, usrsess)) {
- session=usrsess;
- savesess=FALSE;
+ else if (gdm_login_list_lookup (sessions, usrsess)) {
+ session = usrsess;
+ savesess = FALSE;
}
/* User's saved session type unknown */
else {
- session=defsess;
- g_snprintf(msg, 1023,
- _("Your preferred session type %s is not installed on this machine.\n" \
- "Do you wish to make %s the default for future sessions?"),
- usrsess, defsess);
- savesess=gdm_login_query(msg);
+ session = defsess;
+ g_snprintf (msg, 1023,
+ _("Your preferred session type %s is not installed on this machine.\n" \
+ "Do you wish to make %s the default for future sessions?"),
+ usrsess, defsess);
+ savesess = gdm_login_query (msg);
}
}
/* One of the other available session types is selected */
else {
- session=cursess;
+ session = cursess;
/* User has no saved session type. Use current */
- if(!usrsess)
- savesess=TRUE;
+ if (!usrsess)
+ savesess = TRUE;
/* User's saved session is also the chosen one */
- else if(!strcasecmp(usrsess, cursess))
- savesess=FALSE;
+ else if (!strcasecmp (usrsess, cursess))
+ savesess = FALSE;
/* User selected a new session type */
else {
- g_snprintf(msg, 1023,
- _("You have chosen %s for this session, but your default setting is %s.\n" \
- "Do you wish to make %s the default for future sessions?"),
- cursess, usrsess, cursess);
- savesess=gdm_login_query(msg);
+ g_snprintf (msg, 1023,
+ _("You have chosen %s for this session, but your default setting is %s.\n" \
+ "Do you wish to make %s the default for future sessions?"),
+ cursess, usrsess, cursess);
+ savesess = gdm_login_query (msg);
}
}
/* If ``Last'' language is selected */
- if(!strcasecmp(curlang, lastlang)) {
+ if (!strcasecmp (curlang, lastlang)) {
/* User has no saved language. Use default. */
- if(!usrlang) {
- language=GdmDefaultLocale;
- savelang=TRUE;
+ if (!usrlang) {
+ language = GdmDefaultLocale;
+ savelang = TRUE;
}
else {
- language=usrlang;
- savelang=FALSE;
+ language = usrlang;
+ savelang = FALSE;
}
}
/* One of the available languages is selected */
else {
- language=curlang;
+ language = curlang;
/* User has no saved language. Use current */
- if(!usrlang)
- savelang=TRUE;
+ if (!usrlang)
+ savelang = TRUE;
/* User selected a new language */
else {
- g_snprintf(msg, 1023,
- _("You have chosen %s for this session, but your default setting is %s.\n" \
- "Do you wish to make %s the default for future sessions?"),
- curlang, usrlang, curlang);
- savelang=gdm_login_query(msg);
+ g_snprintf (msg, 1023,
+ _("You have chosen %s for this session, but your default setting is %s.\n" \
+ "Do you wish to make %s the default for future sessions?"),
+ curlang, usrlang, curlang);
+ savelang = gdm_login_query (msg);
}
}
@@ -587,42 +580,39 @@ gdm_login_sesslang_lookup(void) /* Input validation sucks */
static gboolean
gdm_login_entry_handler (GtkWidget *widget, GdkEventKey *event)
{
- if(!event)
+ if (!event)
return(TRUE);
- switch(event->keyval) {
+ switch (event->keyval) {
case GDK_Return:
- gtk_widget_set_sensitive(entry, FALSE);
+ gtk_widget_set_sensitive (GTK_WIDGET (entry), FALSE);
+ gtk_widget_set_sensitive (GTK_WIDGET (browser), FALSE);
/* Save login. I'm making the assumption that login is always
* the first thing entered. This might not be true for all PAM
* setups. Needs thinking!
*/
- if(!curuser)
- curuser=g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
+ if (!curuser)
+ curuser = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry)));
- g_print("%s\n", gtk_entry_get_text(GTK_ENTRY(entry)));
+ g_print ("%s\n", gtk_entry_get_text (GTK_ENTRY (entry)));
break;
case GDK_Up:
case GDK_Down:
case GDK_Tab:
- gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), "key_press_event");
- break;
-
+ gtk_signal_emit_stop_by_name (GTK_OBJECT (entry), "key_press_event");
break;
- case GDK_F1:
- gdm_login_about();
break;
default:
break;
}
- return(TRUE);
+ return (TRUE);
}
@@ -631,17 +621,17 @@ gdm_login_session_handler (GtkWidget *widget)
{
gchar *s;
- gtk_label_get(GTK_LABEL(GTK_BIN(widget)->child), &cursess);
- s=g_strdup_printf(_("%s session selected"), cursess);
- gtk_label_set(GTK_LABEL(msg), s);
- g_free(s);
+ gtk_label_get (GTK_LABEL (GTK_BIN (widget)->child), &cursess);
+ s = g_strdup_printf (_("%s session selected"), cursess);
+ gtk_label_set (GTK_LABEL (msg), s);
+ g_free (s);
}
static void
-gdm_login_session_init(GtkWidget *menu)
+gdm_login_session_init (GtkWidget *menu)
{
- GSList *sessgrp=NULL;
+ GSList *sessgrp = NULL;
GtkWidget *item;
DIR *sessdir;
struct dirent *dent;
@@ -650,71 +640,71 @@ gdm_login_session_init(GtkWidget *menu)
lastsess=_("Last");
- cursess=lastsess;
- item = gtk_radio_menu_item_new_with_label(NULL, lastsess);
- sessgrp = gtk_radio_menu_item_group(GTK_RADIO_MENU_ITEM(item));
- gtk_menu_append(GTK_MENU(menu), item);
- gtk_signal_connect(GTK_OBJECT(item), "activate", gdm_login_session_handler, NULL);
- gtk_widget_show(item);
+ cursess = lastsess;
+ item = gtk_radio_menu_item_new_with_label (NULL, lastsess);
+ sessgrp = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (item));
+ gtk_menu_append (GTK_MENU (menu), item);
+ gtk_signal_connect (GTK_OBJECT (item), "activate", gdm_login_session_handler, NULL);
+ gtk_widget_show (GTK_WIDGET (item));
item = gtk_menu_item_new();
- gtk_menu_append(GTK_MENU(menu), item);
- gtk_widget_show(item);
+ gtk_menu_append (GTK_MENU (menu), item);
+ gtk_widget_show (GTK_WIDGET (item));
/* Check that session dir is readable */
- if (access(GdmSessionDir, R_OK|X_OK))
- gdm_login_abort(_("gdm_login_session_init: Session script directory not found!"));
+ if (access (GdmSessionDir, R_OK|X_OK))
+ gdm_login_abort (_("gdm_login_session_init: Session script directory not found!"));
/* Read directory entries in session dir */
- sessdir=opendir(GdmSessionDir);
- dent=readdir(sessdir);
+ sessdir = opendir (GdmSessionDir);
+ dent = readdir (sessdir);
- while(dent != NULL) {
+ while (dent != NULL) {
gchar *s;
- s=g_strconcat(GdmSessionDir, "/", dent->d_name, NULL);
- lstat(s, &statbuf);
+ s = g_strconcat (GdmSessionDir, "/", dent->d_name, NULL);
+ lstat (s, &statbuf);
/* If default session link exists, find out what it points to */
- if(S_ISLNK(statbuf.st_mode) && !strcasecmp(dent->d_name, "default")) {
+ if (S_ISLNK (statbuf.st_mode) && !strcasecmp (dent->d_name, "default")) {
gchar t[_POSIX_PATH_MAX];
- linklen=readlink(s, t, _POSIX_PATH_MAX);
- t[linklen]=0;
- defsess=g_strdup(t);
+ linklen = readlink (s, t, _POSIX_PATH_MAX);
+ t[linklen] = 0;
+ defsess = g_strdup (t);
}
/* If session script is readable/executable add it to the list */
- if(S_ISREG(statbuf.st_mode)) {
+ if (S_ISREG (statbuf.st_mode)) {
- if((statbuf.st_mode & (S_IRUSR|S_IXUSR)) == (S_IRUSR|S_IXUSR) &&
- (statbuf.st_mode & (S_IRGRP|S_IXGRP)) == (S_IRGRP|S_IXGRP) &&
- (statbuf.st_mode & (S_IROTH|S_IXOTH)) == (S_IROTH|S_IXOTH))
+ if ((statbuf.st_mode & (S_IRUSR|S_IXUSR)) == (S_IRUSR|S_IXUSR) &&
+ (statbuf.st_mode & (S_IRGRP|S_IXGRP)) == (S_IRGRP|S_IXGRP) &&
+ (statbuf.st_mode & (S_IROTH|S_IXOTH)) == (S_IROTH|S_IXOTH))
{
- item=gtk_radio_menu_item_new_with_label(sessgrp, dent->d_name);
- sessgrp=gtk_radio_menu_item_group(GTK_RADIO_MENU_ITEM (item));
- sessions=g_slist_append(sessions, dent->d_name);
- gtk_menu_append(GTK_MENU(menu), item);
- gtk_signal_connect(GTK_OBJECT (item), "activate",
- GTK_SIGNAL_FUNC (gdm_login_session_handler), NULL);
- gtk_widget_show(item);
+ item = gtk_radio_menu_item_new_with_label (sessgrp, dent->d_name);
+ sessgrp = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (item));
+ sessions = g_slist_append (sessions, dent->d_name);
+ gtk_menu_append (GTK_MENU (menu), item);
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC (gdm_login_session_handler), NULL);
+ gtk_widget_show (GTK_WIDGET (item));
}
else
- syslog(LOG_ERR, "Wrong permissions on %s/%s. Should be readable/executable for all.",
- GdmSessionDir, dent->d_name);
+ syslog (LOG_ERR, "Wrong permissions on %s/%s. Should be readable/executable for all.",
+ GdmSessionDir, dent->d_name);
}
- dent=readdir(sessdir);
- g_free(s);
+ dent = readdir (sessdir);
+ g_free (s);
}
- if(!g_slist_length(sessgrp))
- gdm_login_abort(_("No session scripts found. Aborting!"));
+ if (!g_slist_length (sessgrp))
+ gdm_login_abort (_("No session scripts found. Aborting!"));
- if(!defsess) {
- gtk_label_get(GTK_LABEL(GTK_BIN(g_slist_nth_data(sessgrp, 0))->child), &defsess);
- syslog(LOG_WARNING, _("No default session link found. Using %s.\n"), defsess);
+ if (!defsess) {
+ gtk_label_get (GTK_LABEL (GTK_BIN (g_slist_nth_data (sessgrp, 0))->child), &defsess);
+ syslog (LOG_WARNING, _("No default session link found. Using %s.\n"), defsess);
}
}
@@ -724,374 +714,765 @@ gdm_login_language_handler (GtkWidget *widget)
{
gchar *s;
- gtk_label_get(GTK_LABEL(GTK_BIN(widget)->child), &curlang);
- s=g_strdup_printf(_("%s language selected"), curlang);
- gtk_label_set(GTK_LABEL(msg), s);
- g_free(s);
+ if (!widget)
+ return;
+
+ gtk_label_get (GTK_LABEL (GTK_BIN (widget)->child), &curlang);
+ s = g_strdup_printf (_("%s language selected"), curlang);
+ gtk_label_set (GTK_LABEL (msg), s);
+ g_free (s);
}
static void
-gdm_login_language_init(GtkWidget *menu)
+gdm_login_language_init (GtkWidget *menu)
{
GtkWidget *item, *ammenu, *nzmenu, *omenu;
FILE *langlist;
char curline[256];
char *ctmp, *ctmp1, *ctmp2;
- lastlang=_("Last");
- curlang=lastlang;
-
- item=gtk_radio_menu_item_new_with_label(NULL, lastlang);
- languages=gtk_radio_menu_item_group(GTK_RADIO_MENU_ITEM(item));
- gtk_menu_append(GTK_MENU(menu), item);
- gtk_signal_connect(GTK_OBJECT(item), "activate", gdm_login_language_handler, NULL);
- gtk_widget_show(item);
-
- item=gtk_menu_item_new();
- gtk_menu_append(GTK_MENU(menu), item);
- gtk_widget_show(item);
-
- item=gtk_menu_item_new_with_label(_("A-M"));
- ammenu=gtk_menu_new();
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), ammenu);
- gtk_menu_append(GTK_MENU(menu), item);
- gtk_widget_show(item);
-
- item=gtk_menu_item_new_with_label(_("N-Z"));
- nzmenu=gtk_menu_new();
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), nzmenu);
- gtk_menu_append(GTK_MENU(menu), item);
- gtk_widget_show(item);
+ if (!menu)
+ return;
- item=gtk_menu_item_new_with_label(_("Other"));
- omenu=gtk_menu_new();
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), omenu);
- gtk_menu_append(GTK_MENU(menu), item);
- gtk_widget_show(item);
+ lastlang = _("Last");
+ curlang = lastlang;
- langlist = fopen(GdmLocaleFile, "r");
+ item = gtk_radio_menu_item_new_with_label (NULL, lastlang);
+ languages = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (item));
+ gtk_menu_append (GTK_MENU(menu), item);
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC (gdm_login_language_handler),
+ NULL);
+ gtk_widget_show (GTK_WIDGET (item));
- if(!langlist)
+ item = gtk_menu_item_new();
+ gtk_menu_append (GTK_MENU (menu), item);
+ gtk_widget_show (GTK_WIDGET (item));
+
+ item = gtk_menu_item_new_with_label (_("A-M"));
+ ammenu = gtk_menu_new();
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), GTK_WIDGET (ammenu));
+ gtk_menu_append (GTK_MENU (menu), item);
+ gtk_widget_show (GTK_WIDGET (item));
+
+ item = gtk_menu_item_new_with_label (_("N-Z"));
+ nzmenu = gtk_menu_new();
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), nzmenu);
+ gtk_menu_append (GTK_MENU (menu), item);
+ gtk_widget_show(GTK_WIDGET (item));
+
+ item = gtk_menu_item_new_with_label (_("Other"));
+ omenu = gtk_menu_new();
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), omenu);
+ gtk_menu_append (GTK_MENU (menu), item);
+ gtk_widget_show (GTK_WIDGET (item));
+
+ langlist = fopen (GdmLocaleFile, "r");
+
+ if (!langlist)
return;
- while(fgets(curline, sizeof(curline), langlist)) {
+ while (fgets (curline, sizeof (curline), langlist)) {
- if(!isalpha(curline[0]))
+ if (!isalpha (curline[0]))
continue;
- ctmp1 = strchr(curline, ' ');
- ctmp2 = strchr(curline, '\t');
- ctmp = curline + strlen(curline) - 1;
+ ctmp1 = strchr (curline, ' ');
+ ctmp2 = strchr (curline, '\t');
+ ctmp = curline + strlen (curline) - 1;
- if(ctmp1 && (ctmp1 < ctmp))
+ if (ctmp1 && (ctmp1 < ctmp))
ctmp = ctmp1;
- if(ctmp2 && (ctmp2 < ctmp))
+ if (ctmp2 && (ctmp2 < ctmp))
ctmp = ctmp2;
*ctmp = '\0';
- curline[0] = toupper(curline[0]);
+ curline[0] = toupper (curline[0]);
- item=gtk_radio_menu_item_new_with_label(languages, curline);
- languages=gtk_radio_menu_item_group(GTK_RADIO_MENU_ITEM(item));
+ item = gtk_radio_menu_item_new_with_label (languages, curline);
+ languages = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (item));
- if(curline[0] >= 'A' && curline[0] <= 'M')
- gtk_menu_append(GTK_MENU(ammenu), item);
- else if(curline[0] >= 'N' && curline[0] <= 'Z')
- gtk_menu_append(GTK_MENU(nzmenu), item);
+ if (curline[0] >= 'A' && curline[0] <= 'M')
+ gtk_menu_append (GTK_MENU (ammenu), item);
+ else if (curline[0] >= 'N' && curline[0] <= 'Z')
+ gtk_menu_append (GTK_MENU (nzmenu), item);
else
- gtk_menu_append(GTK_MENU(omenu), item);
+ gtk_menu_append (GTK_MENU (omenu), item);
- gtk_signal_connect(GTK_OBJECT(item), "activate", gdm_login_language_handler, NULL);
- gtk_widget_show(item);
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC (gdm_login_language_handler),
+ NULL);
+ gtk_widget_show (GTK_WIDGET (item));
}
- fclose(langlist);
+ fclose (langlist);
}
static gboolean
-gdm_login_ctrl_handler(GIOChannel *source, GIOCondition cond, gint fd)
+gdm_login_ctrl_handler (GIOChannel *source, GIOCondition cond, gint fd)
{
gchar buf[PIPE_SIZE];
gint len;
gint i, x, y;
- if(cond != G_IO_IN)
- return(TRUE);
+ if (cond != G_IO_IN)
+ return (TRUE);
- g_io_channel_read(source, buf, 1, &len);
+ g_io_channel_read (source, buf, 1, &len);
- if(len!=1)
- return(TRUE);
+ if (len!=1)
+ return (TRUE);
- switch(buf[0]) {
+ switch (buf[0]) {
case GDM_PROMPT:
- g_io_channel_read(source, buf, PIPE_SIZE-1, &len);
- buf[len-1]='\0';
- gtk_label_set(GTK_LABEL(label), buf);
- gtk_widget_show(label);
- gtk_entry_set_text(GTK_ENTRY(entry), "");
- gtk_entry_set_visibility(GTK_ENTRY(entry), TRUE);
- gtk_widget_set_sensitive(entry, TRUE);
- gtk_widget_grab_focus(entry);
- gtk_widget_show(entry);
+ g_io_channel_read (source, buf, PIPE_SIZE-1, &len);
+ buf[len-1] = '\0';
+ gtk_label_set (GTK_LABEL (label), buf);
+ gtk_widget_show (GTK_WIDGET (label));
+ gtk_entry_set_text (GTK_ENTRY (entry), "");
+ gtk_entry_set_visibility (GTK_ENTRY (entry), TRUE);
+ gtk_widget_set_sensitive (GTK_WIDGET (entry), TRUE);
+ gtk_widget_grab_focus (GTK_WIDGET (entry));
+ gtk_widget_show (GTK_WIDGET (entry));
break;
case GDM_NOECHO:
- g_io_channel_read(source, buf, PIPE_SIZE-1, &len);
- buf[len-1]='\0';
- gtk_label_set(GTK_LABEL(label), buf);
- gtk_widget_show(label);
- gtk_entry_set_text(GTK_ENTRY(entry), "");
- gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE);
- gtk_widget_set_sensitive(entry, TRUE);
- gtk_widget_grab_focus(entry);
- gtk_widget_show(entry);
+ g_io_channel_read (source, buf, PIPE_SIZE-1, &len);
+ buf[len-1] = '\0';
+ gtk_label_set (GTK_LABEL(label), buf);
+ gtk_widget_show (GTK_WIDGET (label));
+ gtk_entry_set_text (GTK_ENTRY (entry), "");
+ gtk_entry_set_visibility (GTK_ENTRY (entry), FALSE);
+ gtk_widget_set_sensitive (GTK_WIDGET (entry), TRUE);
+ gtk_widget_grab_focus (GTK_WIDGET (entry));
+ gtk_widget_show (GTK_WIDGET (entry));
break;
case GDM_MSGERR:
- g_io_channel_read(source, buf, PIPE_SIZE-1, &len);
- buf[len-1]='\0';
- gtk_label_set(GTK_LABEL(msg), buf);
- gtk_widget_show(msg);
- g_print("\n");
+ g_io_channel_read (source, buf, PIPE_SIZE-1, &len);
+ buf[len-1] = '\0';
+ gtk_label_set (GTK_LABEL(msg), buf);
+ gtk_widget_show (GTK_WIDGET (msg));
+ g_print ("\n");
break;
case GDM_SESS:
- g_io_channel_read(source, buf, PIPE_SIZE-1, &len); /* Empty */
+ g_io_channel_read (source, buf, PIPE_SIZE-1, &len); /* Empty */
gdm_login_sesslang_lookup(); /* Lookup session and language */
- g_print("%s\n", session);
+ g_print ("%s\n", session);
break;
case GDM_LANG:
- g_io_channel_read(source, buf, PIPE_SIZE-1, &len); /* Empty */
- g_print("%s\n", language);
+ g_io_channel_read (source, buf, PIPE_SIZE-1, &len); /* Empty */
+ g_print ("%s\n", language);
break;
case GDM_SSESS:
- g_io_channel_read(source, buf, PIPE_SIZE-1, &len); /* Empty */
+ g_io_channel_read (source, buf, PIPE_SIZE-1, &len); /* Empty */
- if(savesess)
- g_print("Y\n");
+ if (savesess)
+ g_print ("Y\n");
else
- g_print("\n");
+ g_print ("\n");
break;
case GDM_SLANG:
- g_io_channel_read(source, buf, PIPE_SIZE-1, &len); /* Empty */
+ g_io_channel_read (source, buf, PIPE_SIZE-1, &len); /* Empty */
- if(savelang)
- g_print("Y\n");
+ if (savelang)
+ g_print ("Y\n");
else
- g_print("\n");
+ g_print ("\n");
break;
case GDM_RESET:
- g_io_channel_read(source, buf, PIPE_SIZE-1, &len);
- buf[len-1]='\0';
+ g_io_channel_read (source, buf, PIPE_SIZE-1, &len);
+ buf[len-1] = '\0';
- if(GdmQuiver) {
- gdk_window_get_position(login->window, &x, &y);
+ if (GdmQuiver) {
+ gdk_window_get_position (login->window, &x, &y);
for (i=32 ; i > 0 ; i=i/2) {
- gdk_window_move(login->window, i+x, y);
- gdk_window_move(login->window, x, y);
- gdk_window_move(login->window, -i+x, y);
- gdk_window_move(login->window, x, y);
+ gdk_window_move (login->window, i+x, y);
+ gdk_window_move (login->window, x, y);
+ gdk_window_move (login->window, -i+x, y);
+ gdk_window_move (login->window, x, y);
}
}
- if(curuser) {
- g_free(curuser);
+ if (curuser) {
+ g_free (curuser);
curuser=NULL;
}
- g_print("\n");
+ gtk_widget_set_sensitive (GTK_WIDGET (entry), TRUE);
+ gtk_widget_set_sensitive (GTK_WIDGET (browser), TRUE);
+
+ g_print ("\n");
break;
case GDM_QUIT:
- exit(EXIT_SUCCESS);
+ exit (EXIT_SUCCESS);
break;
default:
break;
}
- return(TRUE);
+ return (TRUE);
+}
+
+
+static void
+gdm_login_browser_update (void)
+{
+ GList *list = users;
+
+ gnome_icon_list_clear (GNOME_ICON_LIST (browser));
+
+ while (list) {
+ GdmLoginUser *user = list->data;
+
+ gnome_icon_list_append_imlib (GNOME_ICON_LIST (browser), user->picture, user->login);
+ list = list->next;
+ }
+
+ gnome_icon_list_thaw (GNOME_ICON_LIST (browser));
+}
+
+
+static gboolean
+gdm_login_browser_select (GtkWidget *widget, gint selected, GdkEvent *event)
+{
+ GdmLoginUser *user;
+
+ if (!widget || !event)
+ return (TRUE);
+
+ switch (event->type) {
+
+ case GDK_BUTTON_PRESS:
+ case GDK_BUTTON_RELEASE:
+ user = g_list_nth_data (users, selected);
+
+ if (user && user->login)
+ gtk_entry_set_text (GTK_ENTRY (entry), user->login);
+
+ break;
+
+ case GDK_2BUTTON_PRESS:
+ user = g_list_nth_data (users, selected);
+
+ if (user && user->login)
+ gtk_entry_set_text (GTK_ENTRY (entry), user->login);
+
+ gtk_widget_set_sensitive (GTK_WIDGET (browser), FALSE);
+ g_print ("%s\n", gtk_entry_get_text (GTK_ENTRY (entry)));
+ break;
+
+ default:
+ break;
+ }
+
+ return (TRUE);
+}
+
+
+static gboolean
+gdm_login_browser_unselect (GtkWidget *widget, gint selected, GdkEvent *event)
+{
+ if (!widget || !event)
+ return (TRUE);
+
+ switch (event->type) {
+
+ case GDK_BUTTON_PRESS:
+ case GDK_BUTTON_RELEASE:
+ gtk_entry_set_text (GTK_ENTRY (entry), "");
+ break;
+
+ default:
+ break;
+ }
+
+ return (TRUE);
}
static void
-gdm_login_gui_init(void)
+gdm_login_gui_init (void)
{
+ GtkWidget *frame1, *frame2;
+ GtkWidget *mbox, *menu, *menubar, *item, *welcome;
+ GtkWidget *table, *stack, *hline1, *hline2;
+ GtkWidget *bbox = NULL;
+ GtkWidget *logoframe = NULL;
GtkStyle *style;
- GtkWidget *frame, *frame2, *hbox, *hline, *item, *lebox, *logo, *logobox;
- GtkWidget *logoframe, *mbox, *menu, *menubar, *vbox, *welcome;
gchar *greeting;
+ gint cols, rows;
if(GdmGtkRC)
- gtk_rc_parse(GdmGtkRC);
-
- rootwin=gdk_window_foreign_new (GDK_ROOT_WINDOW ());
-
- login=gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_container_border_width(GTK_CONTAINER(login), 0);
-
- frame=gtk_frame_new(NULL);
- gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_OUT);
- gtk_container_border_width(GTK_CONTAINER(frame), 0);
- gtk_container_add(GTK_CONTAINER(login), frame);
- gtk_widget_show(frame);
-
- frame2=gtk_frame_new(NULL);
- gtk_frame_set_shadow_type(GTK_FRAME(frame2), GTK_SHADOW_IN);
- gtk_container_border_width(GTK_CONTAINER(frame2), 2);
- gtk_container_add(GTK_CONTAINER(frame), frame2);
- gtk_widget_show(frame2);
-
- mbox=gtk_vbox_new(FALSE,0);
- gtk_container_add(GTK_CONTAINER(frame2), mbox);
- gtk_widget_show(mbox);
-
- menubar=gtk_menu_bar_new();
- gtk_box_pack_start(GTK_BOX(mbox), menubar, FALSE, FALSE, 0);
-
- menu=gtk_menu_new();
- gdm_login_session_init(menu);
- sessmenu=gtk_menu_item_new_with_label(_("Session"));
- gtk_menu_bar_append(GTK_MENU_BAR(menubar), sessmenu);
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(sessmenu), menu);
- gtk_widget_show(sessmenu);
-
- menu=gtk_menu_new();
- gdm_login_language_init(menu);
- langmenu=gtk_menu_item_new_with_label(_("Language"));
- gtk_menu_bar_append(GTK_MENU_BAR(menubar), langmenu);
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(langmenu), menu);
- gtk_widget_show(langmenu);
-
- if(GdmShutdownMenu) {
- menu=gtk_menu_new();
- item=gtk_menu_item_new_with_label(_("Reboot..."));
- gtk_menu_append(GTK_MENU(menu), item);
- gtk_signal_connect(GTK_OBJECT (item), "activate",
- GTK_SIGNAL_FUNC(gdm_login_reboot_handler), NULL);
- gtk_widget_show(item);
+ gtk_rc_parse (GdmGtkRC);
+
+ rootwin = gdk_window_foreign_new (GDK_ROOT_WINDOW ());
+
+ login = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_widget_ref (login);
+ gtk_object_set_data_full (GTK_OBJECT (login), "login", login,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_window_set_title (GTK_WINDOW (login), "GDM Login");
+
+ frame1 = gtk_frame_new (NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (frame1), GTK_SHADOW_OUT);
+ gtk_container_border_width (GTK_CONTAINER (frame1), 0);
+ gtk_container_add (GTK_CONTAINER (login), frame1);
+ gtk_object_set_data_full (GTK_OBJECT (login), "frame1", frame1,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_ref (GTK_WIDGET (frame1));
+ gtk_widget_show (GTK_WIDGET (frame1));
+
+ frame2 = gtk_frame_new(NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (frame2), GTK_SHADOW_IN);
+ gtk_container_border_width (GTK_CONTAINER (frame2), 2);
+ gtk_container_add (GTK_CONTAINER (frame1), frame2);
+ gtk_object_set_data_full (GTK_OBJECT (login), "frame2", frame2,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_ref (GTK_WIDGET (frame2));
+ gtk_widget_show (GTK_WIDGET (frame2));
+
+ mbox = gtk_vbox_new (FALSE, 0);
+ gtk_widget_ref (mbox);
+ gtk_object_set_data_full (GTK_OBJECT (login), "mbox", mbox,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (mbox);
+ gtk_container_add (GTK_CONTAINER (frame2), mbox);
+
+ menubar = gtk_menu_bar_new();
+ gtk_widget_ref (GTK_WIDGET (menubar));
+ gtk_box_pack_start (GTK_BOX (mbox), menubar, FALSE, FALSE, 0);
+
+ menu = gtk_menu_new();
+ gdm_login_session_init (menu);
+ sessmenu = gtk_menu_item_new_with_label (_("Session"));
+ gtk_menu_bar_append (GTK_MENU_BAR(menubar), sessmenu);
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (sessmenu), menu);
+ gtk_widget_show (GTK_WIDGET (sessmenu));
+
+ menu = gtk_menu_new();
+ gdm_login_language_init (menu);
+ langmenu = gtk_menu_item_new_with_label (_("Language"));
+ gtk_menu_bar_append (GTK_MENU_BAR (menubar), langmenu);
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (langmenu), menu);
+ gtk_widget_show (GTK_WIDGET (langmenu));
+
+ if (GdmSystemMenu) {
+ menu = gtk_menu_new();
+ item = gtk_menu_item_new_with_label (_("Reboot..."));
+ gtk_menu_append (GTK_MENU (menu), item);
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC (gdm_login_reboot_handler),
+ NULL);
+ gtk_widget_show (GTK_WIDGET (item));
- item=gtk_menu_item_new_with_label(_("Halt..."));
- gtk_menu_append(GTK_MENU(menu), item);
- gtk_signal_connect(GTK_OBJECT(item), "activate",
- GTK_SIGNAL_FUNC(gdm_login_halt_handler), NULL);
- gtk_widget_show(item);
+ item = gtk_menu_item_new_with_label (_("Halt..."));
+ gtk_menu_append (GTK_MENU (menu), item);
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC (gdm_login_halt_handler),
+ NULL);
+ gtk_widget_show (GTK_WIDGET (item));
- item=gtk_menu_item_new_with_label(_("System"));
- gtk_menu_bar_append(GTK_MENU_BAR(menubar), item);
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), menu);
- gtk_widget_show(item);
+ item = gtk_menu_item_new_with_label (_("System"));
+ gtk_menu_bar_append (GTK_MENU_BAR (menubar), item);
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), menu);
+ gtk_widget_show (GTK_WIDGET (item));
}
- if(GdmChooserMenu) {
- item=gtk_menu_item_new_with_label(_("Host chooser"));
- gtk_menu_bar_append(GTK_MENU_BAR(menubar), item);
- gtk_widget_show(item);
- }
-
- if(GdmIconify) {
- if(access(GdmIconFile, R_OK)) {
- syslog(LOG_WARNING, _("Can't open icon file: %s. Suspending iconify feature!"), GdmIconFile);
- GdmIconify=0;
+ if (GdmIcon) {
+ if (access (GdmIcon, R_OK)) {
+ syslog (LOG_WARNING, _("Can't open icon file: %s. Suspending iconify feature!"), GdmIcon);
}
else {
- item=gtk_menu_item_new_with_label(_("Iconify"));
- gtk_menu_bar_append(GTK_MENU_BAR(menubar), item);
- gtk_signal_connect(GTK_OBJECT(item), "activate",
- GTK_SIGNAL_FUNC(gdm_login_iconify_handler), NULL);
- gtk_widget_show(item);
+ item = gtk_menu_item_new_with_label (_("Iconify"));
+ gtk_menu_bar_append (GTK_MENU_BAR (menubar), item);
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC (gdm_login_iconify_handler),
+ NULL);
+ gtk_widget_show (GTK_WIDGET (item));
}
}
- hbox=gtk_hbox_new(FALSE, 0);
- gtk_container_border_width(GTK_CONTAINER(hbox), 10);
- gtk_box_pack_end(GTK_BOX(mbox), hbox, FALSE, FALSE, 0);
- gtk_widget_show(hbox);
-
- if (GdmLogoFilename && !access(GdmLogoFilename, R_OK)) {
- logobox=gtk_vbox_new(FALSE, 0);
- gtk_box_pack_start(GTK_BOX(hbox), logobox, FALSE, FALSE, 0);
+ if (GdmBrowser)
+ rows = 2;
+ else
+ rows = 1;
+
+ if (GdmLogo)
+ cols = 2;
+ else
+ cols = 1;
+
+ table = gtk_table_new (rows, cols, FALSE);
+ gtk_widget_ref (table);
+ gtk_object_set_data_full (GTK_OBJECT (login), "table", table,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (table);
+ gtk_box_pack_start (GTK_BOX (mbox), table, TRUE, TRUE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (table), 10);
+ gtk_table_set_row_spacings (GTK_TABLE (table), 10);
+ gtk_table_set_col_spacings (GTK_TABLE (table), 10);
+
+ if (GdmBrowser) {
+ GtkStyle *style;
+ GdkColor bbg = { 0, 0xFFFF, 0xFFFF, 0xFFFF };
+ GtkWidget *bframe;
+ GtkWidget *scrollbar;
+
+ /* Find background style for browser */
+ style = gtk_style_copy (login->style);
+ style->bg[GTK_STATE_NORMAL] = bbg;
+ gtk_widget_push_style (style);
+
+ /* Icon list */
+ if (maxwidth < GdmIconMaxWidth/2)
+ maxwidth = (gint) GdmIconMaxWidth/2;
+
+ browser = GNOME_ICON_LIST (gnome_icon_list_new (maxwidth+20, NULL, FALSE));
+ gnome_icon_list_freeze (GNOME_ICON_LIST (browser));
+ gnome_icon_list_set_separators (GNOME_ICON_LIST (browser), " /-_.");
+ gnome_icon_list_set_row_spacing (GNOME_ICON_LIST (browser), 2);
+ gnome_icon_list_set_col_spacing (GNOME_ICON_LIST (browser), 2);
+ gnome_icon_list_set_icon_border (GNOME_ICON_LIST (browser), 2);
+ gnome_icon_list_set_text_spacing (GNOME_ICON_LIST (browser), 2);
+ gnome_icon_list_set_selection_mode (GNOME_ICON_LIST (browser), GTK_SELECTION_SINGLE);
+ gtk_signal_connect (GTK_OBJECT (browser), "select_icon",
+ GTK_SIGNAL_FUNC (gdm_login_browser_select), NULL);
+ gtk_signal_connect (GTK_OBJECT (browser), "unselect_icon",
+ GTK_SIGNAL_FUNC (gdm_login_browser_unselect), NULL);
+ gtk_widget_pop_style();
+
+ /* Browser 3D frame */
+ bframe = gtk_frame_new (NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (bframe), GTK_SHADOW_IN);
+ gtk_container_add (GTK_CONTAINER(bframe), GTK_WIDGET (browser));
+
+ /* Browser scroll bar */
+ scrollbar = gtk_vscrollbar_new (browser->adj);
+
+ /* Box containing all browser functionality */
+ bbox = gtk_hbox_new (0, 0);
+ gtk_box_pack_start (GTK_BOX (bbox), GTK_WIDGET (bframe), 1, 1, 0);
+ gtk_box_pack_start (GTK_BOX (bbox), GTK_WIDGET (scrollbar), 0, 0, 0);
+ gtk_widget_show_all (GTK_WIDGET (bbox));
+ }
- logoframe=gtk_frame_new(NULL);
- gtk_frame_set_shadow_type(GTK_FRAME(logoframe), GTK_SHADOW_IN);
- gtk_box_pack_start(GTK_BOX(logobox), logoframe, FALSE, FALSE, 0);
- gtk_widget_show(logoframe);
+ if (GdmLogo && !access (GdmLogo, R_OK)) {
+ GtkWidget *logo;
- logo=gnome_pixmap_new_from_file(GdmLogoFilename);
- gtk_container_add(GTK_CONTAINER(logoframe), logo);
- gtk_widget_show(logo);
+ logoframe = gtk_frame_new (NULL);
+ gtk_widget_ref (logoframe);
+ gtk_object_set_data_full (GTK_OBJECT (login), "logoframe", logoframe,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (logoframe);
+ gtk_frame_set_shadow_type (GTK_FRAME (logoframe), GTK_SHADOW_IN);
- gtk_widget_show(logobox);
+ logo = gnome_pixmap_new_from_file (GdmLogo);
+ gtk_container_add (GTK_CONTAINER (logoframe), logo);
+ gtk_widget_show (GTK_WIDGET (logo));
}
- vbox=gtk_vbox_new(FALSE, 0);
- gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0);
- gtk_container_border_width(GTK_CONTAINER(vbox), 10);
- gtk_widget_show(vbox);
+ stack = gtk_table_new (6, 1, FALSE);
+ gtk_widget_ref (stack);
+ gtk_object_set_data_full (GTK_OBJECT (login), "stack", stack,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (stack);
style = gtk_style_new();
- gdk_font_unref(style->font);
- style->font = gdk_font_load (GdmMessageFont);
- gtk_widget_push_style(style);
- greeting=gdm_parse_enriched_string(GdmMessageText);
- welcome=gtk_label_new(greeting);
+ gdk_font_unref (style->font);
+ style->font = gdk_font_load (GdmFont);
+ gtk_widget_push_style (style);
+
+ greeting = gdm_parse_enriched_string (GdmWelcome);
+ welcome = gtk_label_new (greeting);
+ gtk_widget_set_name(welcome, "Welcome");
g_free(greeting);
- gtk_box_pack_start(GTK_BOX(vbox), welcome, TRUE, FALSE, 10);
- gtk_widget_show(welcome);
- gtk_widget_pop_style();
-
- msg=gtk_label_new("Please enter your login");
- gtk_box_pack_end(GTK_BOX(vbox), msg, FALSE, TRUE, 0);
- gtk_widget_show(msg);
-
- hline=gtk_hseparator_new();
- gtk_box_pack_end(GTK_BOX(vbox), hline, FALSE, FALSE, 10);
- gtk_widget_show(hline);
-
- lebox=gtk_vbox_new(FALSE, 0);
- gtk_container_border_width(GTK_CONTAINER(lebox), 5);
- gtk_box_pack_end(GTK_BOX(vbox), lebox, FALSE, FALSE, 5);
- gtk_widget_show(lebox);
-
- label=gtk_label_new("Login:");
- gtk_box_pack_start(GTK_BOX(lebox), label, FALSE, FALSE, 5);
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
- gtk_widget_show(label);
-
- entry=gtk_entry_new_with_max_length(32);
- gtk_box_pack_start(GTK_BOX(lebox), entry, FALSE, FALSE, 5);
- gtk_entry_set_text(GTK_ENTRY(entry), "");
- gtk_signal_connect_object(GTK_OBJECT(entry),
- "key_press_event",
- GTK_SIGNAL_FUNC(gdm_login_entry_handler),
- NULL);
- gtk_widget_show(entry);
-
- hline=gtk_hseparator_new();
- gtk_box_pack_end(GTK_BOX(vbox), hline, FALSE, FALSE, 10);
- gtk_widget_show(hline);
-
- gtk_widget_grab_focus(entry);
- gtk_window_set_focus(GTK_WINDOW (login), entry);
- gtk_window_set_policy(GTK_WINDOW (login), 1, 1, 1);
- gtk_window_position(GTK_WINDOW (login), GTK_WIN_POS_CENTER);
-
- gtk_widget_set_usize(GTK_WIDGET(login),
- (gint)gdk_screen_width() * 0.5,
- 0);
-
- gtk_widget_show_all(login);
+ gtk_widget_ref (welcome);
+ gtk_object_set_data_full (GTK_OBJECT (login), "welcome", welcome,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (welcome);
+ gtk_table_attach (GTK_TABLE (stack), welcome, 0, 1, 0, 1,
+ (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+ (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
+
+ gtk_widget_pop_style ();
+
+ hline1 = gtk_hseparator_new ();
+ gtk_widget_ref (hline1);
+ gtk_object_set_data_full (GTK_OBJECT (login), "hline1", hline1,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (hline1);
+ gtk_table_attach (GTK_TABLE (stack), hline1, 0, 1, 1, 2,
+ (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+ (GtkAttachOptions) (GTK_FILL), 0, 10);
+
+ label = gtk_label_new (_("Login:"));
+ gtk_widget_ref (label);
+ gtk_object_set_data_full (GTK_OBJECT (login), "label", label,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (label);
+ gtk_table_attach (GTK_TABLE (stack), label, 0, 1, 2, 3,
+ (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+ gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
+ gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+ gtk_misc_set_padding (GTK_MISC (label), 10, 5);
+
+ entry = gtk_entry_new_with_max_length (32);
+ gtk_widget_ref (entry);
+ gtk_object_set_data_full (GTK_OBJECT (login), "entry", entry,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_entry_set_text (GTK_ENTRY (entry), "");
+ gtk_widget_show (entry);
+ gtk_table_attach (GTK_TABLE (stack), entry, 0, 1, 3, 4,
+ (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+ (GtkAttachOptions) (0), 10, 0);
+ gtk_signal_connect_object (GTK_OBJECT(entry),
+ "key_press_event",
+ GTK_SIGNAL_FUNC (gdm_login_entry_handler),
+ NULL);
+
+ hline2 = gtk_hseparator_new ();
+ gtk_widget_ref (hline2);
+ gtk_object_set_data_full (GTK_OBJECT (login), "hline2", hline2,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (hline2);
+ gtk_table_attach (GTK_TABLE (stack), hline2, 0, 1, 4, 5,
+ (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+ (GtkAttachOptions) (GTK_FILL), 0, 10);
+
+ msg = gtk_label_new (_("Please enter your login"));
+ gtk_widget_set_name(msg, "Message");
+ gtk_widget_ref (msg);
+ gtk_object_set_data_full (GTK_OBJECT (login), "msg", msg,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (msg);
+ gtk_table_attach (GTK_TABLE (stack), msg, 0, 1, 5, 6,
+ (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+ (GtkAttachOptions) (GTK_FILL), 10, 10);
+
+ /* Put it nicely together */
+
+ if (GdmBrowser && GdmLogo) {
+ gtk_table_attach (GTK_TABLE (table), bbox, 0, 2, 0, 1,
+ (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+ (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
+ gtk_table_attach (GTK_TABLE (table), logoframe, 0, 1, 1, 2,
+ (GtkAttachOptions) (0),
+ (GtkAttachOptions) (0), 0, 0);
+ gtk_table_attach (GTK_TABLE (table), stack, 1, 2, 1, 2,
+ (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+ (GtkAttachOptions) (GTK_FILL), 0, 0);
+ }
+ else if (GdmBrowser) {
+ gtk_table_attach (GTK_TABLE (table), bbox, 0, 1, 0, 1,
+ (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+ (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
+ gtk_table_attach (GTK_TABLE (table), stack, 0, 1, 1, 2,
+ (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+ (GtkAttachOptions) (GTK_FILL), 0, 0);
+ }
+ else if (GdmLogo) {
+ gtk_table_attach (GTK_TABLE (table), logoframe, 0, 1, 0, 1,
+ (GtkAttachOptions) (0),
+ (GtkAttachOptions) (0), 0, 0);
+ gtk_table_attach (GTK_TABLE (table), stack, 1, 2, 0, 1,
+ (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+ (GtkAttachOptions) (GTK_FILL), 0, 0);
+ }
+ else
+ gtk_table_attach (GTK_TABLE (table), stack, 0, 1, 0, 1,
+ (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+ (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+ gtk_widget_grab_focus (GTK_WIDGET (entry));
+ gtk_window_set_focus (GTK_WINDOW (login), entry);
+ gtk_window_set_policy (GTK_WINDOW (login), 1, 1, 1);
+ gtk_window_position (GTK_WINDOW (login), GTK_WIN_POS_CENTER);
+
+ if (GdmBrowser)
+ gtk_widget_set_usize (GTK_WIDGET (login),
+ (gint) gdk_screen_width() * 0.6,
+ (gint) gdk_screen_height() * 0.8);
+ else
+ gtk_widget_set_usize (GTK_WIDGET (login),
+ (gint) gdk_screen_width() * 0.5,
+ 0);
+
+ gtk_widget_show_all (GTK_WIDGET (login));
+ gdk_keyboard_grab (rootwin, TRUE, CurrentTime);
+}
+
+
+static gint
+gdm_login_sort_func (gpointer d1, gpointer d2)
+{
+ GdmLoginUser *a = d1;
+ GdmLoginUser *b = d2;
+
+ if (!d1 || !d2)
+ return (0);
+
+ return (strcmp (a->login, b->login));
+}
+
+
+static GdmLoginUser *
+gdm_login_user_alloc (gchar *logname, uid_t uid, gchar *homedir)
+{
+ GdmLoginUser *user;
+ gboolean fileok;
+ gchar *gnomedir = NULL;
+ GdkImlibImage *img = NULL;
+
+ user = g_new0 (GdmLoginUser, 1);
+
+ if (!user)
+ return (NULL);
+
+ user->uid = uid;
+ user->login = g_strdup (logname);
+ user->homedir = g_strdup (homedir);
+
+ gnomedir = g_strconcat (homedir, "/.gnome", NULL);
+
+ fileok = gdm_file_check ("gdm_login_user_alloc", uid, gnomedir, "photo",
+ FALSE, GdmUserMaxFile, GdmRelaxPerms);
+
+ if (fileok) {
+ gchar *filename;
+
+ filename = g_strconcat (gnomedir, "/photo", NULL);
+ img = gdk_imlib_load_image (filename);
+ g_free (filename);
+ }
+ else {
+ gchar *filename;
+
+ filename = g_strconcat (GdmGlobalFaceDir, "/", logname, NULL);
+
+ if (access (filename, R_OK) == 0)
+ img = gdk_imlib_load_image (filename);
+
+ g_free (filename);
+ }
+
+ g_free (gnomedir);
+
+ if(img) {
+ gint w, h;
+
+ w = img->rgb_width;
+ h = img->rgb_height;
+
+ if (w>h && w > GdmIconMaxWidth) {
+ h = h * ((gfloat) GdmIconMaxWidth/w);
+ w = GdmIconMaxWidth;
+ }
+ else if (h>GdmIconMaxHeight) {
+ w = w * ((gfloat) GdmIconMaxHeight/h);
+ h = GdmIconMaxHeight;
+ }
+
+ maxwidth = MAX (maxwidth, w);
+ user->picture = gdk_imlib_clone_scaled_image (img, w, h);
+ gdk_imlib_destroy_image (img);
+ }
+ else
+ user->picture=defface;
+
+ return (user);
+}
+
+
+static gint
+gdm_login_check_exclude (gchar *logname)
+{
+ GSList *list = exclude;
+
+ while (list && list->data) {
+ if (! strcasecmp (logname, (gchar *) list->data))
+ return (TRUE);
+
+ list = list->next;
+ }
+
+ return (FALSE);
+}
+
+
+static gint
+gdm_login_check_shell (gchar *usersh)
+{
+ gint found = 0;
+ gchar *csh;
+
+ setusershell ();
+
+ while ((csh = getusershell ()) != NULL)
+ if (! strcmp (csh, usersh))
+ found = 1;
+
+ endusershell ();
+
+ return (found);
+}
+
+
+static void
+gdm_login_users_init (void)
+{
+ GdmLoginUser *user;
+ struct passwd *pwent;
+
+ if (access (GdmDefaultFace, R_OK)) {
+ syslog (LOG_WARNING, _("Can't open DefaultImage: %s. Suspending face browser!"), GdmDefaultFace);
+ GdmBrowser = 0;
+ return;
+ }
+ else
+ defface = gdk_imlib_load_image (GdmDefaultFace);
+
+ if (GdmExclude) {
+ gchar *s = strtok (GdmExclude, ",");
+ exclude = g_slist_append (exclude, g_strdup (s));
+
+ while ((s = strtok (NULL, ",")))
+ exclude = g_slist_append (exclude, g_strdup (s));
+ }
+
+ pwent = getpwent();
+
+ while (pwent != NULL) {
+
+ if (pwent->pw_shell &&
+ gdm_login_check_shell (pwent->pw_shell) &&
+ !gdm_login_check_exclude (pwent->pw_name)) {
+
+ user = gdm_login_user_alloc(pwent->pw_name,
+ pwent->pw_uid,
+ pwent->pw_dir);
+
+ if (user)
+ users = g_list_insert_sorted(users, user,
+ (GCompareFunc) gdm_login_sort_func);
+ }
+
+ pwent = getpwent();
+ }
}
@@ -1105,45 +1486,50 @@ main (int argc, char *argv[])
/* Avoid creating ~gdm/.gnome stuff */
gnome_do_not_create_directories = TRUE;
- openlog("gdmlogin", LOG_PID, LOG_DAEMON);
+ openlog ("gdmlogin", LOG_PID, LOG_DAEMON);
- gnome_init("gdmlogin", VERSION, argc, argv);
- gnome_sound_shutdown ();
- gnome_preferences_set_dialog_position(GTK_WIN_POS_CENTER);
+ gnome_init ("gdmlogin", VERSION, argc, argv);
+ gnome_sound_shutdown();
+ gnome_preferences_set_dialog_position (GTK_WIN_POS_CENTER);
gdm_login_parse_config();
+
+ if (GdmBrowser)
+ gdm_login_users_init ();
+
gdm_login_gui_init();
+ if (GdmBrowser)
+ gdm_login_browser_update();
+
hup.sa_handler = (void *) gdm_login_done;
hup.sa_flags = 0;
sigemptyset(&hup.sa_mask);
- if(sigaction(SIGHUP, &hup, NULL) < 0)
- gdm_login_abort(_("main: Error setting up HUP signal handler"));
+ if (sigaction (SIGHUP, &hup, NULL) < 0)
+ gdm_login_abort (_("main: Error setting up HUP signal handler"));
- if(sigaction(SIGINT, &hup, NULL) < 0)
- gdm_login_abort(_("main: Error setting up INT signal handler"));
+ if (sigaction (SIGINT, &hup, NULL) < 0)
+ gdm_login_abort (_("main: Error setting up INT signal handler"));
- if(sigaction(SIGTERM, &hup, NULL) < 0)
- gdm_login_abort(_("main: Error setting up TERM signal handler"));
+ if (sigaction (SIGTERM, &hup, NULL) < 0)
+ gdm_login_abort (_("main: Error setting up TERM signal handler"));
- sigfillset(&mask);
- sigdelset(&mask, SIGTERM);
- sigdelset(&mask, SIGHUP);
- sigdelset(&mask, SIGINT);
+ sigfillset (&mask);
+ sigdelset (&mask, SIGTERM);
+ sigdelset (&mask, SIGHUP);
+ sigdelset (&mask, SIGINT);
- if(sigprocmask(SIG_SETMASK, &mask, NULL) == -1) {
- syslog(LOG_ERR, "Could not set signal mask!");
- exit(EXIT_FAILURE);
- }
-
- ctrlch = g_io_channel_unix_new(STDIN_FILENO);
- g_io_channel_init(ctrlch);
- g_io_add_watch(ctrlch,
- G_IO_IN|G_IO_PRI|G_IO_ERR|G_IO_HUP|G_IO_NVAL,
- (GIOFunc) gdm_login_ctrl_handler,
- NULL);
- g_io_channel_unref(ctrlch);
+ if (sigprocmask (SIG_SETMASK, &mask, NULL) == -1)
+ gdm_login_abort (_("Could not set signal mask!"));
+
+ ctrlch = g_io_channel_unix_new (STDIN_FILENO);
+ g_io_channel_init (ctrlch);
+ g_io_add_watch (ctrlch,
+ G_IO_IN|G_IO_PRI|G_IO_ERR|G_IO_HUP|G_IO_NVAL,
+ (GIOFunc) gdm_login_ctrl_handler,
+ NULL);
+ g_io_channel_unref (ctrlch);
gtk_main();
diff --git a/pixmaps/Makefile.am b/pixmaps/Makefile.am
index f5ca7b8a..2569e7eb 100644
--- a/pixmaps/Makefile.am
+++ b/pixmaps/Makefile.am
@@ -1,6 +1,6 @@
pixmapdir = $(datadir)/pixmaps
-BITMAPS = gdm.xpm nophoto.png
+BITMAPS = gdm.xpm nophoto.png nohost.png
pixmap_DATA = $(BITMAPS)
diff --git a/pixmaps/nohost.png b/pixmaps/nohost.png
new file mode 100644
index 00000000..fc316e87
--- /dev/null
+++ b/pixmaps/nohost.png
Binary files differ
diff --git a/po/POTFILES.in b/po/POTFILES.in
index cf5a1857..36443cb4 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -7,5 +7,4 @@ daemon/slave.c
daemon/verify.c
daemon/xdmcp.c
gui/gdmchooser.c
-gui/gdmgreeter.c
gui/gdmlogin.c
diff --git a/po/de.po b/po/de.po
index 4f03a3bc..704ecdf5 100644
--- a/po/de.po
+++ b/po/de.po
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: gdm2 \n"
-"POT-Creation-Date: 1999-07-23 22:18+0200\n"
+"POT-Creation-Date: 1999-08-12 00:12+0200\n"
"PO-Revision-Date: 1999-07-30 12:37+02:00\n"
"Last-Translator: Karsten Weiss <karsten@addx.au.s.shuttle.de>\n"
"Language-Team: de <de@li.org>\n"
@@ -14,64 +14,71 @@ msgstr ""
"Content-Type: text/plain; charset=iso-8859-1\n"
"Content-Transfer-Encoding: 8-bit\n"
-#: daemon/gdm.c:137
+#: daemon/gdm.c:163
#, c-format
msgid "gdm_config_parse: No configuration file: %s. Aborting."
msgstr "gdm_config_parse: Keine Konfigurationsdatei: %s. Breche ab."
-#: daemon/gdm.c:178
+#: daemon/gdm.c:211
msgid "gdm_config_parse: No greeter specified and default not found."
-msgstr "gdm_config_parse: Es wurde kein Greeter angegeben und die Voreinstellung nicht gefunden."
+msgstr ""
+"gdm_config_parse: Es wurde kein Greeter angegeben und die Voreinstellung "
+"nicht gefunden."
-#: daemon/gdm.c:190
+#: daemon/gdm.c:223
msgid "gdm_config_parse: No authdir specified and default not found."
-msgstr "gdm_config_parse: Es wurde kein authdir angegeben und die Voreinstellung nicht gefunden."
+msgstr ""
+"gdm_config_parse: Es wurde kein authdir angegeben und die Voreinstellung "
+"nicht gefunden."
-#: daemon/gdm.c:208
+#: daemon/gdm.c:241
msgid ""
"gdm_config_parse: No sessions directory specified and default not found."
-msgstr "gdm_config_parse: Kein Sitzungsverzeichnis angegeben und die Voreinstellung nicht gefunden."
+msgstr ""
+"gdm_config_parse: Kein Sitzungsverzeichnis angegeben und die Voreinstellung "
+"nicht gefunden."
-#: daemon/gdm.c:220
+#: daemon/gdm.c:253
msgid "gdm_config_parse: Invalid server line in config file. Ignoring!"
-msgstr "gdm_config_parse: Ungültige Server-Zeile in Konfigurationsdatei. Ignoriere."
+msgstr ""
+"gdm_config_parse: Ungültige Server-Zeile in Konfigurationsdatei. Ignoriere."
-#: daemon/gdm.c:226
+#: daemon/gdm.c:259
msgid ""
"gdm_config_parse: Xdmcp disabled and no local servers defined. Aborting!"
msgstr ""
"gdm_config_parse: Xdmcp abgeschalten und keine lokalen Server definiert. "
"Breche ab!"
-#: daemon/gdm.c:231
+#: daemon/gdm.c:264
#, c-format
msgid "gdm_config_parse: Can't find the gdm user (%s). Aborting!"
msgstr "gdm_config_parse: Kann den gdm-Benutzer (%s) nicht finden. Breche ab!"
-#: daemon/gdm.c:236
+#: daemon/gdm.c:269
msgid "gdm_config_parse: The gdm user should not be root. Aborting!"
msgstr "gdm_config_parse: Der gdm-Benutzer sollte nicht root sein. Breche ab."
-#: daemon/gdm.c:241
+#: daemon/gdm.c:274
#, c-format
msgid "gdm_config_parse: Can't find the gdm group (%s). Aborting!"
msgstr "gdm_config_parse: Kann die gdm-Gruppe (%s) nicht finden. Breche ab!"
-#: daemon/gdm.c:247
+#: daemon/gdm.c:279
msgid "gdm_config_parse: The gdm group should not be root. Aborting!"
msgstr "gdm_config_parse: Die gdm-Gruppe sollte nicht root sein. Breche ab."
-#: daemon/gdm.c:254
+#: daemon/gdm.c:286
#, c-format
msgid "gdm_config_parse: Authdir %s does not exist. Aborting."
msgstr "gdm_config_parse: Authdir %s existiert nicht. Breche ab."
-#: daemon/gdm.c:257
+#: daemon/gdm.c:289
#, c-format
msgid "gdm_config_parse: Authdir %s is not a directory. Aborting."
msgstr "gdm_config_parse: Authdir %s ist kein Verzeichnis. Breche ab."
-#: daemon/gdm.c:260
+#: daemon/gdm.c:292
#, c-format
msgid ""
"gdm_config_parse: Authdir %s is not owned by user %s, group %s. Aborting."
@@ -79,7 +86,7 @@ msgstr ""
"gdm_config_parse: Authdir %s gehört nicht Benutzer %s und Gruppe %s. Breche "
"ab."
-#: daemon/gdm.c:263
+#: daemon/gdm.c:296
#, c-format
msgid ""
"gdm_config_parse: Authdir %s has wrong permissions. Should be 750. Aborting."
@@ -87,48 +94,51 @@ msgstr ""
"gdm_config_parse: Authdir %s hat falsche Zugriffsrechte. Sollte 750 sein. "
"Breche ab."
-#: daemon/gdm.c:319
+#: daemon/gdm.c:354
#, c-format
msgid "gdm_display_manage: Failed forking gdm slave process for %d"
-msgstr "gdm_display_manage: Forken des gdm-Slave-Prozesses für %d fehlgeschlagen"
+msgstr ""
+"gdm_display_manage: Forken des gdm-Slave-Prozesses für %d fehlgeschlagen"
-#: daemon/gdm.c:398
+#: daemon/gdm.c:433
#, c-format
msgid "gdm_child_action: Aborting display %s"
msgstr "gdm_child_action: Breche Display %s ab"
-#: daemon/gdm.c:403
+#: daemon/gdm.c:438
msgid "gdm_child_action: Master rebooting..."
msgstr "gdm_child_action: Master bootet neu..."
-#: daemon/gdm.c:409
+#: daemon/gdm.c:444
#, c-format
msgid "gdm_child_action: Reboot failed: %s"
msgstr "gdm_child_action: Neustart fehlgeschlagen: %s"
-#: daemon/gdm.c:413
+#: daemon/gdm.c:448
msgid "gdm_child_action: Master halting..."
msgstr "gdm_child_action: Master hält an..."
-#: daemon/gdm.c:419
+#: daemon/gdm.c:454
#, c-format
msgid "gdm_child_action: Halt failed: %s"
msgstr "gdm_child_action: Anhalten fehlgeschlagen: %s"
-#: daemon/gdm.c:513
+#: daemon/gdm.c:551
msgid "gdm_daemonify: fork() failed!"
msgstr "gdm_daemonify: fork() fehlgeschlagen!"
-#: daemon/gdm.c:516
+#: daemon/gdm.c:554
#, c-format
msgid "gdm_daemonify: setsid() failed: %s!"
msgstr "gdm_daemonify: setsid() fehlgeschlagen: %s!"
-#: daemon/gdm.c:541
-msgid "Only root wants to run gdm\n"
+#. XDM compliant error message
+#: daemon/gdm.c:580
+#, fuzzy
+msgid "Only root wants to run x^hgdm\n"
msgstr "Nur root darf gdm starten\n"
-#: daemon/gdm.c:559
+#: daemon/gdm.c:601
msgid ""
"gdm already running. Aborting!\n"
"\n"
@@ -136,7 +146,7 @@ msgstr ""
"gdm läuft schon. Breche ab!\n"
"\n"
-#: daemon/gdm.c:564
+#: daemon/gdm.c:607
#, c-format
msgid ""
"According to %s, gdm was already running (%d),\n"
@@ -145,226 +155,198 @@ msgstr ""
"Laut %s lief gdm schon (%d),\n"
"scheint aber auf geheimnisvolle Art und Weise getötet worden zu sein.\n"
-#: daemon/gdm.c:585
+#: daemon/gdm.c:629
msgid "gdm_main: Error setting up TERM signal handler"
msgstr "gdm_main: Fehler beim Einrichten des TERM-Signalhandlers"
-#: daemon/gdm.c:588
+#: daemon/gdm.c:632
msgid "gdm_main: Error setting up INT signal handler"
msgstr "gdm_main: Fehler beim Einrichten des INT-Signalhandlers"
-#: daemon/gdm.c:596
+#: daemon/gdm.c:640
msgid "gdm_main: Error setting up CHLD signal handler"
msgstr "gdm_main: Fehler beim Einrichten des CHLD-Signalhandlers"
-#: daemon/auth.c:62
-#, c-format
-msgid "gdm_auth_secure_display: Could not unlink %s file: %s"
-msgstr "gdm_auth_secure_display: Konnte Datei %s nicht löschen: %s"
-
-#: daemon/auth.c:73
-#, c-format
-msgid ""
-"gdm_auth_secure_display: Error starting xauth process: %s. Running insecure!"
-msgstr "gdm_auth_secure_display: Fehler beim Starten des xauth-Prozesses: %s. Unsicherer Programmlauf!"
-
-#: daemon/auth.c:77
-msgid "gdm_auth_secure_display: Error forking xauth process. Running insecure!"
-msgstr "gdm_auth_secure_display: Fehler beim Abforken des xauth-Prozesses. Unsicherer Programmlauf!"
-
-#: daemon/auth.c:109
-#, c-format
-msgid "gdm_auth_user_add: Error starting xauth process: %s"
-msgstr "gdm_auth_user_add: Fehler beim Starten des xauth-Prozesses: %s"
-
-#: daemon/auth.c:113
-msgid "gdm_auth_user_add: Error forking xauth process."
-msgstr "gdm_auth_user_add: Fehler beim Forken des xauth-Prozesses."
-
-#: daemon/auth.c:143
-#, c-format
-msgid "gdm_auth_user_remove: Error starting xauth process: %s"
+#: daemon/auth.c:271
+#, fuzzy, c-format
+msgid "gdm_auth_user_remove: Ignoring suspicious looking cookie file %s"
msgstr "gdm_auth_user_remove: Fehler beim Starten des xauth Prozesses: %s"
-#: daemon/auth.c:147
-msgid "gdm_auth_user_remove: Error forking xauth process."
-msgstr "gdm_auth_user_remove: Fehler beim Forken des xauth-Prozesses."
+#: daemon/filecheck.c:58
+#, c-format
+msgid "%s: Directory %s does not exist."
+msgstr ""
-#: daemon/filecheck.c:50 daemon/filecheck.c:88
+#: daemon/filecheck.c:64 daemon/filecheck.c:102
#, c-format
msgid "%s: %s is not owned by uid %d."
msgstr "%s: %s gehört nicht der UID %d."
-#: daemon/filecheck.c:56 daemon/filecheck.c:95
+#: daemon/filecheck.c:70 daemon/filecheck.c:109
#, c-format
msgid "%s: %s is writable by group."
msgstr "%s: %s ist beschreibbar durch Gruppe."
-#: daemon/filecheck.c:62
+#: daemon/filecheck.c:76
#, c-format
msgid "%s: %s is writable by other."
msgstr "%s: %s ist beschreibbar durch Andere."
-#: daemon/filecheck.c:81
+#: daemon/filecheck.c:95
#, c-format
msgid "%s: %s is not a regular file."
msgstr "%s: %s ist keine reguläre Datei."
-#: daemon/filecheck.c:102
+#: daemon/filecheck.c:116
#, c-format
msgid "%s: %s is writable by group/other."
msgstr "%s: %s ist beschreibbar durch Gruppe/Andere."
-#: daemon/filecheck.c:109
+#: daemon/filecheck.c:123
#, c-format
msgid "%s: %s is bigger than sysadmin specified maximum file size."
-msgstr "%s: %s ist größer als die vom Systemadministrator festgelegte maximale Dateigröße."
+msgstr ""
+"%s: %s ist größer als die vom Systemadministrator festgelegte maximale "
+"Dateigröße."
-#: daemon/misc.c:121
+#: daemon/misc.c:128
#, c-format
msgid "gdm_exec_script: Failed starting: %s"
msgstr "gdm_exec_script: Start fehlgeschlagen: %s"
-#: daemon/misc.c:125
+#: daemon/misc.c:132
msgid "gdm_exec_script: Can't fork script process!"
msgstr "gdm_exec_script: Kann Skriptprozeß nicht forken!"
-#: daemon/misc.c:153
-#, c-format
-msgid "gdm_exec_command: Failed starting: %s"
-msgstr "gdm_exec_command: Fehler beim Starten von: %s"
-
-#: daemon/misc.c:157
-msgid "gdm_exec_command: Can't fork process!"
-msgstr "gdm_exec_command: Kann Prozeß nicht forken!"
-
-#: daemon/server.c:82 daemon/server.c:213
+#: daemon/server.c:84 daemon/server.c:207
msgid "gdm_server_start: Error setting up USR1 signal handler"
msgstr "gdm_server_start: Fehler beim Einrichten des USR1-Signalhandlers"
-#: daemon/server.c:99
+#: daemon/server.c:101
#, c-format
msgid "gdm_server_start: Could not open logfile for display %s!"
msgstr "gdm_server_start: Konnte Logdatei für Display %s nicht öffnen!"
-#: daemon/server.c:129
+#: daemon/server.c:130
msgid "gdm_server_start: Error setting USR1 to SIG_IGN"
msgstr "gdm_server_start: Fehler beim Versuch, USR1 auf SIG_IGN zu setzen"
-#: daemon/server.c:146
+#: daemon/server.c:147
#, c-format
msgid "gdm_server_start: Xserver not found: %s"
msgstr "gdm_server_start: X-Server nicht gefunden: %s"
-#: daemon/server.c:152
+#: daemon/server.c:153
msgid "gdm_server_start: Can't fork Xserver process!"
msgstr "gdm_server_start: Kann X-Serverprozeß nicht forken!"
-#: daemon/server.c:178
+#: daemon/server.c:179
#, c-format
msgid "gdm_server_stop: Could not unlink auth file: %s!"
msgstr "gdm_server_stop: Konnte auth-Datei nicht entfernen: %s!"
-#: daemon/server.c:237
+#: daemon/server.c:233
msgid "gdm_server_restart: Error setting up ALARM signal handler"
msgstr "gdm_server_restart: Fehler beim Einrichten des ALARM-Signalhandlers"
-#: daemon/slave.c:113
+#: daemon/slave.c:120
msgid "gdm_slave_init: Error setting up TERM/INT signal handler"
msgstr "gdm_slave_init: Fehler beim Einrichten des TERM/INT-Signalhandlers"
-#: daemon/slave.c:121
+#: daemon/slave.c:128
msgid "gdm_slave_init: Error setting up CHLD signal handler"
msgstr "gdm_slave_init: Fehler beim Einrichten des CHLD-Signalhandlers"
-#: daemon/slave.c:172
+#: daemon/slave.c:179
msgid "gdm_slave_greeter: Can't init pipe to gdmgreeter"
msgstr "gdm_slave_greeter: Kann Pipe zum gdmgreeter nicht initialisieren"
-#: daemon/slave.c:197
+#: daemon/slave.c:204
#, c-format
msgid "gdm_slave_greeter: Couldn't set groupid to %d"
msgstr "gdm_slave_greeter: Konnte Gruppen-ID nicht auf %d setzen"
-#: daemon/slave.c:200
+#: daemon/slave.c:207
#, c-format
msgid "gdm_slave_greeter: Couldn't set userid to %d"
msgstr "gdm_slave_greeter: Konnte User-ID nicht auf %d setzen"
-#: daemon/slave.c:210
+#: daemon/slave.c:217
#, c-format
msgid "gdm_slave_greeter: Error starting greeter on display %s"
msgstr "gdm_slave_greeter: Fehler beim Starten des Greeters auf Display %s"
-#: daemon/slave.c:213
+#: daemon/slave.c:220
msgid "gdm_slave_greeter: Can't fork gdmgreeter process"
msgstr "gdm_slave_greeter: Kann gdmgreeter-Prozeß nicht forken"
-#: daemon/slave.c:282
+#: daemon/slave.c:297
#, c-format
msgid "gdm_slave_session_init: User '%s' not found. Aborting."
msgstr "gdm_slave_session_init: Benutzer '%s' nicht gefunden. Breche ab."
-#: daemon/slave.c:301
+#: daemon/slave.c:321
msgid ""
"gdm_slave_session_init: Execution of PreSession script returned > 0. "
"Aborting."
msgstr ""
-"gdm_slave_session_init: Ausführung des PreSession-Skripts ergab einen Rückgabewert > 0. \n"
+"gdm_slave_session_init: Ausführung des PreSession-Skripts ergab einen "
+"Rückgabewert > 0. \n"
"Breche ab."
-#: daemon/slave.c:306
+#: daemon/slave.c:345
msgid "gdm_slave_session_init: Error forking user session"
msgstr "gdm_slave_session_init: Fehler beim Forken der Benutzersitzung"
-#: daemon/slave.c:314
+#: daemon/slave.c:353
#, c-format
msgid "gdm_slave_session_init: Could not setgid %d. Aborting."
msgstr "gdm_slave_session_init: Fehler bei setgid %d. Breche ab."
-#: daemon/slave.c:317
+#: daemon/slave.c:356
#, c-format
msgid "gdm_slave_session_init: initgroups() failed for %s. Aborting."
msgstr "gdm_slave_session_init: initgroups() fehlgeschlagen für %s. Breche ab."
-#: daemon/slave.c:320
+#: daemon/slave.c:359
#, c-format
msgid "gdm_slave_session_init: Could not become %s. Aborting."
msgstr "gdm_slave_session_init: setuid %s fehlgeschlagen. Breche ab."
-#: daemon/slave.c:373
+#: daemon/slave.c:405
#, c-format
msgid "gdm_slave_session_init: Could not start session `%s'"
msgstr "gdm_slave_session_init: Konnte Session nicht starten '%s'"
-#: daemon/slave.c:547
+#: daemon/slave.c:580
#, c-format
msgid "gdm_slave_windows_kill_ioerror_handler: Fatal X error - Restarting %s"
-msgstr "gdm_slave_windows_kill_ioerror_handler: Fataler X-Fehler - Starte %s erneut"
+msgstr ""
+"gdm_slave_windows_kill_ioerror_handler: Fataler X-Fehler - Starte %s erneut"
-#: daemon/slave.c:579
+#: daemon/slave.c:612
msgid "gdm_slave_xsync_ping: Error setting up ALARM signal handler"
msgstr "gdm_slave_xsync_ping: Fehler beim Einrichten des ALARM-Signalhandlers"
-#: daemon/verify.c:124 daemon/verify.c:213 gui/gdmgreeter.c:1363
+#: daemon/verify.c:124 daemon/verify.c:215 gui/gdmlogin.c:1222
msgid "Login:"
msgstr "Login:"
-#: daemon/verify.c:132 daemon/verify.c:159 daemon/verify.c:217
+#: daemon/verify.c:132 daemon/verify.c:159 daemon/verify.c:219
#, c-format
msgid "Couldn't authenticate %s"
msgstr "Konnte %s nicht beglaubigen"
-#: daemon/verify.c:135 daemon/verify.c:220
+#: daemon/verify.c:135 daemon/verify.c:222
msgid "User unknown"
msgstr "Benutzer unbekannt"
-#: daemon/verify.c:141 daemon/verify.c:226
+#: daemon/verify.c:141 daemon/verify.c:228
#, c-format
msgid "Root login disallowed on display '%s'"
msgstr "Root-Login auf Display '%s' verboten"
-#: daemon/verify.c:144 daemon/verify.c:229
+#: daemon/verify.c:144 daemon/verify.c:231
msgid "Root login disallowed"
msgstr "Root-Login verboten"
@@ -392,133 +374,130 @@ msgstr "Konnte Berechtigungsnachweise für %s nicht setzen"
msgid "Couldn't open session for %s"
msgstr "Konnte Session für %s nicht öffnen"
-#: daemon/verify.c:245 gui/gdmgreeter.c:1369
+#: daemon/verify.c:249
msgid "Password:"
msgstr "Passwort:"
-#: daemon/verify.c:250
+#: daemon/verify.c:254
msgid "Incorrect password"
msgstr "Falsches Passwort"
-#: daemon/xdmcp.c:172
+#: daemon/xdmcp.c:174
#, c-format
msgid "gdm_xdmcp_init: Could not get server hostname: %s!"
msgstr "gdm_xdmcp_init: Konnte Server-Rechnername nicht ermitteln: %s!"
-#: daemon/xdmcp.c:183
+#: daemon/xdmcp.c:185
msgid "gdm_xdmcp_init: Could not create socket!"
msgstr "gdm_xdmcp_init: Konnte keinen Socket erzeugen!"
-#: daemon/xdmcp.c:190
+#: daemon/xdmcp.c:192
msgid "gdm_xdmcp_init: Could not bind to XDMCP socket!"
msgstr "gdm_xdmcp_init: Konnte nicht an XDMCP-Socket binden!"
-#: daemon/xdmcp.c:225
+#: daemon/xdmcp.c:230
msgid "gdm_xdmcp_decode: Could not create XDMCP buffer!"
msgstr "gdm_xdmcp_decode: Konnte keine XDMCP-Puffer erzeugen!"
-#: daemon/xdmcp.c:230
+#: daemon/xdmcp.c:235
msgid "gdm_xdmcp_decode: Could not read XDMCP header!"
msgstr "gdm_xdmcp_decode: Konnte XDMCP-Header nicht lesen!"
-#: daemon/xdmcp.c:235
+#: daemon/xdmcp.c:240
msgid "gdm_xdmcp_decode: Incorrect XDMCP version!"
msgstr "gdm_xdmcp_decode: Falsche XDMCP-Version!"
-#: daemon/xdmcp.c:273
+#: daemon/xdmcp.c:276
#, c-format
msgid "gdm_xdmcp_decode_packet: Unknown opcode from host %s"
msgstr "gdm_xdmcp_decode_packet: Unbekannter Opcode von Host %s"
-#: daemon/xdmcp.c:291
+#: daemon/xdmcp.c:294
msgid "gdm_xdmcp_handle_query: Could not extract authlist from packet"
msgstr "gdm_xdmcp_handle_query: Konnte authlist nicht aus Paket entnehmen"
-#: daemon/xdmcp.c:302
+#: daemon/xdmcp.c:305
msgid "gdm_xdmcp_handle_query: Error in checksum"
msgstr "gdm_xdmcp_handle_query: Fehler in Prüfsumme"
-#: daemon/xdmcp.c:333
+#: daemon/xdmcp.c:336
msgid "gdm_xdmcp_handle_forward_query: Could not read display address"
msgstr "gdm_xdmcp_handle_forward_query: Konnte Displayadresse nicht lesen"
-#: daemon/xdmcp.c:339
+#: daemon/xdmcp.c:342
msgid "gdm_xdmcp_handle_forward_query: Could not read display port number"
msgstr "gdm_xdmcp_handle_forward_query: Konnte Display-Portnummer nicht lesen"
-#: daemon/xdmcp.c:345
+#: daemon/xdmcp.c:348
msgid "gdm_xdmcp_handle_forward_query: Could not extract authlist from packet"
-msgstr "gdm_xdmcp_handle_forward_query: Konnte authlist nicht aus Paket entnehmen"
+msgstr ""
+"gdm_xdmcp_handle_forward_query: Konnte authlist nicht aus Paket entnehmen"
-#: daemon/xdmcp.c:360
+#: daemon/xdmcp.c:363
msgid "gdm_xdmcp_handle_forward_query: Error in checksum"
msgstr "gdm_xdmcp_handle_forward_query: Fehler in Prüfsumme"
-#: daemon/xdmcp.c:399
-msgid "GNOME"
-msgstr "GNOME"
-
-#: daemon/xdmcp.c:423
+#: daemon/xdmcp.c:426
#, c-format
msgid "Denied XDMCP query from host %s"
msgstr "XDMCP-Anfrage von Rechner %s abgelehnt"
-#: daemon/xdmcp.c:425
+#: daemon/xdmcp.c:428
msgid "Display not authorized to connect"
msgstr "Display ist nicht autorisiert zu verbinden"
-#: daemon/xdmcp.c:458
+#: daemon/xdmcp.c:461
#, c-format
msgid "gdm_xdmcp_handle_request: Got REQUEST from banned host %s"
msgstr "gdm_xdmcp_handle_request: REQUEST von gesperrtem Host %s bekommen"
-#: daemon/xdmcp.c:465
+#: daemon/xdmcp.c:468
msgid "gdm_xdmcp_handle_request: Could not read Display Number"
msgstr "gdm_xdmcp_handle_request: Konnte Displaynummer nicht lesen"
-#: daemon/xdmcp.c:471
+#: daemon/xdmcp.c:474
msgid "gdm_xdmcp_handle_request: Could not read Connection Type"
msgstr "gdm_xdmcp_handle_request: Konnte Verbindungstyp nicht lesen"
-#: daemon/xdmcp.c:477
+#: daemon/xdmcp.c:480
msgid "gdm_xdmcp_handle_request: Could not read Client Address"
msgstr "gdm_xdmcp_handle_request: Konnte Clientadresse nicht lesen"
-#: daemon/xdmcp.c:483
+#: daemon/xdmcp.c:486
msgid "gdm_xdmcp_handle_request: Could not read Authentication Names"
msgstr "gdm_xdmcp_handle_request: Konnte Authentikationsnamen nicht lesen"
-#: daemon/xdmcp.c:489
+#: daemon/xdmcp.c:492
msgid "gdm_xdmcp_handle_request: Could not read Authentication Data"
msgstr "gdm_xdmcp_handle_request: Konnte Authentikationsdaten nicht lesen"
-#: daemon/xdmcp.c:495
+#: daemon/xdmcp.c:498
msgid "gdm_xdmcp_handle_request: Could not read Authorization List"
msgstr "gdm_xdmcp_handle_request: Konnte Autorisationsliste nicht lesen"
-#: daemon/xdmcp.c:506
+#: daemon/xdmcp.c:509
msgid "gdm_xdmcp_handle_request: Could not read Manufacturer ID"
msgstr "gdm_xdmcp_handle_request: Konnte Manufacturer ID nicht lesen"
-#: daemon/xdmcp.c:524
+#: daemon/xdmcp.c:527
#, c-format
msgid "gdm_xdmcp_handle_request: Failed checksum from %s"
msgstr "gdm_xdmcp_handle_request: Falsche Prüfsumme von %s"
-#: daemon/xdmcp.c:642
+#: daemon/xdmcp.c:640
#, c-format
msgid "gdm_xdmcp_handle_manage: Got Manage from banned host %s"
msgstr "gdm_xdmcp_handle_manage: Manage von gesperrtem Host %s erhalten"
-#: daemon/xdmcp.c:649
+#: daemon/xdmcp.c:647
msgid "gdm_xdmcp_handle_manage: Could not read Session ID"
msgstr "gdm_xdmcp_handle_manage: Konnte Session ID nicht lesen"
-#: daemon/xdmcp.c:655
+#: daemon/xdmcp.c:653
msgid "gdm_xdmcp_handle_manage: Could not read Display Number"
msgstr "gdm_xdmcp_handle_manage: Konnte Displaynummer nicht lesen"
-#: daemon/xdmcp.c:664
+#: daemon/xdmcp.c:662
msgid "gdm_xdmcp_manage: Could not read Display Class"
msgstr "gdm_xdmcp_manage: Konnte Displayklasse nicht lesen"
@@ -540,273 +519,301 @@ msgstr "gdm_xdmcp_handle_keepalive: Konnte Displaynummer nicht lesen"
msgid "gdm_xdmcp_handle_keepalive: Could not read Session ID"
msgstr "gdm_xdmcp_handle_keepalive: Konnte Session ID nicht lesen"
-#: gui/gdmchooser.c:336
+#: gui/gdmchooser.c:338
#, c-format
msgid "gdm_chooser_parse_config: No configuration file: %s. Aborting."
msgstr "gdm_xdmcp_handle_keepalive: Keine Konfigurationsdatei: %s. Breche ab."
-#: gui/gdmchooser.c:448
+#: gui/gdmchooser.c:447
#, c-format
msgid "Can't open default host icon: %s"
msgstr "Kann das voreingestellte Rechnericon nicht öffnen: %s"
#. Buttons
-#: gui/gdmchooser.c:515
+#: gui/gdmchooser.c:514
msgid "Connect"
msgstr "Verbinden"
-#: gui/gdmchooser.c:522
+#: gui/gdmchooser.c:521
msgid "Rescan"
msgstr "Neu einlesen"
-#: gui/gdmchooser.c:528
+#: gui/gdmchooser.c:527
msgid "Cancel"
msgstr "Abbrechen"
-#: gui/gdmchooser.c:579 gui/gdmgreeter.c:1672 gui/gdmlogin.c:1121
-msgid "main: Error setting up HUP signal handler"
-msgstr "main: Fehler beim Einrichten des HUP-Signalhandlers"
-
-#: gui/gdmchooser.c:582 gui/gdmgreeter.c:1675 gui/gdmlogin.c:1124
-msgid "main: Error setting up INT signal handler"
-msgstr "main: Fehler beim Einrichten des INT-Signalhandlers"
-
-#: gui/gdmchooser.c:585 gui/gdmgreeter.c:1678 gui/gdmlogin.c:1127
-msgid "main: Error setting up TERM signal handler"
-msgstr "main: Fehler beim Einrichten des TERM-Signalhandlers"
+#: gui/gdmchooser.c:578
+#, fuzzy
+msgid "gdm_signals_init: Error setting up HUP signal handler"
+msgstr "gdm_slave_init: Fehler beim Einrichten des CHLD-Signalhandlers"
-#: gui/gdmgreeter.c:155
-msgid "Gnome Display Manager"
-msgstr "Gnome Display Manager"
+#: gui/gdmchooser.c:581
+#, fuzzy
+msgid "gdm_signals_init: Error setting up INT signal handler"
+msgstr "gdm_main: Fehler beim Einrichten des INT-Signalhandlers"
-#: gui/gdmgreeter.c:157
-msgid "Copyright Martin K. Petersen (C) 1998, 1999"
-msgstr "Copyright Martin K. Petersen (C) 1998, 1999"
+#: gui/gdmchooser.c:584
+#, fuzzy
+msgid "gdm_signals_init: Error setting up TERM signal handler"
+msgstr "gdm_main: Fehler beim Einrichten des TERM-Signalhandlers"
-#: gui/gdmgreeter.c:159 gui/gdmlogin.c:346
-msgid ""
-"gdm manages local and remote displays and provides the user with a login "
-"window."
+#: gui/gdmchooser.c:592 gui/gdmlogin.c:1524
+msgid "Could not set signal mask!"
msgstr ""
-"gdm verwaltet lokale und entfernte Displays und stellt dem Benutzer ein "
-"Login-Fenster bereit."
-#: gui/gdmgreeter.c:194 gui/gdmlogin.c:274
+#: gui/gdmlogin.c:276
msgid "gdm_parse_enriched_string: String too long!"
msgstr "gdm_parse_enriched_string: String ist zu lang!"
-#: gui/gdmgreeter.c:195 gui/gdmlogin.c:275
+#: gui/gdmlogin.c:277
msgid "Welcome to "
msgstr "Willkommen auf "
-#: gui/gdmgreeter.c:199 gui/gdmlogin.c:279
+#: gui/gdmlogin.c:281
msgid "gdm_parse_enriched_string: Could not malloc temporary buffer!"
msgstr "gdm_parse_enriched_string: Konnte temporären Buffer nicht allozieren!"
-#: gui/gdmgreeter.c:273
-msgid "Logo not found. No image will be displayed!"
-msgstr "Logo wurde nicht gefunden. Es wird kein Bild angezeigt werden!"
+#: gui/gdmlogin.c:358
+msgid "Are you sure you want to reboot the machine?"
+msgstr "Sind Sie sicher, daß Sie den Rechner neu starten möchten?"
-#: gui/gdmgreeter.c:299
-#, c-format
-msgid "gdm_greeter_parse_config: No configuration file: %s. Aborting."
-msgstr "gdm_greeter_parse_config: Keine Konfigurationsdatei: %s. Breche ab."
+#: gui/gdmlogin.c:371
+msgid "Are you sure you want to halt the machine?"
+msgstr "Sind Sie sicher, daß Sie den Rechner anhalten möchten?"
-#: gui/gdmgreeter.c:323 gui/gdmlogin.c:422
+#: gui/gdmlogin.c:388
#, c-format
-msgid "messages/welcome=Welcome to %h"
-msgstr "messages/welcome=Willkommen auf %h"
+msgid "gdm_login_parse_config: No configuration file: %s. Aborting."
+msgstr "gdm_login_parse_config: Keine Konfigurationsdatei: %s. Breche ab."
-#: gui/gdmgreeter.c:424 gui/gdmlogin.c:546 gui/gdmlogin.c:576
+#: gui/gdmlogin.c:520
#, c-format
msgid ""
-"You have chosen %s for this session, but your default setting is %s.\n"
+"Your preferred session type %s is not installed on this machine.\n"
"Do you wish to make %s the default for future sessions?"
msgstr ""
-"Sie haben %s für diese Sitzung ausgewählt. Ihre Voreinstellung ist aber %s.\n"
+"Ihr bevorzugter Sitzungstyp %s ist auf diesem Rechner nicht installiert.\n"
"Möchten Sie %s zu Ihrer Voreinstellung für zukünftige Sitzungen machen?"
-#: gui/gdmgreeter.c:432
+#: gui/gdmlogin.c:539 gui/gdmlogin.c:569
#, c-format
msgid ""
-"Your previous session type %s is not installed on this machine.\n"
+"You have chosen %s for this session, but your default setting is %s.\n"
"Do you wish to make %s the default for future sessions?"
msgstr ""
-"Ihr vorheriger Sitzungstyp %s ist auf diesem Rechner nicht installiert.\n"
+"Sie haben %s für diese Sitzung ausgewählt. Ihre Voreinstellung ist aber %s.\n"
"Möchten Sie %s zu Ihrer Voreinstellung für zukünftige Sitzungen machen?"
-#: gui/gdmgreeter.c:440
+#: gui/gdmlogin.c:625
#, c-format
-msgid ""
-"Your previous session type %s is not installed on this machine.\n"
-"You will be logged in using the %s environment."
-msgstr ""
-"Ihr vorheriger Sitzungstyp %s ist auf diesem Rechner nicht installiert.\n"
-"Sie werden mit der Umgebung %s eingeloggt werden."
-
-#: gui/gdmgreeter.c:453
-#, c-format
-msgid ""
-"You have chosen the language %s for this session, but your default setting "
-"is %s.\n"
-"Do you wish to make %s the default language for future sessions?"
-msgstr ""
-"Sie haben die Sprache %s für diese Sitzung ausgewählt. Ihre Voreinstellung ist %s.\n"
-"Möchten Sie %s zu Ihrer voreingestellten Sprache für zukünftige Sitzungen machen?"
-
-#: gui/gdmgreeter.c:461
-#, c-format
-msgid ""
-"Your previous language %s is not installed on this machine.\n"
-"Do you wish to make %s the default language for future sessions?"
-msgstr ""
-"Ihre vorherige Sprache %s ist auf diesem Rechner nicht installiert.\n"
-"Möchten Sie %s zu Ihrer voreingestellten Sprache für zukünftige Sitzungen machen?"
-
-#: gui/gdmgreeter.c:469
-#, c-format
-msgid ""
-"Your previous language %s is not installed on this machine.\n"
-"Your environment will be %s."
-msgstr ""
-"Ihre vorherige Sprache %s ist auf diesem Rechner nicht installiert.\n"
-"Ihre Umgebung wird %s sein."
-
-#: gui/gdmgreeter.c:500
-msgid "Invalid username or password!"
-msgstr "Benutzername oder Passwort ungültig!"
-
-#: gui/gdmgreeter.c:526 gui/gdmlogin.c:374
-msgid "Are you sure you want to reboot the machine?"
-msgstr "Sind Sie sicher, daß Sie den Rechner neu starten möchten?"
+msgid "%s session selected"
+msgstr "Sitzung %s ausgewählt"
-#: gui/gdmgreeter.c:555 gui/gdmlogin.c:386
-msgid "Are you sure you want to halt the machine?"
-msgstr "Sind Sie sicher, daß Sie den Rechner anhalten möchten?"
+#: gui/gdmlogin.c:641 gui/gdmlogin.c:738
+msgid "Last"
+msgstr "Letzte"
-#: gui/gdmgreeter.c:812
-msgid "gdm_greeter_session_init: Session script directory not found!"
-msgstr "gdm_greeter_session_init: Sitzungs-Skript Verzeichnis nicht gefunden!"
+#: gui/gdmlogin.c:656
+msgid "gdm_login_session_init: Session script directory not found!"
+msgstr "gdm_login_session_init: Sitzungsskript-Verzeichnis nicht gefunden!"
-#: gui/gdmgreeter.c:865 gui/gdmlogin.c:713
+#: gui/gdmlogin.c:703
msgid "No session scripts found. Aborting!"
msgstr "Keine Sitzungs-Skripte gefunden. Breche ab!"
-#: gui/gdmgreeter.c:869 gui/gdmlogin.c:717
+#: gui/gdmlogin.c:707
#, c-format
msgid "No default session link found. Using %s.\n"
msgstr "Keinen Link zur voreingestellten Sitzung gefunden. Benutze %s.\n"
-#. Login button
-#: gui/gdmgreeter.c:1029
-msgid "Login"
-msgstr "Login"
+#: gui/gdmlogin.c:721
+#, c-format
+msgid "%s language selected"
+msgstr "Sprache %s ausgewählt"
-#. Init sessions menu
-#: gui/gdmgreeter.c:1041
-msgid "Sessions"
-msgstr "Sitzungen"
+#: gui/gdmlogin.c:753
+msgid "A-M"
+msgstr "A-M"
-#. Language selection support
-#: gui/gdmgreeter.c:1048
-msgid "Languages"
-msgstr "Sprachen"
+#: gui/gdmlogin.c:759
+msgid "N-Z"
+msgstr "N-Z"
-#: gui/gdmgreeter.c:1058 gui/gdmlogin.c:979
+#: gui/gdmlogin.c:765
+msgid "Other"
+msgstr "Andere"
+
+#: gui/gdmlogin.c:1061
+msgid "Session"
+msgstr "Sitzung"
+
+#: gui/gdmlogin.c:1068
+msgid "Language"
+msgstr "Sprache"
+
+#: gui/gdmlogin.c:1075
msgid "Reboot..."
msgstr "Neustart..."
-#: gui/gdmgreeter.c:1064 gui/gdmlogin.c:985
+#: gui/gdmlogin.c:1082
msgid "Halt..."
msgstr "Herunterfahren..."
-#: gui/gdmgreeter.c:1071
-msgid "Suspend"
-msgstr "Schlafmodus"
-
-#: gui/gdmgreeter.c:1078 gui/gdmlogin.c:991
+#: gui/gdmlogin.c:1089
msgid "System"
msgstr "System"
-#: gui/gdmgreeter.c:1086 gui/gdmlogin.c:1005
+#: gui/gdmlogin.c:1097
#, c-format
msgid "Can't open icon file: %s. Suspending iconify feature!"
msgstr "Kann Icondatei nicht öffnen: %s. Minimierung nicht möglich!"
-#: gui/gdmgreeter.c:1090 gui/gdmlogin.c:1009
+#: gui/gdmlogin.c:1100
msgid "Iconify"
msgstr "Minimieren"
-#. Option button
-#: gui/gdmgreeter.c:1099
-msgid "Options..."
-msgstr "Optionen..."
-
-#: gui/gdmgreeter.c:1531
-#, c-format
-msgid "Can't open NofaceImageFile: %s. Suspending face browser!"
-msgstr "Kann NofaceImageFile nicht öffnen: %s. Gesichterliste abgeschaltet!"
-
-#: gui/gdmgreeter.c:1686
-msgid "main: Error setting up USR1 signal handler"
-msgstr "main: Fehler beim Einrichten des USR1-Signalhandlers"
-
-#: gui/gdmgreeter.c:1694
-msgid "main: Error setting up USR2 signal handler"
-msgstr "main: Fehler beim Einrichten des USR2-Signalhandlers"
-
-#: gui/gdmlogin.c:402
-#, c-format
-msgid "gdm_login_parse_config: No configuration file: %s. Aborting."
-msgstr "gdm_login_parse_config: Keine Konfigurationsdatei: %s. Breche ab."
-
-#: gui/gdmlogin.c:527
-#, c-format
-msgid ""
-"Your preferred session type %s is not installed on this machine.\n"
-"Do you wish to make %s the default for future sessions?"
+#: gui/gdmlogin.c:1257
+msgid "Please enter your login"
msgstr ""
-"Ihr bevorzugter Sitzungstyp %s ist auf diesem Rechner nicht installiert.\n"
-"Möchten Sie %s zu Ihrer Voreinstellung für zukünftige Sitzungen machen?"
-
-#: gui/gdmlogin.c:635
-#, c-format
-msgid "%s session selected"
-msgstr "Sitzung %s ausgewählt"
-
-#: gui/gdmlogin.c:651 gui/gdmlogin.c:742
-msgid "Last"
-msgstr "Letzte"
-
-#: gui/gdmlogin.c:666
-msgid "gdm_login_session_init: Session script directory not found!"
-msgstr "gdm_login_session_init: Sitzungsskript-Verzeichnis nicht gefunden!"
-
-#: gui/gdmlogin.c:728
-#, c-format
-msgid "%s language selected"
-msgstr "Sprache %s ausgewählt"
-#: gui/gdmlogin.c:755
-msgid "A-M"
-msgstr "A-M"
-
-#: gui/gdmlogin.c:761
-msgid "N-Z"
-msgstr "N-Z"
+#: gui/gdmlogin.c:1442
+#, fuzzy, c-format
+msgid "Can't open DefaultImage: %s. Suspending face browser!"
+msgstr "Kann NofaceImageFile nicht öffnen: %s. Gesichterliste abgeschaltet!"
-#: gui/gdmlogin.c:767
-msgid "Other"
-msgstr "Andere"
+#: gui/gdmlogin.c:1510
+msgid "main: Error setting up HUP signal handler"
+msgstr "main: Fehler beim Einrichten des HUP-Signalhandlers"
-#: gui/gdmlogin.c:965
-msgid "Session"
-msgstr "Sitzung"
+#: gui/gdmlogin.c:1513
+msgid "main: Error setting up INT signal handler"
+msgstr "main: Fehler beim Einrichten des INT-Signalhandlers"
-#: gui/gdmlogin.c:972
-msgid "Language"
-msgstr "Sprache"
+#: gui/gdmlogin.c:1516
+msgid "main: Error setting up TERM signal handler"
+msgstr "main: Fehler beim Einrichten des TERM-Signalhandlers"
-#: gui/gdmlogin.c:998
-msgid "Host chooser"
-msgstr "Rechnerwahl"
+#~ msgid "gdm_auth_secure_display: Could not unlink %s file: %s"
+#~ msgstr "gdm_auth_secure_display: Konnte Datei %s nicht löschen: %s"
+
+#~ msgid ""
+#~ "gdm_auth_secure_display: Error starting xauth process: %s. Running insecure!"
+#~ msgstr ""
+#~ "gdm_auth_secure_display: Fehler beim Starten des xauth-Prozesses: %s. "
+#~ "Unsicherer Programmlauf!"
+
+#~ msgid ""
+#~ "gdm_auth_secure_display: Error forking xauth process. Running insecure!"
+#~ msgstr ""
+#~ "gdm_auth_secure_display: Fehler beim Abforken des xauth-Prozesses. "
+#~ "Unsicherer Programmlauf!"
+
+#~ msgid "gdm_auth_user_add: Error starting xauth process: %s"
+#~ msgstr "gdm_auth_user_add: Fehler beim Starten des xauth-Prozesses: %s"
+
+#~ msgid "gdm_auth_user_add: Error forking xauth process."
+#~ msgstr "gdm_auth_user_add: Fehler beim Forken des xauth-Prozesses."
+
+#~ msgid "gdm_auth_user_remove: Error forking xauth process."
+#~ msgstr "gdm_auth_user_remove: Fehler beim Forken des xauth-Prozesses."
+
+#~ msgid "gdm_exec_command: Failed starting: %s"
+#~ msgstr "gdm_exec_command: Fehler beim Starten von: %s"
+
+#~ msgid "gdm_exec_command: Can't fork process!"
+#~ msgstr "gdm_exec_command: Kann Prozeß nicht forken!"
+
+#~ msgid "GNOME"
+#~ msgstr "GNOME"
+
+#~ msgid "Gnome Display Manager"
+#~ msgstr "Gnome Display Manager"
+
+#~ msgid "Copyright Martin K. Petersen (C) 1998, 1999"
+#~ msgstr "Copyright Martin K. Petersen (C) 1998, 1999"
+
+#~ msgid ""
+#~ "gdm manages local and remote displays and provides the user with a login "
+#~ "window."
+#~ msgstr ""
+#~ "gdm verwaltet lokale und entfernte Displays und stellt dem Benutzer ein "
+#~ "Login-Fenster bereit."
+
+#~ msgid "Logo not found. No image will be displayed!"
+#~ msgstr "Logo wurde nicht gefunden. Es wird kein Bild angezeigt werden!"
+
+#~ msgid "gdm_greeter_parse_config: No configuration file: %s. Aborting."
+#~ msgstr "gdm_greeter_parse_config: Keine Konfigurationsdatei: %s. Breche ab."
+
+#~ msgid "messages/welcome=Welcome to %h"
+#~ msgstr "messages/welcome=Willkommen auf %h"
+
+#~ msgid ""
+#~ "Your previous session type %s is not installed on this machine.\n"
+#~ "Do you wish to make %s the default for future sessions?"
+#~ msgstr ""
+#~ "Ihr vorheriger Sitzungstyp %s ist auf diesem Rechner nicht installiert.\n"
+#~ "Möchten Sie %s zu Ihrer Voreinstellung für zukünftige Sitzungen machen?"
+
+#~ msgid ""
+#~ "Your previous session type %s is not installed on this machine.\n"
+#~ "You will be logged in using the %s environment."
+#~ msgstr ""
+#~ "Ihr vorheriger Sitzungstyp %s ist auf diesem Rechner nicht installiert.\n"
+#~ "Sie werden mit der Umgebung %s eingeloggt werden."
+
+#~ msgid ""
+#~ "You have chosen the language %s for this session, but your default setting "
+#~ "is %s.\n"
+#~ "Do you wish to make %s the default language for future sessions?"
+#~ msgstr ""
+#~ "Sie haben die Sprache %s für diese Sitzung ausgewählt. Ihre Voreinstellung "
+#~ "ist %s.\n"
+#~ "Möchten Sie %s zu Ihrer voreingestellten Sprache für zukünftige Sitzungen "
+#~ "machen?"
+
+#~ msgid ""
+#~ "Your previous language %s is not installed on this machine.\n"
+#~ "Do you wish to make %s the default language for future sessions?"
+#~ msgstr ""
+#~ "Ihre vorherige Sprache %s ist auf diesem Rechner nicht installiert.\n"
+#~ "Möchten Sie %s zu Ihrer voreingestellten Sprache für zukünftige Sitzungen "
+#~ "machen?"
+
+#~ msgid ""
+#~ "Your previous language %s is not installed on this machine.\n"
+#~ "Your environment will be %s."
+#~ msgstr ""
+#~ "Ihre vorherige Sprache %s ist auf diesem Rechner nicht installiert.\n"
+#~ "Ihre Umgebung wird %s sein."
+
+#~ msgid "Invalid username or password!"
+#~ msgstr "Benutzername oder Passwort ungültig!"
+
+#~ msgid "gdm_greeter_session_init: Session script directory not found!"
+#~ msgstr ""
+#~ "gdm_greeter_session_init: Sitzungs-Skript Verzeichnis nicht gefunden!"
+
+#~ msgid "Login"
+#~ msgstr "Login"
+
+#~ msgid "Sessions"
+#~ msgstr "Sitzungen"
+
+#~ msgid "Languages"
+#~ msgstr "Sprachen"
+
+#~ msgid "Suspend"
+#~ msgstr "Schlafmodus"
+
+#~ msgid "Options..."
+#~ msgstr "Optionen..."
+
+#~ msgid "main: Error setting up USR1 signal handler"
+#~ msgstr "main: Fehler beim Einrichten des USR1-Signalhandlers"
+
+#~ msgid "main: Error setting up USR2 signal handler"
+#~ msgstr "main: Fehler beim Einrichten des USR2-Signalhandlers"
+
+#~ msgid "Host chooser"
+#~ msgstr "Rechnerwahl"
diff --git a/po/es.po b/po/es.po
index ec04e8b2..7849a246 100644
--- a/po/es.po
+++ b/po/es.po
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Project-Id-Version: gdm2 2.0.0\n"
-"POT-Creation-Date: 1999-04-08 02:02+0200\n"
+"POT-Creation-Date: 1999-08-12 00:12+0200\n"
"PO-Revision-Date: 1998-11-21 01:59:37+0100\n"
"Last-Translator: Pablo Saratxaga <srtxg@chanae.alphanet.ch>\n"
"Language-Team: \n"
@@ -15,70 +15,73 @@ msgstr ""
"Files: src/gdm.c src/gdmauth.c src/gdmgreeter.c src/gdmslave.c "
"src/gdmverify.c\n"
-#: daemon/gdm.c:136
+#: daemon/gdm.c:163
#, c-format
msgid "gdm_config_parse: No configuration file: %s. Aborting."
msgstr "gdm_config_parse: Ningún archivo de configuración: %s. Abortando."
-#: daemon/gdm.c:177
+#: daemon/gdm.c:211
msgid "gdm_config_parse: No greeter specified and default not found."
msgstr ""
"gdm_config_parse: no se especificó un programa de bienvenida y no se "
"encontró a gdmgreeter"
-#: daemon/gdm.c:189
+#: daemon/gdm.c:223
msgid "gdm_config_parse: No authdir specified and default not found."
msgstr ""
"gdm_config_parse: no se especificó el directorio authdir y no se encontró el "
"normal"
-#: daemon/gdm.c:207
+#: daemon/gdm.c:241
msgid ""
"gdm_config_parse: No sessions directory specified and default not found."
msgstr ""
"gdm_config_parse: No se especificó el directorio de sesiones y no encontré "
"el mio"
-#: daemon/gdm.c:219
+#: daemon/gdm.c:253
msgid "gdm_config_parse: Invalid server line in config file. Ignoring!"
-msgstr "gdm_config_parse: Línea de servidor inválida en el archivo de configuración. Ignorándola."
+msgstr ""
+"gdm_config_parse: Línea de servidor inválida en el archivo de configuración. "
+"Ignorándola."
-#: daemon/gdm.c:225
+#: daemon/gdm.c:259
msgid ""
"gdm_config_parse: Xdmcp disabled and no local servers defined. Aborting!"
-msgstr "gdm_config_parse: Xdmcp desactivado y ningún servidor local definido. Abortando."
+msgstr ""
+"gdm_config_parse: Xdmcp desactivado y ningún servidor local definido. "
+"Abortando."
-#: daemon/gdm.c:230
+#: daemon/gdm.c:264
#, c-format
msgid "gdm_config_parse: Can't find the gdm user (%s). Aborting!"
msgstr "gdm_config_parse: No se encuentra el usuario de gdm (%s). Abortando."
-#: daemon/gdm.c:235
+#: daemon/gdm.c:269
msgid "gdm_config_parse: The gdm user should not be root. Aborting!"
-msgstr ""
-"gdm_config_parse: El usuario gdm no debe ser root. Abortando."
+msgstr "gdm_config_parse: El usuario gdm no debe ser root. Abortando."
-#: daemon/gdm.c:240
+#: daemon/gdm.c:274
#, c-format
msgid "gdm_config_parse: Can't find the gdm group (%s). Aborting!"
msgstr "gdm_config_parse: No se encuentra el grupo de gdm (%s). Abortando."
-#: daemon/gdm.c:246
+#: daemon/gdm.c:279
msgid "gdm_config_parse: The gdm group should not be root. Aborting!"
msgstr "gdm_config_parse: El grupo gdm no debe ser root. Abortando."
-#: daemon/gdm.c:253
+#: daemon/gdm.c:286
#, c-format
msgid "gdm_config_parse: Authdir %s does not exist. Aborting."
msgstr ""
"gdm_config_parse: El directorio de autorizaciones %s no existe. Abortando."
-#: daemon/gdm.c:256
+#: daemon/gdm.c:289
#, c-format
msgid "gdm_config_parse: Authdir %s is not a directory. Aborting."
msgstr "gdm_config_parse: %s no es un directorio. Abortando."
-#: daemon/gdm.c:259
+#: daemon/gdm.c:292
#, c-format
msgid ""
"gdm_config_parse: Authdir %s is not owned by user %s, group %s. Aborting."
@@ -86,7 +89,7 @@ msgstr ""
"gdm_config_parse: El directorio de autorizaciones %s no pertenece al usuario "
"%s, grupo %s. Abortando."
-#: daemon/gdm.c:262
+#: daemon/gdm.c:296
#, c-format
msgid ""
"gdm_config_parse: Authdir %s has wrong permissions. Should be 750. Aborting."
@@ -94,48 +97,50 @@ msgstr ""
"gdm_config_parse: El directorio de autorizaciones %s tiene permisos "
"incorrectos. Debe de ser 750. Abortando."
-#: daemon/gdm.c:318
+#: daemon/gdm.c:354
#, c-format
msgid "gdm_display_manage: Failed forking gdm slave process for %d"
msgstr "gdm_display_manager: falla al crear el proceso esclavo para %d"
-#: daemon/gdm.c:397
+#: daemon/gdm.c:433
#, c-format
msgid "gdm_child_action: Aborting display %s"
msgstr "gdm_child_action: Abortando el despliegue %s"
-#: daemon/gdm.c:402
+#: daemon/gdm.c:438
msgid "gdm_child_action: Master rebooting..."
msgstr "gdm_child_action: Reiniciando el maestro"
-#: daemon/gdm.c:408
+#: daemon/gdm.c:444
#, c-format
msgid "gdm_child_action: Reboot failed: %s"
msgstr "gdm_child_action: Falla al reiniciar: %s"
-#: daemon/gdm.c:412
+#: daemon/gdm.c:448
msgid "gdm_child_action: Master halting..."
msgstr "gdm_child_action: Deteniendo al maestro"
-#: daemon/gdm.c:418
+#: daemon/gdm.c:454
#, c-format
msgid "gdm_child_action: Halt failed: %s"
msgstr "gdm_child_action: Falla al detener: %s"
-#: daemon/gdm.c:512
+#: daemon/gdm.c:551
msgid "gdm_daemonify: fork() failed!"
msgstr "gdm_daemonify: falla en fork()"
-#: daemon/gdm.c:515
+#: daemon/gdm.c:554
#, c-format
msgid "gdm_daemonify: setsid() failed: %s!"
msgstr "gdm_daemonify: setsid () falló: %s"
-#: daemon/gdm.c:540
-msgid "Only root wants to run gdm\n"
+#. XDM compliant error message
+#: daemon/gdm.c:580
+#, fuzzy
+msgid "Only root wants to run x^hgdm\n"
msgstr "Solamente root puede ejecutar gdm\n"
-#: daemon/gdm.c:558
+#: daemon/gdm.c:601
msgid ""
"gdm already running. Aborting!\n"
"\n"
@@ -143,7 +148,8 @@ msgstr ""
"gdm ya se encuentra ejecutándose. Abortando!\n"
"\n"
-#: daemon/gdm.c:563
+#: daemon/gdm.c:607
+#, c-format
msgid ""
"According to %s, gdm was already running (%d),\n"
"but seems to have been murdered mysteriously.\n"
@@ -151,177 +157,146 @@ msgstr ""
"Según %s, gdm ya ha sido lanzado (%d),\n"
"pero parece haber muerto misteriosamente.\n"
-#: daemon/gdm.c:584
+#: daemon/gdm.c:629
msgid "gdm_main: Error setting up TERM signal handler"
msgstr "gdm_main: Error al configurar el controlador de la señal TERM"
-#: daemon/gdm.c:587
+#: daemon/gdm.c:632
msgid "gdm_main: Error setting up INT signal handler"
msgstr "gdm_main: Error al configurar el controlador de la señal INT"
-#: daemon/gdm.c:595
+#: daemon/gdm.c:640
msgid "gdm_main: Error setting up CHLD signal handler"
msgstr "gdm_main: Error al configurar el controlador de la señal CHLD"
-#: daemon/auth.c:62
-#, c-format
-msgid "gdm_auth_secure_display: Could not unlink %s file: %s"
-msgstr "gdm_auth_secure_display: No se pudo hacer un unlink del archivo %s: %s"
+#: daemon/auth.c:271
+#, fuzzy, c-format
+msgid "gdm_auth_user_remove: Ignoring suspicious looking cookie file %s"
+msgstr "gdm_auth_user_remove: Error al lanzar el proceso xauth: %s"
-#: daemon/auth.c:73
+#: daemon/filecheck.c:58
#, c-format
-msgid ""
-"gdm_auth_secure_display: Error starting xauth process: %s. Running insecure!"
+msgid "%s: Directory %s does not exist."
msgstr ""
-"gdm_auth_secure_display: Error al lanzar el proceso xauth: %s. ¡Corriendo de "
-"manera no segura!"
-#: daemon/auth.c:77
-msgid "gdm_auth_secure_display: Error forking xauth process. Running insecure!"
-msgstr ""
-"gdm_auth_secure_display: Error al hacer un fork del proceso xauth. "
-"¡Corriendo de manera no segura!"
-
-#: daemon/auth.c:109
-#, c-format
-msgid "gdm_auth_user_add: Error starting xauth process: %s"
-msgstr "gdm_auth_user_add: Error al lanzar el proceso xauth: %s"
-
-#: daemon/auth.c:113
-msgid "gdm_auth_user_add: Error forking xauth process."
-msgstr "gdm_auth_user_add: Error al hacer un fork del proceso xauth."
-
-#: daemon/auth.c:143
-#, c-format
-msgid "gdm_auth_user_remove: Error starting xauth process: %s"
-msgstr "gdm_auth_user_remove: Error al lanzar el proceso xauth: %s"
-
-#: daemon/auth.c:147
-msgid "gdm_auth_user_remove: Error forking xauth process."
-msgstr "gdm_auth_user_remove: Error al hacer un fork del proceso xauth."
-
-#: daemon/filecheck.c:50 daemon/filecheck.c:83
-#, c-format
-msgid "%s: %s is not owned by uid %d. Skipping."
+#: daemon/filecheck.c:64 daemon/filecheck.c:102
+#, fuzzy, c-format
+msgid "%s: %s is not owned by uid %d."
msgstr "%s: %s no tiene como dueño el uid %d. Ignorando."
-#: daemon/filecheck.c:57
-#, c-format
-msgid "%s: %s is writable by group/other. Should be 755. Skipping."
+#: daemon/filecheck.c:70 daemon/filecheck.c:109
+#, fuzzy, c-format
+msgid "%s: %s is writable by group."
+msgstr ""
+"%s: %s puede ser escrito por el grupo. Debería de ser 644. Ignorándolo."
+
+#: daemon/filecheck.c:76
+#, fuzzy, c-format
+msgid "%s: %s is writable by other."
msgstr ""
"%s: %s puede ser escrito por el grupo y otros. Debería de tener permisos "
"0755. Ignorando"
-#: daemon/filecheck.c:76
-#, c-format
-msgid "%s: %s is not a regular file. Skipping."
+#: daemon/filecheck.c:95
+#, fuzzy, c-format
+msgid "%s: %s is not a regular file."
msgstr "%s: %s no es un archivo regular. Ignorando"
-#: daemon/filecheck.c:90
-msgid "%s: %s is writable by group. Should be 644. Skipping."
+#: daemon/filecheck.c:116
+#, fuzzy, c-format
+msgid "%s: %s is writable by group/other."
msgstr ""
-"%s: %s puede ser escrito por el grupo. Debería de ser 644. "
-"Ignorándolo."
-
-#: daemon/filecheck.c:97
-#, c-format
-msgid "%s: %s is writable by group/other. Should be 644. Skipping."
-msgstr ""
-"%s: %s puede ser escrito por el grupo y otros. Debería de ser 644. "
-"Ignorando."
+"%s: %s puede ser escrito por el grupo y otros. Debería de tener permisos "
+"0755. Ignorando"
-#: daemon/filecheck.c:104
-#, c-format
-msgid "%s: %s is bigger than sysadmin specified maximum file size. Skipping."
+#: daemon/filecheck.c:123
+#, fuzzy, c-format
+msgid "%s: %s is bigger than sysadmin specified maximum file size."
msgstr ""
"%s: %s es mayor que el tamaño máximo de archivos especificado por el "
"administrador. Salteandolo."
-#: daemon/misc.c:121
+#: daemon/misc.c:128
#, c-format
msgid "gdm_exec_script: Failed starting: %s"
msgstr "gdm_exec_script: Falló el lanzamiento: %s"
-#: daemon/misc.c:125
+#: daemon/misc.c:132
msgid "gdm_exec_script: Can't fork script process!"
msgstr "gdm_exec_script: ¡Imposible de hacer un fork para el proceso script!"
-#: daemon/misc.c:153
-#, c-format
-msgid "gdm_exec_command: Failed starting: %s"
-msgstr "gdm_exec_command: Falló el lanzamiento: %s"
-
-#: daemon/misc.c:157
-msgid "gdm_exec_command: Can't fork process!"
-msgstr "gdm_exec_command: ¡Imposible de hacer un fork para el proceso!"
-
-#: daemon/server.c:82 daemon/server.c:213
+#: daemon/server.c:84 daemon/server.c:207
msgid "gdm_server_start: Error setting up USR1 signal handler"
msgstr "gdm_server_start: Error al configurar el controlador de la señal USR1"
-#: daemon/server.c:99
+#: daemon/server.c:101
+#, c-format
msgid "gdm_server_start: Could not open logfile for display %s!"
msgstr "gdm_server_start: ¡No pude abrir la bitácora para el display %s!"
-#: daemon/server.c:129
+#: daemon/server.c:130
msgid "gdm_server_start: Error setting USR1 to SIG_IGN"
msgstr "gdm_server_start: Error al configurar la señal USR1 a SIG_IGN"
-#: daemon/server.c:146
+#: daemon/server.c:147
+#, c-format
msgid "gdm_server_start: Xserver not found: %s"
msgstr "gdm_server_start: Servidor X no encontrado: %s"
-#: daemon/server.c:152
+#: daemon/server.c:153
msgid "gdm_server_start: Can't fork Xserver process!"
msgstr "gdm_server_star: ¡Imposible de hacer un fork para el proceso Xserver!"
-#: daemon/server.c:178
+#: daemon/server.c:179
+#, c-format
msgid "gdm_server_stop: Could not unlink auth file: %s!"
-msgstr "gdm_server_stop: ¡No se pudo hacer un unlink del archivo de autorización: %s!"
+msgstr ""
+"gdm_server_stop: ¡No se pudo hacer un unlink del archivo de autorización: %s!"
-#: daemon/server.c:237
+#: daemon/server.c:233
msgid "gdm_server_restart: Error setting up ALARM signal handler"
-msgstr "gdm_server_restart: Error al configurar el controlador de la señal ALARM"
+msgstr ""
+"gdm_server_restart: Error al configurar el controlador de la señal ALARM"
-#: daemon/slave.c:112
+#: daemon/slave.c:120
msgid "gdm_slave_init: Error setting up TERM/INT signal handler"
msgstr ""
"gdm_slave_init: Error al configurar el controlador de la señal TERM/INIT"
-#: daemon/slave.c:120
+#: daemon/slave.c:128
msgid "gdm_slave_init: Error setting up CHLD signal handler"
msgstr "gdm_slave_init: Error al configurar el controlador de la señal CHLD"
-#: daemon/slave.c:171
+#: daemon/slave.c:179
msgid "gdm_slave_greeter: Can't init pipe to gdmgreeter"
msgstr "gdm_slave_greeter: Imposible iniciar un tubo hacia gdmgreeter"
-#: daemon/slave.c:196
+#: daemon/slave.c:204
#, c-format
msgid "gdm_slave_greeter: Couldn't set groupid to %d"
msgstr "gdm_slave_greeter: No pude configurar el grupo como gid %d"
-#: daemon/slave.c:199
+#: daemon/slave.c:207
#, c-format
msgid "gdm_slave_greeter: Couldn't set userid to %d"
msgstr "gdm_slave_greeter: No pude configurar el usuario como uid %d"
-#: daemon/slave.c:209
+#: daemon/slave.c:217
#, c-format
msgid "gdm_slave_greeter: Error starting greeter on display %s"
msgstr "gdm_slave_greeter: Error al lanzar la ventana de bienvenida en %s"
-#: daemon/slave.c:212
+#: daemon/slave.c:220
msgid "gdm_slave_greeter: Can't fork gdmgreeter process"
msgstr "gdm_slave_greeter: Imposible hacer un fork para el proceso gdmgreeter"
-#: daemon/slave.c:280
+#: daemon/slave.c:297
#, c-format
msgid "gdm_slave_session_init: User '%s' not found. Aborting."
msgstr ""
"gdm_slave_session_init: No se encuentró ningún usuario '%s'. Abortando."
-#: daemon/slave.c:299
+#: daemon/slave.c:321
msgid ""
"gdm_slave_session_init: Execution of PreSession script returned > 0. "
"Aborting."
@@ -329,487 +304,550 @@ msgstr ""
"gdm_slave_session_init: La ejecución del script de Pre-sesión devolvió > 0. "
"Abortando."
-#: daemon/slave.c:304
+#: daemon/slave.c:345
msgid "gdm_slave_session_init: Error forking user session"
msgstr ""
"gdm_slave_session_init: Error al hacer un fork para la sesión del usuario"
-#: daemon/slave.c:312
+#: daemon/slave.c:353
#, c-format
msgid "gdm_slave_session_init: Could not setgid %d. Aborting."
msgstr "gdm_slave_session_init: No pude hacer un setgid %d. Abortando"
-#: daemon/slave.c:315
+#: daemon/slave.c:356
#, c-format
msgid "gdm_slave_session_init: initgroups() failed for %s. Aborting."
msgstr "gdm_slave_session_init: Falló initgroups() para %s. Abortando."
-#: daemon/slave.c:318
+#: daemon/slave.c:359
#, c-format
msgid "gdm_slave_session_init: Could not become %s. Aborting."
msgstr "gdm_slave_session_init: No pude cambiarme en %s. Abortando."
-#: daemon/slave.c:373
+#: daemon/slave.c:405
#, c-format
msgid "gdm_slave_session_init: Could not start session `%s'"
msgstr "gdm_slave_session_init: No pude lanzar la sesión `%s'"
-#: daemon/slave.c:547
+#: daemon/slave.c:580
#, c-format
msgid "gdm_slave_windows_kill_ioerror_handler: Fatal X error - Restarting %s"
msgstr ""
"gdm_slave_windows_kill_ioerror_handler: Error fatal de X - Reiniciando %s"
-#: daemon/slave.c:579
+#: daemon/slave.c:612
msgid "gdm_slave_xsync_ping: Error setting up ALARM signal handler"
msgstr ""
"gdm_slave_xsync_ping: Error al configurar el controlador de la señal ALARM"
-#: daemon/verify.c:122 daemon/verify.c:185 gui/gdmgreeter.c:1363
+#: daemon/verify.c:124 daemon/verify.c:215 gui/gdmlogin.c:1222
msgid "Login:"
msgstr "Login:"
-#: daemon/verify.c:128
+#: daemon/verify.c:132 daemon/verify.c:159 daemon/verify.c:219
+#, c-format
+msgid "Couldn't authenticate %s"
+msgstr "No pude autentificar a %s"
+
+#: daemon/verify.c:135 daemon/verify.c:222
+msgid "User unknown"
+msgstr "Usuario desconocido"
+
+#: daemon/verify.c:141 daemon/verify.c:228
+#, c-format
+msgid "Root login disallowed on display '%s'"
+msgstr ""
+
+#: daemon/verify.c:144 daemon/verify.c:231
+msgid "Root login disallowed"
+msgstr ""
+
+#: daemon/verify.c:150
msgid "Can't find /etc/pam.d/gdm!"
msgstr "¡No se encuentra ningún /etc/pam.d/gdm!"
-#: daemon/verify.c:132
+#: daemon/verify.c:154
#, c-format
msgid "Can't set PAM_TTY=%s"
msgstr "Imposible de definir PAM_TTY=%s"
-#: daemon/verify.c:137 daemon/verify.c:189
-#, c-format
-msgid "Couldn't authenticate %s"
-msgstr "No pude autentificar a %s"
-
-#: daemon/verify.c:142
+#: daemon/verify.c:164
#, c-format
msgid "Couldn't set acct. mgmt for %s"
msgstr "No pude configurar la gestión de cuentas para %s"
-#: daemon/verify.c:147
+#: daemon/verify.c:169
#, c-format
msgid "Couldn't set credentials for %s"
msgstr "No pude configurar las credenciales para %s"
-#: daemon/verify.c:152
+#: daemon/verify.c:174
#, c-format
msgid "Couldn't open session for %s"
msgstr "No pude abrir una sesión para %s"
-#: daemon/verify.c:192
-msgid "User unknown"
-msgstr "Usuario desconocido"
-
-#: daemon/verify.c:208 gui/gdmgreeter.c:1369
+#: daemon/verify.c:249
msgid "Password:"
msgstr "Contraseña:"
-#: daemon/verify.c:213
+#: daemon/verify.c:254
msgid "Incorrect password"
msgstr "Contraseña incorrecta"
-#: daemon/xdmcp.c:172
+#: daemon/xdmcp.c:174
#, c-format
msgid "gdm_xdmcp_init: Could not get server hostname: %s!"
msgstr "gdm_xdmcp_init: ¡No pude obtener el nombre del servidor: %s!"
-#: daemon/xdmcp.c:183
+#: daemon/xdmcp.c:185
msgid "gdm_xdmcp_init: Could not create socket!"
msgstr "gdm_xdmcp_init: ¡No pude crear el zócalo!"
-#: daemon/xdmcp.c:190
+#: daemon/xdmcp.c:192
msgid "gdm_xdmcp_init: Could not bind to XDMCP socket!"
msgstr "gdm_xdmcp_init: ¡No pude conectarme al zócalo XDMCP!"
-#: daemon/xdmcp.c:225
+#: daemon/xdmcp.c:230
msgid "gdm_xdmcp_decode: Could not create XDMCP buffer!"
msgstr "gdm_xdmcp_decode: ¡No pude crear un buffer XDMCP!"
-#: daemon/xdmcp.c:230
+#: daemon/xdmcp.c:235
msgid "gdm_xdmcp_decode: Could not read XDMCP header!"
msgstr "gdm_xdmcp_decode: ¡No pude leer la cabecera XDMCP!"
-#: daemon/xdmcp.c:235
+#: daemon/xdmcp.c:240
msgid "gdm_xdmcp_decode: Incorrect XDMCP version!"
msgstr "gdm_xdmcp_decode: ¡Versión de XDMCP incorrecta!"
-#: daemon/xdmcp.c:271
+#: daemon/xdmcp.c:276
#, c-format
msgid "gdm_xdmcp_decode_packet: Unknown opcode from host %s"
msgstr "gdm_xdmcp_decode_packet: Opcode desconocido recibido del hostal %s"
-#: daemon/xdmcp.c:289
-msgid "gdm_xdmcp_query: Could not extract authlist from packet"
-msgstr "gdm_xdmcp_query: No pude extraer la lista de autorizaciones del paquete"
+#: daemon/xdmcp.c:294
+#, fuzzy
+msgid "gdm_xdmcp_handle_query: Could not extract authlist from packet"
+msgstr ""
+"gdm_xdmcp_query: No pude extraer la lista de autorizaciones del paquete"
-#: daemon/xdmcp.c:300
-msgid "gdm_xdmcp_query: Error in checksum"
+#: daemon/xdmcp.c:305
+#, fuzzy
+msgid "gdm_xdmcp_handle_query: Error in checksum"
msgstr "gdm_xdmcp_query: Error de checksum"
-#: daemon/xdmcp.c:323
-msgid "GNOME"
-msgstr "GNOME"
+#: daemon/xdmcp.c:336
+#, fuzzy
+msgid "gdm_xdmcp_handle_forward_query: Could not read display address"
+msgstr "gdm_xdmcp_handle_request: No pude leer el número del display"
+
+#: daemon/xdmcp.c:342
+#, fuzzy
+msgid "gdm_xdmcp_handle_forward_query: Could not read display port number"
+msgstr "gdm_xdmcp_handle_request: No pude leer el número del display"
+
+#: daemon/xdmcp.c:348
+#, fuzzy
+msgid "gdm_xdmcp_handle_forward_query: Could not extract authlist from packet"
+msgstr ""
+"gdm_xdmcp_query: No pude extraer la lista de autorizaciones del paquete"
+
+#: daemon/xdmcp.c:363
+#, fuzzy
+msgid "gdm_xdmcp_handle_forward_query: Error in checksum"
+msgstr "gdm_xdmcp_query: Error de checksum"
-#: daemon/xdmcp.c:347
+#: daemon/xdmcp.c:426
#, c-format
msgid "Denied XDMCP query from host %s"
msgstr "Pedido XDMCP del hostal %s denegado"
-#: daemon/xdmcp.c:349
+#: daemon/xdmcp.c:428
msgid "Display not authorized to connect"
msgstr "Display no autorizado a conectarse"
-#: daemon/xdmcp.c:382
+#: daemon/xdmcp.c:461
#, c-format
msgid "gdm_xdmcp_handle_request: Got REQUEST from banned host %s"
msgstr "gdm_xdmcp_handle_request: Recibí un REQUEST del hostal excluído %s"
-#: daemon/xdmcp.c:389
+#: daemon/xdmcp.c:468
msgid "gdm_xdmcp_handle_request: Could not read Display Number"
msgstr "gdm_xdmcp_handle_request: No pude leer el número del display"
-#: daemon/xdmcp.c:395
+#: daemon/xdmcp.c:474
msgid "gdm_xdmcp_handle_request: Could not read Connection Type"
msgstr "gdm_xdmcp_handle_request: No pude leer el tipo de conexión"
-#: daemon/xdmcp.c:401
+#: daemon/xdmcp.c:480
msgid "gdm_xdmcp_handle_request: Could not read Client Address"
msgstr "gdm_xdmcp_handle_request: No pude leer la dirección del cliente"
-#: daemon/xdmcp.c:407
+#: daemon/xdmcp.c:486
msgid "gdm_xdmcp_handle_request: Could not read Authentication Names"
msgstr "gdm_xdmcp_handle_request: No pude leer los nombres de autentificación"
-#: daemon/xdmcp.c:413
+#: daemon/xdmcp.c:492
msgid "gdm_xdmcp_handle_request: Could not read Authentication Data"
msgstr "gdm_xdmcp_handle_request: No pude leer los datos de autentificación"
-#: daemon/xdmcp.c:419
+#: daemon/xdmcp.c:498
msgid "gdm_xdmcp_handle_request: Could not read Authorization List"
msgstr "gdm_xdmcp_handle_request: No pude leer la lista de autorizaciones"
-#: daemon/xdmcp.c:430
+#: daemon/xdmcp.c:509
msgid "gdm_xdmcp_handle_request: Could not read Manufacturer ID"
msgstr "gdm_xdmcp_handle_request: No pude leer el ID del fabricante"
-#: daemon/xdmcp.c:448
+#: daemon/xdmcp.c:527
#, c-format
msgid "gdm_xdmcp_handle_request: Failed checksum from %s"
msgstr "gdm_xdmcp_handle_request: Falló el checksum de %s"
-#: daemon/xdmcp.c:566
+#: daemon/xdmcp.c:640
#, c-format
msgid "gdm_xdmcp_handle_manage: Got Manage from banned host %s"
msgstr "gdm_xdmcp_handle_manage: Recibí MANAGE del hostal excluído %s"
-#: daemon/xdmcp.c:573
+#: daemon/xdmcp.c:647
msgid "gdm_xdmcp_handle_manage: Could not read Session ID"
msgstr "gdm_xdmcp_handle_manage: No pude leer el ID de sesión"
-#: daemon/xdmcp.c:579
+#: daemon/xdmcp.c:653
msgid "gdm_xdmcp_handle_manage: Could not read Display Number"
msgstr "gdm_xdmcp_handle_manage: No pude leer el número de Display"
-#: daemon/xdmcp.c:588
+#: daemon/xdmcp.c:662
msgid "gdm_xdmcp_manage: Could not read Display Class"
msgstr "gdm_xdmcp_manage: No pude leer la clase del Display"
-#: daemon/xdmcp.c:607
+#: daemon/xdmcp.c:683
#, c-format
msgid "gdm_xdmcp_handle_manage: Could not open logfile for display %s!"
-msgstr "gdm_xdmcp_handle_manage: ¡No pude abrir la bitácora para el display %s!"
+msgstr ""
+"gdm_xdmcp_handle_manage: ¡No pude abrir la bitácora para el display %s!"
-#: daemon/xdmcp.c:679
+#: daemon/xdmcp.c:755
#, c-format
msgid "gdm_xdmcp_handle_keepalive: Got KEEPALIVE from banned host %s"
msgstr "gdm_xdmcp_handle_keepalive: Recibí KEEPALIVE del hostal excluido %s"
-#: daemon/xdmcp.c:686
+#: daemon/xdmcp.c:762
msgid "gdm_xdmcp_handle_keepalive: Could not read Display Number"
msgstr "gdm_xdmcp_handle_keepalive: No pude leer el número de Display"
-#: daemon/xdmcp.c:692
+#: daemon/xdmcp.c:768
msgid "gdm_xdmcp_handle_keepalive: Could not read Session ID"
msgstr "gdm_xdmcp_handle_keepalive: No pude leer el ID de Sesión"
-#: gui/gdmchooser.c:336
+#: gui/gdmchooser.c:338
+#, c-format
msgid "gdm_chooser_parse_config: No configuration file: %s. Aborting."
msgstr ""
"gdm_chooser_parse_config: Ningún archivo de configuración: %s. Abortando."
#: gui/gdmchooser.c:447
+#, c-format
msgid "Can't open default host icon: %s"
msgstr "No puedo abrir el icono del hostal por omisión: %s"
#. Buttons
-#: gui/gdmchooser.c:512
+#: gui/gdmchooser.c:514
msgid "Connect"
msgstr "Conectar"
-#: gui/gdmchooser.c:519
+#: gui/gdmchooser.c:521
msgid "Rescan"
msgstr "Reexplorar"
-#: gui/gdmchooser.c:525
+#: gui/gdmchooser.c:527
msgid "Cancel"
msgstr "Cancelar"
-#: gui/gdmchooser.c:576 gui/gdmgreeter.c:1672 gui/gdmlogin.c:1102
-msgid "main: Error setting up HUP signal handler"
-msgstr "main: Error al configurar el controlador de la señal HUP"
-
-#: gui/gdmchooser.c:579 gui/gdmgreeter.c:1675 gui/gdmlogin.c:1105
-msgid "main: Error setting up INT signal handler"
-msgstr "main: Error al configurar el controlador de la señal INT"
-
-#: gui/gdmchooser.c:582 gui/gdmgreeter.c:1678 gui/gdmlogin.c:1108
-msgid "main: Error setting up TERM signal handler"
-msgstr "main: Error al configurar el controlador de la señal TERM"
+#: gui/gdmchooser.c:578
+#, fuzzy
+msgid "gdm_signals_init: Error setting up HUP signal handler"
+msgstr "gdm_slave_init: Error al configurar el controlador de la señal CHLD"
-#: gui/gdmgreeter.c:155
-msgid "Gnome Display Manager"
-msgstr "Gestor de Display de Gnome"
+#: gui/gdmchooser.c:581
+#, fuzzy
+msgid "gdm_signals_init: Error setting up INT signal handler"
+msgstr "gdm_main: Error al configurar el controlador de la señal INT"
-#: gui/gdmgreeter.c:157
-msgid "Copyright Martin K. Petersen (C) 1998, 1999"
-msgstr "Copyright Martin K. Petersen © 1998, 1999"
+#: gui/gdmchooser.c:584
+#, fuzzy
+msgid "gdm_signals_init: Error setting up TERM signal handler"
+msgstr "gdm_main: Error al configurar el controlador de la señal TERM"
-#: gui/gdmgreeter.c:159 gui/gdmlogin.c:328
-msgid ""
-"gdm manages local and remote displays and provides the user with a login "
-"window."
+#: gui/gdmchooser.c:592 gui/gdmlogin.c:1524
+msgid "Could not set signal mask!"
msgstr ""
-"gdm se ocupa de la gestión de pantallas locales y remotas y proporciona al "
-"usuario una ventana de login."
-#: gui/gdmgreeter.c:194 gui/gdmlogin.c:271
+#: gui/gdmlogin.c:276
msgid "gdm_parse_enriched_string: String too long!"
msgstr "gdm_parse_enriched_string: ¡Cadena demasiado larga!"
-#: gui/gdmgreeter.c:195 gui/gdmlogin.c:272
+#: gui/gdmlogin.c:277
msgid "Welcome to "
msgstr "Bientenido a"
-#: gui/gdmgreeter.c:199 gui/gdmlogin.c:276
+#: gui/gdmlogin.c:281
msgid "gdm_parse_enriched_string: Could not malloc temporary buffer!"
msgstr ""
"gdm_parse_enriched_string: ¡No pude hacer un malloc para un buffer temporal!"
-#: gui/gdmgreeter.c:273
-msgid "Logo not found. No image will be displayed!"
-msgstr "No se encuentra el logotipo. ¡Ninguna imagen sera usada!"
+#: gui/gdmlogin.c:358
+msgid "Are you sure you want to reboot the machine?"
+msgstr "¿Está seguro que quiere reiniciar el sistema?"
-#: gui/gdmgreeter.c:299
-#, c-format
-msgid "gdm_greeter_parse_config: No configuration file: %s. Aborting."
-msgstr ""
-"gdm_greeter_parse_config: Ningún archivo de configuración: %s. Abortando."
+#: gui/gdmlogin.c:371
+msgid "Are you sure you want to halt the machine?"
+msgstr "¿Está seguro que quiere apagar el sistema?"
-#: gui/gdmgreeter.c:323 gui/gdmlogin.c:403
+#: gui/gdmlogin.c:388
#, c-format
-msgid "messages/welcome=Welcome to %h"
-msgstr "messages/welcome=Bienvenido a %h"
+msgid "gdm_login_parse_config: No configuration file: %s. Aborting."
+msgstr ""
+"gdm_login_parse_config: Ningún archivo de configuración: %s. Abortando."
-#: gui/gdmgreeter.c:424 gui/gdmlogin.c:527 gui/gdmlogin.c:557
+#: gui/gdmlogin.c:520
#, c-format
msgid ""
-"You have chosen %s for this session, but your default setting is %s.\n"
+"Your preferred session type %s is not installed on this machine.\n"
"Do you wish to make %s the default for future sessions?"
msgstr ""
-"Ha escogido %s para esta sesión, pero su sesión por omisión es %s.\n"
+"Su preferencia de tipo de sesión %s no está disponible en esta máquina.\n"
"¿Desea hacer de %s su sesión por omisión a partir de ahora?"
-#: gui/gdmgreeter.c:432
+#: gui/gdmlogin.c:539 gui/gdmlogin.c:569
#, c-format
msgid ""
-"Your previous session type %s is not installed on this machine.\n"
+"You have chosen %s for this session, but your default setting is %s.\n"
"Do you wish to make %s the default for future sessions?"
msgstr ""
-"Su tipo de sesión anterior %s no está disponible en esta máquina.\n"
+"Ha escogido %s para esta sesión, pero su sesión por omisión es %s.\n"
"¿Desea hacer de %s su sesión por omisión a partir de ahora?"
-#: gui/gdmgreeter.c:440
+#: gui/gdmlogin.c:625
#, c-format
-msgid ""
-"Your previous session type %s is not installed on this machine.\n"
-"You will be logged in using the %s environment."
-msgstr ""
-"Su tipo de sesión %s no está instalada en esta máquina.\n"
-"Será iniciada con el entorno %s."
-
-#: gui/gdmgreeter.c:453
-#, c-format
-msgid ""
-"You have chosen the language %s for this session, but your default setting "
-"is %s.\n"
-"Do you wish to make %s the default language for future sessions?"
-msgstr ""
-"Escogió el idioma %s para su sesión, pero su valor normal es %s\n"
-"¿Desea que %s sea el idioma por omisión para sus sesiones futuras?"
-
-#: gui/gdmgreeter.c:461
-#, c-format
-msgid ""
-"Your previous language %s is not installed on this machine.\n"
-"Do you wish to make %s the default language for future sessions?"
-msgstr ""
-"El idioma anterior %s no está instalado en esta máquina.\n"
-"¿Desea hacer de %s el idioma por omisión para sus sesiones futuras?"
-
-#: gui/gdmgreeter.c:469
-#, c-format
-msgid ""
-"Your previous language %s is not installed on this machine.\n"
-"Your environment will be %s."
-msgstr ""
-"Su idioma anterior %s no está instalado en esta máquina\n"
-"Su entorno será %s."
-
-#: gui/gdmgreeter.c:500
-msgid "Invalid username or password!"
-msgstr "¡Nombre de usuario o contraseña inválidos!"
-
-#: gui/gdmgreeter.c:526 gui/gdmlogin.c:354
-msgid "Are you sure you want to reboot the machine?"
-msgstr "¿Está seguro que quiere reiniciar el sistema?"
+msgid "%s session selected"
+msgstr "Sesión %s seleccionada"
-#: gui/gdmgreeter.c:555 gui/gdmlogin.c:366
-msgid "Are you sure you want to halt the machine?"
-msgstr "¿Está seguro que quiere apagar el sistema?"
+#: gui/gdmlogin.c:641 gui/gdmlogin.c:738
+msgid "Last"
+msgstr "Última"
-#: gui/gdmgreeter.c:812
-msgid "gdm_greeter_session_init: Session script directory not found!"
+#: gui/gdmlogin.c:656
+msgid "gdm_login_session_init: Session script directory not found!"
msgstr ""
-"gdm_greeter_session_init: ¡No se encuentra el directorio de los scripts de "
+"gdm_login_session_init: ¡No se encuentra el directorio de los scripts de "
"sesión!"
-#: gui/gdmgreeter.c:865 gui/gdmlogin.c:694
+#: gui/gdmlogin.c:703
msgid "No session scripts found. Aborting!"
msgstr "¡No se encuentran scripts de sesión. Abortando!"
-#: gui/gdmgreeter.c:869 gui/gdmlogin.c:698
+#: gui/gdmlogin.c:707
#, c-format
msgid "No default session link found. Using %s.\n"
msgstr "No se encuentra un lazo de sesión por omisión. Usando %s.\n"
-#. Login button
-#: gui/gdmgreeter.c:1029
-msgid "Login"
-msgstr "Login"
+#: gui/gdmlogin.c:721
+#, c-format
+msgid "%s language selected"
+msgstr "Idioma %s seleccionado"
+
+#: gui/gdmlogin.c:753
+msgid "A-M"
+msgstr "A-M"
+
+#: gui/gdmlogin.c:759
+msgid "N-Z"
+msgstr "N-Z"
+
+#: gui/gdmlogin.c:765
+msgid "Other"
+msgstr "Otro"
-#. Init sessions menu
-#: gui/gdmgreeter.c:1041
-msgid "Sessions"
-msgstr "Sesiones"
+#: gui/gdmlogin.c:1061
+msgid "Session"
+msgstr "Sesión"
-#. Language selection support
-#: gui/gdmgreeter.c:1048
-msgid "Languages"
-msgstr "Idiomas"
+#: gui/gdmlogin.c:1068
+msgid "Language"
+msgstr "Idioma"
-#: gui/gdmgreeter.c:1058 gui/gdmlogin.c:960
+#: gui/gdmlogin.c:1075
msgid "Reboot..."
msgstr "Reiniciar..."
-#: gui/gdmgreeter.c:1064 gui/gdmlogin.c:966
+#: gui/gdmlogin.c:1082
msgid "Halt..."
msgstr "Detener..."
-#: gui/gdmgreeter.c:1071
-msgid "Suspend"
-msgstr "Suspender"
-
-#: gui/gdmgreeter.c:1078 gui/gdmlogin.c:972
+#: gui/gdmlogin.c:1089
msgid "System"
msgstr "Sistema"
-#: gui/gdmgreeter.c:1086 gui/gdmlogin.c:986
+#: gui/gdmlogin.c:1097
#, c-format
msgid "Can't open icon file: %s. Suspending iconify feature!"
msgstr ""
"¡Imposible de abrir el archivo de ícono: %s. Suspendiendo la posibilidad de "
"iconificar!"
-#: gui/gdmgreeter.c:1090 gui/gdmlogin.c:990
+#: gui/gdmlogin.c:1100
msgid "Iconify"
msgstr "Iconificar"
-#. Option button
-#: gui/gdmgreeter.c:1099
-msgid "Options..."
-msgstr "Opciones..."
+#: gui/gdmlogin.c:1257
+msgid "Please enter your login"
+msgstr ""
-#: gui/gdmgreeter.c:1531
-#, c-format
-msgid "Can't open NofaceImageFile: %s. Suspending face browser!"
+#: gui/gdmlogin.c:1442
+#, fuzzy, c-format
+msgid "Can't open DefaultImage: %s. Suspending face browser!"
msgstr ""
"¡Imposible de abrir NofaceImageFile: %s. Suspendiendo el visualizador de "
"fotos!"
-#: gui/gdmgreeter.c:1686
-msgid "main: Error setting up USR1 signal handler"
-msgstr "main: Error al configurar el controlador de la señal USR1"
-
-#: gui/gdmgreeter.c:1694
-msgid "main: Error setting up USR2 signal handler"
-msgstr "main: Error al configurar el controlador de la señal USR2"
-
-#: gui/gdmlogin.c:382
-msgid "gdm_login_parse_config: No configuration file: %s. Aborting."
-msgstr ""
-"gdm_login_parse_config: Ningún archivo de configuración: %s. Abortando."
-
-#: gui/gdmlogin.c:508
-msgid ""
-"Your preferred session type %s is not installed on this machine.\n"
-"Do you wish to make %s the default for future sessions?"
-msgstr ""
-"Su preferencia de tipo de sesión %s no está disponible en esta máquina.\n"
-"¿Desea hacer de %s su sesión por omisión a partir de ahora?"
-
-#: gui/gdmlogin.c:616
-#, c-format
-msgid "%s session selected"
-msgstr "Sesión %s seleccionada"
-
-#: gui/gdmlogin.c:632 gui/gdmlogin.c:723
-msgid "Last"
-msgstr "Última"
-
-#: gui/gdmlogin.c:647
-msgid "gdm_login_session_init: Session script directory not found!"
-msgstr ""
-"gdm_login_session_init: ¡No se encuentra el directorio de los scripts de "
-"sesión!"
-
-#: gui/gdmlogin.c:709
-#, c-format
-msgid "%s language selected"
-msgstr "Idioma %s seleccionado"
-
-#: gui/gdmlogin.c:736
-msgid "A-M"
-msgstr "A-M"
-
-#: gui/gdmlogin.c:742
-msgid "N-Z"
-msgstr "N-Z"
-
-#: gui/gdmlogin.c:748
-msgid "Other"
-msgstr "Otro"
+#: gui/gdmlogin.c:1510
+msgid "main: Error setting up HUP signal handler"
+msgstr "main: Error al configurar el controlador de la señal HUP"
-#: gui/gdmlogin.c:946
-msgid "Session"
-msgstr "Sesión"
+#: gui/gdmlogin.c:1513
+msgid "main: Error setting up INT signal handler"
+msgstr "main: Error al configurar el controlador de la señal INT"
-#: gui/gdmlogin.c:953
-msgid "Language"
-msgstr "Idioma"
+#: gui/gdmlogin.c:1516
+msgid "main: Error setting up TERM signal handler"
+msgstr "main: Error al configurar el controlador de la señal TERM"
-#: gui/gdmlogin.c:979
-msgid "Host chooser"
-msgstr "Selector de hostales"
+#~ msgid "gdm_auth_secure_display: Could not unlink %s file: %s"
+#~ msgstr ""
+#~ "gdm_auth_secure_display: No se pudo hacer un unlink del archivo %s: %s"
+
+#~ msgid ""
+#~ "gdm_auth_secure_display: Error starting xauth process: %s. Running insecure!"
+#~ msgstr ""
+#~ "gdm_auth_secure_display: Error al lanzar el proceso xauth: %s. ¡Corriendo de "
+#~ "manera no segura!"
+
+#~ msgid ""
+#~ "gdm_auth_secure_display: Error forking xauth process. Running insecure!"
+#~ msgstr ""
+#~ "gdm_auth_secure_display: Error al hacer un fork del proceso xauth. "
+#~ "¡Corriendo de manera no segura!"
+
+#~ msgid "gdm_auth_user_add: Error starting xauth process: %s"
+#~ msgstr "gdm_auth_user_add: Error al lanzar el proceso xauth: %s"
+
+#~ msgid "gdm_auth_user_add: Error forking xauth process."
+#~ msgstr "gdm_auth_user_add: Error al hacer un fork del proceso xauth."
+
+#~ msgid "gdm_auth_user_remove: Error forking xauth process."
+#~ msgstr "gdm_auth_user_remove: Error al hacer un fork del proceso xauth."
+
+#~ msgid "%s: %s is writable by group/other. Should be 644. Skipping."
+#~ msgstr ""
+#~ "%s: %s puede ser escrito por el grupo y otros. Debería de ser 644. "
+#~ "Ignorando."
+
+#~ msgid "gdm_exec_command: Failed starting: %s"
+#~ msgstr "gdm_exec_command: Falló el lanzamiento: %s"
+
+#~ msgid "gdm_exec_command: Can't fork process!"
+#~ msgstr "gdm_exec_command: ¡Imposible de hacer un fork para el proceso!"
+
+#~ msgid "GNOME"
+#~ msgstr "GNOME"
+
+#~ msgid "Gnome Display Manager"
+#~ msgstr "Gestor de Display de Gnome"
+
+#~ msgid "Copyright Martin K. Petersen (C) 1998, 1999"
+#~ msgstr "Copyright Martin K. Petersen © 1998, 1999"
+
+#~ msgid ""
+#~ "gdm manages local and remote displays and provides the user with a login "
+#~ "window."
+#~ msgstr ""
+#~ "gdm se ocupa de la gestión de pantallas locales y remotas y proporciona al "
+#~ "usuario una ventana de login."
+
+#~ msgid "Logo not found. No image will be displayed!"
+#~ msgstr "No se encuentra el logotipo. ¡Ninguna imagen sera usada!"
+
+#~ msgid "gdm_greeter_parse_config: No configuration file: %s. Aborting."
+#~ msgstr ""
+#~ "gdm_greeter_parse_config: Ningún archivo de configuración: %s. Abortando."
+
+#~ msgid "messages/welcome=Welcome to %h"
+#~ msgstr "messages/welcome=Bienvenido a %h"
+
+#~ msgid ""
+#~ "Your previous session type %s is not installed on this machine.\n"
+#~ "Do you wish to make %s the default for future sessions?"
+#~ msgstr ""
+#~ "Su tipo de sesión anterior %s no está disponible en esta máquina.\n"
+#~ "¿Desea hacer de %s su sesión por omisión a partir de ahora?"
+
+#~ msgid ""
+#~ "Your previous session type %s is not installed on this machine.\n"
+#~ "You will be logged in using the %s environment."
+#~ msgstr ""
+#~ "Su tipo de sesión %s no está instalada en esta máquina.\n"
+#~ "Será iniciada con el entorno %s."
+
+#~ msgid ""
+#~ "You have chosen the language %s for this session, but your default setting "
+#~ "is %s.\n"
+#~ "Do you wish to make %s the default language for future sessions?"
+#~ msgstr ""
+#~ "Escogió el idioma %s para su sesión, pero su valor normal es %s\n"
+#~ "¿Desea que %s sea el idioma por omisión para sus sesiones futuras?"
+
+#~ msgid ""
+#~ "Your previous language %s is not installed on this machine.\n"
+#~ "Do you wish to make %s the default language for future sessions?"
+#~ msgstr ""
+#~ "El idioma anterior %s no está instalado en esta máquina.\n"
+#~ "¿Desea hacer de %s el idioma por omisión para sus sesiones futuras?"
+
+#~ msgid ""
+#~ "Your previous language %s is not installed on this machine.\n"
+#~ "Your environment will be %s."
+#~ msgstr ""
+#~ "Su idioma anterior %s no está instalado en esta máquina\n"
+#~ "Su entorno será %s."
+
+#~ msgid "Invalid username or password!"
+#~ msgstr "¡Nombre de usuario o contraseña inválidos!"
+
+#~ msgid "gdm_greeter_session_init: Session script directory not found!"
+#~ msgstr ""
+#~ "gdm_greeter_session_init: ¡No se encuentra el directorio de los scripts de "
+#~ "sesión!"
+
+#~ msgid "Login"
+#~ msgstr "Login"
+
+#~ msgid "Sessions"
+#~ msgstr "Sesiones"
+
+#~ msgid "Languages"
+#~ msgstr "Idiomas"
+#~ msgid "Suspend"
+#~ msgstr "Suspender"
+
+#~ msgid "Options..."
+#~ msgstr "Opciones..."
+
+#~ msgid "main: Error setting up USR1 signal handler"
+#~ msgstr "main: Error al configurar el controlador de la señal USR1"
+
+#~ msgid "main: Error setting up USR2 signal handler"
+#~ msgstr "main: Error al configurar el controlador de la señal USR2"
+
+#~ msgid "Host chooser"
+#~ msgstr "Selector de hostales"
diff --git a/po/fr.po b/po/fr.po
index 748cc3d1..152bbb35 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: gdm VERSION\n"
-"POT-Creation-Date: 1999-07-26 17:03+0200\n"
+"POT-Creation-Date: 1999-08-12 00:12+0200\n"
"PO-Revision-Date: 1998-09-12 21:08+0200\n"
"Last-Translator: Vincent Renardias <vincent@debian.org>\n"
"Language-Team: GNOME French Team <gnomefr@gnomefr.traduc.org>\n"
@@ -14,68 +14,68 @@ msgstr ""
"Content-Type: text/plain; charset=iso-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
-#: daemon/gdm.c:137
+#: daemon/gdm.c:163
#, c-format
msgid "gdm_config_parse: No configuration file: %s. Aborting."
msgstr "gdm_config_parse: Pas de fichier de configuration: %s. Abandon."
-#: daemon/gdm.c:178
+#: daemon/gdm.c:211
msgid "gdm_config_parse: No greeter specified and default not found."
msgstr ""
-#: daemon/gdm.c:190
+#: daemon/gdm.c:223
msgid "gdm_config_parse: No authdir specified and default not found."
msgstr "gdm_config_parse: authdir non défini et valeur par défaut inconnue"
-#: daemon/gdm.c:208
+#: daemon/gdm.c:241
msgid ""
"gdm_config_parse: No sessions directory specified and default not found."
msgstr ""
"gdm_config_parse: Répertoire de sessions non défini et valeur par défaut "
"inconnue."
-#: daemon/gdm.c:220
+#: daemon/gdm.c:253
msgid "gdm_config_parse: Invalid server line in config file. Ignoring!"
msgstr ""
"gdm_config_parse: Ligne du server invalide dans le fichier de configuration. "
"Ignore."
-#: daemon/gdm.c:226
+#: daemon/gdm.c:259
msgid ""
"gdm_config_parse: Xdmcp disabled and no local servers defined. Aborting!"
msgstr ""
"gdm_config_parse: Xdmcp désactivé et pas de serveurs locaux définis. Abandon!"
-#: daemon/gdm.c:231
+#: daemon/gdm.c:264
#, c-format
msgid "gdm_config_parse: Can't find the gdm user (%s). Aborting!"
msgstr ""
"gdm_config_parse: Impossible de trouver l'utilisateur gdm (%s). Abandon!"
-#: daemon/gdm.c:236
+#: daemon/gdm.c:269
msgid "gdm_config_parse: The gdm user should not be root. Aborting!"
msgstr "gdm_config_parse: L'utilisateur gdm ne doit pas être root. Abandon!"
-#: daemon/gdm.c:241
+#: daemon/gdm.c:274
#, c-format
msgid "gdm_config_parse: Can't find the gdm group (%s). Aborting!"
msgstr "gdm_config_parse: Impossible de trouver le groupe gdm (%s). Abandon!"
-#: daemon/gdm.c:247
+#: daemon/gdm.c:279
msgid "gdm_config_parse: The gdm group should not be root. Aborting!"
msgstr "gdm_config_parse: Le groupe gdm ne doit pas être root. Abandon!"
-#: daemon/gdm.c:254
+#: daemon/gdm.c:286
#, c-format
msgid "gdm_config_parse: Authdir %s does not exist. Aborting."
msgstr "gdm_config_parse: Le répertoire Authdir %s n'existe pas. Abandon."
-#: daemon/gdm.c:257
+#: daemon/gdm.c:289
#, c-format
msgid "gdm_config_parse: Authdir %s is not a directory. Aborting."
msgstr "gdm_config_parse: Authdir %s n'est pas un répertoire. Abandon."
-#: daemon/gdm.c:260
+#: daemon/gdm.c:292
#, c-format
msgid ""
"gdm_config_parse: Authdir %s is not owned by user %s, group %s. Aborting."
@@ -83,7 +83,7 @@ msgstr ""
"gdm_config_parse: Le répertoire Authdir %s n'appartient pas à l'utilisateur "
"%s, du groupe %s. Abandon."
-#: daemon/gdm.c:263
+#: daemon/gdm.c:296
#, c-format
msgid ""
"gdm_config_parse: Authdir %s has wrong permissions. Should be 750. Aborting."
@@ -91,49 +91,51 @@ msgstr ""
"gdm_config_parse: Authdir %s a de mauvais droits d'accès. Les permissions "
"devraient être fixées à 750. Abandon."
-#: daemon/gdm.c:319
+#: daemon/gdm.c:354
#, c-format
msgid "gdm_display_manage: Failed forking gdm slave process for %d"
msgstr ""
"gdm_display_manage: Échec à la création du processus esclave gdm pour %d"
-#: daemon/gdm.c:398
+#: daemon/gdm.c:433
#, c-format
msgid "gdm_child_action: Aborting display %s"
msgstr "gdm_child_action: Abandon affichage %s"
-#: daemon/gdm.c:403
+#: daemon/gdm.c:438
msgid "gdm_child_action: Master rebooting..."
msgstr "gdm_child_action: Redémarrage du maître..."
-#: daemon/gdm.c:409
+#: daemon/gdm.c:444
#, c-format
msgid "gdm_child_action: Reboot failed: %s"
msgstr "gdm_child_action: Échec du redémarrage: %s"
-#: daemon/gdm.c:413
+#: daemon/gdm.c:448
msgid "gdm_child_action: Master halting..."
msgstr "gdm_child_action: Arrêt du maître..."
-#: daemon/gdm.c:419
+#: daemon/gdm.c:454
#, c-format
msgid "gdm_child_action: Halt failed: %s"
msgstr "gdm_child_action: Échec de l'arrêt: %s"
-#: daemon/gdm.c:513
+#: daemon/gdm.c:551
msgid "gdm_daemonify: fork() failed!"
msgstr "gdm_daemonify: échec du fork()!"
-#: daemon/gdm.c:516
+#: daemon/gdm.c:554
#, c-format
msgid "gdm_daemonify: setsid() failed: %s!"
msgstr "gdm_daemonify: échec de setid(): %s!"
-#: daemon/gdm.c:541
-msgid "Only root wants to run gdm\n"
+#. XDM compliant error message
+#: daemon/gdm.c:580
+#, fuzzy
+msgid "Only root wants to run x^hgdm\n"
msgstr "gdm fonctionne uniquement sous root\n"
-#: daemon/gdm.c:559
+#: daemon/gdm.c:601
msgid ""
"gdm already running. Aborting!\n"
"\n"
@@ -141,7 +143,7 @@ msgstr ""
"gdm est déjà lancé. Abandon!\n"
"\n"
-#: daemon/gdm.c:564
+#: daemon/gdm.c:607
#, c-format
msgid ""
"According to %s, gdm was already running (%d),\n"
@@ -150,197 +152,161 @@ msgstr ""
"Selon to %s, gdm est déjà lancé (%d),\n"
"mais semble avoir été mystérieusement supprimé.\n"
-#: daemon/gdm.c:585
+#: daemon/gdm.c:629
msgid "gdm_main: Error setting up TERM signal handler"
msgstr ""
"gdm_main: Erreur lors de la configuration de la procédure de prise en charge "
"du signal TERM"
-#: daemon/gdm.c:588
+#: daemon/gdm.c:632
msgid "gdm_main: Error setting up INT signal handler"
msgstr ""
"gdm_main: Erreur lors de la configuration de la procédure de prise en charge "
"du signal INT"
-#: daemon/gdm.c:596
+#: daemon/gdm.c:640
msgid "gdm_main: Error setting up CHLD signal handler"
msgstr ""
"gdm_main: Erreur lors de la configuration de la procédure de prise en charge "
"du signal CHLD"
-#: daemon/auth.c:62
-#, c-format
-msgid "gdm_auth_secure_display: Could not unlink %s file: %s"
-msgstr "gdm_auth_secure_display: Impossible d'effacer le fichier %s: %s"
+#: daemon/auth.c:271
+#, fuzzy, c-format
+msgid "gdm_auth_user_remove: Ignoring suspicious looking cookie file %s"
+msgstr "gdm_auth_user_remove: Erreur au démarrage du processus xauth: %s"
-#: daemon/auth.c:73
+#: daemon/filecheck.c:58
#, c-format
-msgid ""
-"gdm_auth_secure_display: Error starting xauth process: %s. Running insecure!"
+msgid "%s: Directory %s does not exist."
msgstr ""
-"gdm_auth_secure_display: Erreur au lancement de xauth: %s. Le fonctionnement "
-"se fera donc en mode non-sécurisé!"
-
-#: daemon/auth.c:77
-msgid "gdm_auth_secure_display: Error forking xauth process. Running insecure!"
-msgstr ""
-"gdm_auth_secure_display: Erreur à la création du processus xauth: %s. Le "
-"fonctionnement se fera donc en mode non-sécurisé!"
-
-#: daemon/auth.c:109
-#, c-format
-msgid "gdm_auth_user_add: Error starting xauth process: %s"
-msgstr "gdm_auth_user_add: Erreur au démarrage du processus xauth: %s"
-
-#: daemon/auth.c:113
-msgid "gdm_auth_user_add: Error forking xauth process."
-msgstr "gdm_auth_user_add: Erreur à la création du processus xauth."
-#: daemon/auth.c:143
-#, c-format
-msgid "gdm_auth_user_remove: Error starting xauth process: %s"
-msgstr "gdm_auth_user_remove: Erreur au démarrage du processus xauth: %s"
-
-#: daemon/auth.c:147
-msgid "gdm_auth_user_remove: Error forking xauth process."
-msgstr "gdm_auth_user_remove: Erreur à la création du processus xauth,"
-
-#: daemon/filecheck.c:50 daemon/filecheck.c:88
+#: daemon/filecheck.c:64 daemon/filecheck.c:102
#, c-format
msgid "%s: %s is not owned by uid %d."
msgstr "%s: %s n'appartient pas à l'uid %d. Ignore."
-#: daemon/filecheck.c:56 daemon/filecheck.c:95
+#: daemon/filecheck.c:70 daemon/filecheck.c:109
#, c-format
msgid "%s: %s is writable by group."
msgstr ""
"%s: %s peut être modifié par les membres du groupe. Les droits d'accès "
"devraient être 644. Ignore."
-#: daemon/filecheck.c:62
+#: daemon/filecheck.c:76
#, c-format
msgid "%s: %s is writable by other."
msgstr ""
"%s: %s peut être modifié par d'autres utilisateurs. Les droits d'accès "
"devraient être 755. Ignore."
-#: daemon/filecheck.c:81
+#: daemon/filecheck.c:95
#, c-format
msgid "%s: %s is not a regular file."
msgstr "%s: %s n'est pas un fichier. Ignore."
-#: daemon/filecheck.c:102
+#: daemon/filecheck.c:116
#, c-format
msgid "%s: %s is writable by group/other."
msgstr ""
"%s: %s peut être modifié par d'autres utilisateurs. Les droits d'accès "
"devraient être 755. Ignore."
-#: daemon/filecheck.c:109
+#: daemon/filecheck.c:123
#, c-format
msgid "%s: %s is bigger than sysadmin specified maximum file size."
msgstr ""
"%s: %s est plus grand que la taille maximum de fichiers définie par "
"l'administrateur système. Ignore."
-#: daemon/misc.c:121
+#: daemon/misc.c:128
#, c-format
msgid "gdm_exec_script: Failed starting: %s"
msgstr "gdm_exec_script: Échec du lancement: %s"
-#: daemon/misc.c:125
+#: daemon/misc.c:132
msgid "gdm_exec_script: Can't fork script process!"
msgstr "gdm_exec_script: Impossible de créer le processus de script!"
-#: daemon/misc.c:153
-#, c-format
-msgid "gdm_exec_command: Failed starting: %s"
-msgstr "gdm_exec_command: Échec du lancement: %s"
-
-#: daemon/misc.c:157
-msgid "gdm_exec_command: Can't fork process!"
-msgstr "gdm_exec_command: Impossible de créer le processus!"
-
-#: daemon/server.c:82 daemon/server.c:213
+#: daemon/server.c:84 daemon/server.c:207
msgid "gdm_server_start: Error setting up USR1 signal handler"
msgstr ""
"gdm_server_start: Erreur lors de la configuration de la procédure de prise "
"en charge du signal USR1"
-#: daemon/server.c:99
+#: daemon/server.c:101
#, c-format
msgid "gdm_server_start: Could not open logfile for display %s!"
msgstr ""
"gdm_server_start: Impossible d'ouvrir le fichier d'historique pour "
"l'affichage %s!"
-#: daemon/server.c:129
+#: daemon/server.c:130
msgid "gdm_server_start: Error setting USR1 to SIG_IGN"
msgstr "gdm_server_start: Erreur à l'affectation du signal USR1 à SIG_IGN"
-#: daemon/server.c:146
+#: daemon/server.c:147
#, c-format
msgid "gdm_server_start: Xserver not found: %s"
msgstr "gdm_server_start: Serveur X non trouvé: %s"
-#: daemon/server.c:152
+#: daemon/server.c:153
msgid "gdm_server_start: Can't fork Xserver process!"
msgstr "gdm_server_start: Impossible de créer le processus du server X!"
-#: daemon/server.c:178
+#: daemon/server.c:179
#, c-format
msgid "gdm_server_stop: Could not unlink auth file: %s!"
msgstr "gdm_server_stop: Impossible d'effacer le fichier d'autorisations: %s!"
-#: daemon/server.c:237
+#: daemon/server.c:233
msgid "gdm_server_restart: Error setting up ALARM signal handler"
msgstr ""
"gdm_server_restart: Erreur lors de la configuration de la procédure de prise "
"en charge du signal ALARM"
-#: daemon/slave.c:113
+#: daemon/slave.c:120
msgid "gdm_slave_init: Error setting up TERM/INT signal handler"
msgstr ""
"gdm_slave_init: Erreur lors de la configuration de la procédure de prise en "
"charge du signal TERM/INT"
-#: daemon/slave.c:121
+#: daemon/slave.c:128
msgid "gdm_slave_init: Error setting up CHLD signal handler"
msgstr ""
"gdm_slave_init: Erreur lors de la configuration de la procédure de prise en "
"charge du signal CHLD"
-#: daemon/slave.c:172
+#: daemon/slave.c:179
msgid "gdm_slave_greeter: Can't init pipe to gdmgreeter"
msgstr "gdm_slave_greeter: Impossible d'établir le pipe() vers le gdmgreeter"
-#: daemon/slave.c:197
+#: daemon/slave.c:204
#, c-format
msgid "gdm_slave_greeter: Couldn't set groupid to %d"
msgstr "gdm_slave_greeter: Impossible d'affecter l'id de groupe à %d"
-#: daemon/slave.c:200
+#: daemon/slave.c:207
#, c-format
msgid "gdm_slave_greeter: Couldn't set userid to %d"
msgstr "gdm_slave_greeter: Impossible d'affecter l'id d'utilisateur à %d"
-#: daemon/slave.c:210
+#: daemon/slave.c:217
#, c-format
msgid "gdm_slave_greeter: Error starting greeter on display %s"
msgstr ""
"gdm_slave_greeter: Erreur au lancement de la banière d'accueil (greeter) sur "
"l'écran %s"
-#: daemon/slave.c:213
+#: daemon/slave.c:220
msgid "gdm_slave_greeter: Can't fork gdmgreeter process"
msgstr "gdm_slave_greeter: Impossible de créer le processus gdmgreeter"
-#: daemon/slave.c:282
+#: daemon/slave.c:297
#, c-format
msgid "gdm_slave_session_init: User '%s' not found. Aborting."
msgstr "gdm_slave_session_init: Utilisateur '%s' inconnu. Abandon."
-#: daemon/slave.c:301
+#: daemon/slave.c:321
msgid ""
"gdm_slave_session_init: Execution of PreSession script returned > 0. "
"Aborting."
@@ -348,62 +314,62 @@ msgstr ""
"gdm_slave_session_init: L'exécution du script de pré-session a renvoyé une "
"valeur > 0. Abandon."
-#: daemon/slave.c:306
+#: daemon/slave.c:345
msgid "gdm_slave_session_init: Error forking user session"
msgstr ""
"gdm_slave_session_init: Erreur à la création de la session de l'utilisateur"
-#: daemon/slave.c:314
+#: daemon/slave.c:353
#, c-format
msgid "gdm_slave_session_init: Could not setgid %d. Aborting."
msgstr "gdm_slave_session_init: Impossible d'affecter le groupe à %d. Abandon."
-#: daemon/slave.c:317
+#: daemon/slave.c:356
#, c-format
msgid "gdm_slave_session_init: initgroups() failed for %s. Aborting."
msgstr "gdm_slave_session_init: Échec de initgroups() pour %s. Abandon."
-#: daemon/slave.c:320
+#: daemon/slave.c:359
#, c-format
msgid "gdm_slave_session_init: Could not become %s. Aborting."
msgstr "gdm_slave_session_init: Impossible de devenir %s. Abandon."
-#: daemon/slave.c:373
+#: daemon/slave.c:405
#, c-format
msgid "gdm_slave_session_init: Could not start session `%s'"
msgstr "gdm_slave_session_init: Impossible de démarrer la session `%s'"
-#: daemon/slave.c:547
+#: daemon/slave.c:580
#, c-format
msgid "gdm_slave_windows_kill_ioerror_handler: Fatal X error - Restarting %s"
msgstr ""
"gdm_slave_windows_kill_ioerror_handler: Erreur X fatale - Redémarrage de %s"
-#: daemon/slave.c:579
+#: daemon/slave.c:612
msgid "gdm_slave_xsync_ping: Error setting up ALARM signal handler"
msgstr ""
"gdm_slave_xsync_ping: Erreur lors de la configuration de la procédure de "
"prise en charge du signal ALARM"
-#: daemon/verify.c:124 daemon/verify.c:213 gui/gdmgreeter.c:1363
+#: daemon/verify.c:124 daemon/verify.c:215 gui/gdmlogin.c:1222
msgid "Login:"
msgstr "Login:"
-#: daemon/verify.c:132 daemon/verify.c:159 daemon/verify.c:217
+#: daemon/verify.c:132 daemon/verify.c:159 daemon/verify.c:219
#, c-format
msgid "Couldn't authenticate %s"
msgstr "Impossible d'identifier %s"
-#: daemon/verify.c:135 daemon/verify.c:220
+#: daemon/verify.c:135 daemon/verify.c:222
msgid "User unknown"
msgstr "Utilisateur inconnu"
-#: daemon/verify.c:141 daemon/verify.c:226
+#: daemon/verify.c:141 daemon/verify.c:228
#, c-format
msgid "Root login disallowed on display '%s'"
msgstr ""
-#: daemon/verify.c:144 daemon/verify.c:229
+#: daemon/verify.c:144 daemon/verify.c:231
msgid "Root login disallowed"
msgstr ""
@@ -431,143 +397,139 @@ msgstr "Impossible d'obtenir les autorisations pam (credentials) pour %s"
msgid "Couldn't open session for %s"
msgstr "Impossible d'ouvrir la session pour %s"
-#: daemon/verify.c:245 gui/gdmgreeter.c:1369
+#: daemon/verify.c:249
msgid "Password:"
msgstr "Mot de passe:"
-#: daemon/verify.c:250
+#: daemon/verify.c:254
msgid "Incorrect password"
msgstr "Mot de passe incorrect"
-#: daemon/xdmcp.c:172
+#: daemon/xdmcp.c:174
#, c-format
msgid "gdm_xdmcp_init: Could not get server hostname: %s!"
msgstr "gdm_xdmcp_init: Impossible d'obtenir le nom du serveur: %s!"
-#: daemon/xdmcp.c:183
+#: daemon/xdmcp.c:185
msgid "gdm_xdmcp_init: Could not create socket!"
msgstr "gdm_xdmcp_init: Impossible de créer la socket!"
-#: daemon/xdmcp.c:190
+#: daemon/xdmcp.c:192
msgid "gdm_xdmcp_init: Could not bind to XDMCP socket!"
msgstr "gdm_xdmcp_init: Impossible de se rattacher à la socket XDMCP!"
-#: daemon/xdmcp.c:225
+#: daemon/xdmcp.c:230
msgid "gdm_xdmcp_decode: Could not create XDMCP buffer!"
msgstr "gdm_xdmcp_decode: Impossible de créer le buffer XDMCP!"
-#: daemon/xdmcp.c:230
+#: daemon/xdmcp.c:235
msgid "gdm_xdmcp_decode: Could not read XDMCP header!"
msgstr "gdm_xdmcp_decode: Impossible de lire l'entête XDMCP!"
-#: daemon/xdmcp.c:235
+#: daemon/xdmcp.c:240
msgid "gdm_xdmcp_decode: Incorrect XDMCP version!"
msgstr "gdm_xdmcp_decode: Version de XDMCP incorrecte!"
-#: daemon/xdmcp.c:273
+#: daemon/xdmcp.c:276
#, c-format
msgid "gdm_xdmcp_decode_packet: Unknown opcode from host %s"
msgstr "gdm_xdmcp_decode_packet: opcode inconnu pour la machine %s"
-#: daemon/xdmcp.c:291
+#: daemon/xdmcp.c:294
msgid "gdm_xdmcp_handle_query: Could not extract authlist from packet"
msgstr ""
"gdm_xdmcp_query: Impossible d'extraire la liste des machines autorisées "
"à partir des données du paquet"
-#: daemon/xdmcp.c:302
+#: daemon/xdmcp.c:305
msgid "gdm_xdmcp_handle_query: Error in checksum"
msgstr "gdm_xdmcp_query: Erreur dans la somme de contrôle"
-#: daemon/xdmcp.c:333
+#: daemon/xdmcp.c:336
msgid "gdm_xdmcp_handle_forward_query: Could not read display address"
msgstr "gdm_xdmcp_handle_request: Impossible de lire le numéro de l'écran"
-#: daemon/xdmcp.c:339
+#: daemon/xdmcp.c:342
msgid "gdm_xdmcp_handle_forward_query: Could not read display port number"
msgstr "gdm_xdmcp_handle_request: Impossible de lire le numéro de l'écran"
-#: daemon/xdmcp.c:345
+#: daemon/xdmcp.c:348
msgid "gdm_xdmcp_handle_forward_query: Could not extract authlist from packet"
msgstr ""
"gdm_xdmcp_query: Impossible d'extraire la liste des machines autorisées "
"à partir des données du paquet"
-#: daemon/xdmcp.c:360
+#: daemon/xdmcp.c:363
msgid "gdm_xdmcp_handle_forward_query: Error in checksum"
msgstr "gdm_xdmcp_query: Erreur dans la somme de contrôle"
-#: daemon/xdmcp.c:399
-msgid "GNOME"
-msgstr "GNOME"
-
-#: daemon/xdmcp.c:423
+#: daemon/xdmcp.c:426
#, c-format
msgid "Denied XDMCP query from host %s"
msgstr "Demande XDMCP non autorisée par la machine %s"
-#: daemon/xdmcp.c:425
+#: daemon/xdmcp.c:428
msgid "Display not authorized to connect"
msgstr "Pas d'autorisation pour se connecter à cet écran"
-#: daemon/xdmcp.c:458
+#: daemon/xdmcp.c:461
#, c-format
msgid "gdm_xdmcp_handle_request: Got REQUEST from banned host %s"
msgstr ""
"gdm_xdmcp_handle_request: Réception de REQUEST d'une machine interdite %s"
-#: daemon/xdmcp.c:465
+#: daemon/xdmcp.c:468
msgid "gdm_xdmcp_handle_request: Could not read Display Number"
msgstr "gdm_xdmcp_handle_request: Impossible de lire le numéro de l'écran"
-#: daemon/xdmcp.c:471
+#: daemon/xdmcp.c:474
msgid "gdm_xdmcp_handle_request: Could not read Connection Type"
msgstr "gdm_xdmcp_handle_request: Impossible de lire le type de connection"
-#: daemon/xdmcp.c:477
+#: daemon/xdmcp.c:480
msgid "gdm_xdmcp_handle_request: Could not read Client Address"
msgstr "gdm_xdmcp_handle_request: Impossible de lire l'adresse du client"
-#: daemon/xdmcp.c:483
+#: daemon/xdmcp.c:486
msgid "gdm_xdmcp_handle_request: Could not read Authentication Names"
msgstr ""
"gdm_xdmcp_handle_request: Impossible de lire les noms de l'authentification"
-#: daemon/xdmcp.c:489
+#: daemon/xdmcp.c:492
msgid "gdm_xdmcp_handle_request: Could not read Authentication Data"
msgstr ""
"gdm_xdmcp_handle_request: Impossible de lire les données de "
"l'authentification"
-#: daemon/xdmcp.c:495
+#: daemon/xdmcp.c:498
msgid "gdm_xdmcp_handle_request: Could not read Authorization List"
msgstr ""
"gdm_xdmcp_handle_request: Impossible de lire la liste de l'authentification"
-#: daemon/xdmcp.c:506
+#: daemon/xdmcp.c:509
msgid "gdm_xdmcp_handle_request: Could not read Manufacturer ID"
msgstr "gdm_xdmcp_handle_request: Impossible de lire l'ID du fabricant"
-#: daemon/xdmcp.c:524
+#: daemon/xdmcp.c:527
#, c-format
msgid "gdm_xdmcp_handle_request: Failed checksum from %s"
msgstr "gdm_xdmcp_handle_request: Erreur de la somme de contrôle pour %s"
-#: daemon/xdmcp.c:642
+#: daemon/xdmcp.c:640
#, c-format
msgid "gdm_xdmcp_handle_manage: Got Manage from banned host %s"
msgstr ""
"gdm_xdmcp_handle_manage: Réception de \"Manage\" d'une machine interdite %s"
-#: daemon/xdmcp.c:649
+#: daemon/xdmcp.c:647
msgid "gdm_xdmcp_handle_manage: Could not read Session ID"
msgstr "gdm_xdmcp_handle_manage: Impossible de lire l'ID de session"
-#: daemon/xdmcp.c:655
+#: daemon/xdmcp.c:653
msgid "gdm_xdmcp_handle_manage: Could not read Display Number"
msgstr "gdm_xdmcp_handle_manage: Impossible de lire le numéro de l'écran"
-#: daemon/xdmcp.c:664
+#: daemon/xdmcp.c:662
msgid "gdm_xdmcp_manage: Could not read Display Class"
msgstr "gdm_xdmcp_manage: Impossible de lire le classe de l'écran"
@@ -592,302 +554,331 @@ msgstr "gdm_xdmcp_handle_keepalive: Impossible de lire de numéro de l'écran"
msgid "gdm_xdmcp_handle_keepalive: Could not read Session ID"
msgstr "gdm_xdmcp_handle_keepalive: Impossible de lire l'ID de session"
-#: gui/gdmchooser.c:336
+#: gui/gdmchooser.c:338
#, c-format
msgid "gdm_chooser_parse_config: No configuration file: %s. Aborting."
msgstr ""
"gdm_chooser_parse_config: Pas de fichier de configuration: %s. Abandon."
-#: gui/gdmchooser.c:448
+#: gui/gdmchooser.c:447
#, c-format
msgid "Can't open default host icon: %s"
msgstr "Impossible d'ouvrir l'icône de la machine par défaut: %s"
#. Buttons
-#: gui/gdmchooser.c:515
+#: gui/gdmchooser.c:514
msgid "Connect"
msgstr "Connecte"
-#: gui/gdmchooser.c:522
+#: gui/gdmchooser.c:521
msgid "Rescan"
msgstr "Détecte"
-#: gui/gdmchooser.c:528
+#: gui/gdmchooser.c:527
msgid "Cancel"
msgstr "Annuler"
-#: gui/gdmchooser.c:579 gui/gdmgreeter.c:1672 gui/gdmlogin.c:1122
-msgid "main: Error setting up HUP signal handler"
+#: gui/gdmchooser.c:578
+#, fuzzy
+msgid "gdm_signals_init: Error setting up HUP signal handler"
msgstr ""
-"main: Erreur lors de la configuration de la procédure de prise en charge du "
-"signal HUP"
+"gdm_slave_init: Erreur lors de la configuration de la procédure de prise en "
+"charge du signal CHLD"
-#: gui/gdmchooser.c:582 gui/gdmgreeter.c:1675 gui/gdmlogin.c:1125
-msgid "main: Error setting up INT signal handler"
+#: gui/gdmchooser.c:581
+#, fuzzy
+msgid "gdm_signals_init: Error setting up INT signal handler"
msgstr ""
-"main: Erreur lors de la configuration de la procédure de prise en charge du "
-"signal INT"
+"gdm_main: Erreur lors de la configuration de la procédure de prise en charge "
+"du signal INT"
-#: gui/gdmchooser.c:585 gui/gdmgreeter.c:1678 gui/gdmlogin.c:1128
-msgid "main: Error setting up TERM signal handler"
+#: gui/gdmchooser.c:584
+#, fuzzy
+msgid "gdm_signals_init: Error setting up TERM signal handler"
msgstr ""
-"main: Erreur lors de la configuration de la procédure de prise en charge du "
-"signal TERM"
-
-#: gui/gdmgreeter.c:155
-msgid "Gnome Display Manager"
-msgstr "Gestionnaire d'Affichage Gnome"
-
-#: gui/gdmgreeter.c:157
-msgid "Copyright Martin K. Petersen (C) 1998, 1999"
-msgstr "Copyright Martin K. Petersen (C) 1998, 1999"
+"gdm_main: Erreur lors de la configuration de la procédure de prise en charge "
+"du signal TERM"
-#: gui/gdmgreeter.c:159 gui/gdmlogin.c:346
-msgid ""
-"gdm manages local and remote displays and provides the user with a login "
-"window."
+#: gui/gdmchooser.c:592 gui/gdmlogin.c:1524
+msgid "Could not set signal mask!"
msgstr ""
-"gdm gère les écrans locaux et distants et fournit à l'utilisateur une "
-"fenêtre de connection."
-#: gui/gdmgreeter.c:194 gui/gdmlogin.c:274
+#: gui/gdmlogin.c:276
msgid "gdm_parse_enriched_string: String too long!"
msgstr "gdm_parse_enriched_string: Chaîne trop longue!"
-#: gui/gdmgreeter.c:195 gui/gdmlogin.c:275
+#: gui/gdmlogin.c:277
msgid "Welcome to "
msgstr "Bienvenue sur "
-#: gui/gdmgreeter.c:199 gui/gdmlogin.c:279
+#: gui/gdmlogin.c:281
msgid "gdm_parse_enriched_string: Could not malloc temporary buffer!"
msgstr "gdm_parse_enriched_string: Impossible d'allouer un buffer temporaire!"
-#: gui/gdmgreeter.c:273
-msgid "Logo not found. No image will be displayed!"
-msgstr "Logo non trouvé. Aucune image ne sera affichée!"
+#: gui/gdmlogin.c:358
+msgid "Are you sure you want to reboot the machine?"
+msgstr "Voulez-vous vraiment redémarrer le système?"
-#: gui/gdmgreeter.c:299
-#, c-format
-msgid "gdm_greeter_parse_config: No configuration file: %s. Aborting."
-msgstr ""
-"gdm_greeter_parse_config: Pas de fichier de configuration: %s. Abandon."
+#: gui/gdmlogin.c:371
+msgid "Are you sure you want to halt the machine?"
+msgstr "Voulez-vous vraiment arrêter le système?"
-#: gui/gdmgreeter.c:323 gui/gdmlogin.c:422
+#: gui/gdmlogin.c:388
#, c-format
-msgid "messages/welcome=Welcome to %h"
-msgstr "messages/welcome=Bienvenue sur %h"
+msgid "gdm_login_parse_config: No configuration file: %s. Aborting."
+msgstr "gdm_login_parse_config: Pas de fichier de configuration: %s. Abandon."
-#: gui/gdmgreeter.c:424 gui/gdmlogin.c:546 gui/gdmlogin.c:576
+#: gui/gdmlogin.c:520
#, c-format
msgid ""
-"You have chosen %s for this session, but your default setting is %s.\n"
+"Your preferred session type %s is not installed on this machine.\n"
"Do you wish to make %s the default for future sessions?"
msgstr ""
-"Vous avez choisi %s pour cette session, mais votre configuration par défaut "
-"est %s.\n"
-"Souhaitez-vous faire de %s votre configuration par défaut pour vos futures "
-"sessions?"
+"Votre type favori de session %s n'est pas installé sur cette machine.\n"
+"Souhaitez-vous que %s devienne le type par défaut de vos futures sessions?"
-#: gui/gdmgreeter.c:432
+#: gui/gdmlogin.c:539 gui/gdmlogin.c:569
#, c-format
msgid ""
-"Your previous session type %s is not installed on this machine.\n"
+"You have chosen %s for this session, but your default setting is %s.\n"
"Do you wish to make %s the default for future sessions?"
msgstr ""
-"Votre type de session précédente %s n'est pas installé sur cette machine.\n"
-"Souhaitez-vous faire de %s votre configuration par défaut pour vos\n"
-"futures sessions?"
-
-#: gui/gdmgreeter.c:440
-#, c-format
-msgid ""
-"Your previous session type %s is not installed on this machine.\n"
-"You will be logged in using the %s environment."
-msgstr ""
-"Votre type de session précédente %s n'est pas installé sur cette machine.\n"
-"Vous allez vos connecter en utilisant l'environnement %s."
-
-#: gui/gdmgreeter.c:453
-#, c-format
-msgid ""
-"You have chosen the language %s for this session, but your default setting "
-"is %s.\n"
-"Do you wish to make %s the default language for future sessions?"
-msgstr ""
-"Vous avez choisi le langage %s pour cette session, mais votre language par "
-"défaut est %s.\n"
-"Souhaitez-vous make de %s votre language par défaut pour vos futures "
-"sessions?"
-
-#: gui/gdmgreeter.c:461
-#, c-format
-msgid ""
-"Your previous language %s is not installed on this machine.\n"
-"Do you wish to make %s the default language for future sessions?"
-msgstr ""
-"Le langage %s que vous utilisiez lors de votre précédente session n'est pas "
-"installé sur cette machine.\n"
-"Souhaitez-vous make de %s votre language par défaut pour vos futures "
+"Vous avez choisi %s pour cette session, mais votre configuration par défaut "
+"est %s.\n"
+"Souhaitez-vous faire de %s votre configuration par défaut pour vos futures "
"sessions?"
-#: gui/gdmgreeter.c:469
+#: gui/gdmlogin.c:625
#, c-format
-msgid ""
-"Your previous language %s is not installed on this machine.\n"
-"Your environment will be %s."
-msgstr ""
-"Le langage %s que vous utilisiez lors de votre précédente session n'est pas "
-"installé sur cette machine.\n"
-"Votre environnement sera %s."
-
-#: gui/gdmgreeter.c:500
-msgid "Invalid username or password!"
-msgstr "Mot de passe ou nom d'utilisateur invalide!"
-
-#: gui/gdmgreeter.c:526 gui/gdmlogin.c:374
-msgid "Are you sure you want to reboot the machine?"
-msgstr "Voulez-vous vraiment redémarrer le système?"
+msgid "%s session selected"
+msgstr "session %s sélectionnée"
-#: gui/gdmgreeter.c:555 gui/gdmlogin.c:386
-msgid "Are you sure you want to halt the machine?"
-msgstr "Voulez-vous vraiment arrêter le système?"
+#: gui/gdmlogin.c:641 gui/gdmlogin.c:738
+msgid "Last"
+msgstr "Précédente"
-#: gui/gdmgreeter.c:812
-msgid "gdm_greeter_session_init: Session script directory not found!"
+#: gui/gdmlogin.c:656
+msgid "gdm_login_session_init: Session script directory not found!"
msgstr ""
-"gdm_greeter_session_init: Impossible de trouver le répertoire des scripts de "
+"gdm_login_session_init: Impossible de trouver le répertoire des scripts de "
"session!"
-#: gui/gdmgreeter.c:865 gui/gdmlogin.c:713
+#: gui/gdmlogin.c:703
msgid "No session scripts found. Aborting!"
msgstr "Aucun script de session. Abandon!"
-#: gui/gdmgreeter.c:869 gui/gdmlogin.c:717
+#: gui/gdmlogin.c:707
#, c-format
msgid "No default session link found. Using %s.\n"
msgstr "Pas de lien vers une session par défaut. Utilisation de %s.\n"
-#. Login button
-#: gui/gdmgreeter.c:1029
-msgid "Login"
-msgstr "Login"
+#: gui/gdmlogin.c:721
+#, c-format
+msgid "%s language selected"
+msgstr "langage %s sélectionné"
+
+#: gui/gdmlogin.c:753
+msgid "A-M"
+msgstr "A-M"
-#. Init sessions menu
-#: gui/gdmgreeter.c:1041
-msgid "Sessions"
-msgstr "Sessions"
+#: gui/gdmlogin.c:759
+msgid "N-Z"
+msgstr "N-Z"
-#. Language selection support
-#: gui/gdmgreeter.c:1048
-msgid "Languages"
-msgstr "Langages"
+#: gui/gdmlogin.c:765
+msgid "Other"
+msgstr "Autre"
-#: gui/gdmgreeter.c:1058 gui/gdmlogin.c:979
+#: gui/gdmlogin.c:1061
+msgid "Session"
+msgstr "Session"
+
+#: gui/gdmlogin.c:1068
+msgid "Language"
+msgstr "Langage"
+
+#: gui/gdmlogin.c:1075
msgid "Reboot..."
msgstr "Redémarrage..."
-#: gui/gdmgreeter.c:1064 gui/gdmlogin.c:985
+#: gui/gdmlogin.c:1082
msgid "Halt..."
msgstr "Arrêt..."
-#: gui/gdmgreeter.c:1071
-msgid "Suspend"
-msgstr "Suspension"
-
-#: gui/gdmgreeter.c:1078 gui/gdmlogin.c:991
+#: gui/gdmlogin.c:1089
msgid "System"
msgstr "Système"
-#: gui/gdmgreeter.c:1086 gui/gdmlogin.c:1005
+#: gui/gdmlogin.c:1097
#, c-format
msgid "Can't open icon file: %s. Suspending iconify feature!"
msgstr ""
"Impossible d'ouvrir le fichier icône: %s. L'utilisation des icônes est "
"suspendue!"
-#: gui/gdmgreeter.c:1090 gui/gdmlogin.c:1009
+#: gui/gdmlogin.c:1100
msgid "Iconify"
msgstr "Iconifier"
-#. Option button
-#: gui/gdmgreeter.c:1099
-msgid "Options..."
-msgstr "Options..."
+#: gui/gdmlogin.c:1257
+msgid "Please enter your login"
+msgstr ""
-#: gui/gdmgreeter.c:1531
-#, c-format
-msgid "Can't open NofaceImageFile: %s. Suspending face browser!"
+#: gui/gdmlogin.c:1442
+#, fuzzy, c-format
+msgid "Can't open DefaultImage: %s. Suspending face browser!"
msgstr ""
"Impossible d'ouvrir NofaceImageFile: %s. L'utilisation de l'outils de "
"sélection des visages est suspendue!"
-#: gui/gdmgreeter.c:1686
-msgid "main: Error setting up USR1 signal handler"
+#: gui/gdmlogin.c:1510
+msgid "main: Error setting up HUP signal handler"
msgstr ""
"main: Erreur lors de la configuration de la procédure de prise en charge du "
-"signal USR1"
+"signal HUP"
-#: gui/gdmgreeter.c:1694
-msgid "main: Error setting up USR2 signal handler"
+#: gui/gdmlogin.c:1513
+msgid "main: Error setting up INT signal handler"
msgstr ""
"main: Erreur lors de la configuration de la procédure de prise en charge du "
-"signal USR2"
-
-#: gui/gdmlogin.c:402
-#, c-format
-msgid "gdm_login_parse_config: No configuration file: %s. Aborting."
-msgstr "gdm_login_parse_config: Pas de fichier de configuration: %s. Abandon."
-
-#: gui/gdmlogin.c:527
-#, c-format
-msgid ""
-"Your preferred session type %s is not installed on this machine.\n"
-"Do you wish to make %s the default for future sessions?"
-msgstr ""
-"Votre type favori de session %s n'est pas installé sur cette machine.\n"
-"Souhaitez-vous que %s devienne le type par défaut de vos futures sessions?"
-
-#: gui/gdmlogin.c:635
-#, c-format
-msgid "%s session selected"
-msgstr "session %s sélectionnée"
-
-#: gui/gdmlogin.c:651 gui/gdmlogin.c:742
-msgid "Last"
-msgstr "Précédente"
+"signal INT"
-#: gui/gdmlogin.c:666
-msgid "gdm_login_session_init: Session script directory not found!"
+#: gui/gdmlogin.c:1516
+msgid "main: Error setting up TERM signal handler"
msgstr ""
-"gdm_login_session_init: Impossible de trouver le répertoire des scripts de "
-"session!"
-
-#: gui/gdmlogin.c:728
-#, c-format
-msgid "%s language selected"
-msgstr "langage %s sélectionné"
-
-#: gui/gdmlogin.c:755
-msgid "A-M"
-msgstr "A-M"
-
-#: gui/gdmlogin.c:761
-msgid "N-Z"
-msgstr "N-Z"
-
-#: gui/gdmlogin.c:767
-msgid "Other"
-msgstr "Autre"
-
-#: gui/gdmlogin.c:965
-msgid "Session"
-msgstr "Session"
-
-#: gui/gdmlogin.c:972
-msgid "Language"
-msgstr "Langage"
-
-#: gui/gdmlogin.c:998
-msgid "Host chooser"
-msgstr "Sélection de la machine"
+"main: Erreur lors de la configuration de la procédure de prise en charge du "
+"signal TERM"
+#~ msgid "gdm_auth_secure_display: Could not unlink %s file: %s"
+#~ msgstr "gdm_auth_secure_display: Impossible d'effacer le fichier %s: %s"
+
+#~ msgid ""
+#~ "gdm_auth_secure_display: Error starting xauth process: %s. Running insecure!"
+#~ msgstr ""
+#~ "gdm_auth_secure_display: Erreur au lancement de xauth: %s. Le fonctionnement "
+#~ "se fera donc en mode non-sécurisé!"
+
+#~ msgid ""
+#~ "gdm_auth_secure_display: Error forking xauth process. Running insecure!"
+#~ msgstr ""
+#~ "gdm_auth_secure_display: Erreur à la création du processus xauth: %s. Le "
+#~ "fonctionnement se fera donc en mode non-sécurisé!"
+
+#~ msgid "gdm_auth_user_add: Error starting xauth process: %s"
+#~ msgstr "gdm_auth_user_add: Erreur au démarrage du processus xauth: %s"
+
+#~ msgid "gdm_auth_user_add: Error forking xauth process."
+#~ msgstr "gdm_auth_user_add: Erreur à la création du processus xauth."
+
+#~ msgid "gdm_auth_user_remove: Error forking xauth process."
+#~ msgstr "gdm_auth_user_remove: Erreur à la création du processus xauth,"
+
+#~ msgid "gdm_exec_command: Failed starting: %s"
+#~ msgstr "gdm_exec_command: Échec du lancement: %s"
+
+#~ msgid "gdm_exec_command: Can't fork process!"
+#~ msgstr "gdm_exec_command: Impossible de créer le processus!"
+
+#~ msgid "GNOME"
+#~ msgstr "GNOME"
+
+#~ msgid "Gnome Display Manager"
+#~ msgstr "Gestionnaire d'Affichage Gnome"
+
+#~ msgid "Copyright Martin K. Petersen (C) 1998, 1999"
+#~ msgstr "Copyright Martin K. Petersen (C) 1998, 1999"
+
+#~ msgid ""
+#~ "gdm manages local and remote displays and provides the user with a login "
+#~ "window."
+#~ msgstr ""
+#~ "gdm gère les écrans locaux et distants et fournit à l'utilisateur une "
+#~ "fenêtre de connection."
+
+#~ msgid "Logo not found. No image will be displayed!"
+#~ msgstr "Logo non trouvé. Aucune image ne sera affichée!"
+
+#~ msgid "gdm_greeter_parse_config: No configuration file: %s. Aborting."
+#~ msgstr ""
+#~ "gdm_greeter_parse_config: Pas de fichier de configuration: %s. Abandon."
+
+#~ msgid "messages/welcome=Welcome to %h"
+#~ msgstr "messages/welcome=Bienvenue sur %h"
+
+#~ msgid ""
+#~ "Your previous session type %s is not installed on this machine.\n"
+#~ "Do you wish to make %s the default for future sessions?"
+#~ msgstr ""
+#~ "Votre type de session précédente %s n'est pas installé sur cette machine.\n"
+#~ "Souhaitez-vous faire de %s votre configuration par défaut pour vos\n"
+#~ "futures sessions?"
+
+#~ msgid ""
+#~ "Your previous session type %s is not installed on this machine.\n"
+#~ "You will be logged in using the %s environment."
+#~ msgstr ""
+#~ "Votre type de session précédente %s n'est pas installé sur cette machine.\n"
+#~ "Vous allez vos connecter en utilisant l'environnement %s."
+
+#~ msgid ""
+#~ "You have chosen the language %s for this session, but your default setting "
+#~ "is %s.\n"
+#~ "Do you wish to make %s the default language for future sessions?"
+#~ msgstr ""
+#~ "Vous avez choisi le langage %s pour cette session, mais votre language par "
+#~ "défaut est %s.\n"
+#~ "Souhaitez-vous make de %s votre language par défaut pour vos futures "
+#~ "sessions?"
+
+#~ msgid ""
+#~ "Your previous language %s is not installed on this machine.\n"
+#~ "Do you wish to make %s the default language for future sessions?"
+#~ msgstr ""
+#~ "Le langage %s que vous utilisiez lors de votre précédente session n'est pas "
+#~ "installé sur cette machine.\n"
+#~ "Souhaitez-vous make de %s votre language par défaut pour vos futures "
+#~ "sessions?"
+
+#~ msgid ""
+#~ "Your previous language %s is not installed on this machine.\n"
+#~ "Your environment will be %s."
+#~ msgstr ""
+#~ "Le langage %s que vous utilisiez lors de votre précédente session n'est pas "
+#~ "installé sur cette machine.\n"
+#~ "Votre environnement sera %s."
+
+#~ msgid "Invalid username or password!"
+#~ msgstr "Mot de passe ou nom d'utilisateur invalide!"
+
+#~ msgid "gdm_greeter_session_init: Session script directory not found!"
+#~ msgstr ""
+#~ "gdm_greeter_session_init: Impossible de trouver le répertoire des scripts de "
+#~ "session!"
+
+#~ msgid "Login"
+#~ msgstr "Login"
+
+#~ msgid "Sessions"
+#~ msgstr "Sessions"
+
+#~ msgid "Languages"
+#~ msgstr "Langages"
+
+#~ msgid "Suspend"
+#~ msgstr "Suspension"
+
+#~ msgid "Options..."
+#~ msgstr "Options..."
+
+#~ msgid "main: Error setting up USR1 signal handler"
+#~ msgstr ""
+#~ "main: Erreur lors de la configuration de la procédure de prise en charge du "
+#~ "signal USR1"
+
+#~ msgid "main: Error setting up USR2 signal handler"
+#~ msgstr ""
+#~ "main: Erreur lors de la configuration de la procédure de prise en charge du "
+#~ "signal USR2"
+
+#~ msgid "Host chooser"
+#~ msgstr "Sélection de la machine"
diff --git a/po/no.po b/po/no.po
index 95cbccfe..4e9d6159 100644
--- a/po/no.po
+++ b/po/no.po
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: gdm 2.0.0\n"
-"POT-Creation-Date: 1999-07-30 02:38+0200\n"
+"POT-Creation-Date: 1999-08-12 00:12+0200\n"
"PO-Revision-Date: 1999-07-18 23:28+02:00\n"
"Last-Translator: Kjartan Maraas <kmaraas@online.no>\n"
"Language-Team: Norwegian <no@li.org>\n"
@@ -13,68 +13,68 @@ msgstr ""
"Content-Type: text/plain; charset=iso-8859-1\n"
"Content-Transfer-Encoding: 8-bit\n"
-#: daemon/gdm.c:137
+#: daemon/gdm.c:163
#, c-format
msgid "gdm_config_parse: No configuration file: %s. Aborting."
msgstr "gdm_config_parse: Ingen konfigurasjonsfil: %s. Avbryter."
-#: daemon/gdm.c:178
+#: daemon/gdm.c:211
msgid "gdm_config_parse: No greeter specified and default not found."
msgstr "gdm_config_parse: Ingen velkomst spesifisert og forvalg ikke funnet."
-#: daemon/gdm.c:190
+#: daemon/gdm.c:223
msgid "gdm_config_parse: No authdir specified and default not found."
msgstr ""
"gdm_config_parse: Ingen autentiseringskatalog spesifisert og forvalg ikke "
"funnet."
-#: daemon/gdm.c:208
+#: daemon/gdm.c:241
msgid ""
"gdm_config_parse: No sessions directory specified and default not found."
msgstr ""
"gdm_config_parse: Ingen sesjonskatalog spesifisert og forvalgt ikke funnet."
-#: daemon/gdm.c:220
+#: daemon/gdm.c:253
msgid "gdm_config_parse: Invalid server line in config file. Ignoring!"
msgstr "gdm_config_parse: Ugyldig tjenerlinje i konfigurasjonsfil. Ignorerer!"
-#: daemon/gdm.c:226
+#: daemon/gdm.c:259
msgid ""
"gdm_config_parse: Xdmcp disabled and no local servers defined. Aborting!"
msgstr ""
"gdm_config_parse: Xdmcp slått av og ingen lokale tjenere definert. Avbryter!"
-#: daemon/gdm.c:231
+#: daemon/gdm.c:264
#, c-format
msgid "gdm_config_parse: Can't find the gdm user (%s). Aborting!"
msgstr "gdm_config_parse: Kan ikke finne gdm brukeren (%s). Avbryter!"
-#: daemon/gdm.c:236
+#: daemon/gdm.c:269
msgid "gdm_config_parse: The gdm user should not be root. Aborting!"
msgstr "gdm_config_parse: Brukeren for gdm bør ikke være root. Avbryter!"
-#: daemon/gdm.c:241
+#: daemon/gdm.c:274
#, c-format
msgid "gdm_config_parse: Can't find the gdm group (%s). Aborting!"
msgstr "gdm_config_parse: Kan ikke finne gdm gruppen (%s). Avbryter."
-#: daemon/gdm.c:247
+#: daemon/gdm.c:279
msgid "gdm_config_parse: The gdm group should not be root. Aborting!"
msgstr "gdm_config_parse: Gruppen for gdm bør ikke være root. Avbryter!"
-#: daemon/gdm.c:254
+#: daemon/gdm.c:286
#, c-format
msgid "gdm_config_parse: Authdir %s does not exist. Aborting."
msgstr ""
"gdm_config_parse: Autentiseringskatalogen %s eksisterer ikke. Avbryter."
-#: daemon/gdm.c:257
+#: daemon/gdm.c:289
#, c-format
msgid "gdm_config_parse: Authdir %s is not a directory. Aborting."
msgstr ""
"gdm_config_parse: Autentiseringskatalogen %s er ikke en katalog. Avbryter."
-#: daemon/gdm.c:260
+#: daemon/gdm.c:292
#, c-format
msgid ""
"gdm_config_parse: Authdir %s is not owned by user %s, group %s. Aborting."
@@ -82,7 +82,7 @@ msgstr ""
"gdm_config_parse: Autentiseringskatalogen %s er eies ikke av bruker %s, "
"gruppe %s. Avbryter."
-#: daemon/gdm.c:263
+#: daemon/gdm.c:296
#, c-format
msgid ""
"gdm_config_parse: Authdir %s has wrong permissions. Should be 750. Aborting."
@@ -90,48 +90,50 @@ msgstr ""
"gdm_config_parse: Autentiseringskatalogen %s har ikke riktige "
"tilgangsrettigheter. Skal være 750. Avbryter."
-#: daemon/gdm.c:319
+#: daemon/gdm.c:354
#, c-format
msgid "gdm_display_manage: Failed forking gdm slave process for %d"
msgstr "gdm_display_manage: Feil under starting av gdm slaveprosess for %d"
-#: daemon/gdm.c:398
+#: daemon/gdm.c:433
#, c-format
msgid "gdm_child_action: Aborting display %s"
msgstr "gdm_child_action: Avbryter skjerm %s"
-#: daemon/gdm.c:403
+#: daemon/gdm.c:438
msgid "gdm_child_action: Master rebooting..."
msgstr "gdm_child_action: Mester starter på nytt..."
-#: daemon/gdm.c:409
+#: daemon/gdm.c:444
#, c-format
msgid "gdm_child_action: Reboot failed: %s"
msgstr "gdm_child_action: Omstart feilet: %s"
-#: daemon/gdm.c:413
+#: daemon/gdm.c:448
msgid "gdm_child_action: Master halting..."
msgstr "gdm_child_action: Mester stopper..."
-#: daemon/gdm.c:419
+#: daemon/gdm.c:454
#, c-format
msgid "gdm_child_action: Halt failed: %s"
msgstr "gdm_child_action: Stopp feilet: %s"
-#: daemon/gdm.c:513
+#: daemon/gdm.c:551
msgid "gdm_daemonify: fork() failed!"
msgstr "gdm_daemonify: fork() feilet!"
-#: daemon/gdm.c:516
+#: daemon/gdm.c:554
#, c-format
msgid "gdm_daemonify: setsid() failed: %s!"
msgstr "gdm_daemonify: setsid() feilet: %s!"
-#: daemon/gdm.c:541
-msgid "Only root wants to run gdm\n"
+#. XDM compliant error message
+#: daemon/gdm.c:580
+#, fuzzy
+msgid "Only root wants to run x^hgdm\n"
msgstr "Bare root vil kjøre gdm\n"
-#: daemon/gdm.c:559
+#: daemon/gdm.c:601
msgid ""
"gdm already running. Aborting!\n"
"\n"
@@ -139,7 +141,7 @@ msgstr ""
"gdm kjører allerede. Avbryter!\n"
"\n"
-#: daemon/gdm.c:564
+#: daemon/gdm.c:607
#, c-format
msgid ""
"According to %s, gdm was already running (%d),\n"
@@ -148,173 +150,137 @@ msgstr ""
"I følge %s, kjørte gdm allerede (%d), \n"
"men ser ut til å ha blitt myrdet på mysterisk vis.\n"
-#: daemon/gdm.c:585
+#: daemon/gdm.c:629
msgid "gdm_main: Error setting up TERM signal handler"
msgstr "gdm_main: Feil under oppsett av TERM signalhåndtereren"
-#: daemon/gdm.c:588
+#: daemon/gdm.c:632
msgid "gdm_main: Error setting up INT signal handler"
msgstr "gdm_main: Feil under oppsett av INT signalhåndtereren"
-#: daemon/gdm.c:596
+#: daemon/gdm.c:640
msgid "gdm_main: Error setting up CHLD signal handler"
msgstr "gdm_main: Feil under oppsett av CHLD signalhåndtereren"
-#: daemon/auth.c:62
-#, c-format
-msgid "gdm_auth_secure_display: Could not unlink %s file: %s"
-msgstr "gdm_auth_secure_display: Kunne ikke kjøre unlink på %s fil: %s"
+#: daemon/auth.c:271
+#, fuzzy, c-format
+msgid "gdm_auth_user_remove: Ignoring suspicious looking cookie file %s"
+msgstr "gdm_auth_user_remove: Feil under oppstart av xauth prosess: %s"
-#: daemon/auth.c:73
+#: daemon/filecheck.c:58
#, c-format
-msgid ""
-"gdm_auth_secure_display: Error starting xauth process: %s. Running insecure!"
+msgid "%s: Directory %s does not exist."
msgstr ""
-"gdm_auth_secure_display: Feil under oppstart av xauth prosessen: %s. Kjører "
-"usikkert!"
-
-#: daemon/auth.c:77
-msgid "gdm_auth_secure_display: Error forking xauth process. Running insecure!"
-msgstr ""
-"gdm_auth_secure_display: Feil under splitting av xauth prosess. Kjører "
-"usikkert!"
-
-#: daemon/auth.c:109
-#, c-format
-msgid "gdm_auth_user_add: Error starting xauth process: %s"
-msgstr "gdm_auth_user_add: Feil under oppstart av xauth prosess: %s"
-#: daemon/auth.c:113
-msgid "gdm_auth_user_add: Error forking xauth process."
-msgstr "gdm_auth_user_add: Feil under splitting av xauth prosess."
-
-#: daemon/auth.c:143
-#, c-format
-msgid "gdm_auth_user_remove: Error starting xauth process: %s"
-msgstr "gdm_auth_user_remove: Feil under oppstart av xauth prosess: %s"
-
-#: daemon/auth.c:147
-msgid "gdm_auth_user_remove: Error forking xauth process."
-msgstr "gdm_auth_user_remove: Feil under splitting av xauth prosess."
-
-#: daemon/filecheck.c:50 daemon/filecheck.c:88
+#: daemon/filecheck.c:64 daemon/filecheck.c:102
#, c-format
msgid "%s: %s is not owned by uid %d."
msgstr "%s: %s eies ikke av uid %d."
-#: daemon/filecheck.c:56 daemon/filecheck.c:95
+#: daemon/filecheck.c:70 daemon/filecheck.c:109
#, c-format
msgid "%s: %s is writable by group."
msgstr "%s: %s er skrivbar av gruppe."
-#: daemon/filecheck.c:62
+#: daemon/filecheck.c:76
#, c-format
msgid "%s: %s is writable by other."
msgstr "%s: %s er skrivbar av andre."
-#: daemon/filecheck.c:81
+#: daemon/filecheck.c:95
#, c-format
msgid "%s: %s is not a regular file."
msgstr "%s: %s er ikke en vanlig fil."
-#: daemon/filecheck.c:102
+#: daemon/filecheck.c:116
#, c-format
msgid "%s: %s is writable by group/other."
msgstr "%s: %s er skrivbar av gruppe/andre."
-#: daemon/filecheck.c:109
+#: daemon/filecheck.c:123
#, c-format
msgid "%s: %s is bigger than sysadmin specified maximum file size."
msgstr ""
"%s: %s er større enn maksimum filstørrelse spesifisert av "
"systemadministrator."
-#: daemon/misc.c:121
+#: daemon/misc.c:128
#, c-format
msgid "gdm_exec_script: Failed starting: %s"
msgstr "gdm_exec_script: Feil under oppstart: %s"
-#: daemon/misc.c:125
+#: daemon/misc.c:132
msgid "gdm_exec_script: Can't fork script process!"
msgstr "gdm_exec_script: Kan ikke splitte skriptprosess!"
-#: daemon/misc.c:153
-#, c-format
-msgid "gdm_exec_command: Failed starting: %s"
-msgstr "gdm_exec_command: Feil under oppstart: %s"
-
-#: daemon/misc.c:157
-msgid "gdm_exec_command: Can't fork process!"
-msgstr "gdm_exec_command: Kan ikke splitte prosessen!"
-
-#: daemon/server.c:82 daemon/server.c:213
+#: daemon/server.c:84 daemon/server.c:207
msgid "gdm_server_start: Error setting up USR1 signal handler"
msgstr "gdm_server_start: Feil under oppsett av USR1-signalhåndtereren"
-#: daemon/server.c:99
+#: daemon/server.c:101
#, c-format
msgid "gdm_server_start: Could not open logfile for display %s!"
msgstr "gdm_server_start: Kunne ikke åpne loggfil for skjerm %s!"
-#: daemon/server.c:129
+#: daemon/server.c:130
msgid "gdm_server_start: Error setting USR1 to SIG_IGN"
msgstr "gdm_server_start: Feil ved setting av USR1 til SIG_IGN"
-#: daemon/server.c:146
+#: daemon/server.c:147
#, c-format
msgid "gdm_server_start: Xserver not found: %s"
msgstr "gdm_server_start: Xserver ikke funnet: %s"
-#: daemon/server.c:152
+#: daemon/server.c:153
msgid "gdm_server_start: Can't fork Xserver process!"
msgstr "gdm_server_start: Kan ikke splitte Xserver-prosessen!"
-#: daemon/server.c:178
+#: daemon/server.c:179
#, c-format
msgid "gdm_server_stop: Could not unlink auth file: %s!"
msgstr "gdm_server_stop: Kunne ikke kjøre unlink på auth-fil: %s!"
-#: daemon/server.c:237
+#: daemon/server.c:233
msgid "gdm_server_restart: Error setting up ALARM signal handler"
msgstr "gdm_server_restart: Feil under oppsett av ALARM-signalhåndtereren"
-#: daemon/slave.c:113
+#: daemon/slave.c:120
msgid "gdm_slave_init: Error setting up TERM/INT signal handler"
msgstr "gdm_slave_init: Feil under oppsett av TERM/INT signalhåndtereren"
-#: daemon/slave.c:121
+#: daemon/slave.c:128
msgid "gdm_slave_init: Error setting up CHLD signal handler"
msgstr "gdm_slave_init: Feil under oppsett av CHLD signalhåndtereren"
-#: daemon/slave.c:172
+#: daemon/slave.c:179
msgid "gdm_slave_greeter: Can't init pipe to gdmgreeter"
msgstr "gdm_slave_greeter: Kan ikke åpne rør til gdmvelkomst"
-#: daemon/slave.c:197
+#: daemon/slave.c:204
#, c-format
msgid "gdm_slave_greeter: Couldn't set groupid to %d"
msgstr "gdm_slave_greeter: Kunne ikke sette gruppe-id til %d"
-#: daemon/slave.c:200
+#: daemon/slave.c:207
#, c-format
msgid "gdm_slave_greeter: Couldn't set userid to %d"
msgstr "gdm_slave_greeter: Kunne ikke sette bruker-id til %d"
-#: daemon/slave.c:210
+#: daemon/slave.c:217
#, c-format
msgid "gdm_slave_greeter: Error starting greeter on display %s"
msgstr "gdm_slave_greeter: Feil under oppstart av velkomst på skjerm %s"
-#: daemon/slave.c:213
+#: daemon/slave.c:220
msgid "gdm_slave_greeter: Can't fork gdmgreeter process"
msgstr "gdm_slave_greeter: Kan ikke splitte gdmvelkomst prosess"
-#: daemon/slave.c:282
+#: daemon/slave.c:297
#, c-format
msgid "gdm_slave_session_init: User '%s' not found. Aborting."
msgstr "gdm_slave_session_init: Bruker '%s' ikke funnet. Avbryter."
-#: daemon/slave.c:301
+#: daemon/slave.c:321
msgid ""
"gdm_slave_session_init: Execution of PreSession script returned > 0. "
"Aborting."
@@ -322,59 +288,59 @@ msgstr ""
"gdm_slave_session_init: Kjøring av PreSession skript returnerte > 0. "
"Avbryter."
-#: daemon/slave.c:306
+#: daemon/slave.c:345
msgid "gdm_slave_session_init: Error forking user session"
msgstr "gdm_slave_session_init: Feil under splitting av brukersesjon"
-#: daemon/slave.c:314
+#: daemon/slave.c:353
#, c-format
msgid "gdm_slave_session_init: Could not setgid %d. Aborting."
msgstr "gdm_slave_session_init: Kunne ikke kjøre setgid på %d. Avbryter."
-#: daemon/slave.c:317
+#: daemon/slave.c:356
#, c-format
msgid "gdm_slave_session_init: initgroups() failed for %s. Aborting."
msgstr "gdm_slave_session_init: initgroups() feilet for %s. Avbryter."
-#: daemon/slave.c:320
+#: daemon/slave.c:359
#, c-format
msgid "gdm_slave_session_init: Could not become %s. Aborting."
msgstr "gdm_slave_session_init: Kunne ikke bli %s. Avbryter."
-#: daemon/slave.c:373
+#: daemon/slave.c:405
#, c-format
msgid "gdm_slave_session_init: Could not start session `%s'"
msgstr "gdm_slave_session_init: Kunne ikke starte sesjon `%s'"
-#: daemon/slave.c:547
+#: daemon/slave.c:580
#, c-format
msgid "gdm_slave_windows_kill_ioerror_handler: Fatal X error - Restarting %s"
msgstr ""
"gdm_slave_windows_kill_ioerror_handler: Fatal X feil - Starter %s på nytt"
-#: daemon/slave.c:579
+#: daemon/slave.c:612
msgid "gdm_slave_xsync_ping: Error setting up ALARM signal handler"
msgstr "gdm_slave_xsync_ping: Feil under oppsett av ALARM signalhåndtereren"
-#: daemon/verify.c:124 daemon/verify.c:213 gui/gdmgreeter.c:1363
+#: daemon/verify.c:124 daemon/verify.c:215 gui/gdmlogin.c:1222
msgid "Login:"
msgstr "Innlogging:"
-#: daemon/verify.c:132 daemon/verify.c:159 daemon/verify.c:217
+#: daemon/verify.c:132 daemon/verify.c:159 daemon/verify.c:219
#, c-format
msgid "Couldn't authenticate %s"
msgstr "Kunne ikke autentisere %s"
-#: daemon/verify.c:135 daemon/verify.c:220
+#: daemon/verify.c:135 daemon/verify.c:222
msgid "User unknown"
msgstr "Bruker ukjent"
-#: daemon/verify.c:141 daemon/verify.c:226
+#: daemon/verify.c:141 daemon/verify.c:228
#, c-format
msgid "Root login disallowed on display '%s'"
msgstr "Root innlogging ikke tillatt på skjerm '%s'"
-#: daemon/verify.c:144 daemon/verify.c:229
+#: daemon/verify.c:144 daemon/verify.c:231
msgid "Root login disallowed"
msgstr "Root innlogging ikke tillatt"
@@ -402,136 +368,132 @@ msgstr "Kunne ikke sette credentials for %s"
msgid "Couldn't open session for %s"
msgstr "Kunne ikke åpne sesjon for %s"
-#: daemon/verify.c:245 gui/gdmgreeter.c:1369
+#: daemon/verify.c:249
msgid "Password:"
msgstr "Passord:"
-#: daemon/verify.c:250
+#: daemon/verify.c:254
msgid "Incorrect password"
msgstr "Ugyldig passord"
-#: daemon/xdmcp.c:172
+#: daemon/xdmcp.c:174
#, c-format
msgid "gdm_xdmcp_init: Could not get server hostname: %s!"
msgstr "gdm_xdmcp_init: Fikk ikke tjenerens vertsnavn: %s!"
-#: daemon/xdmcp.c:183
+#: daemon/xdmcp.c:185
msgid "gdm_xdmcp_init: Could not create socket!"
msgstr "gdm_xdmcp_init: Kunne ikke opprette socket!"
-#: daemon/xdmcp.c:190
+#: daemon/xdmcp.c:192
msgid "gdm_xdmcp_init: Could not bind to XDMCP socket!"
msgstr "gdm_xdmcp_init: Kunne ikke binde til XDMCP socket!"
-#: daemon/xdmcp.c:225
+#: daemon/xdmcp.c:230
msgid "gdm_xdmcp_decode: Could not create XDMCP buffer!"
msgstr "gdm_xdmcp_decode: Kunne ikke opprette XDMCP buffer!"
-#: daemon/xdmcp.c:230
+#: daemon/xdmcp.c:235
msgid "gdm_xdmcp_decode: Could not read XDMCP header!"
msgstr "gdm_xdmcp_decode: Kunne ikke lese XDMCP header!"
-#: daemon/xdmcp.c:235
+#: daemon/xdmcp.c:240
msgid "gdm_xdmcp_decode: Incorrect XDMCP version!"
msgstr "gdm_xdmcp_decode: Feil XDMCP versjon!"
-#: daemon/xdmcp.c:273
+#: daemon/xdmcp.c:276
#, c-format
msgid "gdm_xdmcp_decode_packet: Unknown opcode from host %s"
msgstr "gdm_xdmcp_decode_packet: Ukjent opkode fra vert %s"
-#: daemon/xdmcp.c:291
+#: daemon/xdmcp.c:294
msgid "gdm_xdmcp_handle_query: Could not extract authlist from packet"
msgstr ""
"gdm_xdmcp_handle_query: Kunne ikke hente ut autentiseringsliste fra pakke"
-#: daemon/xdmcp.c:302
+#: daemon/xdmcp.c:305
msgid "gdm_xdmcp_handle_query: Error in checksum"
msgstr "gdm_xdmcp_handle_query: Feil i sjekksum"
-#: daemon/xdmcp.c:333
+#: daemon/xdmcp.c:336
msgid "gdm_xdmcp_handle_forward_query: Could not read display address"
msgstr "gdm_xdmcp_handle_forward_query: Kunne ikke lese skjermadresse"
-#: daemon/xdmcp.c:339
+#: daemon/xdmcp.c:342
msgid "gdm_xdmcp_handle_forward_query: Could not read display port number"
msgstr "gdm_xdmcp_handle_forward_query: Kunne ikke lese skjermens portnummer"
-#: daemon/xdmcp.c:345
+#: daemon/xdmcp.c:348
msgid "gdm_xdmcp_handle_forward_query: Could not extract authlist from packet"
msgstr ""
"gdm_xdmcp_handle_forward_query: Kunne ikke hente ut autentiseringsliste fra "
"pakke"
-#: daemon/xdmcp.c:360
+#: daemon/xdmcp.c:363
msgid "gdm_xdmcp_handle_forward_query: Error in checksum"
msgstr "gdm_xdmcp_handle_forward_query: Feil i sjekksum"
-#: daemon/xdmcp.c:399
-msgid "GNOME"
-msgstr "GNOME"
-
-#: daemon/xdmcp.c:423
+#: daemon/xdmcp.c:426
#, c-format
msgid "Denied XDMCP query from host %s"
msgstr "Nektet XDMCP spørring fra vert %s"
-#: daemon/xdmcp.c:425
+#: daemon/xdmcp.c:428
msgid "Display not authorized to connect"
msgstr "Skjerm ikke autorisert til å koble til"
-#: daemon/xdmcp.c:458
+#: daemon/xdmcp.c:461
#, c-format
msgid "gdm_xdmcp_handle_request: Got REQUEST from banned host %s"
msgstr "gdm_xdmcp_handle_request: Mottok REQUEST fra bannlyst vert %s"
-#: daemon/xdmcp.c:465
+#: daemon/xdmcp.c:468
msgid "gdm_xdmcp_handle_request: Could not read Display Number"
msgstr "gdm_xdmcp_handle_request: Kunne ikke lese skjermnummer"
-#: daemon/xdmcp.c:471
+#: daemon/xdmcp.c:474
msgid "gdm_xdmcp_handle_request: Could not read Connection Type"
msgstr "gdm_xdmcp_handle_request: Kunne ikke lese forbindelsestype"
-#: daemon/xdmcp.c:477
+#: daemon/xdmcp.c:480
msgid "gdm_xdmcp_handle_request: Could not read Client Address"
msgstr "gdm_xdmcp_handle_request: Kunne ikke lese klientadresse"
-#: daemon/xdmcp.c:483
+#: daemon/xdmcp.c:486
msgid "gdm_xdmcp_handle_request: Could not read Authentication Names"
msgstr "gdm_xdmcp_handle_request: Kunne ikke lese autentiseringsnavn"
-#: daemon/xdmcp.c:489
+#: daemon/xdmcp.c:492
msgid "gdm_xdmcp_handle_request: Could not read Authentication Data"
msgstr "gdm_xdmcp_handle_request: Kunne ikke lese autentiseringsdata"
-#: daemon/xdmcp.c:495
+#: daemon/xdmcp.c:498
msgid "gdm_xdmcp_handle_request: Could not read Authorization List"
msgstr "gdm_xdmcp_handle_request: Kunne ikke lese autorisasjonslisten"
-#: daemon/xdmcp.c:506
+#: daemon/xdmcp.c:509
msgid "gdm_xdmcp_handle_request: Could not read Manufacturer ID"
msgstr "gdm_xdmcp_handle_request: Kunne ikke lese produsent-ID"
-#: daemon/xdmcp.c:524
+#: daemon/xdmcp.c:527
#, c-format
msgid "gdm_xdmcp_handle_request: Failed checksum from %s"
msgstr "gdm_xdmcp_handle_request: Feilet sjekksum fra %s"
-#: daemon/xdmcp.c:642
+#: daemon/xdmcp.c:640
#, c-format
msgid "gdm_xdmcp_handle_manage: Got Manage from banned host %s"
msgstr "gdm_xdmcp_handle_manage: Mottok Manage fra bannlyst vert %s"
-#: daemon/xdmcp.c:649
+#: daemon/xdmcp.c:647
msgid "gdm_xdmcp_handle_manage: Could not read Session ID"
msgstr "gdm_xdmcp_handle_manage: Kunne ikke lese sesjons-ID"
-#: daemon/xdmcp.c:655
+#: daemon/xdmcp.c:653
msgid "gdm_xdmcp_handle_manage: Could not read Display Number"
msgstr "gdm_xdmcp_handle_manage: Kunne ikke lese skjermnummer"
-#: daemon/xdmcp.c:664
+#: daemon/xdmcp.c:662
msgid "gdm_xdmcp_manage: Could not read Display Class"
msgstr "gdm_xdmcp_manage: Kunne ikke lese skjermklasse"
@@ -553,274 +515,298 @@ msgstr "gdm_xdmcp_handle_keepalive: Kunne ikke lese skjermnummer"
msgid "gdm_xdmcp_handle_keepalive: Could not read Session ID"
msgstr "gdm_xdmcp_handle_keepalive: Kunne ikke lese sesjons-ID"
-#: gui/gdmchooser.c:336
+#: gui/gdmchooser.c:338
#, c-format
msgid "gdm_chooser_parse_config: No configuration file: %s. Aborting."
msgstr "gdm_chooser_parse_config: Ingen konfigurasjonsfil: %s. Avbryter."
-#: gui/gdmchooser.c:448
+#: gui/gdmchooser.c:447
#, c-format
msgid "Can't open default host icon: %s"
msgstr "Kunne ikke åpne forvalgt ikon for vert: %s"
#. Buttons
-#: gui/gdmchooser.c:515
+#: gui/gdmchooser.c:514
msgid "Connect"
msgstr "Koble til"
-#: gui/gdmchooser.c:522
+#: gui/gdmchooser.c:521
msgid "Rescan"
msgstr "Gjenles"
-#: gui/gdmchooser.c:528
+#: gui/gdmchooser.c:527
msgid "Cancel"
msgstr "Avbryt"
-#: gui/gdmchooser.c:579 gui/gdmgreeter.c:1672 gui/gdmlogin.c:1122
-msgid "main: Error setting up HUP signal handler"
-msgstr "main: Feil under oppsett av HUP signalhåndtereren"
-
-#: gui/gdmchooser.c:582 gui/gdmgreeter.c:1675 gui/gdmlogin.c:1125
-msgid "main: Error setting up INT signal handler"
-msgstr "main: Feil under oppsett av INT signalhåndtereren"
-
-#: gui/gdmchooser.c:585 gui/gdmgreeter.c:1678 gui/gdmlogin.c:1128
-msgid "main: Error setting up TERM signal handler"
-msgstr "main: Feil under oppsett av TERM signalhåndtereren"
+#: gui/gdmchooser.c:578
+#, fuzzy
+msgid "gdm_signals_init: Error setting up HUP signal handler"
+msgstr "gdm_slave_init: Feil under oppsett av CHLD signalhåndtereren"
-#: gui/gdmgreeter.c:155
-msgid "Gnome Display Manager"
-msgstr "Gnome skjermhåndtering"
+#: gui/gdmchooser.c:581
+#, fuzzy
+msgid "gdm_signals_init: Error setting up INT signal handler"
+msgstr "gdm_main: Feil under oppsett av INT signalhåndtereren"
-#: gui/gdmgreeter.c:157
-msgid "Copyright Martin K. Petersen (C) 1998, 1999"
-msgstr "Copyright Martin K. Petersen (C) 1998, 1999"
+#: gui/gdmchooser.c:584
+#, fuzzy
+msgid "gdm_signals_init: Error setting up TERM signal handler"
+msgstr "gdm_main: Feil under oppsett av TERM signalhåndtereren"
-#: gui/gdmgreeter.c:159 gui/gdmlogin.c:346
-msgid ""
-"gdm manages local and remote displays and provides the user with a login "
-"window."
+#: gui/gdmchooser.c:592 gui/gdmlogin.c:1524
+msgid "Could not set signal mask!"
msgstr ""
-"gdm håndterer lokale og eksterne skjermer og presenterer brukeren for et "
-"innloggingsvindu."
-#: gui/gdmgreeter.c:194 gui/gdmlogin.c:274
+#: gui/gdmlogin.c:276
msgid "gdm_parse_enriched_string: String too long!"
msgstr "gdm_parse_enriched_string: Strengen er for lang!"
-#: gui/gdmgreeter.c:195 gui/gdmlogin.c:275
+#: gui/gdmlogin.c:277
msgid "Welcome to "
msgstr "Velkommen til "
-#: gui/gdmgreeter.c:199 gui/gdmlogin.c:279
+#: gui/gdmlogin.c:281
msgid "gdm_parse_enriched_string: Could not malloc temporary buffer!"
msgstr "gdm_parse_enriched_string: Klarte ikke å malloc midlertidig buffer! "
-#: gui/gdmgreeter.c:273
-msgid "Logo not found. No image will be displayed!"
-msgstr "Logo ikke funnet. Bilde vil ikke bli vist!"
+#: gui/gdmlogin.c:358
+msgid "Are you sure you want to reboot the machine?"
+msgstr "Er du sikker på at du vil starte maskinen på nytt?"
-#: gui/gdmgreeter.c:299
-#, c-format
-msgid "gdm_greeter_parse_config: No configuration file: %s. Aborting."
-msgstr "gdm_greeter_parse_config: Ingen konfigurasjonsfil: %s. Avbryter."
+#: gui/gdmlogin.c:371
+msgid "Are you sure you want to halt the machine?"
+msgstr "Er du sikker på at du vil stoppe maskinen?"
-#: gui/gdmgreeter.c:323 gui/gdmlogin.c:422
+#: gui/gdmlogin.c:388
#, c-format
-msgid "messages/welcome=Welcome to %h"
-msgstr "beskjeder/velkomst=Velkommen til %h"
+msgid "gdm_login_parse_config: No configuration file: %s. Aborting."
+msgstr "gdm_login_parse_config: Ingen konfigurasjonsfil: %s. Avbryter."
-#: gui/gdmgreeter.c:424 gui/gdmlogin.c:546 gui/gdmlogin.c:576
+#: gui/gdmlogin.c:520
#, c-format
msgid ""
-"You have chosen %s for this session, but your default setting is %s.\n"
+"Your preferred session type %s is not installed on this machine.\n"
"Do you wish to make %s the default for future sessions?"
msgstr ""
-"Du har valgt %s for denne sesjonen, men forvalgt innstilling er %s.\n"
-"Ønsker du å gjøre %s til forvalg for fremtidige sesjoner?"
+"Din foretrukne sesjonstype %s er ikke installert på denne maskinen.\n"
+"Ønsker du å gjøre %s forvalgt for fremtidige sesjoner?"
-#: gui/gdmgreeter.c:432
+#: gui/gdmlogin.c:539 gui/gdmlogin.c:569
#, c-format
msgid ""
-"Your previous session type %s is not installed on this machine.\n"
+"You have chosen %s for this session, but your default setting is %s.\n"
"Do you wish to make %s the default for future sessions?"
msgstr ""
-"Din forrige sesjonstype %s er ikke installert på denne maskinen.\n"
+"Du har valgt %s for denne sesjonen, men forvalgt innstilling er %s.\n"
"Ønsker du å gjøre %s til forvalg for fremtidige sesjoner?"
-#: gui/gdmgreeter.c:440
+#: gui/gdmlogin.c:625
#, c-format
-msgid ""
-"Your previous session type %s is not installed on this machine.\n"
-"You will be logged in using the %s environment."
-msgstr ""
-"Din forrige sesjonstype %s er ikke installert på denne maskinen.\n"
-"Du vil bli logget inn til %s miljøet."
-
-#: gui/gdmgreeter.c:453
-#, c-format
-msgid ""
-"You have chosen the language %s for this session, but your default setting "
-"is %s.\n"
-"Do you wish to make %s the default language for future sessions?"
-msgstr ""
-"Du har valgt språket %s for denne sesjonen, men din forvalgte innstilling er "
-"%s.\n"
-"Ønsker du å gjøre %s til forvalgt språk for fremtidige sesjoner?"
-
-#: gui/gdmgreeter.c:461
-#, c-format
-msgid ""
-"Your previous language %s is not installed on this machine.\n"
-"Do you wish to make %s the default language for future sessions?"
-msgstr ""
-"Ditt forrige språk %s er ikke installert på denne maskinen.\n"
-"Ønsker du å gjøre %s til forvalgt språk for fremtidige sesjoner?"
-
-#: gui/gdmgreeter.c:469
-#, c-format
-msgid ""
-"Your previous language %s is not installed on this machine.\n"
-"Your environment will be %s."
-msgstr ""
-"Ditt forrige språk %s er ikke installert på denne maskinen.\n"
-"Ditt miljø vil være %s."
-
-#: gui/gdmgreeter.c:500
-msgid "Invalid username or password!"
-msgstr "Ugyldig brukernavn eller passord!"
-
-#: gui/gdmgreeter.c:526 gui/gdmlogin.c:374
-msgid "Are you sure you want to reboot the machine?"
-msgstr "Er du sikker på at du vil starte maskinen på nytt?"
+msgid "%s session selected"
+msgstr "%s sesjon valgt"
-#: gui/gdmgreeter.c:555 gui/gdmlogin.c:386
-msgid "Are you sure you want to halt the machine?"
-msgstr "Er du sikker på at du vil stoppe maskinen?"
+#: gui/gdmlogin.c:641 gui/gdmlogin.c:738
+msgid "Last"
+msgstr "Forrige"
-#: gui/gdmgreeter.c:812
-msgid "gdm_greeter_session_init: Session script directory not found!"
-msgstr "gdm_greeter_session_init: Sesjonens skriptkatalog ikke funnet!"
+#: gui/gdmlogin.c:656
+msgid "gdm_login_session_init: Session script directory not found!"
+msgstr "gdm_login_session_init: Sesjonens skriptkatalog ikke funnet!"
-#: gui/gdmgreeter.c:865 gui/gdmlogin.c:713
+#: gui/gdmlogin.c:703
msgid "No session scripts found. Aborting!"
msgstr "Ingen sesjonsskript funnet. Avbryter!"
-#: gui/gdmgreeter.c:869 gui/gdmlogin.c:717
+#: gui/gdmlogin.c:707
#, c-format
msgid "No default session link found. Using %s.\n"
msgstr "Ingen forvalgt sesjonlenke funnet. Bruker %s.\n"
-#. Login button
-#: gui/gdmgreeter.c:1029
-msgid "Login"
-msgstr "Innlogging"
+#: gui/gdmlogin.c:721
+#, c-format
+msgid "%s language selected"
+msgstr "språk %s valgt"
+
+#: gui/gdmlogin.c:753
+msgid "A-M"
+msgstr "A-M"
+
+#: gui/gdmlogin.c:759
+msgid "N-Z"
+msgstr "N-Z"
-#. Init sessions menu
-#: gui/gdmgreeter.c:1041
-msgid "Sessions"
-msgstr "Sesjoner"
+#: gui/gdmlogin.c:765
+msgid "Other"
+msgstr "Annet"
+
+#: gui/gdmlogin.c:1061
+msgid "Session"
+msgstr "Sesjon"
-#. Language selection support
-#: gui/gdmgreeter.c:1048
-msgid "Languages"
+#: gui/gdmlogin.c:1068
+msgid "Language"
msgstr "Språk"
-#: gui/gdmgreeter.c:1058 gui/gdmlogin.c:979
+#: gui/gdmlogin.c:1075
msgid "Reboot..."
msgstr "Omstart..."
-#: gui/gdmgreeter.c:1064 gui/gdmlogin.c:985
+#: gui/gdmlogin.c:1082
msgid "Halt..."
msgstr "Stopp..."
-#: gui/gdmgreeter.c:1071
-msgid "Suspend"
-msgstr "Suspender"
-
-#: gui/gdmgreeter.c:1078 gui/gdmlogin.c:991
+#: gui/gdmlogin.c:1089
msgid "System"
msgstr "System"
-#: gui/gdmgreeter.c:1086 gui/gdmlogin.c:1005
+#: gui/gdmlogin.c:1097
#, c-format
msgid "Can't open icon file: %s. Suspending iconify feature!"
msgstr "Kan ikke åpne ikonfilen: %s. Suspenderer ikonofiseringsfunksjonen!"
-#: gui/gdmgreeter.c:1090 gui/gdmlogin.c:1009
+#: gui/gdmlogin.c:1100
msgid "Iconify"
msgstr "Ikonifiser"
-#. Option button
-#: gui/gdmgreeter.c:1099
-msgid "Options..."
-msgstr "Alternativer..."
+#: gui/gdmlogin.c:1257
+msgid "Please enter your login"
+msgstr ""
-#: gui/gdmgreeter.c:1531
-#, c-format
-msgid "Can't open NofaceImageFile: %s. Suspending face browser!"
+#: gui/gdmlogin.c:1442
+#, fuzzy, c-format
+msgid "Can't open DefaultImage: %s. Suspending face browser!"
msgstr "Kan ikke åpne NofaceImageFile: %s. Suspenderer ansiktsvisning!"
-#: gui/gdmgreeter.c:1686
-msgid "main: Error setting up USR1 signal handler"
-msgstr "main: Feil under oppsett av USR1 signalhåndtereren"
+#: gui/gdmlogin.c:1510
+msgid "main: Error setting up HUP signal handler"
+msgstr "main: Feil under oppsett av HUP signalhåndtereren"
-#: gui/gdmgreeter.c:1694
-msgid "main: Error setting up USR2 signal handler"
-msgstr "main: Feil under oppsett av USR2 signalhåndtereren"
+#: gui/gdmlogin.c:1513
+msgid "main: Error setting up INT signal handler"
+msgstr "main: Feil under oppsett av INT signalhåndtereren"
-#: gui/gdmlogin.c:402
-#, c-format
-msgid "gdm_login_parse_config: No configuration file: %s. Aborting."
-msgstr "gdm_login_parse_config: Ingen konfigurasjonsfil: %s. Avbryter."
+#: gui/gdmlogin.c:1516
+msgid "main: Error setting up TERM signal handler"
+msgstr "main: Feil under oppsett av TERM signalhåndtereren"
-#: gui/gdmlogin.c:527
-#, c-format
-msgid ""
-"Your preferred session type %s is not installed on this machine.\n"
-"Do you wish to make %s the default for future sessions?"
-msgstr ""
-"Din foretrukne sesjonstype %s er ikke installert på denne maskinen.\n"
-"Ønsker du å gjøre %s forvalgt for fremtidige sesjoner?"
+#~ msgid "gdm_auth_secure_display: Could not unlink %s file: %s"
+#~ msgstr "gdm_auth_secure_display: Kunne ikke kjøre unlink på %s fil: %s"
+
+#~ msgid ""
+#~ "gdm_auth_secure_display: Error starting xauth process: %s. Running insecure!"
+#~ msgstr ""
+#~ "gdm_auth_secure_display: Feil under oppstart av xauth prosessen: %s. Kjører "
+#~ "usikkert!"
+
+#~ msgid ""
+#~ "gdm_auth_secure_display: Error forking xauth process. Running insecure!"
+#~ msgstr ""
+#~ "gdm_auth_secure_display: Feil under splitting av xauth prosess. Kjører "
+#~ "usikkert!"
+
+#~ msgid "gdm_auth_user_add: Error starting xauth process: %s"
+#~ msgstr "gdm_auth_user_add: Feil under oppstart av xauth prosess: %s"
-#: gui/gdmlogin.c:635
-#, c-format
-msgid "%s session selected"
-msgstr "%s sesjon valgt"
+#~ msgid "gdm_auth_user_add: Error forking xauth process."
+#~ msgstr "gdm_auth_user_add: Feil under splitting av xauth prosess."
-#: gui/gdmlogin.c:651 gui/gdmlogin.c:742
-msgid "Last"
-msgstr "Forrige"
+#~ msgid "gdm_auth_user_remove: Error forking xauth process."
+#~ msgstr "gdm_auth_user_remove: Feil under splitting av xauth prosess."
-#: gui/gdmlogin.c:666
-msgid "gdm_login_session_init: Session script directory not found!"
-msgstr "gdm_login_session_init: Sesjonens skriptkatalog ikke funnet!"
+#~ msgid "gdm_exec_command: Failed starting: %s"
+#~ msgstr "gdm_exec_command: Feil under oppstart: %s"
-#: gui/gdmlogin.c:728
-#, c-format
-msgid "%s language selected"
-msgstr "språk %s valgt"
+#~ msgid "gdm_exec_command: Can't fork process!"
+#~ msgstr "gdm_exec_command: Kan ikke splitte prosessen!"
-#: gui/gdmlogin.c:755
-msgid "A-M"
-msgstr "A-M"
+#~ msgid "GNOME"
+#~ msgstr "GNOME"
-#: gui/gdmlogin.c:761
-msgid "N-Z"
-msgstr "N-Z"
+#~ msgid "Gnome Display Manager"
+#~ msgstr "Gnome skjermhåndtering"
-#: gui/gdmlogin.c:767
-msgid "Other"
-msgstr "Annet"
+#~ msgid "Copyright Martin K. Petersen (C) 1998, 1999"
+#~ msgstr "Copyright Martin K. Petersen (C) 1998, 1999"
-#: gui/gdmlogin.c:965
-msgid "Session"
-msgstr "Sesjon"
+#~ msgid ""
+#~ "gdm manages local and remote displays and provides the user with a login "
+#~ "window."
+#~ msgstr ""
+#~ "gdm håndterer lokale og eksterne skjermer og presenterer brukeren for et "
+#~ "innloggingsvindu."
-#: gui/gdmlogin.c:972
-msgid "Language"
-msgstr "Språk"
+#~ msgid "Logo not found. No image will be displayed!"
+#~ msgstr "Logo ikke funnet. Bilde vil ikke bli vist!"
+
+#~ msgid "gdm_greeter_parse_config: No configuration file: %s. Aborting."
+#~ msgstr "gdm_greeter_parse_config: Ingen konfigurasjonsfil: %s. Avbryter."
+
+#~ msgid "messages/welcome=Welcome to %h"
+#~ msgstr "beskjeder/velkomst=Velkommen til %h"
+
+#~ msgid ""
+#~ "Your previous session type %s is not installed on this machine.\n"
+#~ "Do you wish to make %s the default for future sessions?"
+#~ msgstr ""
+#~ "Din forrige sesjonstype %s er ikke installert på denne maskinen.\n"
+#~ "Ønsker du å gjøre %s til forvalg for fremtidige sesjoner?"
+
+#~ msgid ""
+#~ "Your previous session type %s is not installed on this machine.\n"
+#~ "You will be logged in using the %s environment."
+#~ msgstr ""
+#~ "Din forrige sesjonstype %s er ikke installert på denne maskinen.\n"
+#~ "Du vil bli logget inn til %s miljøet."
+
+#~ msgid ""
+#~ "You have chosen the language %s for this session, but your default setting "
+#~ "is %s.\n"
+#~ "Do you wish to make %s the default language for future sessions?"
+#~ msgstr ""
+#~ "Du har valgt språket %s for denne sesjonen, men din forvalgte innstilling er "
+#~ "%s.\n"
+#~ "Ønsker du å gjøre %s til forvalgt språk for fremtidige sesjoner?"
+
+#~ msgid ""
+#~ "Your previous language %s is not installed on this machine.\n"
+#~ "Do you wish to make %s the default language for future sessions?"
+#~ msgstr ""
+#~ "Ditt forrige språk %s er ikke installert på denne maskinen.\n"
+#~ "Ønsker du å gjøre %s til forvalgt språk for fremtidige sesjoner?"
+
+#~ msgid ""
+#~ "Your previous language %s is not installed on this machine.\n"
+#~ "Your environment will be %s."
+#~ msgstr ""
+#~ "Ditt forrige språk %s er ikke installert på denne maskinen.\n"
+#~ "Ditt miljø vil være %s."
+
+#~ msgid "Invalid username or password!"
+#~ msgstr "Ugyldig brukernavn eller passord!"
+
+#~ msgid "gdm_greeter_session_init: Session script directory not found!"
+#~ msgstr "gdm_greeter_session_init: Sesjonens skriptkatalog ikke funnet!"
+
+#~ msgid "Login"
+#~ msgstr "Innlogging"
+
+#~ msgid "Sessions"
+#~ msgstr "Sesjoner"
+
+#~ msgid "Languages"
+#~ msgstr "Språk"
+
+#~ msgid "Suspend"
+#~ msgstr "Suspender"
+
+#~ msgid "Options..."
+#~ msgstr "Alternativer..."
+
+#~ msgid "main: Error setting up USR1 signal handler"
+#~ msgstr "main: Feil under oppsett av USR1 signalhåndtereren"
+
+#~ msgid "main: Error setting up USR2 signal handler"
+#~ msgstr "main: Feil under oppsett av USR2 signalhåndtereren"
-#: gui/gdmlogin.c:998
-msgid "Host chooser"
-msgstr "Vertsvelger"
+#~ msgid "Host chooser"
+#~ msgstr "Vertsvelger"
diff --git a/po/sv.po b/po/sv.po
index b38ab745..c5eb8a4f 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: gdm 0.5\n"
-"POT-Creation-Date: 1999-08-07 12:11+0200\n"
+"POT-Creation-Date: 1999-08-12 00:12+0200\n"
"PO-Revision-Date: 1999-08-07 11:00+0200\n"
"Last-Translator: Anders Carlsson <anders.carlsson@tordata.se>\n"
"Language-Team: Swedish <sv@li.org>\n"
@@ -13,73 +13,77 @@ msgstr ""
"Content-Type: text/plain; charset=iso-8859-1\n"
"Content-Transfer-Encoding: 8-bit\n"
-#: daemon/gdm.c:137
+#: daemon/gdm.c:163
#, c-format
msgid "gdm_config_parse: No configuration file: %s. Aborting."
msgstr "gdm_config_parse: Ingen konfigurationsfil kunde hittas: %s. Avbryter"
-#: daemon/gdm.c:178
+#: daemon/gdm.c:211
msgid "gdm_config_parse: No greeter specified and default not found."
-msgstr "gdm_config_parse: Ingen hälsare angiven och standardhälsare kunde inte hittas."
+msgstr ""
+"gdm_config_parse: Ingen hälsare angiven och standardhälsare kunde inte "
+"hittas."
-#: daemon/gdm.c:190
+#: daemon/gdm.c:223
msgid "gdm_config_parse: No authdir specified and default not found."
-msgstr "gdm_config_parse: Ingen authdir angiven och standardauthdir kunde inte hittas."
+msgstr ""
+"gdm_config_parse: Ingen authdir angiven och standardauthdir kunde inte "
+"hittas."
-#: daemon/gdm.c:208
+#: daemon/gdm.c:241
msgid ""
"gdm_config_parse: No sessions directory specified and default not found."
msgstr ""
"gdm_config_parse: Ingen sessions-katalog angiven och standardkatalog kunde "
"inte hittas."
-#: daemon/gdm.c:220
+#: daemon/gdm.c:253
msgid "gdm_config_parse: Invalid server line in config file. Ignoring!"
msgstr "gdm_config_parse: Ogiltig server-rad i konfigurationsfil. Ignorerar!"
-#: daemon/gdm.c:226
+#: daemon/gdm.c:259
msgid ""
"gdm_config_parse: Xdmcp disabled and no local servers defined. Aborting!"
msgstr ""
"gdm_config_parse: Xdmcp avaktiverat och inga lokala servrar är definierade. "
"Avbryter!"
-#: daemon/gdm.c:231
+#: daemon/gdm.c:264
#, c-format
msgid "gdm_config_parse: Can't find the gdm user (%s). Aborting!"
msgstr "gdm_config_parse: Kan inte hitta gdm-användaren (%s). Avbryter!"
-#: daemon/gdm.c:236
+#: daemon/gdm.c:269
msgid "gdm_config_parse: The gdm user should not be root. Aborting!"
msgstr "gdm_config_parse: gdm-användaren ska inte vara root. Avbryter!"
-#: daemon/gdm.c:241
+#: daemon/gdm.c:274
#, c-format
msgid "gdm_config_parse: Can't find the gdm group (%s). Aborting!"
msgstr "gdm_config_parse: Kan inte hitta gdm-gruppen (%s). Avbryter!"
-#: daemon/gdm.c:247
+#: daemon/gdm.c:279
msgid "gdm_config_parse: The gdm group should not be root. Aborting!"
msgstr "gdm_config_parse: gdm-gruppen ska inte vara root. Avbryter!"
-#: daemon/gdm.c:254
+#: daemon/gdm.c:286
#, c-format
msgid "gdm_config_parse: Authdir %s does not exist. Aborting."
msgstr "gdm_config_parse Authdir %s existerar inte. Avbryter."
-#: daemon/gdm.c:257
+#: daemon/gdm.c:289
#, c-format
msgid "gdm_config_parse: Authdir %s is not a directory. Aborting."
msgstr "gdm_config_parse: Authdir %s är inte en katalog. Avbryter."
-#: daemon/gdm.c:260
+#: daemon/gdm.c:292
#, c-format
msgid ""
"gdm_config_parse: Authdir %s is not owned by user %s, group %s. Aborting."
msgstr ""
"gdm_config_parse: Authdir %s ägs inte av användare %s, grupp %s. Avbryter."
-#: daemon/gdm.c:263
+#: daemon/gdm.c:296
#, c-format
msgid ""
"gdm_config_parse: Authdir %s has wrong permissions. Should be 750. Aborting."
@@ -87,48 +91,50 @@ msgstr ""
"gdm_config_parse: Authdir %s har felaktiga rättigheter. Ska vara 750. "
"Avbryter."
-#: daemon/gdm.c:319
+#: daemon/gdm.c:354
#, c-format
msgid "gdm_display_manage: Failed forking gdm slave process for %d"
msgstr "gdm_display_manage: Kunde inte dela gdm-slav-process för %d"
-#: daemon/gdm.c:398
+#: daemon/gdm.c:433
#, c-format
msgid "gdm_child_action: Aborting display %s"
msgstr "gdm_child_action: Avbryter %s"
-#: daemon/gdm.c:403
+#: daemon/gdm.c:438
msgid "gdm_child_action: Master rebooting..."
msgstr "gdm_child_action: Master startar om..."
-#: daemon/gdm.c:409
+#: daemon/gdm.c:444
#, c-format
msgid "gdm_child_action: Reboot failed: %s"
msgstr "gdm_child_action: Kunde inte starta om: %s"
-#: daemon/gdm.c:413
+#: daemon/gdm.c:448
msgid "gdm_child_action: Master halting..."
msgstr "gdm_child_action: Master stannar..."
-#: daemon/gdm.c:419
+#: daemon/gdm.c:454
#, c-format
msgid "gdm_child_action: Halt failed: %s"
msgstr "gdm_child_action: Kunde inte stanna: %s"
-#: daemon/gdm.c:513
+#: daemon/gdm.c:551
msgid "gdm_daemonify: fork() failed!"
msgstr "gdm_daemonify: fork() misslyckades!"
-#: daemon/gdm.c:516
+#: daemon/gdm.c:554
#, c-format
msgid "gdm_daemonify: setsid() failed: %s!"
msgstr "gdm_daemonify: setsid() misslyckades: %s!"
-#: daemon/gdm.c:541
-msgid "Only root wants to run gdm\n"
+#. XDM compliant error message
+#: daemon/gdm.c:580
+#, fuzzy
+msgid "Only root wants to run x^hgdm\n"
msgstr "Endast root ska köra gdm\n"
-#: daemon/gdm.c:559
+#: daemon/gdm.c:601
msgid ""
"gdm already running. Aborting!\n"
"\n"
@@ -136,7 +142,7 @@ msgstr ""
"gdm körs redan. Avbryter!\n"
"\n"
-#: daemon/gdm.c:564
+#: daemon/gdm.c:607
#, c-format
msgid ""
"According to %s, gdm was already running (%d),\n"
@@ -145,169 +151,136 @@ msgstr ""
"Enligt %s, kördes gdm redan (%d),\n"
"men gdm verkar ha avslutats på nåt konstigt sätt.\n"
-#: daemon/gdm.c:585
+#: daemon/gdm.c:629
msgid "gdm_main: Error setting up TERM signal handler"
msgstr "gdm_main: Fel vid installering av TERM signal-hanterare"
-#: daemon/gdm.c:588
+#: daemon/gdm.c:632
msgid "gdm_main: Error setting up INT signal handler"
msgstr "gdm_main: Fel vid installering av TERM signal-hanterare"
-#: daemon/gdm.c:596
+#: daemon/gdm.c:640
msgid "gdm_main: Error setting up CHLD signal handler"
msgstr "gdm_main: Fel vid installering av CHLD signal-hanterare"
-#: daemon/auth.c:62
-#, c-format
-msgid "gdm_auth_secure_display: Could not unlink %s file: %s"
-msgstr "gdm_auth_secure_display: Kunde inte avlänka %s fil: %s"
+#: daemon/auth.c:271
+#, fuzzy, c-format
+msgid "gdm_auth_user_remove: Ignoring suspicious looking cookie file %s"
+msgstr "gdm_auth_user_remove: Fel vid start av xauth-process: %s"
-#: daemon/auth.c:73
+#: daemon/filecheck.c:58
#, c-format
-msgid ""
-"gdm_auth_secure_display: Error starting xauth process: %s. Running insecure!"
+msgid "%s: Directory %s does not exist."
msgstr ""
-"gdm_auth_secure_display: Fel vid start av xauth-process: %s. Kör utan "
-"säkerhet!"
-
-#: daemon/auth.c:77
-msgid "gdm_auth_secure_display: Error forking xauth process. Running insecure!"
-msgstr "gdm_auth_secure_display: Fel vid delning av xauth-process. Kör utan säkerhet!"
-#: daemon/auth.c:109
-#, c-format
-msgid "gdm_auth_user_add: Error starting xauth process: %s"
-msgstr "gdm_auth_user_add: Fel vid start av xauth-process: %s"
-
-#: daemon/auth.c:113
-msgid "gdm_auth_user_add: Error forking xauth process."
-msgstr "gdm_auth_user_add: Fel vid delning av xauth-process."
-
-#: daemon/auth.c:143
-#, c-format
-msgid "gdm_auth_user_remove: Error starting xauth process: %s"
-msgstr "gdm_auth_user_remove: Fel vid start av xauth-process: %s"
-
-#: daemon/auth.c:147
-msgid "gdm_auth_user_remove: Error forking xauth process."
-msgstr "gdm_auth_user_remove: Fel vid delning av xauth-process."
-
-#: daemon/filecheck.c:50 daemon/filecheck.c:88
+#: daemon/filecheck.c:64 daemon/filecheck.c:102
#, c-format
msgid "%s: %s is not owned by uid %d."
msgstr "%s: %s ägs inte av uid %d."
-#: daemon/filecheck.c:56 daemon/filecheck.c:95
+#: daemon/filecheck.c:70 daemon/filecheck.c:109
#, c-format
msgid "%s: %s is writable by group."
msgstr "%s: %s kan skrivas av grupp/annan."
-#: daemon/filecheck.c:62
+#: daemon/filecheck.c:76
#, c-format
msgid "%s: %s is writable by other."
msgstr "%s: %s kan skrivas av grupp/annan."
-#: daemon/filecheck.c:81
+#: daemon/filecheck.c:95
#, c-format
msgid "%s: %s is not a regular file."
msgstr "%s: %s är inte en vanlig fil."
-#: daemon/filecheck.c:102
+#: daemon/filecheck.c:116
#, c-format
msgid "%s: %s is writable by group/other."
msgstr "%s: %s kan skrivas av grupp/annan."
-#: daemon/filecheck.c:109
+#: daemon/filecheck.c:123
#, c-format
msgid "%s: %s is bigger than sysadmin specified maximum file size."
-msgstr "%s: %s är större än den av sysadmin specificerade maximala filstorleken. "
+msgstr ""
+"%s: %s är större än den av sysadmin specificerade maximala filstorleken. "
-#: daemon/misc.c:121
+#: daemon/misc.c:128
#, c-format
msgid "gdm_exec_script: Failed starting: %s"
msgstr "gdm_exec_script: Fel vid start av: %s"
-#: daemon/misc.c:125
+#: daemon/misc.c:132
msgid "gdm_exec_script: Can't fork script process!"
msgstr "gdm_exec_script: Kan inte dela script-process"
-#: daemon/misc.c:153
-#, c-format
-msgid "gdm_exec_command: Failed starting: %s"
-msgstr "gdm_exec_command: Fel vid start av: %s"
-
-#: daemon/misc.c:157
-msgid "gdm_exec_command: Can't fork process!"
-msgstr "gdm_exec_command: Kan inte dela process!"
-
-#: daemon/server.c:82 daemon/server.c:213
+#: daemon/server.c:84 daemon/server.c:207
msgid "gdm_server_start: Error setting up USR1 signal handler"
msgstr "gdm_server_start: Fel vid installering av USR1 signal-hanterare"
-#: daemon/server.c:99
+#: daemon/server.c:101
#, c-format
msgid "gdm_server_start: Could not open logfile for display %s!"
msgstr "gdm_server_start: Kan inte öppna logg-fil för %s!"
-#: daemon/server.c:129
+#: daemon/server.c:130
msgid "gdm_server_start: Error setting USR1 to SIG_IGN"
msgstr "gdm_server_start: Kunde inte sätta USR1 till SIG_IGNORE"
-#: daemon/server.c:146
+#: daemon/server.c:147
#, c-format
msgid "gdm_server_start: Xserver not found: %s"
msgstr "gdm_server_start: Xserver kan inte hittas: %s"
-#: daemon/server.c:152
+#: daemon/server.c:153
msgid "gdm_server_start: Can't fork Xserver process!"
msgstr "gdm_server_start: Kan inte dela script-process"
-#: daemon/server.c:178
+#: daemon/server.c:179
#, c-format
msgid "gdm_server_stop: Could not unlink auth file: %s!"
msgstr "gdm_server_stop: Kunde inte avlänka %s fil: %s!"
-#: daemon/server.c:237
+#: daemon/server.c:233
msgid "gdm_server_restart: Error setting up ALARM signal handler"
msgstr "gdm_server_restart: Fel vid installering av ALARM-signalhanterare"
-#: daemon/slave.c:113
+#: daemon/slave.c:120
msgid "gdm_slave_init: Error setting up TERM/INT signal handler"
msgstr "gdm_slave_init: Fel vid installering av TERM/INT signal-hanterare"
-#: daemon/slave.c:121
+#: daemon/slave.c:128
msgid "gdm_slave_init: Error setting up CHLD signal handler"
msgstr "gdm_slave_init: Fel vid installering av CHLD signal-hanterare"
-#: daemon/slave.c:172
+#: daemon/slave.c:179
msgid "gdm_slave_greeter: Can't init pipe to gdmgreeter"
msgstr "gdm_slave_greeter: Kan inte sätta upp pipe till gdmgreeter"
-#: daemon/slave.c:197
+#: daemon/slave.c:204
#, c-format
msgid "gdm_slave_greeter: Couldn't set groupid to %d"
msgstr "gdm_slave_greeter: Kan inte sätta gruppid till %d"
-#: daemon/slave.c:200
+#: daemon/slave.c:207
#, c-format
msgid "gdm_slave_greeter: Couldn't set userid to %d"
msgstr "gdm_slave_greeter: Kan inte sätta användarid till %d"
-#: daemon/slave.c:210
+#: daemon/slave.c:217
#, c-format
msgid "gdm_slave_greeter: Error starting greeter on display %s"
msgstr "gdm_slave_greeter: Fel vid start av hälsare på %s"
-#: daemon/slave.c:213
+#: daemon/slave.c:220
msgid "gdm_slave_greeter: Can't fork gdmgreeter process"
msgstr "gdm_slave_greeter: Kan inte dela gdmgreeter-process"
-#: daemon/slave.c:282
+#: daemon/slave.c:297
#, c-format
msgid "gdm_slave_session_init: User '%s' not found. Aborting."
msgstr "gdm_slave_session_init: Användare '%s' kund inte hittas. Avbryter."
-#: daemon/slave.c:301
+#: daemon/slave.c:321
msgid ""
"gdm_slave_session_init: Execution of PreSession script returned > 0. "
"Aborting."
@@ -315,58 +288,59 @@ msgstr ""
"gdm_slave_session_init: Körning av PreSession-script returnerade > 0. "
"Avbryter."
-#: daemon/slave.c:306
+#: daemon/slave.c:345
msgid "gdm_slave_session_init: Error forking user session"
msgstr "gdm_slave_session_init: Fel vid delning av användarsession"
-#: daemon/slave.c:314
+#: daemon/slave.c:353
#, c-format
msgid "gdm_slave_session_init: Could not setgid %d. Aborting."
msgstr "gdm_slave_session_init: Kunde inte setgid %d. Avbryter."
-#: daemon/slave.c:317
+#: daemon/slave.c:356
#, c-format
msgid "gdm_slave_session_init: initgroups() failed for %s. Aborting."
msgstr "gdm_slave_session_init: initgroups() misslyckades för %s. Avbryter."
-#: daemon/slave.c:320
+#: daemon/slave.c:359
#, c-format
msgid "gdm_slave_session_init: Could not become %s. Aborting."
msgstr "gdm_slave_session_init: Kunde inte bli %s. Avbryter."
-#: daemon/slave.c:373
+#: daemon/slave.c:405
#, c-format
msgid "gdm_slave_session_init: Could not start session `%s'"
msgstr "gdm_slave_session_init: Kunde inte starta session '%s'"
-#: daemon/slave.c:547
+#: daemon/slave.c:580
#, c-format
msgid "gdm_slave_windows_kill_ioerror_handler: Fatal X error - Restarting %s"
-msgstr "gdm_slave_windows_kill_ioerror_handler: Ödesdigert X-fel - Startar om %s"
+msgstr ""
+"gdm_slave_windows_kill_ioerror_handler: Ödesdigert X-fel - Startar om %s"
-#: daemon/slave.c:579
+#: daemon/slave.c:612
msgid "gdm_slave_xsync_ping: Error setting up ALARM signal handler"
msgstr "gdm_slave_xsync_ping: Fel vid installering av ALARM-signalhanterare"
-#: daemon/verify.c:124 daemon/verify.c:213 gui/gdmgreeter.c:1363
+#: daemon/verify.c:124 daemon/verify.c:215 gui/gdmlogin.c:1222
msgid "Login:"
msgstr "Användarnamn:"
-#: daemon/verify.c:132 daemon/verify.c:159 daemon/verify.c:217
+#: daemon/verify.c:132 daemon/verify.c:159 daemon/verify.c:219
#, c-format
msgid "Couldn't authenticate %s"
msgstr "Kan inte verifiera %s"
-#: daemon/verify.c:135 daemon/verify.c:220
+#: daemon/verify.c:135 daemon/verify.c:222
msgid "User unknown"
msgstr "Användaren är okänd"
-#: daemon/verify.c:141 daemon/verify.c:226
+#: daemon/verify.c:141 daemon/verify.c:228
#, c-format
msgid "Root login disallowed on display '%s'"
msgstr "Root får inte logga in på '%s'"
-#: daemon/verify.c:144 daemon/verify.c:229
+#: daemon/verify.c:144 daemon/verify.c:231
msgid "Root login disallowed"
msgstr "Root får inte logga in"
@@ -394,133 +368,130 @@ msgstr "Kan inte sätta rättigheter för %s"
msgid "Couldn't open session for %s"
msgstr "Kan inte öppna session för %s"
-#: daemon/verify.c:245 gui/gdmgreeter.c:1369
+#: daemon/verify.c:249
msgid "Password:"
msgstr "Lösenord:"
-#: daemon/verify.c:250
+#: daemon/verify.c:254
msgid "Incorrect password"
msgstr "Ogiltigt lösenord"
-#: daemon/xdmcp.c:172
+#: daemon/xdmcp.c:174
#, c-format
msgid "gdm_xdmcp_init: Could not get server hostname: %s!"
msgstr "gdm_xdmcp_init: Kan inte hitta server-namn: %s!"
-#: daemon/xdmcp.c:183
+#: daemon/xdmcp.c:185
msgid "gdm_xdmcp_init: Could not create socket!"
msgstr "gdm_xdmcp_init: Kan inte skapa socket!"
-#: daemon/xdmcp.c:190
+#: daemon/xdmcp.c:192
msgid "gdm_xdmcp_init: Could not bind to XDMCP socket!"
msgstr "gdm_xdmcp_init: Kan inte binda till XDMCP-socket!"
-#: daemon/xdmcp.c:225
+#: daemon/xdmcp.c:230
msgid "gdm_xdmcp_decode: Could not create XDMCP buffer!"
msgstr "gdm_xdmcp_decode: Kan inte skapa XDMCP-buffer"
-#: daemon/xdmcp.c:230
+#: daemon/xdmcp.c:235
msgid "gdm_xdmcp_decode: Could not read XDMCP header!"
msgstr "gdm_xdmcp_decode: Kan inte läsa XDMCP-header!"
-#: daemon/xdmcp.c:235
+#: daemon/xdmcp.c:240
msgid "gdm_xdmcp_decode: Incorrect XDMCP version!"
msgstr "gdm_xdmcp_decode: Ogiltig XDMCP-version!"
-#: daemon/xdmcp.c:273
+#: daemon/xdmcp.c:276
#, c-format
msgid "gdm_xdmcp_decode_packet: Unknown opcode from host %s"
msgstr "gdm_xdmcp_decode_packet: Okänd opcode från värd %s"
-#: daemon/xdmcp.c:291
+#: daemon/xdmcp.c:294
msgid "gdm_xdmcp_handle_query: Could not extract authlist from packet"
msgstr "gdm_xdmcp_handle_query: Kunde inte läsa verifieringslista från packet"
-#: daemon/xdmcp.c:302
+#: daemon/xdmcp.c:305
msgid "gdm_xdmcp_handle_query: Error in checksum"
msgstr "gdm_xdmcp_handle_query: Checksumme-fel"
-#: daemon/xdmcp.c:333
+#: daemon/xdmcp.c:336
msgid "gdm_xdmcp_handle_forward_query: Could not read display address"
msgstr "gdm_xdmcp_handle_forward_query: Kan inte läsa display-adress"
-#: daemon/xdmcp.c:339
+#: daemon/xdmcp.c:342
msgid "gdm_xdmcp_handle_forward_query: Could not read display port number"
msgstr "gdm_xdmcp_handle_forward_query: Kan inte läsa display-port-nummer"
-#: daemon/xdmcp.c:345
+#: daemon/xdmcp.c:348
msgid "gdm_xdmcp_handle_forward_query: Could not extract authlist from packet"
-msgstr "gdm_xdmcp_handle_forward_query: Kunde inte läsa inloggningslista från packet"
+msgstr ""
+"gdm_xdmcp_handle_forward_query: Kunde inte läsa inloggningslista från packet"
-#: daemon/xdmcp.c:360
+#: daemon/xdmcp.c:363
msgid "gdm_xdmcp_handle_forward_query: Error in checksum"
msgstr "gdm_xdmcp_handle_forward_query: Checksumme-fel"
-#: daemon/xdmcp.c:399
-msgid "GNOME"
-msgstr "GNOME"
-
-#: daemon/xdmcp.c:423
+#: daemon/xdmcp.c:426
#, c-format
msgid "Denied XDMCP query from host %s"
msgstr "Nekade XDMCP-förfrågan från värd %s"
-#: daemon/xdmcp.c:425
+#: daemon/xdmcp.c:428
msgid "Display not authorized to connect"
msgstr "Display:en har inte anslutnings-rättigheter"
-#: daemon/xdmcp.c:458
+#: daemon/xdmcp.c:461
#, c-format
msgid "gdm_xdmcp_handle_request: Got REQUEST from banned host %s"
msgstr "gdm_xdmcp_handle_request: Fick REQUEST från utestängd värd %s"
-#: daemon/xdmcp.c:465
+#: daemon/xdmcp.c:468
msgid "gdm_xdmcp_handle_request: Could not read Display Number"
msgstr "gdm_xdmcp_handle_request: Kan inte läsa display-nummer"
-#: daemon/xdmcp.c:471
+#: daemon/xdmcp.c:474
msgid "gdm_xdmcp_handle_request: Could not read Connection Type"
msgstr "gdm_xdmcp_handle_request: Kan inte läsa anslutnings-typ"
-#: daemon/xdmcp.c:477
+#: daemon/xdmcp.c:480
msgid "gdm_xdmcp_handle_request: Could not read Client Address"
msgstr "gdm_xdmcp_handle_request: Kan inte läsa klient-adress"
-#: daemon/xdmcp.c:483
+#: daemon/xdmcp.c:486
msgid "gdm_xdmcp_handle_request: Could not read Authentication Names"
msgstr "gdm_xdmcp_handle_request: Kan inte läsa verifieringsnamn"
-#: daemon/xdmcp.c:489
+#: daemon/xdmcp.c:492
msgid "gdm_xdmcp_handle_request: Could not read Authentication Data"
msgstr "gdm_xdmcp_handle_request: Kan inte läsa verifieringsdata"
-#: daemon/xdmcp.c:495
+#: daemon/xdmcp.c:498
msgid "gdm_xdmcp_handle_request: Could not read Authorization List"
msgstr "gdm_xdmcp_handle_request: Kan inte läsa verifieringslistsa"
-#: daemon/xdmcp.c:506
+#: daemon/xdmcp.c:509
msgid "gdm_xdmcp_handle_request: Could not read Manufacturer ID"
msgstr "gdm_xdmcp_handle_request: Kan inte läsa tillverkar-ID"
-#: daemon/xdmcp.c:524
+#: daemon/xdmcp.c:527
#, c-format
msgid "gdm_xdmcp_handle_request: Failed checksum from %s"
msgstr "gdm_xdmcp_handle_request: Ogiltig checksumma från %s"
-#: daemon/xdmcp.c:642
+#: daemon/xdmcp.c:640
#, c-format
msgid "gdm_xdmcp_handle_manage: Got Manage from banned host %s"
msgstr "gdm_xdmcp_handle_mange: Fick MANAGE från utestängd värd %s"
-#: daemon/xdmcp.c:649
+#: daemon/xdmcp.c:647
msgid "gdm_xdmcp_handle_manage: Could not read Session ID"
msgstr "gdm_xdmcp_handle_manage: Kan inte läsa sessions-ID"
-#: daemon/xdmcp.c:655
+#: daemon/xdmcp.c:653
msgid "gdm_xdmcp_handle_manage: Could not read Display Number"
msgstr "gdm_xdmcp_handle_manage: Kan inte läsa display-nummer"
-#: daemon/xdmcp.c:664
+#: daemon/xdmcp.c:662
msgid "gdm_xdmcp_manage: Could not read Display Class"
msgstr "gdm_xdmcp_manage: Kan inte läsa display-klass"
@@ -542,276 +513,301 @@ msgstr "gdm_xdmcp_handle_keepalive: Kan inte läsa display-nummer"
msgid "gdm_xdmcp_handle_keepalive: Could not read Session ID"
msgstr "gdm_xdmcp_handle_keepalive: Kan inte läsa sessions-id"
-#: gui/gdmchooser.c:336
+#: gui/gdmchooser.c:338
#, c-format
msgid "gdm_chooser_parse_config: No configuration file: %s. Aborting."
-msgstr "gdm_chooser_parse_config: Konfigurationsfil kunde inte hittas: %s. Avbryter."
+msgstr ""
+"gdm_chooser_parse_config: Konfigurationsfil kunde inte hittas: %s. Avbryter."
-#: gui/gdmchooser.c:448
+#: gui/gdmchooser.c:447
#, c-format
msgid "Can't open default host icon: %s"
msgstr "Kan inte standard-ikon för %s"
#. Buttons
-#: gui/gdmchooser.c:515
+#: gui/gdmchooser.c:514
msgid "Connect"
msgstr "Anslut"
-#: gui/gdmchooser.c:522
+#: gui/gdmchooser.c:521
msgid "Rescan"
msgstr "Uppdatera"
-#: gui/gdmchooser.c:528
+#: gui/gdmchooser.c:527
msgid "Cancel"
msgstr "Avbryt"
-#: gui/gdmchooser.c:579 gui/gdmgreeter.c:1672 gui/gdmlogin.c:1122
-msgid "main: Error setting up HUP signal handler"
-msgstr "main: Fel vid installering av HUP signal-hanterare"
-
-#: gui/gdmchooser.c:582 gui/gdmgreeter.c:1675 gui/gdmlogin.c:1125
-msgid "main: Error setting up INT signal handler"
-msgstr "main: Fel vid installering av INT signal-hanterare"
-
-#: gui/gdmchooser.c:585 gui/gdmgreeter.c:1678 gui/gdmlogin.c:1128
-msgid "main: Error setting up TERM signal handler"
-msgstr "main: Fel vid installering av TERM signal-hanterare"
+#: gui/gdmchooser.c:578
+#, fuzzy
+msgid "gdm_signals_init: Error setting up HUP signal handler"
+msgstr "gdm_slave_init: Fel vid installering av CHLD signal-hanterare"
-#: gui/gdmgreeter.c:155
-msgid "Gnome Display Manager"
-msgstr "GNOME Displayhanterare"
+#: gui/gdmchooser.c:581
+#, fuzzy
+msgid "gdm_signals_init: Error setting up INT signal handler"
+msgstr "gdm_main: Fel vid installering av TERM signal-hanterare"
-#: gui/gdmgreeter.c:157
-msgid "Copyright Martin K. Petersen (C) 1998, 1999"
-msgstr "Copyright Matrin K. Petersen (C) 1998, 1999"
+#: gui/gdmchooser.c:584
+#, fuzzy
+msgid "gdm_signals_init: Error setting up TERM signal handler"
+msgstr "gdm_main: Fel vid installering av TERM signal-hanterare"
-#: gui/gdmgreeter.c:159 gui/gdmlogin.c:346
-msgid ""
-"gdm manages local and remote displays and provides the user with a login "
-"window."
+#: gui/gdmchooser.c:592 gui/gdmlogin.c:1524
+msgid "Could not set signal mask!"
msgstr ""
-"gdm hanterar lokala och fjärr-skärmar och visar ett login-fönster för "
-"användaren"
-#: gui/gdmgreeter.c:194 gui/gdmlogin.c:274
+#: gui/gdmlogin.c:276
msgid "gdm_parse_enriched_string: String too long!"
msgstr "gdm_parse_enriched_string: Strängen är för long!"
-#: gui/gdmgreeter.c:195 gui/gdmlogin.c:275
+#: gui/gdmlogin.c:277
msgid "Welcome to "
msgstr "Välkommen till"
-#: gui/gdmgreeter.c:199 gui/gdmlogin.c:279
+#: gui/gdmlogin.c:281
msgid "gdm_parse_enriched_string: Could not malloc temporary buffer!"
msgstr "gdm_parse_enriched_string: Kunde inte allokera temporär buffert!"
-#: gui/gdmgreeter.c:273
-msgid "Logo not found. No image will be displayed!"
-msgstr "Kan inte hitta logo. Ingen bild kommer att visas!"
-
-#: gui/gdmgreeter.c:299
-#, c-format
-msgid "gdm_greeter_parse_config: No configuration file: %s. Aborting."
-msgstr ""
-"gdm_greeter_parse_config: Konfigurationsfil kunde inte hittas: %s. Avbryter."
+#: gui/gdmlogin.c:358
+msgid "Are you sure you want to reboot the machine?"
+msgstr "Vill du verkligen starta om datorn?"
-#: gui/gdmgreeter.c:323 gui/gdmlogin.c:422
-#, c-format
-msgid "messages/welcome=Welcome to %h"
-msgstr "messages/welcome=Välkommen till %h"
+#: gui/gdmlogin.c:371
+msgid "Are you sure you want to halt the machine?"
+msgstr "Vill du verkligen stanna datorn?"
-#: gui/gdmgreeter.c:424 gui/gdmlogin.c:546 gui/gdmlogin.c:576
+#: gui/gdmlogin.c:388
#, c-format
-msgid ""
-"You have chosen %s for this session, but your default setting is %s.\n"
-"Do you wish to make %s the default for future sessions?"
+msgid "gdm_login_parse_config: No configuration file: %s. Aborting."
msgstr ""
-"Du har valt %s för aktuell session, men ditt standardalternativ är %s.\n"
-"Vill du ändra så att %s blir standard för framtida sessioner?"
+"gdm_login_parse_config: Konfigurationsfil kunde inte hittas: %s. Avbryter."
-#: gui/gdmgreeter.c:432
+#: gui/gdmlogin.c:520
#, c-format
msgid ""
-"Your previous session type %s is not installed on this machine.\n"
+"Your preferred session type %s is not installed on this machine.\n"
"Do you wish to make %s the default for future sessions?"
msgstr ""
"Din föregående sessions-typ %s finns inte installerad på datorn.\n"
"Vill du ändra så att %s blir standard för framtida sessioner?"
-#: gui/gdmgreeter.c:440
+#: gui/gdmlogin.c:539 gui/gdmlogin.c:569
#, c-format
msgid ""
-"Your previous session type %s is not installed on this machine.\n"
-"You will be logged in using the %s environment."
-msgstr ""
-"Din föregående sessions-typ finns inte installerad på datorn.\n"
-"Du kommer att loggas in med %s-sessionen."
-
-#: gui/gdmgreeter.c:453
-#, c-format
-msgid ""
-"You have chosen the language %s for this session, but your default setting "
-"is %s.\n"
-"Do you wish to make %s the default language for future sessions?"
-msgstr ""
-"Du har valt språket %s för aktuell session, men ditt standardalternativ är "
-"%s.\n"
-"Vill du ändra så att %s blir standard-språk för framtida sessioner?"
-
-#: gui/gdmgreeter.c:461
-#, c-format
-msgid ""
-"Your previous language %s is not installed on this machine.\n"
-"Do you wish to make %s the default language for future sessions?"
+"You have chosen %s for this session, but your default setting is %s.\n"
+"Do you wish to make %s the default for future sessions?"
msgstr ""
-"Det föregående språket %s finns inte installerat på datorn.\n"
-"Vill du ändra så att %s blir standard-språk för framtida sessioner?"
+"Du har valt %s för aktuell session, men ditt standardalternativ är %s.\n"
+"Vill du ändra så att %s blir standard för framtida sessioner?"
-#: gui/gdmgreeter.c:469
+#: gui/gdmlogin.c:625
#, c-format
-msgid ""
-"Your previous language %s is not installed on this machine.\n"
-"Your environment will be %s."
-msgstr ""
-"Ditt föregående språk %s finns inte installerat på datorn.\n"
-"Din miljö kommer att bli %s."
-
-#: gui/gdmgreeter.c:500
-msgid "Invalid username or password!"
-msgstr "Ogiltigt användarnamn eller lösenord!"
-
-#: gui/gdmgreeter.c:526 gui/gdmlogin.c:374
-msgid "Are you sure you want to reboot the machine?"
-msgstr "Vill du verkligen starta om datorn?"
+msgid "%s session selected"
+msgstr "Sessionen %s är vald"
-#: gui/gdmgreeter.c:555 gui/gdmlogin.c:386
-msgid "Are you sure you want to halt the machine?"
-msgstr "Vill du verkligen stanna datorn?"
+#: gui/gdmlogin.c:641 gui/gdmlogin.c:738
+msgid "Last"
+msgstr "Sista"
-#: gui/gdmgreeter.c:812
-msgid "gdm_greeter_session_init: Session script directory not found!"
-msgstr ""
-"gdm_greeter_session_init: Kunde inte hitta script-katalog för sessioner"
+#: gui/gdmlogin.c:656
+msgid "gdm_login_session_init: Session script directory not found!"
+msgstr "gdm_login_session_init: Kunde inte hitta script-katalog för sessioner!"
-#: gui/gdmgreeter.c:865 gui/gdmlogin.c:713
+#: gui/gdmlogin.c:703
msgid "No session scripts found. Aborting!"
msgstr "Inga sessions-skript kunde hittas. Avbryter!"
-#: gui/gdmgreeter.c:869 gui/gdmlogin.c:717
+#: gui/gdmlogin.c:707
#, c-format
msgid "No default session link found. Using %s.\n"
msgstr "Ingen länk för standard-session kunde hittas. Använder %s.\n"
-#. Login button
-#: gui/gdmgreeter.c:1029
-msgid "Login"
-msgstr "Logga in"
+#: gui/gdmlogin.c:721
+#, c-format
+msgid "%s language selected"
+msgstr "Språket %s är valt"
+
+#: gui/gdmlogin.c:753
+msgid "A-M"
+msgstr "A-M"
+
+#: gui/gdmlogin.c:759
+msgid "N-Z"
+msgstr "N-Z"
+
+#: gui/gdmlogin.c:765
+msgid "Other"
+msgstr "Annat"
-#. Init sessions menu
-#: gui/gdmgreeter.c:1041
-msgid "Sessions"
+#: gui/gdmlogin.c:1061
+msgid "Session"
msgstr "Sessioner"
-#. Language selection support
-#: gui/gdmgreeter.c:1048
-msgid "Languages"
+#: gui/gdmlogin.c:1068
+msgid "Language"
msgstr "Språk"
-#: gui/gdmgreeter.c:1058 gui/gdmlogin.c:979
+#: gui/gdmlogin.c:1075
msgid "Reboot..."
msgstr "Starta om..."
-#: gui/gdmgreeter.c:1064 gui/gdmlogin.c:985
+#: gui/gdmlogin.c:1082
msgid "Halt..."
msgstr "Stanna..."
-#: gui/gdmgreeter.c:1071
-msgid "Suspend"
-msgstr "Vänteläge"
-
-#: gui/gdmgreeter.c:1078 gui/gdmlogin.c:991
+#: gui/gdmlogin.c:1089
msgid "System"
msgstr "System"
-#: gui/gdmgreeter.c:1086 gui/gdmlogin.c:1005
+#: gui/gdmlogin.c:1097
#, c-format
msgid "Can't open icon file: %s. Suspending iconify feature!"
msgstr "Kan inte öppna ikon-fil: %s. Avaktiverar minimera-funktion"
-#: gui/gdmgreeter.c:1090 gui/gdmlogin.c:1009
+#: gui/gdmlogin.c:1100
msgid "Iconify"
msgstr "Minimera"
-#. Option button
-#: gui/gdmgreeter.c:1099
-msgid "Options..."
-msgstr "Alternativ..."
+#: gui/gdmlogin.c:1257
+msgid "Please enter your login"
+msgstr ""
-#: gui/gdmgreeter.c:1531
-#, c-format
-msgid "Can't open NofaceImageFile: %s. Suspending face browser!"
+#: gui/gdmlogin.c:1442
+#, fuzzy, c-format
+msgid "Can't open DefaultImage: %s. Suspending face browser!"
msgstr "Kan inte öppna NofaceImageFile: %s. Avaktiverar bild-bläddrare"
-#: gui/gdmgreeter.c:1686
-msgid "main: Error setting up USR1 signal handler"
-msgstr "main: Fel vid installering av USR1 signal-hanterare"
+#: gui/gdmlogin.c:1510
+msgid "main: Error setting up HUP signal handler"
+msgstr "main: Fel vid installering av HUP signal-hanterare"
-#: gui/gdmgreeter.c:1694
-msgid "main: Error setting up USR2 signal handler"
-msgstr "main: Fel vid installering av USR2 signal-hanterare"
+#: gui/gdmlogin.c:1513
+msgid "main: Error setting up INT signal handler"
+msgstr "main: Fel vid installering av INT signal-hanterare"
-#: gui/gdmlogin.c:402
-#, c-format
-msgid "gdm_login_parse_config: No configuration file: %s. Aborting."
-msgstr "gdm_login_parse_config: Konfigurationsfil kunde inte hittas: %s. Avbryter."
+#: gui/gdmlogin.c:1516
+msgid "main: Error setting up TERM signal handler"
+msgstr "main: Fel vid installering av TERM signal-hanterare"
-#: gui/gdmlogin.c:527
-#, c-format
-msgid ""
-"Your preferred session type %s is not installed on this machine.\n"
-"Do you wish to make %s the default for future sessions?"
-msgstr ""
-"Din föregående sessions-typ %s finns inte installerad på datorn.\n"
-"Vill du ändra så att %s blir standard för framtida sessioner?"
+#~ msgid "gdm_auth_secure_display: Could not unlink %s file: %s"
+#~ msgstr "gdm_auth_secure_display: Kunde inte avlänka %s fil: %s"
+
+#~ msgid ""
+#~ "gdm_auth_secure_display: Error starting xauth process: %s. Running insecure!"
+#~ msgstr ""
+#~ "gdm_auth_secure_display: Fel vid start av xauth-process: %s. Kör utan "
+#~ "säkerhet!"
+
+#~ msgid ""
+#~ "gdm_auth_secure_display: Error forking xauth process. Running insecure!"
+#~ msgstr ""
+#~ "gdm_auth_secure_display: Fel vid delning av xauth-process. Kör utan säkerhet!"
-#: gui/gdmlogin.c:635
-#, c-format
-msgid "%s session selected"
-msgstr "Sessionen %s är vald"
+#~ msgid "gdm_auth_user_add: Error starting xauth process: %s"
+#~ msgstr "gdm_auth_user_add: Fel vid start av xauth-process: %s"
-#: gui/gdmlogin.c:651 gui/gdmlogin.c:742
-msgid "Last"
-msgstr "Sista"
+#~ msgid "gdm_auth_user_add: Error forking xauth process."
+#~ msgstr "gdm_auth_user_add: Fel vid delning av xauth-process."
-#: gui/gdmlogin.c:666
-msgid "gdm_login_session_init: Session script directory not found!"
-msgstr "gdm_login_session_init: Kunde inte hitta script-katalog för sessioner!"
+#~ msgid "gdm_auth_user_remove: Error forking xauth process."
+#~ msgstr "gdm_auth_user_remove: Fel vid delning av xauth-process."
-#: gui/gdmlogin.c:728
-#, c-format
-msgid "%s language selected"
-msgstr "Språket %s är valt"
+#~ msgid "gdm_exec_command: Failed starting: %s"
+#~ msgstr "gdm_exec_command: Fel vid start av: %s"
-#: gui/gdmlogin.c:755
-msgid "A-M"
-msgstr "A-M"
+#~ msgid "gdm_exec_command: Can't fork process!"
+#~ msgstr "gdm_exec_command: Kan inte dela process!"
-#: gui/gdmlogin.c:761
-msgid "N-Z"
-msgstr "N-Z"
+#~ msgid "GNOME"
+#~ msgstr "GNOME"
-#: gui/gdmlogin.c:767
-msgid "Other"
-msgstr "Annat"
+#~ msgid "Gnome Display Manager"
+#~ msgstr "GNOME Displayhanterare"
-#: gui/gdmlogin.c:965
-msgid "Session"
-msgstr "Sessioner"
+#~ msgid "Copyright Martin K. Petersen (C) 1998, 1999"
+#~ msgstr "Copyright Matrin K. Petersen (C) 1998, 1999"
-#: gui/gdmlogin.c:972
-msgid "Language"
-msgstr "Språk"
+#~ msgid ""
+#~ "gdm manages local and remote displays and provides the user with a login "
+#~ "window."
+#~ msgstr ""
+#~ "gdm hanterar lokala och fjärr-skärmar och visar ett login-fönster för "
+#~ "användaren"
+
+#~ msgid "Logo not found. No image will be displayed!"
+#~ msgstr "Kan inte hitta logo. Ingen bild kommer att visas!"
+
+#~ msgid "gdm_greeter_parse_config: No configuration file: %s. Aborting."
+#~ msgstr ""
+#~ "gdm_greeter_parse_config: Konfigurationsfil kunde inte hittas: %s. Avbryter."
+
+#~ msgid "messages/welcome=Welcome to %h"
+#~ msgstr "messages/welcome=Välkommen till %h"
+
+#~ msgid ""
+#~ "Your previous session type %s is not installed on this machine.\n"
+#~ "Do you wish to make %s the default for future sessions?"
+#~ msgstr ""
+#~ "Din föregående sessions-typ %s finns inte installerad på datorn.\n"
+#~ "Vill du ändra så att %s blir standard för framtida sessioner?"
+
+#~ msgid ""
+#~ "Your previous session type %s is not installed on this machine.\n"
+#~ "You will be logged in using the %s environment."
+#~ msgstr ""
+#~ "Din föregående sessions-typ finns inte installerad på datorn.\n"
+#~ "Du kommer att loggas in med %s-sessionen."
+
+#~ msgid ""
+#~ "You have chosen the language %s for this session, but your default setting "
+#~ "is %s.\n"
+#~ "Do you wish to make %s the default language for future sessions?"
+#~ msgstr ""
+#~ "Du har valt språket %s för aktuell session, men ditt standardalternativ är "
+#~ "%s.\n"
+#~ "Vill du ändra så att %s blir standard-språk för framtida sessioner?"
+
+#~ msgid ""
+#~ "Your previous language %s is not installed on this machine.\n"
+#~ "Do you wish to make %s the default language for future sessions?"
+#~ msgstr ""
+#~ "Det föregående språket %s finns inte installerat på datorn.\n"
+#~ "Vill du ändra så att %s blir standard-språk för framtida sessioner?"
+
+#~ msgid ""
+#~ "Your previous language %s is not installed on this machine.\n"
+#~ "Your environment will be %s."
+#~ msgstr ""
+#~ "Ditt föregående språk %s finns inte installerat på datorn.\n"
+#~ "Din miljö kommer att bli %s."
+
+#~ msgid "Invalid username or password!"
+#~ msgstr "Ogiltigt användarnamn eller lösenord!"
+
+#~ msgid "gdm_greeter_session_init: Session script directory not found!"
+#~ msgstr ""
+#~ "gdm_greeter_session_init: Kunde inte hitta script-katalog för sessioner"
+
+#~ msgid "Login"
+#~ msgstr "Logga in"
+
+#~ msgid "Sessions"
+#~ msgstr "Sessioner"
+
+#~ msgid "Languages"
+#~ msgstr "Språk"
+
+#~ msgid "Suspend"
+#~ msgstr "Vänteläge"
+
+#~ msgid "Options..."
+#~ msgstr "Alternativ..."
+
+#~ msgid "main: Error setting up USR1 signal handler"
+#~ msgstr "main: Fel vid installering av USR1 signal-hanterare"
+
+#~ msgid "main: Error setting up USR2 signal handler"
+#~ msgstr "main: Fel vid installering av USR2 signal-hanterare"
-#: gui/gdmlogin.c:998
-msgid "Host chooser"
-msgstr "Datorväljare"
+#~ msgid "Host chooser"
+#~ msgstr "Datorväljare"