--- /dev/null
+--- gdm-2.0beta4/daemon/verify.c~ Wed Sep 22 20:30:47 1999
++++ gdm-2.0beta4/daemon/verify.c Thu Apr 27 23:37:59 2000
+@@ -146,7 +146,12 @@
+ goto pamerr;
+ }
+
+- if ((pamerr = pam_acct_mgmt (pamh, 0)) != PAM_SUCCESS) {
++ pamerr = pam_acct_mgmt (pamh, 0);
++ if (pamerr == PAM_NEW_AUTHTOK_REQD) {
++ pamerr = pam_chauthtok(pamh, PAM_CHANGE_EXPIRED_AUTHTOK);
++ }
++
++ if (pamerr != PAM_SUCCESS) {
+ gdm_error (_("Couldn't set acct. mgmt for %s"), login);
+ goto pamerr;
+ }
--- /dev/null
+--- gdm-2.0beta4/daemon/server.c.orig Wed Sep 22 20:30:47 1999
++++ gdm-2.0beta4/daemon/server.c Thu Apr 27 20:42:27 2000
+@@ -191,10 +191,11 @@
+ 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);
+- return;
+ }
+-
++
++ gdm_server_start (d);
++
++#if 0
+ /* Create new cookie */
+ gdm_auth_secure_display (d);
+ setenv ("DISPLAY", d->name, TRUE);
+@@ -243,6 +244,7 @@
+
+ /* Wait for X server to send ready signal */
+ pause();
++#endif
+ }
+
+
+--- gdm-2.0beta2/daemon/auth.c.sopwith Thu Sep 9 22:44:40 1999
++++ gdm-2.0beta2/daemon/auth.c Thu Sep 9 22:46:26 1999
+@@ -296,7 +296,7 @@
+ * to it. So we better play it safe... */
+
+ if (! gdm_file_check ("gdm_auth_user_remove", user, authdir, authfile,
+- FALSE, GdmUserMaxFile, GdmRelaxPerms)) {
++ TRUE, GdmUserMaxFile, GdmRelaxPerms)) {
+ gdm_error (_("gdm_auth_user_remove: Ignoring suspiciously looking cookie file %s"), d->userauth);
+ return;
+ }
--- /dev/null
+--- gdm-2.0beta2/daemon/verify.c.sopwith Sun Sep 19 17:17:50 1999
++++ gdm-2.0beta2/daemon/verify.c Sun Sep 19 17:18:30 1999
+@@ -172,7 +172,7 @@
+ pamerr:
+
+ if (GdmVerboseAuth)
+- gdm_slave_greeter_ctl (GDM_MSGERR, (gchar *) pam_strerror (pamh, pamerr));
++ gdm_slave_greeter_ctl (GDM_MSGERR, _("Authentication failed"));
+
+ pam_end (pamh, pamerr);
+ pamh = NULL;
--- /dev/null
+--- gdm-2.0beta2/daemon/xdmcp.c.fdleak Mon Jun 19 15:44:18 2000
++++ gdm-2.0beta2/daemon/xdmcp.c Mon Jun 19 15:44:31 2000
+@@ -750,6 +750,7 @@
+ if (logfd != -1) {
+ dup2 (logfd, 1);
+ dup2 (logfd, 2);
++ close (logfd);
+ }
+ else
+ gdm_error (_("gdm_xdmcp_handle_manage: Could not open logfile for display %s!"), d->name);
--- /dev/null
+--- gdm-2.0beta4/gui/gdmlogin.c.fixmessages Tue Oct 3 14:28:29 2000
++++ gdm-2.0beta4/gui/gdmlogin.c Tue Oct 3 14:29:03 2000
+@@ -64,6 +64,7 @@
+ static GtkWidget *label;
+ static GtkWidget *entry;
+ static GtkWidget *msg;
++static gboolean first_message = TRUE;
+ static GtkWidget *win;
+ static GtkWidget *sessmenu;
+ static GtkWidget *langmenu;
+@@ -812,6 +813,15 @@
+ case GDM_PROMPT:
+ g_io_channel_read (source, buf, PIPE_SIZE-1, &len);
+ buf[len-1] = '\0';
++
++ /* Turn off the message whenever the prompt changes,
++ this is sort of a hack. Also, don't turn it off
++ the first time. Yeah I know. */
++ if (first_message)
++ first_message = FALSE;
++ else
++ gtk_label_set (GTK_LABEL(msg), "");
++
+ gtk_label_set (GTK_LABEL (label), buf);
+ gtk_widget_show (GTK_WIDGET (label));
+ gtk_entry_set_text (GTK_ENTRY (entry), "");
+@@ -824,6 +834,15 @@
+ case GDM_NOECHO:
+ g_io_channel_read (source, buf, PIPE_SIZE-1, &len);
+ buf[len-1] = '\0';
++
++ /* Turn off the message whenever the prompt changes,
++ this is sort of a hack. Also, don't turn it off
++ the first time. Yeah I know. */
++ if (first_message)
++ first_message = FALSE;
++ else
++ gtk_label_set (GTK_LABEL(msg), "");
++
+ gtk_label_set (GTK_LABEL(label), buf);
+ gtk_widget_show (GTK_WIDGET (label));
+ gtk_entry_set_text (GTK_ENTRY (entry), "");
+@@ -1254,6 +1273,7 @@
+ (GtkAttachOptions) (GTK_FILL), 0, 10);
+
+ msg = gtk_label_new (_("Please enter your login"));
++ first_message = TRUE;
+ gtk_widget_set_name(msg, "Message");
+ gtk_widget_ref (msg);
+ gtk_object_set_data_full (GTK_OBJECT (login), "msg", msg,
--- /dev/null
+--- gdm-2.0beta2/config/gdm.conf.in.i18n Tue Oct 12 15:59:32 1999
++++ gdm-2.0beta2/config/gdm.conf.in Tue Oct 12 15:59:32 1999
+@@ -54,7 +54,9 @@
+ Quiver=0
+ SystemMenu=1
+ Welcome=Welcome to %n
+-
++Welcome[de]=Willkommen auf %n
++Welcome[fr]=Bienvenue sur %n
++Welcome[ja]=%n ¤Ø¤è¤¦¤³¤½
+ [chooser]
+ DefaultHostImg=@pixmapdir@/nohost.png
+ HostImageDir=@datadir@/hosts/
+--- gdm-2.0beta2/gui/gdmlogin.c.i18n Tue Oct 12 15:59:32 1999
++++ gdm-2.0beta2/gui/gdmlogin.c Tue Oct 12 15:59:32 1999
+@@ -400,7 +400,7 @@
+ 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);
++ GdmWelcome=gnome_config_get_translated_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);
+@@ -1450,6 +1450,9 @@
+ gnome_sound_shutdown();
+ gnome_preferences_set_dialog_position (GTK_WIN_POS_CENTER);
+
++ bindtextdomain (PACKAGE, GNOMELOCALEDIR);
++ textdomain (PACKAGE);
++
+ gdm_login_parse_config();
+
+ if (GdmBrowser)
+--- gdm-2.0beta2/po/ja.po.i18n Tue Oct 12 15:59:32 1999
++++ gdm-2.0beta2/po/ja.po Tue Oct 12 15:59:32 1999
+@@ -0,0 +1,715 @@
++# gdm
++# Copyright (C) 1999 Free Software Foundation, Inc.
++# Yukihiro Nakai <nacai@iname.com>, 1999.
++#
++msgid ""
++msgstr ""
++"Project-Id-Version: gdm\n"
++"POT-Creation-Date: 1999-09-26 07:21+0900\n"
++"PO-Revision-Date: 1999-09-26 07:44+09:00\n"
++"Last-Translator: ITANI Eiichiro <emu@ceres.dti.ne.jp>\n"
++"Language-Team: Japanese Team <gnome@lists.hypercore.co.jp>\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=euc-japan\n"
++"Content-Transfer-Encoding: 8bit\n"
++"First-Translator: Yukihiro Nakai <nacai@iname.com>\n"
++
++#: daemon/gdm.c:166
++#, c-format
++msgid "gdm_config_parse: No configuration file: %s. Aborting."
++msgstr "gdm_config_parse: ÀßÄê¥Õ¥¡¥¤¥ë %s ¤¬¤¢¤ê¤Þ¤»¤ó¡£Ãæ»ß¤·¤Þ¤¹¡£"
++
++#: daemon/gdm.c:217
++msgid "gdm_config_parse: No greeter specified and default not found."
++msgstr "gdm_config_parse: greeter¤Î»ØÄ꤬¤Ê¤¯¡¢¥Ç¥Õ¥©¥ë¥È¤â¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£"
++
++#: daemon/gdm.c:229
++msgid "gdm_config_parse: No authdir specified and default not found."
++msgstr "gdm_config_parse: authdir¤Î»ØÄ꤬¤Ê¤¯¡¢¥Ç¥Õ¥©¥ë¥È¤â¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£"
++
++#: daemon/gdm.c:247
++msgid ""
++"gdm_config_parse: No sessions directory specified and default not found."
++msgstr ""
++"gdm_config_parse: "
++"sessions¥Ç¥£¥ì¥¯¥È¥ê¤Î»ØÄ꤬¤Ê¤¯¡¢¥Ç¥Õ¥©¥ë¥È¤â¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£"
++
++#: daemon/gdm.c:259
++msgid "gdm_config_parse: Invalid server line in config file. Ignoring!"
++msgstr ""
++"gdm_config_parse: ÀßÄê¥Õ¥¡¥¤¥ë¤ËÀµ¤·¤¯¤Ê¤¤ server ¹Ô¤¬¤¢¤ê¤Þ¤¹¤¬¡¢Ìµ»ë¤·¤Þ¤¹¡£"
++
++#: daemon/gdm.c:265
++msgid ""
++"gdm_config_parse: Xdmcp disabled and no local servers defined. Aborting!"
++msgstr ""
++"gdm_config_parse: "
++"XDMCP¤¬Ìµ¸ú¤Ç¡¢¥í¡¼¥«¥ë¥µ¡¼¥Ð¤Î»ØÄê¤â¤¢¤ê¤Þ¤»¤ó¤Î¤Ç¡¢Ãæ»ß¤·¤Þ¤¹¡£"
++
++#: daemon/gdm.c:270
++#, c-format
++msgid "gdm_config_parse: Can't find the gdm user (%s). Aborting!"
++msgstr "gdm_config_parse: gdm¥æ¡¼¥¶(%s)¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£Ãæ»ß¤·¤Þ¤¹¡£"
++
++#: daemon/gdm.c:275
++msgid "gdm_config_parse: The gdm user should not be root. Aborting!"
++msgstr "gdm_config_parse: gdm¥æ¡¼¥¶¤¬root¤Ç¤¢¤Ã¤Æ¤Ï¤¤¤±¤Þ¤»¤ó¡£Ãæ»ß¤·¤Þ¤¹¡£"
++
++#: daemon/gdm.c:280
++#, c-format
++msgid "gdm_config_parse: Can't find the gdm group (%s). Aborting!"
++msgstr "gdm_config_parse: gdm¥°¥ë¡¼¥×(%s)¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£Ãæ»ß¤·¤Þ¤¹¡£"
++
++#: daemon/gdm.c:285
++msgid "gdm_config_parse: The gdm group should not be root. Aborting!"
++msgstr "gdm_config_parse: gdm¥°¥ë¡¼¥×¤¬root¤Ç¤¢¤Ã¤Æ¤Ï¤¤¤±¤Þ¤»¤ó¡£Ãæ»ß¤·¤Þ¤¹¡£"
++
++#: daemon/gdm.c:292
++#, c-format
++msgid "gdm_config_parse: Authdir %s does not exist. Aborting."
++msgstr "gdm_config_parse: Authdir %s ¤¬Â¸ºß¤·¤Þ¤»¤ó¡£Ãæ»ß¤·¤Þ¤¹¡£"
++
++#: daemon/gdm.c:295
++#, c-format
++msgid "gdm_config_parse: Authdir %s is not a directory. Aborting."
++msgstr "gdm_config_parse: Authdir %s ¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£Ãæ»ß¤·¤Þ¤¹¡£"
++
++#: daemon/gdm.c:298
++#, c-format
++msgid ""
++"gdm_config_parse: Authdir %s is not owned by user %s, group %s. Aborting."
++msgstr ""
++"gdm_config_parse: Authdir %s ¤Ï¥æ¡¼¥¶ %s¡¢¥°¥ë¡¼¥× %s "
++"¤Î½êͤǤϤ¢¤ê¤Þ¤»¤ó¡£Ãæ»ß¤·¤Þ¤¹¡£"
++
++#: daemon/gdm.c:302
++#, c-format
++msgid ""
++"gdm_config_parse: Authdir %s has wrong permissions. Should be 750. Aborting."
++msgstr ""
++"gdm_config_parse: Authdir %s "
++"¤Î¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤Ï750¤Ç¤Ê¤±¤ì¤Ð¤¤¤±¤Þ¤»¤ó¡£Ãæ»ß¤·¤Þ¤¹¡£"
++
++#: daemon/gdm.c:363
++#, c-format
++msgid "gdm_display_manage: Failed forking gdm slave process for %d"
++msgstr "gdm_display_manage: gdm(%d)¤Î¥¹¥ì¡¼¥Ö¥×¥í¥»¥¹¤òfork¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿"
++
++#: daemon/gdm.c:442
++#, c-format
++msgid "gdm_child_action: Aborting display %s"
++msgstr "gdm_child_action: ¥Ç¥£¥¹¥×¥ì¥¤ %s ¤òÃæ»ß¤·¤Æ¤Þ¤¹"
++
++#: daemon/gdm.c:447
++msgid "gdm_child_action: Master rebooting..."
++msgstr "gdm_child_action: ¥Þ¥¹¥¿¡¼¥ê¥Ö¡¼¥ÈÃæ..."
++
++#: daemon/gdm.c:453
++#, c-format
++msgid "gdm_child_action: Reboot failed: %s"
++msgstr "gdm_child_action: ¥ê¥Ö¡¼¥È¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s"
++
++#: daemon/gdm.c:457
++msgid "gdm_child_action: Master halting..."
++msgstr "gdm_child_action: ¥Þ¥¹¥¿¡¼Ää»ßÃæ..."
++
++#: daemon/gdm.c:463
++#, c-format
++msgid "gdm_child_action: Halt failed: %s"
++msgstr "gdm_child_action: Ää»ß¤Ï¼ºÇÔ¤·¤Þ¤·¤¿: %s"
++
++#: daemon/gdm.c:560
++msgid "gdm_daemonify: fork() failed!"
++msgstr "gdm_daemonify: fork()¤Ë¼ºÇÔ¤·¤Þ¤·¤¿!"
++
++#: daemon/gdm.c:563
++#, c-format
++msgid "gdm_daemonify: setsid() failed: %s!"
++msgstr "gdm_daemonify: setsid()¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s!"
++
++#. XDM compliant error message
++#: daemon/gdm.c:589
++msgid "Only root wants to run x^hgdm\n"
++msgstr "root¤À¤±¤¬x^Hgdm¤ò¼Â¹Ô¤Ç¤¤Þ¤¹\n"
++
++#: daemon/gdm.c:610
++msgid ""
++"gdm already running. Aborting!\n"
++"\n"
++msgstr ""
++"gdm¤Ï¤¹¤Ç¤Ë¼Â¹ÔÃæ¤Ç¤¹¡£Ãæ»ß¤·¤Þ¤¹!\n"
++"\n"
++
++#: daemon/gdm.c:616
++#, c-format
++msgid ""
++"According to %s, gdm was already running (%d),\n"
++"but seems to have been murdered mysteriously.\n"
++msgstr ""
++"%s¤Ë¤è¤ì¤Ð¡¢gdm¤Ï¤¹¤Ç¤Ë¼Â¹ÔÃæ(%d)¤Ê¤Î¤Ç¤¹¤¬¡¢\n"
++"¤è¤¯¤ï¤«¤é¤Ê¤¤»¦¤µ¤ìÊý¤ò¤·¤¿¤è¤¦¤Ç¤¹¡£\n"
++
++#: daemon/gdm.c:638
++msgid "gdm_main: Error setting up TERM signal handler"
++msgstr "gdm_main: TERM¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤òÀßÄê¤Ç¤¤Þ¤»¤ó"
++
++#: daemon/gdm.c:641
++msgid "gdm_main: Error setting up INT signal handler"
++msgstr "gdm_main: INT¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤òÀßÄê¤Ç¤¤Þ¤»¤ó"
++
++#: daemon/gdm.c:649
++msgid "gdm_main: Error setting up CHLD signal handler"
++msgstr "gdm_main: CHLD¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤òÀßÄê¤Ç¤¤Þ¤»¤ó"
++
++#. Really no need to clean up here - this process is a goner anyway
++#: daemon/auth.c:215 daemon/auth.c:240
++#, c-format
++msgid "gdm_auth_user_add: Could not open cookie file %s"
++msgstr "gdm_auth_user_add: ¥¯¥Ã¥¡¼¥Õ¥¡¥¤¥ë %s ¤ò³«¤¯¤³¤È¤¬¤Ç¤¤Þ¤»¤ó¡£"
++
++#: daemon/auth.c:229
++#, c-format
++msgid "gdm_auth_user_add: Could not lock cookie file %s"
++msgstr "gdm_auth_user_add: ¥¯¥Ã¥¡¼¥Õ¥¡¥¤¥ë %s ¤ò¥í¥Ã¥¯¤Ç¤¤Þ¤»¤ó¡£"
++
++#: daemon/auth.c:300
++#, c-format
++msgid "gdm_auth_user_remove: Ignoring suspiciously looking cookie file %s"
++msgstr "gdm_auth_user_remove: ²ø¤·¤²¤Ê¥¯¥Ã¥¡¼¥Õ¥¡¥¤¥ë %s ¤ò̵»ë¤·¤Þ¤¹¡£"
++
++#: daemon/filecheck.c:58
++#, c-format
++msgid "%s: Directory %s does not exist."
++msgstr "%s: ¥Ç¥£¥ì¥¯¥È¥ê %s ¤¬Â¸ºß¤·¤Þ¤»¤ó¡£"
++
++#: daemon/filecheck.c:64 daemon/filecheck.c:105
++#, c-format
++msgid "%s: %s is not owned by uid %d."
++msgstr "%s: %s ¤Ï uid %d ¤Î½êͤǤϤ¢¤ê¤Þ¤»¤ó¡£"
++
++#: daemon/filecheck.c:70 daemon/filecheck.c:112
++#, c-format
++msgid "%s: %s is writable by group."
++msgstr "%s: %s ¤¬¥°¥ë¡¼¥×½ñ¤¹þ¤ß²Ä¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£"
++
++#: daemon/filecheck.c:76
++#, c-format
++msgid "%s: %s is writable by other."
++msgstr "%s: %s ¤¬ other ¤Ë¤è¤ë½ñ¤¹þ¤ß²Ä¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£"
++
++#: daemon/filecheck.c:90
++#, c-format
++msgid "%s: does not exist and must."
++msgstr "%s: ¸ºß¤·¤Þ¤»¤ó¤¬¡¢¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£"
++
++#: daemon/filecheck.c:98
++#, c-format
++msgid "%s: %s is not a regular file."
++msgstr "%s: %s¤ÏÄ̾ï¤Î¥Õ¥¡¥¤¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£"
++
++#: daemon/filecheck.c:119
++#, c-format
++msgid "%s: %s is writable by group/other."
++msgstr "%s: %s ¤¬ group/other ¤Ë¤è¤ë½ñ¤¹þ¤ß²Ä¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£"
++
++#: daemon/filecheck.c:126
++#, c-format
++msgid "%s: %s is bigger than sysadmin specified maximum file size."
++msgstr "%s: %s ¤¬´ÉÍý¼Ô¤Ë¤è¤Ã¤Æ»ØÄꤵ¤ì¤¿ºÇÂç¥Õ¥¡¥¤¥ë¥µ¥¤¥º¤òĶ¤¨¤Æ¤¤¤Þ¤¹¡£"
++
++#: daemon/misc.c:128
++#, c-format
++msgid "gdm_exec_script: Failed starting: %s"
++msgstr "gdm_exec_script: µ¯Æ°¤Ë¼ºÇÔ¤·¤Þ¤·¤¿: %s"
++
++#: daemon/misc.c:132
++msgid "gdm_exec_script: Can't fork script process!"
++msgstr "gdm_exec_script: ¥¹¥¯¥ê¥×¥È¤Î¥×¥í¥»¥¹¤òfork¤Ç¤¤Þ¤»¤ó!"
++
++#: daemon/server.c:84 daemon/server.c:208
++msgid "gdm_server_start: Error setting up USR1 signal handler"
++msgstr "gdm_server_start: USR1¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤òÀßÄê¤Ç¤¤Þ¤»¤ó"
++
++#: daemon/server.c:101
++#, c-format
++msgid "gdm_server_start: Could not open logfile for display %s!"
++msgstr "gdm_server_start: ¥Ç¥£¥¹¥×¥ì¥¤%sÍÑ¤Î¥í¥°¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó!"
++
++#: daemon/server.c:130
++msgid "gdm_server_start: Error setting USR1 to SIG_IGN"
++msgstr "gdm_server_start: USR1 ¤ò SIG_IGN ¤ËÀßÄê¤Ç¤¤Þ¤»¤ó"
++
++#: daemon/server.c:147
++#, c-format
++msgid "gdm_server_start: Xserver not found: %s"
++msgstr "gdm_slave_start: Xserver ¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %s"
++
++#: daemon/server.c:153
++msgid "gdm_server_start: Can't fork Xserver process!"
++msgstr "gdm_exec_script: Xserver ¤Î¥×¥í¥»¥¹¤òfork¤Ç¤¤Þ¤»¤ó!"
++
++#: daemon/server.c:179
++#, c-format
++msgid "gdm_server_stop: Could not unlink auth file: %s!"
++msgstr "gdm_server_stop: ǧ¾Ú¥Õ¥¡¥¤¥ë¤òºï½ü¤Ç¤¤Þ¤»¤ó!: %s"
++
++#: daemon/server.c:234
++msgid "gdm_server_restart: Error setting up ALARM signal handler"
++msgstr "gdm_server_restart: ALARM¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤òÀßÄê¤Ç¤¤Þ¤»¤ó"
++
++#: daemon/slave.c:120
++msgid "gdm_slave_init: Error setting up TERM/INT signal handler"
++msgstr "gdm_slave_init: TERM/INT¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤òÀßÄê¤Ç¤¤Þ¤»¤ó"
++
++#: daemon/slave.c:128
++msgid "gdm_slave_init: Error setting up CHLD signal handler"
++msgstr "gdm_slave_init: CHLD¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤òÀßÄê¤Ç¤¤Þ¤»¤ó"
++
++#: daemon/slave.c:179
++msgid "gdm_slave_greeter: Can't init pipe to gdmgreeter"
++msgstr "gdm_slave_greeter: gdmgreeter¤È¤Î¥Ñ¥¤¥×¤ò½é´ü²½¤Ç¤¤Þ¤»¤ó"
++
++#: daemon/slave.c:204
++#, c-format
++msgid "gdm_slave_greeter: Couldn't set groupid to %d"
++msgstr "gdm_slave_greeter: ¥°¥ë¡¼¥×ID¤ò%d¤ËÀßÄê¤Ç¤¤Þ¤»¤ó"
++
++#: daemon/slave.c:207
++#, c-format
++msgid "gdm_slave_greeter: Couldn't set userid to %d"
++msgstr "gdm_slave_greeter: ¥æ¡¼¥¶ID¤ò%d¤ËÀßÄê¤Ç¤¤Þ¤»¤ó"
++
++#: daemon/slave.c:217
++#, c-format
++msgid "gdm_slave_greeter: Error starting greeter on display %s"
++msgstr "gdm_slave_greeter: ¥Ç¥£¥¹¥×¥ì¥¤%s¤Çgreeter¤ò³«»Ï¤Ç¤¤Þ¤»¤ó"
++
++#: daemon/slave.c:220
++msgid "gdm_slave_greeter: Can't fork gdmgreeter process"
++msgstr "gdm_slave_greeter: gdmgreeter¥×¥í¥»¥¹¤òfork¤Ç¤¤Þ¤»¤ó"
++
++#: daemon/slave.c:298
++#, c-format
++msgid "gdm_slave_session_init: User '%s' not found. Aborting."
++msgstr "gdm_slave_session_init: ¥æ¡¼¥¶¡Ö%s¡×¤Ï¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£Ãæ»ß¤·¤Þ¤¹¡£"
++
++#: daemon/slave.c:323
++msgid ""
++"gdm_slave_session_init: Execution of PreSession script returned > 0. "
++"Aborting."
++msgstr ""
++"gdm_slave_session_init: "
++"PreSession¥¹¥¯¥ê¥×¥È¤¬Àµ¾ï½ªÎ»¤·¤Þ¤»¤ó¤Ç¤·¤¿¡£Ãæ»ß¤·¤Þ¤¹¡£"
++
++#: daemon/slave.c:347
++msgid "gdm_slave_session_init: Error forking user session"
++msgstr "gdm_slave_session_init: ¥æ¡¼¥¶¥»¥Ã¥·¥ç¥ó¤Îfork¤¬¤Ç¤¤Þ¤»¤ó"
++
++#: daemon/slave.c:355
++#, c-format
++msgid "gdm_slave_session_init: Could not setgid %d. Aborting."
++msgstr "gdm_slave_session_init: setgid %d¤¬¤Ç¤¤Þ¤»¤ó¡£Ãæ»ß¤·¤Þ¤¹¡£"
++
++#: daemon/slave.c:358
++#, c-format
++msgid "gdm_slave_session_init: initgroups() failed for %s. Aborting."
++msgstr "gdm_slave_session_init: %s¤Îinitgroups()¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£Ãæ»ß¤·¤Þ¤¹¡£"
++
++#: daemon/slave.c:361
++#, c-format
++msgid "gdm_slave_session_init: Could not become %s. Aborting."
++msgstr "gdm_slave_session_init: %s¤Ë¤Ê¤ì¤Þ¤»¤ó¤Ç¤·¤¿¡£Ãæ»ß¤·¤Þ¤¹¡£"
++
++#: daemon/slave.c:403
++#, c-format
++msgid "gdm_slave_session_init: Could not start session `%s'"
++msgstr "gdm_slave_session_init: ¥»¥Ã¥·¥ç¥ó¡Ö%s¡×¤¬³«»Ï¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿"
++
++#: daemon/slave.c:578
++#, c-format
++msgid "gdm_slave_windows_kill_ioerror_handler: Fatal X error - Restarting %s"
++msgstr ""
++"gdm_slave_windows_kill_ioerror_handler: X¤ÎÃ×̿Ū¥¨¥é¡¼¤Ç¤¹ - %s¤òºÆµ¯Æ°¤·¤Þ¤¹"
++
++#: daemon/slave.c:610
++msgid "gdm_slave_xsync_ping: Error setting up ALARM signal handler"
++msgstr "gdm_slave_xsync_ping: ALARM ¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤òÀßÄê¤Ç¤¤Þ¤»¤ó"
++
++#: daemon/verify.c:129 daemon/verify.c:201 gui/gdmlogin.c:1248
++msgid "Login:"
++msgstr "¥í¥°¥¤¥ó:"
++
++#: daemon/verify.c:135
++msgid "Can't find /etc/pam.d/gdm!"
++msgstr "/etc/pam.d/gdm¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó!"
++
++#: daemon/verify.c:140
++#, c-format
++msgid "Can't set PAM_TTY=%s"
++msgstr "PAM_TTY=%s¤òÀßÄê¤Ç¤¤Þ¤»¤ó"
++
++#: daemon/verify.c:145 daemon/verify.c:222
++#, c-format
++msgid "Couldn't authenticate %s"
++msgstr "%s¤òǧ¾Ú¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿"
++
++#: daemon/verify.c:150
++#, c-format
++msgid "Couldn't set acct. mgmt for %s"
++msgstr "acct¤¬ÀßÄê¤Ç¤¤Þ¤»¤ó¡£mgmt¤Ï%s¤Ç¤¹¡£"
++
++#: daemon/verify.c:155
++#, c-format
++msgid "Couldn't set credentials for %s"
++msgstr "%s¤Îcredential¤òÀßÄê¤Ç¤¤Þ¤»¤ó¤Ç¤·¤¿"
++
++#: daemon/verify.c:160
++#, c-format
++msgid "Couldn't open session for %s"
++msgstr "%s¤Î¥»¥Ã¥·¥ç¥ó¤ò³«¤±¤Þ¤»¤ó¤Ç¤·¤¿"
++
++#: daemon/verify.c:217
++msgid "Password:"
++msgstr "¥Ñ¥¹¥ï¡¼¥É:"
++
++#: daemon/verify.c:223
++msgid "User unknown"
++msgstr "ÉÔÌÀ¤Ê¥æ¡¼¥¶"
++
++#: daemon/verify.c:228
++#, c-format
++msgid "Root login disallowed on display '%s'"
++msgstr "root ¤Ç DISPLAY %s ¤Ë¥í¥°¥¤¥ó¤Ç¤¤Ê¤¤¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£"
++
++#: daemon/verify.c:229
++msgid "Root login disallowed"
++msgstr "root ¤Ç¤Î¥í¥°¥¤¥ó¤Ïµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£"
++
++#: daemon/verify.c:237
++msgid "Incorrect password"
++msgstr "¥Ñ¥¹¥ï¡¼¥É¤¬°ã¤¤¤Þ¤¹"
++
++#: daemon/verify.c:256
++msgid "gdm_verify_check: Can't find PAM configuration file for gdm"
++msgstr "gdm_verify_check: gdm ¤Î PAM ÀßÄê¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
++
++#: daemon/xdmcp.c:184
++#, c-format
++msgid "gdm_xdmcp_init: Could not get server hostname: %s!"
++msgstr "gdm_xdmcp_init: ¥µ¡¼¥Ð¤Î¥Û¥¹¥È̾¤¬¤ï¤«¤ê¤Þ¤»¤ó: %s!"
++
++#: daemon/xdmcp.c:198
++msgid "gdm_xdmcp_init: Could not create socket!"
++msgstr "gdm_xdmcp_init: ¥½¥±¥Ã¥È¤¬ºîÀ®¤Ç¤¤Þ¤»¤ó!"
++
++#: daemon/xdmcp.c:205
++msgid "gdm_xdmcp_init: Could not bind to XDMCP socket!"
++msgstr "gdm_xdmcp_init: XDMCP¥½¥±¥Ã¥È¤Ë bind ¤Ç¤¤Þ¤»¤ó"
++
++#: daemon/xdmcp.c:214
++msgid "gdm_xdmcp_init: Can't alloc fifopath"
++msgstr "gdm_xdmcp_init: fifopath¤ò alloc ¤Ç¤¤Þ¤»¤ó"
++
++#: daemon/xdmcp.c:219
++msgid "gdm_xdmcp_init: Could not make FIFO for chooser"
++msgstr "gdm_xdmcp_init: chooser ÍѤΠFIFO ¤òºî¤ì¤Þ¤»¤ó"
++
++#: daemon/xdmcp.c:224
++msgid "gdm_xdmcp_init: Could not open FIFO for chooser"
++msgstr "gdm_xdmcp_init: chooser ÍѤΠFIFO ¤ò³«¤±¤Þ¤»¤ó"
++
++#: daemon/xdmcp.c:284
++msgid "gdm_xdmcp_decode: Could not create XDMCP buffer!"
++msgstr "gdm_xdmcp_decode: XDMCP ¥Ð¥Ã¥Õ¥¡¤òºîÀ®¤Ç¤¤Þ¤»¤ó!"
++
++#: daemon/xdmcp.c:289
++msgid "gdm_xdmcp_decode: Could not read XDMCP header!"
++msgstr "gdm_xdmcp_decode: XDMCP ¥Ø¥Ã¥À¤òÆɤá¤Þ¤»¤ó!"
++
++#: daemon/xdmcp.c:294
++msgid "gdm_xdmcp_decode: Incorrect XDMCP version!"
++msgstr "gdm_xdmcp_decode: XDMCP ¤Î¥Ð¡¼¥¸¥ç¥ó¤¬Àµ¤·¤¯¤¢¤ê¤Þ¤»¤ó!"
++
++#: daemon/xdmcp.c:333
++#, c-format
++msgid "gdm_xdmcp_decode_packet: Unknown opcode from host %s"
++msgstr "gdm_xdmcp_decode_packet: ¥Û¥¹¥È %s ¤«¤éÉÔÌÀ¤Ê¥ª¥Ú¥³¡¼¥É"
++
++#: daemon/xdmcp.c:351
++msgid "gdm_xdmcp_handle_query: Could not extract authlist from packet"
++msgstr "gdm_xdmcp_handle_query: ¥Ñ¥±¥Ã¥È¤«¤éǧ¾Ú¥ê¥¹¥È¤òŸ³«¤Ç¤¤Þ¤»¤ó"
++
++#: daemon/xdmcp.c:362
++msgid "gdm_xdmcp_handle_query: Error in checksum"
++msgstr "gdm_xdmcp_handle_query: ¥Á¥§¥Ã¥¯¥µ¥à¤Î¥¨¥é¡¼"
++
++#: daemon/xdmcp.c:433
++msgid "gdm_xdmcp_handle_forward_query: Could not read display address"
++msgstr "gdm_xdmcp_handle_forward_query: ¥Ç¥£¥¹¥×¥ì¥¤¤Î¥¢¥É¥ì¥¹¤¬¤ï¤«¤ê¤Þ¤»¤ó"
++
++#: daemon/xdmcp.c:439
++msgid "gdm_xdmcp_handle_forward_query: Could not read display port number"
++msgstr "gdm_xdmcp_handle_forward_query: ¥Ç¥£¥¹¥×¥ì¥¤¤Î¥Ý¡¼¥ÈÈֹ椬¤ï¤«¤ê¤Þ¤»¤ó"
++
++#: daemon/xdmcp.c:445
++msgid "gdm_xdmcp_handle_forward_query: Could not extract authlist from packet"
++msgstr "gdm_xdmcp_handle_forward_query: ¥Ñ¥±¥Ã¥È¤«¤éǧ¾Ú¥ê¥¹¥È¤¬Å¸³«¤Ç¤¤Þ¤»¤ó"
++
++#: daemon/xdmcp.c:460
++msgid "gdm_xdmcp_handle_forward_query: Error in checksum"
++msgstr "gdm_xdmcp_handle_forward_query: ¥Á¥§¥Ã¥¯¥µ¥à¤Î¥¨¥é¡¼"
++
++#: daemon/xdmcp.c:523
++#, c-format
++msgid "Denied XDMCP query from host %s"
++msgstr "¥Û¥¹¥È %s ¤Î XDMCP Í×µá¤òµñÈÝ"
++
++#: daemon/xdmcp.c:525
++msgid "Display not authorized to connect"
++msgstr "¥Ç¥£¥¹¥×¥ì¥¤¤ËÀܳµö²Ä¤¬¤¢¤ê¤Þ¤»¤ó"
++
++#: daemon/xdmcp.c:558
++#, c-format
++msgid "gdm_xdmcp_handle_request: Got REQUEST from banned host %s"
++msgstr "gdm_xdmcp_handle_request: ¶Ø»ß¤µ¤ì¤¿¥Û¥¹¥È %s ¤è¤ê REQUEST ¤ò¼õ¿®"
++
++#: daemon/xdmcp.c:565
++msgid "gdm_xdmcp_handle_request: Could not read Display Number"
++msgstr "gdm_xdmcp_handle_request: ¥Ç¥£¥¹¥×¥ì¥¤Èֹ椬¤ï¤«¤ê¤Þ¤»¤ó"
++
++#: daemon/xdmcp.c:571
++msgid "gdm_xdmcp_handle_request: Could not read Connection Type"
++msgstr "gdm_xdmcp_handle_request: ÀܳÊý¼°¤¬¤ï¤«¤ê¤Þ¤»¤ó"
++
++#: daemon/xdmcp.c:577
++msgid "gdm_xdmcp_handle_request: Could not read Client Address"
++msgstr "gdm_xdmcp_handle_request: ¥¯¥é¥¤¥¢¥ó¥È¤Î¥¢¥É¥ì¥¹¤¬¤ï¤«¤ê¤Þ¤»¤ó"
++
++#: daemon/xdmcp.c:583
++msgid "gdm_xdmcp_handle_request: Could not read Authentication Names"
++msgstr "gdm_xdmcp_handle_request: ǧ¾Ú̾¤¬¤ï¤«¤ê¤Þ¤»¤ó"
++
++#: daemon/xdmcp.c:589
++msgid "gdm_xdmcp_handle_request: Could not read Authentication Data"
++msgstr "gdm_xdmcp_handle_request: ǧ¾Ú¥Ç¡¼¥¿¤¬¤ï¤«¤ê¤Þ¤»¤ó"
++
++#: daemon/xdmcp.c:595
++msgid "gdm_xdmcp_handle_request: Could not read Authorization List"
++msgstr "gdm_xdmcp_handle_request: ǧ¾Ú¥ê¥¹¥È¤¬¤ï¤«¤ê¤Þ¤»¤ó"
++
++#: daemon/xdmcp.c:606
++msgid "gdm_xdmcp_handle_request: Could not read Manufacturer ID"
++msgstr "gdm_xdmcp_handle_request: À½Â¤¼ÔID¤¬¤ï¤«¤ê¤Þ¤»¤ó"
++
++#: daemon/xdmcp.c:624
++#, c-format
++msgid "gdm_xdmcp_handle_request: Failed checksum from %s"
++msgstr "gdm_xdmcp_handle_request: %s ¤«¤é¤Î¥Á¥§¥Ã¥¯¥µ¥à¤Ë´Ö°ã¤¤"
++
++#: daemon/xdmcp.c:737
++#, c-format
++msgid "gdm_xdmcp_handle_manage: Got Manage from banned host %s"
++msgstr "gdm_xdmcp_handle_manage: ¶Ø»ß¤µ¤ì¤¿¥Û¥¹¥È %s ¤«¤é Manage ¤ò¼õ¿®"
++
++#: daemon/xdmcp.c:744
++msgid "gdm_xdmcp_handle_manage: Could not read Session ID"
++msgstr "gdm_xdmcp_handle_manage: ¥»¥Ã¥·¥ç¥óID¤¬¤ï¤«¤ê¤Þ¤»¤ó"
++
++#: daemon/xdmcp.c:750
++msgid "gdm_xdmcp_handle_manage: Could not read Display Number"
++msgstr "gdm_xdmcp_handle_manage: ¥Ç¥£¥¹¥×¥ì¥¤Èֹ椬¤ï¤«¤ê¤Þ¤»¤ó"
++
++#: daemon/xdmcp.c:759
++msgid "gdm_xdmcp_manage: Could not read Display Class"
++msgstr "gdm_xdmcp_manage: ¥Ç¥£¥¹¥×¥ì¥¤¥¯¥é¥¹¤¬¤ï¤«¤ê¤Þ¤»¤ó"
++
++#: daemon/xdmcp.c:780
++#, c-format
++msgid "gdm_xdmcp_handle_manage: Could not open logfile for display %s!"
++msgstr "gdm_xdmcp_handle_manage: ¥Ç¥£¥¹¥×¥ì¥¤%sÍÑ¤Î¥í¥°¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó!"
++
++#: daemon/xdmcp.c:852
++#, c-format
++msgid "gdm_xdmcp_handle_keepalive: Got KEEPALIVE from banned host %s"
++msgstr "gdm_xdmcp_handle_keepalive: ¶Ø»ß¤µ¤ì¤¿¥Û¥¹¥È %s ¤è¤ê KEEPALIVE ¤ò¼õ¿®"
++
++#: daemon/xdmcp.c:859
++msgid "gdm_xdmcp_handle_keepalive: Could not read Display Number"
++msgstr "gdm_xdmcp_handle_keepalive: ¥Ç¥£¥¹¥×¥ì¥¤Èֹ椬¤ï¤«¤ê¤Þ¤»¤ó"
++
++#: daemon/xdmcp.c:865
++msgid "gdm_xdmcp_handle_keepalive: Could not read Session ID"
++msgstr "gdm_xdmcp_handle_keepalive: ¥»¥Ã¥·¥ç¥óID¤¬¤ï¤«¤ê¤Þ¤»¤ó"
++
++#: gui/gdmchooser.c:342
++#, c-format
++msgid "gdm_chooser_parse_config: No configuration file: %s. Aborting."
++msgstr "gdm_chooser_parse_config: ÀßÄê¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó:%s¡£Ãæ»ß¤·¤Þ¤¹¡£"
++
++#: gui/gdmchooser.c:451
++#, c-format
++msgid "Can't open default host icon: %s"
++msgstr "¥Ç¥Õ¥©¥ë¥È¤Î¥Û¥¹¥È¥¢¥¤¥³¥ó¤ò³«¤±¤Þ¤»¤ó: %s"
++
++#. Buttons
++#: gui/gdmchooser.c:518
++msgid "Connect"
++msgstr "Àܳ"
++
++#: gui/gdmchooser.c:525
++msgid "Rescan"
++msgstr "ºÆ¥¹¥¥ã¥ó"
++
++#: gui/gdmchooser.c:531
++msgid "Cancel"
++msgstr "¥¥ã¥ó¥»¥ë"
++
++#: gui/gdmchooser.c:582
++msgid "gdm_signals_init: Error setting up HUP signal handler"
++msgstr "gdm_signals_init: INT¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤òÀßÄê¤Ç¤¤Þ¤»¤ó"
++
++#: gui/gdmchooser.c:585
++msgid "gdm_signals_init: Error setting up INT signal handler"
++msgstr "gdm_signals_init: INT¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤òÀßÄê¤Ç¤¤Þ¤»¤ó"
++
++#: gui/gdmchooser.c:588
++msgid "gdm_signals_init: Error setting up TERM signal handler"
++msgstr "gdm_signals_init: TERM¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤òÀßÄê¤Ç¤¤Þ¤»¤ó"
++
++#: gui/gdmchooser.c:596 gui/gdmlogin.c:1557
++msgid "Could not set signal mask!"
++msgstr "¥·¥°¥Ê¥ë¥Þ¥¹¥¯¤òÀßÄê¤Ç¤¤Þ¤»¤ó!"
++
++#: gui/gdmlogin.c:271
++msgid "gdm_parse_enriched_string: String too long!"
++msgstr "gdm_parse_enriched_string: ʸ»úÎó¤¬Ä¹¤¹¤®¤Þ¤¹!"
++
++#: gui/gdmlogin.c:272
++#, c-format
++msgid "Welcome to %s"
++msgstr "%s ¤Ø¤è¤¦¤³¤½"
++
++#: gui/gdmlogin.c:276
++msgid "gdm_parse_enriched_string: Could not malloc temporary buffer!"
++msgstr "gdm_parase_enriched_string: °ì»þ¥Ð¥Ã¥Õ¥¡¤òmalloc¤Ç¤¤Þ¤»¤ó!"
++
++#: gui/gdmlogin.c:358
++msgid "Are you sure you want to reboot the machine?"
++msgstr "ËÜÅö¤Ë¥·¥¹¥Æ¥à¤òºÆµ¯Æ°¤·¤Þ¤¹¤«?"
++
++#: gui/gdmlogin.c:371
++msgid "Are you sure you want to halt the machine?"
++msgstr "ËÜÅö¤Ë¥·¥¹¥Æ¥à¤òÄä»ß¤·¤Þ¤¹¤«?"
++
++#: gui/gdmlogin.c:388
++#, c-format
++msgid "gdm_login_parse_config: No configuration file: %s. Aborting."
++msgstr "gdm_login_parse_config: ÀßÄê¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó: %s¡£Ãæ»ß¤·¤Þ¤¹¡£"
++
++#: gui/gdmlogin.c:524
++#, 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 ""
++"¤ªË¾¤ß¤Î¥»¥Ã¥·¥ç¥ó¥¿¥¤¥×%s¤Ï¤³¤Î¥·¥¹¥Æ¥à¤Ë¤Ï¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£\n"
++"º£¸å%s¤ò¥Ç¥Õ¥©¥ë¥È¥»¥Ã¥·¥ç¥ó¤Ë¤·¤Þ¤¹¤«?"
++
++#: gui/gdmlogin.c:543 gui/gdmlogin.c:573
++#, 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?"
++msgstr ""
++"¤³¤Î¥»¥Ã¥·¥ç¥ó¤Ë¤Ï%s¤¬ÁªÂò¤µ¤ì¤Þ¤·¤¿¡£¤·¤«¤·¥Ç¥Õ¥©¥ë¥È¤Ï%s¤Ç¤¹¡£\n"
++"º£¸å%s¤ò¥Ç¥Õ¥©¥ë¥È¥»¥Ã¥·¥ç¥ó¤Ë¤·¤Þ¤¹¤«?"
++
++#: gui/gdmlogin.c:631
++#, c-format
++msgid "%s session selected"
++msgstr "%s¥»¥Ã¥·¥ç¥ó¤¬ÁªÂò¤µ¤ì¤Þ¤·¤¿"
++
++#: gui/gdmlogin.c:647 gui/gdmlogin.c:750
++msgid "Last"
++msgstr "Á°²ó"
++
++#: gui/gdmlogin.c:662
++msgid "gdm_login_session_init: Session script directory not found!"
++msgstr ""
++"gdm_login_session_init: ¥»¥Ã¥·¥ç¥ó¥¹¥¯¥ê¥×¥È¤Î¥Ç¥£¥ì¥¯¥È¥ê¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó!"
++
++#: gui/gdmlogin.c:715
++msgid "No session scripts found. Aborting!"
++msgstr "¥»¥Ã¥·¥ç¥ó¥¹¥¯¥ê¥×¥È¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£Ãæ»ß¤·¤Þ¤¹¡£"
++
++#: gui/gdmlogin.c:719
++#, c-format
++msgid "No default session link found. Using %s.\n"
++msgstr "¥Ç¥Õ¥©¥ë¥È¥»¥Ã¥·¥ç¥ó¤Î¥ê¥ó¥¯¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£%s¤ò»È¤¤¤Þ¤¹¡£\n"
++
++#: gui/gdmlogin.c:733
++#, c-format
++msgid "%s language selected"
++msgstr "%s ¸À¸ì¤¬ÁªÂò¤µ¤ì¤Þ¤·¤¿"
++
++#: gui/gdmlogin.c:765
++msgid "A-M"
++msgstr "A-M"
++
++#: gui/gdmlogin.c:771
++msgid "N-Z"
++msgstr "N-Z"
++
++#: gui/gdmlogin.c:777
++msgid "Other"
++msgstr "¤½¤Î¾"
++
++#: gui/gdmlogin.c:1080
++msgid "Session"
++msgstr "¥»¥Ã¥·¥ç¥ó"
++
++#: gui/gdmlogin.c:1087
++msgid "Language"
++msgstr "¸À¸ì"
++
++#: gui/gdmlogin.c:1094
++msgid "Reboot..."
++msgstr "ºÆµ¯Æ°..."
++
++#: gui/gdmlogin.c:1101
++msgid "Halt..."
++msgstr "Ää»ß..."
++
++#: gui/gdmlogin.c:1108
++msgid "System"
++msgstr "¥·¥¹¥Æ¥à"
++
++#: gui/gdmlogin.c:1116
++#, c-format
++msgid "Can't open icon file: %s. Suspending iconify feature!"
++msgstr "¥¢¥¤¥³¥ó¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó: %s ¥¢¥¤¥³¥ó²½µ¡Ç½¤Ï¸«¹ç¤ï¤»¤Þ¤¹!"
++
++#: gui/gdmlogin.c:1119
++msgid "Iconify"
++msgstr "¥¢¥¤¥³¥ó²½"
++
++#: gui/gdmlogin.c:1283
++msgid "Please enter your login"
++msgstr "¤¢¤Ê¤¿¤ÎID¤òÆþÎϤ·¤Æ²¼¤µ¤¤"
++
++#: gui/gdmlogin.c:1464
++#, c-format
++msgid "Can't open DefaultImage: %s. Suspending face browser!"
++msgstr "¥Ç¥Õ¥©¥ë¥È²èÁü¤ò³«¤±¤Þ¤»¤ó: %s ¥Õ¥§¥¤¥¹¥Ö¥é¥¦¥¶¤Ï¸«¹ç¤ï¤»¤Þ¤¹!"
++
++#: gui/gdmlogin.c:1543
++msgid "main: Error setting up HUP signal handler"
++msgstr "main: HUP¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤òÀßÄê¤Ç¤¤Þ¤»¤ó"
++
++#: gui/gdmlogin.c:1546
++msgid "main: Error setting up INT signal handler"
++msgstr "main: INT¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤òÀßÄê¤Ç¤¤Þ¤»¤ó"
++
++#: gui/gdmlogin.c:1549
++msgid "main: Error setting up TERM signal handler"
++msgstr "main: TERM¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤òÀßÄê¤Ç¤¤Þ¤»¤ó"
+--- gdm-2.0beta2/configure.in.i18n Tue Oct 12 15:59:32 1999
++++ gdm-2.0beta2/configure.in Mon Jan 1 00:00:00 1990
+@@ -20,7 +20,7 @@
+ AC_SUBST(LDFLAGS)
+
+ dnl ## internationalization support
+-ALL_LINGUAS="da de es et fr ko no sv pl pt_BR"
++ALL_LINGUAS="da de es et fr ja ko no pl pt_BR sv"
+ AM_GNOME_GETTEXT
+
+ dnl ## Autentication scheme
+--- gdm-2.0beta2/configure.i18n Tue Oct 12 15:59:32 1999
++++ gdm-2.0beta2/configure Tue Oct 12 15:59:32 1999
+@@ -3245,7 +3245,7 @@
+
+
+
+-ALL_LINGUAS="da de es et fr ko no sv pl pt_BR"
++ALL_LINGUAS="da de es et fr ja ko no pl pt_BR sv"
+ echo $ac_n "checking for working const""... $ac_c" 1>&6
+ echo "configure:3251: checking for working const" >&5
+ if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
+
+
--- /dev/null
+--- gdm-2.0beta2/daemon/server.c.loopofdeath Sun Aug 13 21:22:22 2000
++++ gdm-2.0beta2/daemon/server.c Sun Aug 13 21:23:52 2000
+@@ -58,6 +58,79 @@
+ GdmDisplay *d;
+ sigset_t mask, omask;
+
++static gboolean
++gdm_server_check_loop (GdmDisplay *disp)
++{
++ time_t now;
++ time_t since_last;
++
++ now = time (NULL);
++
++ if (disp->disabled)
++ return FALSE;
++
++ if (disp->last_start_time > now || disp->last_start_time == 0)
++ {
++ /* Reset everything if this is the first time in this
++ * function, or if the system clock got reset backward.
++ */
++ disp->last_start_time = now;
++ disp->retry_count = 1;
++
++ gdm_debug ("Resetting counts for loop of death detection");
++
++ return TRUE;
++ }
++
++ since_last = now - disp->last_start_time;
++
++ /* If it's been at least 1.5 minutes since the last startup
++ * attempt, then we reset everything.
++ */
++
++ if (since_last >= 90)
++ {
++ disp->last_start_time = now;
++ disp->retry_count = 1;
++
++ gdm_debug ("Resetting counts for loop of death detection, 90 seconds elapsed.");
++
++ return TRUE;
++ }
++
++ /* If we've tried too many times we bail out. i.e. this means we
++ * tried too many times in the 90-second period.
++ */
++ if (disp->retry_count > 4)
++ {
++ gchar *msg;
++ msg = g_strdup_printf (_("Failed to start X server several times in a short time period; disabling display %s"), disp->name);
++ gdm_error (msg);
++ g_free (msg);
++ disp->disabled = TRUE;
++
++ gdm_debug ("Failed to start X server after several retries; aborting.");
++
++ exit (SERVER_ABORT);
++ }
++
++ /* At least 8 seconds between start attempts,
++ * so you can try to kill gdm from the console
++ * in these gaps.
++ */
++ if (since_last < 8)
++ {
++ gdm_debug ("Sleeping %d seconds before next X server restart attempt",
++ 8 - since_last);
++ sleep (8 - since_last);
++ now = time (NULL);
++ }
++
++ disp->retry_count += 1;
++ disp->last_start_time = now;
++
++ return TRUE;
++}
+
+ void
+ gdm_server_start (GdmDisplay *disp)
+@@ -74,6 +147,11 @@
+ d = disp;
+
+ gdm_debug ("gdm_server_start: %s", d->name);
++
++ if (!gdm_server_check_loop (disp))
++ return;
++
++ gdm_debug ("Attempting to start X server");
+
+ /* Catch USR1 from X server */
+ usr1.sa_handler = gdm_server_usr1_handler;
+@@ -161,7 +239,7 @@
+ d->servstat = SERVER_STARTED;
+
+ /* Wait for X server to send ready signal */
+- pause();
++ gdm_run ();
+ }
+
+
+@@ -280,6 +358,8 @@
+ sigprocmask (SIG_BLOCK, &usr1mask, NULL);
+
+ gdm_display_manage (d);
++
++ gdm_quit ();
+ }
+
+
+@@ -313,6 +393,10 @@
+ d->sessionid = 0;
+ d->acctime = 0;
+ d->dsp = NULL;
++
++ d->last_start_time = 0;
++ d->retry_count = 0;
++ d->disabled = FALSE;
+
+ g_free (dname);
+ g_free (hostname);
+--- gdm-2.0beta2/daemon/gdm.h.loopofdeath Sun Aug 13 21:22:22 2000
++++ gdm-2.0beta2/daemon/gdm.h Sun Aug 13 21:22:22 2000
+@@ -150,6 +150,9 @@
+ pid_t sesspid;
+ pid_t slavepid;
+ time_t acctime;
++ time_t last_start_time;
++ gint retry_count;
++ gboolean disabled;
+ };
+
+
+@@ -162,6 +165,21 @@
+ time_t acctime;
+ };
+
++typedef gboolean (*GSignalFunc) (gint8 signal,
++ gpointer data);
++guint g_signal_add (gint8 signal,
++ GSignalFunc function,
++ gpointer data);
++guint g_signal_add_full (gint priority,
++ gint8 signal,
++ GSignalFunc function,
++ gpointer data,
++ GDestroyNotify destroy);
++void g_signal_notify (gint8 signal);
++
++
++void gdm_run (void);
++void gdm_quit (void);
+
+ #endif /* __GDM_H__ */
+
+--- gdm-2.0beta2/daemon/gdm.c.loopofdeath Sun Aug 13 21:22:22 2000
++++ gdm-2.0beta2/daemon/gdm.c Sun Aug 13 21:22:22 2000
+@@ -376,9 +376,8 @@
+ return (TRUE);
+ }
+
+-
+-static void
+-gdm_child_handler (gint sig)
++void
++gdm_cleanup_children (void)
+ {
+ pid_t pid;
+ gint exitstatus = 0, status = 0;
+@@ -487,8 +486,9 @@
+ list = list->next;
+ }
+ }
+-}
+
++ gdm_quit ();
++}
+
+ static void
+ gdm_display_unmanage (GdmDisplay *d)
+@@ -524,27 +524,58 @@
+ }
+ }
+
++static void
++term_cleanup (void)
++{
++ sigset_t mask;
++
++ gdm_debug ("gdm_term_handler: Got TERM/INT. Going down!");
++
++ sigemptyset (&mask);
++ sigaddset (&mask, SIGCHLD);
++ sigprocmask (SIG_BLOCK, &mask, NULL);
++
++ g_slist_foreach (displays, (GFunc) gdm_display_unmanage, NULL);
++
++ closelog();
++ unlink (GdmPidFile);
++
++ exit (EXIT_SUCCESS);
++}
+
+ static void
+ gdm_term_handler (int sig)
+ {
+- sigset_t mask;
+-
+- gdm_debug ("gdm_term_handler: Got TERM/INT. Going down!");
++ g_signal_notify (sig);
++}
+
+- sigemptyset (&mask);
+- sigaddset (&mask, SIGCHLD);
+- sigprocmask (SIG_BLOCK, &mask, NULL);
++static void
++gdm_child_handler (gint sig)
++{
++ g_signal_notify (sig);
++}
+
+- g_slist_foreach (displays, (GFunc) gdm_display_unmanage, NULL);
++static gboolean
++mainloop_sig_callback (gint8 sig, gpointer data)
++{
++ switch (sig)
++ {
++ case SIGCHLD:
++ gdm_cleanup_children ();
++ break;
++
++ case SIGINT:
++ case SIGTERM:
++ term_cleanup ();
++ break;
+
+- closelog();
+- unlink (GdmPidFile);
++ default:
++ break;
++ }
+
+- exit (EXIT_SUCCESS);
++ return TRUE;
+ }
+
+-
+ static void
+ gdm_daemonify (void)
+ {
+@@ -579,6 +610,19 @@
+ dup2 (0, 2);
+ }
+
++static GMainLoop *main_loop;
++
++void
++gdm_run (void)
++{
++ g_main_run (main_loop);
++}
++
++void
++gdm_quit (void)
++{
++ g_main_quit (main_loop);
++}
+
+ int
+ main (int argc, char *argv[])
+@@ -586,7 +630,6 @@
+ sigset_t mask;
+ struct sigaction term, child;
+ FILE *pf;
+- GMainLoop *main_loop;
+
+ if (getuid()) {
+
+@@ -635,6 +678,10 @@
+ gdm_daemonify();
+
+ /* Signal handling */
++ g_signal_add (SIGCHLD, mainloop_sig_callback, NULL);
++ g_signal_add (SIGTERM, mainloop_sig_callback, NULL);
++ g_signal_add (SIGINT, mainloop_sig_callback, NULL);
++
+ term.sa_handler = gdm_term_handler;
+ term.sa_flags = SA_RESTART;
+ sigemptyset (&term.sa_mask);
+@@ -674,9 +721,117 @@
+ gdm_xdmcp_run();
+ }
+
+- g_main_run (main_loop);
+-
++ /* We always exit via exit(), and sadly we need to g_main_quit()
++ * at times not knowing if it's this main or a recursive one we're
++ * quitting.
++ */
++ while (1)
++ {
++ gdm_run ();
++ }
++
+ return (EXIT_SUCCESS);
+ }
++
++/* signal main loop support */
++
++
++typedef struct _GSignalData GSignalData;
++struct _GSignalData
++{
++ guint8 index;
++ guint8 shift;
++ GSignalFunc callback;
++};
++
++static gboolean g_signal_prepare (gpointer source_data,
++ GTimeVal *current_time,
++ gint *timeout);
++static gboolean g_signal_check (gpointer source_data,
++ GTimeVal *current_time);
++static gboolean g_signal_dispatch (gpointer source_data,
++ GTimeVal *current_time,
++ gpointer user_data);
++
++static GSourceFuncs signal_funcs = {
++ g_signal_prepare,
++ g_signal_check,
++ g_signal_dispatch,
++ g_free
++};
++static guint32 signals_notified[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
++
++static gboolean
++g_signal_prepare (gpointer source_data,
++ GTimeVal *current_time,
++ gint *timeout)
++{
++ GSignalData *signal_data = source_data;
++
++ return signals_notified[signal_data->index] & (1 << signal_data->shift);
++}
++
++static gboolean
++g_signal_check (gpointer source_data,
++ GTimeVal *current_time)
++{
++ GSignalData *signal_data = source_data;
++
++ return signals_notified[signal_data->index] & (1 << signal_data->shift);
++}
++
++static gboolean
++g_signal_dispatch (gpointer source_data,
++ GTimeVal *current_time,
++ gpointer user_data)
++{
++ GSignalData *signal_data = source_data;
++
++ signals_notified[signal_data->index] &= ~(1 << signal_data->shift);
++
++ return signal_data->callback (-128 + signal_data->index * 32 + signal_data->shift, user_data);
++}
++
++guint
++g_signal_add (gint8 signal,
++ GSignalFunc function,
++ gpointer data)
++{
++ return g_signal_add_full (G_PRIORITY_DEFAULT, signal, function, data, NULL);
++}
++
++guint
++g_signal_add_full (gint priority,
++ gint8 signal,
++ GSignalFunc function,
++ gpointer data,
++ GDestroyNotify destroy)
++{
++ GSignalData *signal_data;
++ guint s = 128 + signal;
++
++ g_return_val_if_fail (function != NULL, 0);
++
++ signal_data = g_new (GSignalData, 1);
++ signal_data->index = s / 32;
++ signal_data->shift = s % 32;
++ signal_data->callback = function;
++
++ return g_source_add (priority, TRUE, &signal_funcs, signal_data, data, destroy);
++}
++
++void
++g_signal_notify (gint8 signal)
++{
++ guint index, shift;
++ guint s = 128 + signal;
++
++ index = s / 32;
++ shift = s % 32;
++
++ signals_notified[index] |= 1 << shift;
++}
++
++
+
+ /* EOF */
--- /dev/null
+--- gdm-2.0beta4/gui/gdmlogin.c~ Wed Sep 29 18:56:35 1999
++++ gdm-2.0beta4/gui/gdmlogin.c Tue May 23 09:12:35 2000
+@@ -461,7 +461,7 @@
+ gtk_widget_set_sensitive (GTK_WIDGET (sessmenu), FALSE);
+
+ /* Previously saved session not found in ~user/.gnome/gdm */
+- if (! strlen (savedsess)) {
++ if (!(savedsess && strcmp ("(null)", savedsess) && strlen (savedsess))) {
+ /* If "Last" is chosen run Default, else run user's current selection */
+ if (!strcasecmp (cursess, lastsess))
+ session = defsess;
--- /dev/null
+--- gdm-2.0beta4/daemon/slave.c Mon Jul 17 13:37:05 2000
++++ gdm-2.0beta4/daemon/slave.c~ Mon Jul 17 13:15:48 2000
+@@ -456,7 +456,7 @@
+ shell = gdm_get_user_shell ();
+ shell_hyphen = g_strconcat ("-", shell, NULL);
+
+- execl (shell, shell_hyphen, sesspath, NULL);
++ execl (shell, "-", "-c", sesspath, NULL);
+
+ gdm_error (_("gdm_slave_session_start: Could not start session `%s'"), sesspath);
+
--- /dev/null
+--- gdm-2.0beta4/daemon/slave.c~ Wed Sep 29 18:56:35 1999
++++ gdm-2.0beta4/daemon/slave.c Thu Apr 27 18:14:16 2000
+@@ -423,6 +423,15 @@
+ /* Restore sigmask inherited from init */
+ sigprocmask (SIG_SETMASK, &sysmask, NULL);
+
++ for(i = 0; i < sysconf(_SC_OPEN_MAX); i++)
++ close(i);
++
++ /* No error checking here - if it's messed the best response
++ is to ignore & try to continue */
++ open("/dev/null", O_RDONLY); /* open stdin - fd 0 */
++ open("/dev/null", O_RDWR); /* open stdout - fd 1 */
++ open("/dev/null", O_RDWR); /* open stderr - fd 2 */
++
+ execl (sesspath, NULL);
+
+ gdm_error (_("gdm_slave_session_start: Could not start session `%s'"), sesspath);
--- /dev/null
+--- gdm-2.0beta4/daemon/slave.c.rhlang Tue Oct 3 13:26:23 2000
++++ gdm-2.0beta4/daemon/slave.c Tue Oct 3 13:32:50 2000
+@@ -374,10 +374,13 @@
+ setenv ("PATH", GdmDefaultPath, TRUE);
+
+ /* Set locale */
+- if (!strcasecmp (language, "english"))
+- setenv ("LANG", "C", TRUE);
+- else
+- setenv ("LANG", language, TRUE);
++ if (!strcasecmp (language, "english")) {
++ setenv ("LANG", "C", TRUE);
++ setenv ("GDM_LANG", "C", TRUE);
++ } else {
++ setenv ("LANG", language, TRUE);
++ setenv ("GDM_LANG", language, TRUE);
++ }
+
+ /* If script fails reset X server and restart greeter */
+ if (gdm_exec_script (d, GdmPreSession) != EXIT_SUCCESS)
--- /dev/null
+--- gdm-2.0beta2/config/gdm.system-auth Thu Jun 1 01:13:46 2000
++++ gdm-2.0beta2/config/gdm Thu Jun 1 01:14:32 2000
+@@ -1,8 +1,7 @@
+ #%PAM-1.0
+-auth required /lib/security/pam_pwdb.so shadow nullok
++auth required /lib/security/pam_stack.so service=system-auth
+ auth required /lib/security/pam_nologin.so
+-account required /lib/security/pam_pwdb.so
++account required /lib/security/pam_stack.so service=system-auth
+-password required /lib/security/pam_cracklib.so
+-password required /lib/security/pam_pwdb.so shadow nullok use_authtok
+-session required /lib/security/pam_pwdb.so
++password required /lib/security/pam_stack.so service=system-auth
++session required /lib/security/pam_stack.so service=system-auth
+ session optional /lib/security/pam_console.so
--- /dev/null
+--- gdm-2.0beta4/gui/gdmlogin.c.langfix Wed Jun 21 16:23:52 2000
++++ gdm-2.0beta4/gui/gdmlogin.c Wed Jun 21 16:27:33 2000
+@@ -547,6 +547,7 @@
+ }
+ else
+ language = savedlang;
++ language[0] = tolower(language[0]);
+ }
+
+
--- /dev/null
+--- ../build/BUILD/gdm-2.0beta4/daemon/slave.c.usershell Fri Apr 28 00:06:43 2000
++++ gdm-2.0beta4/daemon/slave.c Fri Apr 28 00:07:56 2000
+@@ -250,6 +250,35 @@
+ gdm_slave_session_start (login);
+ }
+
++static gchar*
++gdm_get_user_shell(void)
++{
++ struct passwd *pw;
++ int i;
++ char *shell;
++ static char *shells [] = {
++ "/bin/bash", "/bin/zsh", "/bin/tcsh", "/bin/ksh",
++ "/bin/csh", "/bin/sh", 0
++ };
++
++#if 0
++ if ((shell = getenv ("SHELL"))){
++ return g_strconcat (shell, NULL);
++ }
++#endif
++ pw = getpwuid(getuid());
++ if (pw && pw->pw_shell) {
++ return g_strdup (pw->pw_shell);
++ }
++
++ for (i = 0; shells [i]; i++) {
++ if (g_file_exists (shells [i])){
++ return g_strdup (shells[i]);
++ }
++ }
++
++ return g_strdup("/bin/sh");
++}
+
+ static void
+ gdm_slave_session_start (gchar *login)
+@@ -259,6 +288,7 @@
+ gchar *session, *language, *usrsess, *usrlang;
+ gboolean savesess = FALSE, savelang = FALSE, usrcfgok = FALSE, authok = FALSE;
+ gint i;
++ char *shell, *shell_hyphen;
+
+ pwent = getpwnam (login);
+
+@@ -423,19 +453,16 @@
+ /* Restore sigmask inherited from init */
+ sigprocmask (SIG_SETMASK, &sysmask, NULL);
+
+- for(i = 0; i < sysconf(_SC_OPEN_MAX); i++)
+- close(i);
+-
+- /* No error checking here - if it's messed the best response
+- is to ignore & try to continue */
+- open("/dev/null", O_RDONLY); /* open stdin - fd 0 */
+- open("/dev/null", O_RDWR); /* open stdout - fd 1 */
+- open("/dev/null", O_RDWR); /* open stderr - fd 2 */
++ shell = gdm_get_user_shell ();
++ shell_hyphen = g_strconcat ("-", shell, NULL);
+
+- execl (sesspath, NULL);
++ execl (shell, shell_hyphen, sesspath, NULL);
+
+ gdm_error (_("gdm_slave_session_start: Could not start session `%s'"), sesspath);
+
++ g_free (shell);
++ g_free (shell_hyphen);
++
+ gdm_slave_session_stop();
+ gdm_slave_session_cleanup();
+
--- /dev/null
+diff -Nur gdm-2.0beta4/daemon/xdmcp.c gdm-2.0beta4.new/daemon/xdmcp.c
+--- gdm-2.0beta4/daemon/xdmcp.c Thu Sep 30 00:56:35 1999
++++ gdm-2.0beta4.new/daemon/xdmcp.c Thu Dec 21 21:51:44 2000
+@@ -149,7 +149,7 @@
+ int gdm_xdmcp_init (void);
+ void gdm_xdmcp_run (void);
+ void gdm_xdmcp_close (void);
+-static void gdm_xdmcp_decode_packet (void);
++static gboolean gdm_xdmcp_decode_packet (void);
+ static void gdm_xdmcp_handle_query (struct sockaddr_in *clnt_sa, gint len, gint type);
+ static void gdm_xdmcp_send_forward_query (GdmIndirectDisplay *id, ARRAYofARRAY8Ptr authlist);
+ static void gdm_xdmcp_handle_forward_query (struct sockaddr_in *clnt_sa, gint len);
+@@ -267,7 +267,7 @@
+ }
+
+
+-static void
++static gboolean
+ gdm_xdmcp_decode_packet (void)
+ {
+ struct sockaddr_in clnt_sa;
+@@ -282,17 +282,17 @@
+
+ if (!XdmcpFill (xdmcpfd, &buf, &clnt_sa, &sa_len)) {
+ gdm_error (_("gdm_xdmcp_decode: Could not create XDMCP buffer!"));
+- return;
++ return TRUE;
+ }
+
+ if (!XdmcpReadHeader (&buf, &header)) {
+ gdm_error (_("gdm_xdmcp_decode: Could not read XDMCP header!"));
+- return;
++ return TRUE;
+ }
+
+ if (header.version != XDM_PROTOCOL_VERSION) {
+ gdm_error (_("gdm_xdmcp_decode: Incorrect XDMCP version!"));
+- return;
++ return TRUE;
+ }
+
+ gdm_debug ("gdm_xdmcp_decode: Received opcode %s from client %s",
+@@ -335,6 +335,8 @@
+ inet_ntoa (clnt_sa.sin_addr));
+ break;
+ }
++
++ return TRUE;
+ }
+
+
+@@ -437,12 +439,15 @@
+
+ /* Read display port */
+ if (! XdmcpReadARRAY8 (&buf, &clnt_port)) {
++ XdmcpDisposeARRAYofARRAY8 (&clnt_addr);
+ 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)) {
++ XdmcpDisposeARRAYofARRAY8 (&clnt_addr);
++ XdmcpDisposeARRAYofARRAY8 (&clnt_port);
+ gdm_error (_("gdm_xdmcp_handle_forward_query: Could not extract authlist from packet"));
+ return;
+ }
+@@ -459,7 +464,7 @@
+
+ if (len != explen) {
+ gdm_error (_("gdm_xdmcp_handle_forward_query: Error in checksum"));
+- return;
++ goto out;
+ }
+
+ /* Find client port number */
+@@ -467,7 +472,7 @@
+ port = port*256+clnt_port.data[i];
+
+ /* Find client address. Ugly, ugly. Endianness sucks... */
+- memmove (&ia.s_addr, clnt_addr.data, clnt_addr.length);
++ memmove (&ia.s_addr, clnt_addr.data, MIN(clnt_addr.length, sizeof(ia.s_addr)));
+
+ gdm_debug ("gdm_xdmcp_handle_forward_query: Got FORWARD_QUERY from display: %s, port %d",
+ inet_ntoa (ia), port);
+@@ -478,14 +483,18 @@
+ disp_sa->sin_port = htons (port);
+ disp_sa->sin_addr.s_addr = ia.s_addr;
+
+- /* Cleanup */
+- 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);
+ else
+ gdm_xdmcp_send_unwilling (disp_sa, FORWARD_QUERY);
++
++ out:
++ g_free(disp_sa);
++ /* Cleanup */
++ XdmcpDisposeARRAYofARRAY8 (&clnt_authlist);
++ XdmcpDisposeARRAYofARRAY8 (&clnt_port);
++ XdmcpDisposeARRAYofARRAY8 (&clnt_addr);
+ }
+
+
+@@ -512,7 +521,6 @@
+ XdmcpFlush (xdmcpfd, &buf, clnt_sa, sizeof (struct sockaddr_in));
+ }
+
+-
+ static void
+ gdm_xdmcp_send_unwilling (struct sockaddr_in *clnt_sa, gint type)
+ {
+@@ -540,13 +548,13 @@
+ static void
+ gdm_xdmcp_handle_request (struct sockaddr_in *clnt_sa, gint len)
+ {
+- static CARD16 clnt_dspnum;
+- static ARRAY16 clnt_conntyp;
+- static ARRAYofARRAY8 clnt_addr;
+- static ARRAY8 clnt_authname;
+- static ARRAY8 clnt_authdata;
+- static ARRAYofARRAY8 clnt_authorization;
+- static ARRAY8 clnt_manufacturer;
++ CARD16 clnt_dspnum;
++ ARRAY16 clnt_conntyp;
++ ARRAYofARRAY8 clnt_addr;
++ ARRAY8 clnt_authname;
++ ARRAY8 clnt_authdata;
++ ARRAYofARRAY8 clnt_authorization;
++ ARRAY8 clnt_manufacturer;
+ gint explen;
+ gint i;
+ gboolean mitauth = FALSE;
+@@ -637,6 +645,13 @@
+ gdm_xdmcp_send_accept (clnt_sa, clnt_dspnum);
+ else
+ gdm_xdmcp_send_decline (clnt_sa);
++
++ XdmcpDisposeARRAY8 (&clnt_authname);
++ XdmcpDisposeARRAY8 (&clnt_authdata);
++ XdmcpDisposeARRAY8 (&clnt_manufacturer);
++ XdmcpDisposeARRAYofARRAY8 (&clnt_addr);
++ XdmcpDisposeARRAYofARRAY8 (&clnt_authorization);
++ XdmcpDisposeARRAY16 (&clnt_conntyp);
+ }
+
+
+@@ -797,6 +812,8 @@
+ gdm_debug ("gdm_xdmcp_handle_manage: Failed to look up session id %d", clnt_sessid);
+ gdm_xdmcp_send_refuse (clnt_sa, clnt_sessid);
+ }
++
++ XdmcpDisposeARRAY8(&clnt_dspclass);
+ }
+
+
--- /dev/null
+--- gdm-2.0beta2/configure.in.sopwith Thu Sep 9 12:12:34 1999
++++ gdm-2.0beta2/configure.in Thu Sep 9 12:15:59 1999
+@@ -70,7 +70,10 @@
+
+ if test -n "$LIBWRAP_PATH"; then
+ AC_MSG_RESULT(yes)
+- AC_CHECK_LIB(nsl, yp_get_default_domain, LIBS="$LIBS -lnsl")
++ OLD_LIBS="$LIBS"
++ LIBS=""
++ AC_CHECK_LIB(nsl, yp_get_default_domain)
++ LIBS="$LIBS $OLD_LIBS"
+ else
+ AC_MSG_RESULT(no)
+ fi
+--- gdm-2.0beta2/configure.sopwith Thu Sep 9 12:16:07 1999
++++ gdm-2.0beta2/configure Thu Sep 9 12:16:12 1999
+@@ -5034,8 +5034,10 @@
+
+ if test -n "$LIBWRAP_PATH"; then
+ echo "$ac_t""yes" 1>&6
++ OLD_LIBS="$LIBS"
++ LIBS=""
+ echo $ac_n "checking for yp_get_default_domain in -lnsl""... $ac_c" 1>&6
+-echo "configure:5039: checking for yp_get_default_domain in -lnsl" >&5
++echo "configure:5041: checking for yp_get_default_domain in -lnsl" >&5
+ ac_lib_var=`echo nsl'_'yp_get_default_domain | sed 'y%./+-%__p_%'`
+ if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+@@ -5043,7 +5045,7 @@
+ ac_save_LIBS="$LIBS"
+ LIBS="-lnsl $LIBS"
+ cat > conftest.$ac_ext <<EOF
+-#line 5047 "configure"
++#line 5049 "configure"
+ #include "confdefs.h"
+ /* Override any gcc2 internal prototype to avoid an error. */
+ /* We use char because int might match the return type of a gcc2
+@@ -5054,7 +5056,7 @@
+ yp_get_default_domain()
+ ; return 0; }
+ EOF
+-if { (eval echo configure:5058: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
++if { (eval echo configure:5060: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+ else
+@@ -5069,11 +5071,19 @@
+ fi
+ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+- LIBS="$LIBS -lnsl"
++ ac_tr_lib=HAVE_LIB`echo nsl | sed -e 's/[^a-zA-Z0-9_]/_/g' \
++ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
++ cat >> confdefs.h <<EOF
++#define $ac_tr_lib 1
++EOF
++
++ LIBS="-lnsl $LIBS"
++
+ else
+ echo "$ac_t""no" 1>&6
+ fi
+
++ LIBS="$LIBS $OLD_LIBS"
+ else
+ echo "$ac_t""no" 1>&6
+ fi