diff options
author | 1 <mkp@mkp.net> | 1999-08-11 22:46:07 +0000 |
---|---|---|
committer | Martin Peterson <mkp@src.gnome.org> | 1999-08-11 22:46:07 +0000 |
commit | 05e9b4862f94181d3ceb456e7ec6dc77c0b1c23f (patch) | |
tree | 07a67e40fbe2d895ef8a9947dc4679a7809378a6 | |
parent | c8f25c94e4c3e63fcb8a84e497587c0e3e3607fa (diff) | |
download | gdm-05e9b4862f94181d3ceb456e7ec6dc77c0b1c23f.tar.gz |
Nailed down the bug that has been haunting me the past couple of days. gdm
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-02 <mkp@mkp.net>
* md5.c, md5.h, cookie.c: Fixed MD5 endianness problem (Reported
by <gewrgiou@imbc.gr>, bugzilla 3898).
-rw-r--r-- | AUTHORS | 27 | ||||
-rw-r--r-- | ChangeLog | 29 | ||||
-rw-r--r-- | HACKING | 8 | ||||
-rw-r--r-- | Makefile.am | 2 | ||||
-rw-r--r-- | README | 10 | ||||
-rw-r--r-- | README.install | 12 | ||||
-rw-r--r-- | RELEASENOTES | 15 | ||||
-rw-r--r-- | TODO | 4 | ||||
-rw-r--r-- | acconfig.h | 1 | ||||
-rw-r--r-- | config/gdm.conf.in | 94 | ||||
-rw-r--r-- | configure.in | 11 | ||||
-rw-r--r-- | daemon/Makefile.am | 2 | ||||
-rw-r--r-- | daemon/auth.c | 343 | ||||
-rw-r--r-- | daemon/cookie.c | 47 | ||||
-rw-r--r-- | daemon/filecheck.c | 115 | ||||
-rw-r--r-- | daemon/gdm.c | 605 | ||||
-rw-r--r-- | daemon/gdm.h | 76 | ||||
-rw-r--r-- | daemon/md5.c | 207 | ||||
-rw-r--r-- | daemon/md5.h | 20 | ||||
-rw-r--r-- | daemon/misc.c | 279 | ||||
-rw-r--r-- | daemon/server.c | 333 | ||||
-rw-r--r-- | daemon/slave.c | 772 | ||||
-rw-r--r-- | daemon/verify.c | 289 | ||||
-rw-r--r-- | daemon/xdmcp.c | 889 | ||||
-rw-r--r-- | docs/gdm-manual.txt | 39 | ||||
-rw-r--r-- | gui/Makefile.am | 9 | ||||
-rw-r--r-- | gui/gdmchooser.c | 577 | ||||
-rw-r--r-- | gui/gdmlogin.c | 1636 | ||||
-rw-r--r-- | pixmaps/Makefile.am | 2 | ||||
-rw-r--r-- | pixmaps/nohost.png | bin | 0 -> 1051 bytes | |||
-rw-r--r-- | po/POTFILES.in | 1 | ||||
-rw-r--r-- | po/de.po | 675 | ||||
-rw-r--r-- | po/es.po | 768 | ||||
-rw-r--r-- | po/fr.po | 677 | ||||
-rw-r--r-- | po/no.po | 624 | ||||
-rw-r--r-- | po/sv.po | 642 |
36 files changed, 5322 insertions, 4518 deletions
@@ -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> @@ -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 @@ -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. + + + @@ -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. @@ -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 *)𝔦 - ifcfg.ifc_len=sizeof(ifr); + ifcfg.ifc_buf = (gchar *) 𝔦 + 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 Binary files differnew file mode 100644 index 00000000..fc316e87 --- /dev/null +++ b/pixmaps/nohost.png 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 @@ -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" @@ -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" @@ -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" @@ -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" @@ -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" |