rpms/gdm/devel gdm-2.15.5-move-default-message.patch, NONE, 1.1 gdm-2.15.5-process-all-ops.patch, NONE, 1.1 gdm-2.15.5-reset-pam.patch, NONE, 1.1 gdm.spec, 1.165, 1.166 gdm-2.15.3-CVE-2006-2452.patch, 1.1, NONE gdm-2.15.3-chown.patch, 1.1, NONE gdm-2.15.3-support-xdm-nodaemon-option.patch, 1.2, NONE gdm-2.8.0.2-process-all-messages.patch, 1.3, NONE

fedora-cvs-commits at redhat.com fedora-cvs-commits at redhat.com
Fri Jul 7 21:26:55 UTC 2006


Author: rstrode

Update of /cvs/dist/rpms/gdm/devel
In directory cvs.devel.redhat.com:/tmp/cvs-serv11510

Modified Files:
	gdm.spec 
Added Files:
	gdm-2.15.5-move-default-message.patch 
	gdm-2.15.5-process-all-ops.patch gdm-2.15.5-reset-pam.patch 
Removed Files:
	gdm-2.15.3-CVE-2006-2452.patch gdm-2.15.3-chown.patch 
	gdm-2.15.3-support-xdm-nodaemon-option.patch 
	gdm-2.8.0.2-process-all-messages.patch 
Log Message:
- add patch to process all operations when more than one comes
  in really quickly
- move default "Please enter your username" message to the
  greeter instead of the slave so that it doesn't get stacked if
  a pam module has a non default message
- add new message for reseting the current login operation
  (like the cancel button does, but accessible via the gdm fifo)


gdm-2.15.5-move-default-message.patch:
 daemon/verify-crypt.c          |    1 -
 daemon/verify-pam.c            |    6 ------
 daemon/verify-shadow.c         |    1 -
 gui/gdmlogin.c                 |   17 ++++++++++++++---
 gui/greeter/greeter_item_pam.c |   25 +++++++++++++++++++++++++
 5 files changed, 39 insertions(+), 11 deletions(-)

--- NEW FILE gdm-2.15.5-move-default-message.patch ---
--- ./daemon/verify-pam.c.move-default-message	2006-07-07 15:20:40.000000000 +0200
+++ ./daemon/verify-pam.c	2006-07-07 15:21:28.000000000 +0200
@@ -517,12 +517,6 @@
 			       then I can afford. */
 			    s = g_strdup (selected_user);
 		    } else {
-			    /* this is an evil hack, but really there is no way we'll
-			    know this is a username prompt.  However we SHOULD NOT
-			    rely on this working.  The pam modules can set their
-			    prompt to whatever they wish to */
-			    gdm_slave_greeter_ctl_no_ret
-				    (GDM_MSG, _("Please enter your username"));
 			    s = gdm_slave_greeter_ctl (GDM_PROMPT, m);
 			    /* this will clear the message */
 			    gdm_slave_greeter_ctl_no_ret (GDM_MSG, "");
--- ./daemon/verify-shadow.c.move-default-message	2006-07-07 15:21:04.000000000 +0200
+++ ./daemon/verify-shadow.c	2006-07-07 15:22:10.000000000 +0200
@@ -114,7 +114,6 @@
 authenticate_again:
 	    /* Ask for the user's login */
 	    gdm_verify_select_user (NULL);
-	    gdm_slave_greeter_ctl_no_ret (GDM_MSG, _("Please enter your username"));
 	    login = gdm_slave_greeter_ctl (GDM_PROMPT, _("Username:"));
 	    if (login == NULL ||
 		gdm_slave_greeter_check_interruption ()) {
--- ./daemon/verify-crypt.c.move-default-message	2006-07-07 15:20:48.000000000 +0200
+++ ./daemon/verify-crypt.c	2006-07-07 15:22:01.000000000 +0200
@@ -115,7 +115,6 @@
 authenticate_again:
 	    /* Ask for the user's login */
 	    gdm_verify_select_user (NULL);
-	    gdm_slave_greeter_ctl_no_ret (GDM_MSG, _("Please enter your username"));
 	    login = gdm_slave_greeter_ctl (GDM_PROMPT, _("Username:"));
 	    if (login == NULL ||
 		gdm_slave_greeter_check_interruption ()) {
--- ./gui/gdmlogin.c.move-default-message	2006-07-07 15:12:01.000000000 +0200
+++ ./gui/gdmlogin.c	2006-07-07 15:28:34.000000000 +0200
@@ -163,6 +163,7 @@
 extern const gchar *current_session;
 extern gboolean session_dir_whacked_out;
 extern gint gdm_timed_delay;
+static gboolean using_fallback_message = FALSE;
 
 static void login_window_resize (gboolean force);
 
@@ -1673,10 +1674,21 @@
 					gdm_config_get_string (GDM_KEY_SOUND_ON_LOGIN_FILE),
 					gdm_config_get_bool   (GDM_KEY_SOUND_ON_LOGIN));
 		gtk_label_set_text_with_mnemonic (GTK_LABEL (label), _("_Username:"));
+
+		if (ve_string_empty (gtk_label_get_text (GTK_LABEL (msg)))) {
+			gtk_label_set_text (GTK_LABEL (msg),
+					    _("Please enter your username"));
+			using_fallback_message = TRUE;
+		}
 		greeter_probably_login_prompt = TRUE;
 	} else {
 		if (tmp != NULL)
 			gtk_label_set_text (GTK_LABEL (label), tmp);
+
+		if (using_fallback_message) {
+			gtk_label_set_text (GTK_LABEL (msg), "");
+			using_fallback_message = FALSE;
+		}
 		greeter_probably_login_prompt = FALSE;
 	}
 	g_free (tmp);
@@ -1764,6 +1776,7 @@
 		g_free (tmp);
 	}
 	replace_msg = FALSE;
+	using_fallback_message = FALSE;
 
 	gtk_widget_show (GTK_WIDGET (msg));
 	printf ("%c\n", STX);
@@ -1891,9 +1904,7 @@
 	if (browser_ok && gdm_config_get_bool (GDM_KEY_BROWSER))
 	    gtk_widget_set_sensitive (GTK_WIDGET (browser), TRUE);
 
-	tmp = ve_locale_to_utf8 (args);
-	gtk_label_set_text (GTK_LABEL (msg), tmp);
-	g_free (tmp);
+	gtk_label_set_text (GTK_LABEL (msg), "");
 	gtk_widget_show (GTK_WIDGET (msg));
 
 	printf ("%c\n", STX);
--- ./gui/greeter/greeter_item_pam.c.move-default-message	2006-07-07 15:11:37.000000000 +0200
+++ ./gui/greeter/greeter_item_pam.c	2006-07-07 15:12:16.000000000 +0200
@@ -46,6 +46,7 @@
 gboolean require_quarter = FALSE;
 
 extern gboolean greeter_probably_login_prompt;
+static gboolean using_fallback_message = FALSE;
 
 static gboolean
 greeter_item_pam_error_set (gboolean display)
@@ -230,13 +231,35 @@
 			 int         entry_len,
 			 gboolean    entry_visible)
 {
+  GreeterItemInfo *message_info;
   GreeterItemInfo *conversation_info;
   GreeterItemInfo *entry_info;
   GtkWidget *entry;
 
+  message_info = greeter_lookup_id ("pam-message");
   conversation_info = greeter_lookup_id ("pam-prompt");
   entry_info = greeter_lookup_id ("user-pw-entry");
 
+  if (strcmp (message, _("Username:")) == 0 && message_info)
+    {
+      gchar *text;
+      text = NULL;
+      g_object_get (G_OBJECT (message_info->item),
+                    "text", &text,
+                    NULL);
+      if (ve_string_empty (text))
+        {
+          set_text (message_info, _("Please enter your username"));
+          using_fallback_message = TRUE;
+        }
+      g_free (text);
+    } 
+  else if (using_fallback_message)
+    {
+      set_text (message_info, "");
+      using_fallback_message = FALSE;
+    }
+
   if (conversation_info)
     {
       set_text (conversation_info, message);
@@ -276,6 +299,7 @@
        * we try to collect them until the next prompt or reset or
        * whatnot */
       if ( ! replace_msg &&
+	   ! using_fallback_message &&
 	   /* empty message is for clearing */
 	   ! ve_string_empty (message))
 	{
@@ -295,6 +319,7 @@
         set_text (message_info, message);
     }
   replace_msg = FALSE;
+  using_fallback_message = FALSE;
 }
 
 

gdm-2.15.5-process-all-ops.patch:
 gdmlogin.c        |  121 +++++++++++++++++++++---------------------------------
 greeter/greeter.c |  119 +++++++++++++++++++++--------------------------------
 2 files changed, 96 insertions(+), 144 deletions(-)

--- NEW FILE gdm-2.15.5-process-all-ops.patch ---
diff -u -p -r1.278 gdmlogin.c
--- gdm-2.15.5/gui/gdmlogin.c	31 May 2006 09:24:08 -0000	1.278
+++ gdm-2.15.5/gui/gdmlogin.c	7 Jul 2006 19:01:46 -0000
@@ -179,6 +179,8 @@ static void back_prog_launch_after_timeo
 static void back_prog_run (void);
 static void back_prog_stop (void);
 
+static void process_operation (guchar op_code, const gchar *args);
+
 /* 
  * This function is called when the background program exits.
  * It will add a timer to restart the program after the
@@ -1607,13 +1609,8 @@ static gboolean
 gdm_login_ctrl_handler (GIOChannel *source, GIOCondition cond, gint fd)
 {
     gchar buf[PIPE_SIZE];
+    gchar *p;
     gsize len;
-    char *tmp;
-    gint i, x, y;
-    GtkWidget *dlg;
-    static gboolean replace_msg = TRUE;
-    static gboolean messages_to_give = FALSE;
-    gboolean greeter_probably_login_prompt = FALSE;
 
     /* If this is not incoming i/o then return */
     if (cond != G_IO_IN) 
@@ -1627,23 +1624,42 @@ gdm_login_ctrl_handler (GIOChannel *sour
 	    return (TRUE);
     } while (buf[0] && buf[0] != STX);
 
+    memset (buf, '\0', sizeof (buf));
+    if (g_io_channel_read_chars (source, buf, sizeof (buf) - 1, &len, NULL) !=
+	G_IO_STATUS_NORMAL)
+      return TRUE;
+
+    p = memchr (buf, STX, len);
+
+    if (p != NULL) {
+      len = p - buf;
+      g_io_channel_seek_position (source, -(sizeof (buf) - len), G_SEEK_CUR, NULL);
+      memset (buf + len, '\0', sizeof (buf) - len);
+    }
+ 
+    process_operation ((guchar) buf[0], buf + 1);
 
-    /* Read opcode */
-    g_io_channel_read_chars (source, buf, 1, &len, NULL);
+    return TRUE;
+}
 
-    /* If opcode couldn't be read */
-    if (len != 1)
-	return (TRUE);
+static void
+process_operation (guchar       op_code,
+		   const gchar *args)
+{
+    char *tmp;
+    gint i, x, y;
+    GtkWidget *dlg;
+    static gboolean replace_msg = TRUE;
+    static gboolean messages_to_give = FALSE;
+    gboolean greeter_probably_login_prompt = FALSE;
 
     /* Parse opcode */
-    switch (buf[0]) {
+    switch (op_code) {
     case GDM_SETLOGIN:
 	/* somebody is trying to fool us this is the user that
 	 * wants to log in, and well, we are the gullible kind */
-        g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL);
-	buf[len-1] = '\0';
 	g_free (curuser);
-	curuser = g_strdup (buf);
+	curuser = g_strdup (args);
 	if (browser_ok && gdm_config_get_bool (GDM_KEY_BROWSER))
 		browser_set_user (curuser);
 	printf ("%c\n", STX);
@@ -1651,10 +1667,7 @@ gdm_login_ctrl_handler (GIOChannel *sour
 	break;
 
     case GDM_PROMPT:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL);
-	buf[len-1] = '\0';
-
-	tmp = ve_locale_to_utf8 (buf);
+	tmp = ve_locale_to_utf8 (args);
 	if (tmp != NULL && strcmp (tmp, _("Username:")) == 0) {
 		gdm_common_login_sound (gdm_config_get_string (GDM_KEY_SOUND_PROGRAM),
 					gdm_config_get_string (GDM_KEY_SOUND_ON_LOGIN_FILE),
@@ -1692,10 +1705,7 @@ gdm_login_ctrl_handler (GIOChannel *sour
 	break;
 
     case GDM_NOECHO:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL);
-	buf[len-1] = '\0';
-
-	tmp = ve_locale_to_utf8 (buf);
+	tmp = ve_locale_to_utf8 (args);
 	if (tmp != NULL && strcmp (tmp, _("Password:")) == 0) {
 		gtk_label_set_text_with_mnemonic (GTK_LABEL (label), _("_Password:"));
 	} else {
@@ -1725,9 +1735,6 @@ gdm_login_ctrl_handler (GIOChannel *sour
 	break;
 
     case GDM_MSG:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL);
-	buf[len-1] = '\0';
-
 	/* the user has not yet seen messages */
 	messages_to_give = TRUE;
 
@@ -1736,23 +1743,23 @@ gdm_login_ctrl_handler (GIOChannel *sour
 	 * whatnot */
 	if ( ! replace_msg &&
 	   /* empty message is for clearing */
-	   ! ve_string_empty (buf)) {
+	   ! ve_string_empty (args)) {
 		const char *oldtext;
 		oldtext = gtk_label_get_text (GTK_LABEL (msg));
 		if ( ! ve_string_empty (oldtext)) {
 			char *newtext;
-			tmp = ve_locale_to_utf8 (buf);
+			tmp = ve_locale_to_utf8 (args);
 			newtext = g_strdup_printf ("%s\n%s", oldtext, tmp);
 			g_free (tmp);
 			gtk_label_set_text (GTK_LABEL (msg), newtext);
 			g_free (newtext);
 		} else {
-			tmp = ve_locale_to_utf8 (buf);
+			tmp = ve_locale_to_utf8 (args);
 			gtk_label_set_text (GTK_LABEL (msg), tmp);
 			g_free (tmp);
 		}
 	} else {
-		tmp = ve_locale_to_utf8 (buf);
+		tmp = ve_locale_to_utf8 (args);
 		gtk_label_set_text (GTK_LABEL (msg), tmp);
 		g_free (tmp);
 	}
@@ -1767,14 +1774,12 @@ gdm_login_ctrl_handler (GIOChannel *sour
 	break;
 
     case GDM_ERRBOX:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL);
-	buf[len-1] = '\0';
-	tmp = ve_locale_to_utf8 (buf);
+	tmp = ve_locale_to_utf8 (args);
 	gtk_label_set_text (GTK_LABEL (err_box), tmp);
 	g_free (tmp);
 	if (err_box_clear_handler > 0)
 		g_source_remove (err_box_clear_handler);
-	if (ve_string_empty (buf))
+	if (ve_string_empty (args))
 		err_box_clear_handler = 0;
 	else
 		err_box_clear_handler = g_timeout_add (30000,
@@ -1787,13 +1792,10 @@ gdm_login_ctrl_handler (GIOChannel *sour
 	break;
 
     case GDM_ERRDLG:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL);
-	buf[len-1] = '\0';
-
 	/* we should be now fine for focusing new windows */
 	gdm_wm_focus_new_windows (TRUE);
 
-	tmp = ve_locale_to_utf8 (buf);
+	tmp = ve_locale_to_utf8 (args);
 	dlg = ve_hig_dialog_new (NULL /* parent */,
 				 GTK_DIALOG_MODAL /* flags */,
 				 GTK_MESSAGE_ERROR,
@@ -1814,9 +1816,7 @@ gdm_login_ctrl_handler (GIOChannel *sour
 	break;
 
     case GDM_SESS:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL);
-	buf[len-1] = '\0';
-	tmp = ve_locale_to_utf8 (buf);
+	tmp = ve_locale_to_utf8 (args);
 	gdm_login_session_lookup (tmp);
 	g_free (tmp);
 	if (savesess == GTK_RESPONSE_CANCEL) {
@@ -1830,9 +1830,7 @@ gdm_login_ctrl_handler (GIOChannel *sour
 	break;
 
     case GDM_LANG:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL);
-	buf[len-1] = '\0';
-	gdm_login_language_lookup (buf);
+	gdm_login_language_lookup (args);
 	if (savelang == GTK_RESPONSE_CANCEL)
 	    printf ("%c%s\n", STX, GDM_RESPONSE_CANCEL);
 	else
@@ -1841,8 +1839,6 @@ gdm_login_ctrl_handler (GIOChannel *sour
 	break;
 
     case GDM_SSESS:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
 	if (savesess == GTK_RESPONSE_YES)
 	    printf ("%cY\n", STX);
 	else
@@ -1852,8 +1848,6 @@ gdm_login_ctrl_handler (GIOChannel *sour
 	break;
 
     case GDM_SLANG:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
 	if (savelang == GTK_RESPONSE_YES)
 	    printf ("%cY\n", STX);
 	else
@@ -1885,9 +1879,6 @@ gdm_login_ctrl_handler (GIOChannel *sour
 	/* fall thru to reset */
 
     case GDM_RESETOK:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL);
-	buf[len-1] = '\0';
-
 	if (curuser != NULL) {
 	    g_free (curuser);
 	    curuser = NULL;
@@ -1900,7 +1891,7 @@ gdm_login_ctrl_handler (GIOChannel *sour
 	if (browser_ok && gdm_config_get_bool (GDM_KEY_BROWSER))
 	    gtk_widget_set_sensitive (GTK_WIDGET (browser), TRUE);
 
-	tmp = ve_locale_to_utf8 (buf);
+	tmp = ve_locale_to_utf8 (args);
 	gtk_label_set_text (GTK_LABEL (msg), tmp);
 	g_free (tmp);
 	gtk_widget_show (GTK_WIDGET (msg));
@@ -1912,8 +1903,6 @@ gdm_login_ctrl_handler (GIOChannel *sour
 	break;
 
     case GDM_QUIT:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
 	if (timed_handler_id != 0) {
 		g_source_remove (timed_handler_id);
 		timed_handler_id = 0;
@@ -1980,8 +1969,6 @@ gdm_login_ctrl_handler (GIOChannel *sour
 	break;
 
     case GDM_STARTTIMER:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
 	/*
 	 * Timed Login: Start Timer Loop
 	 */
@@ -1998,8 +1985,6 @@ gdm_login_ctrl_handler (GIOChannel *sour
 	break;
 
     case GDM_STOPTIMER:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
 	/*
 	 * Timed Login: Stop Timer Loop
 	 */
@@ -2013,7 +1998,6 @@ gdm_login_ctrl_handler (GIOChannel *sour
 	break;
 
     case GDM_DISABLE:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
 	if (clock_label != NULL)
 		GTK_WIDGET_SET_FLAGS (clock_label->parent, GTK_SENSITIVE);
 	gtk_widget_set_sensitive (login, FALSE);
@@ -2022,7 +2006,6 @@ gdm_login_ctrl_handler (GIOChannel *sour
 	break;
 
     case GDM_ENABLE:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
 	gtk_widget_set_sensitive (login, TRUE);
 	if (clock_label != NULL)
 		GTK_WIDGET_UNSET_FLAGS (clock_label->parent, GTK_SENSITIVE);
@@ -2034,14 +2017,11 @@ gdm_login_ctrl_handler (GIOChannel *sour
      * back a NULL response so that the daemon quits sending them */
     case GDM_NEEDPIC:
     case GDM_READPIC:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
 	printf ("%c\n", STX);
 	fflush (stdout);
 	break;
 
     case GDM_NOFOCUS:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
 	gdm_wm_no_login_focus_push ();
 	
 	printf ("%c\n", STX);
@@ -2049,8 +2029,6 @@ gdm_login_ctrl_handler (GIOChannel *sour
 	break;
 
     case GDM_FOCUS:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
 	gdm_wm_no_login_focus_pop ();
 	
 	printf ("%c\n", STX);
@@ -2058,8 +2036,6 @@ gdm_login_ctrl_handler (GIOChannel *sour
 	break;
 
     case GDM_SAVEDIE:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
 	/* Set busy cursor */
 	gdm_common_setup_cursor (GDK_WATCH);
 
@@ -2071,8 +2047,6 @@ gdm_login_ctrl_handler (GIOChannel *sour
 	_exit (EXIT_SUCCESS);
 
     case GDM_QUERY_CAPSLOCK:
-        g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
 	if (greeter_is_capslock_on ())
 	    printf ("%cY\n", STX);
 	else
@@ -2083,11 +2057,9 @@ gdm_login_ctrl_handler (GIOChannel *sour
 	
     default:
 	gdm_kill_thingies ();
-	gdm_common_fail_greeter ("Unexpected greeter command received: '%c'", buf[0]);
+	gdm_common_fail_greeter ("Unexpected greeter command received: '%c'", op_code);
 	break;
     }
-
-    return (TRUE);
 }
 
 
@@ -3595,7 +3567,10 @@ main (int argc, char *argv[])
     if G_LIKELY ( ! DOING_GDM_DEVELOPMENT) {
 	    ctrlch = g_io_channel_unix_new (STDIN_FILENO);
 	    g_io_channel_set_encoding (ctrlch, NULL, NULL);
-	    g_io_channel_set_buffered (ctrlch, FALSE);
+	    g_io_channel_set_buffered (ctrlch, TRUE);
+	    g_io_channel_set_flags (ctrlch, 
+				    g_io_channel_get_flags (ctrlch) | G_IO_FLAG_NONBLOCK,
+				    NULL);
 	    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,
diff -u -p -r1.125 greeter.c
--- gdm-2.15.5/gui/greeter/greeter.c	9 Jun 2006 21:07:42 -0000	1.125
+++ gdm-2.15.5/gui/greeter/greeter.c	7 Jul 2006 19:01:47 -0000
@@ -81,6 +81,8 @@ extern gint gdm_timed_delay;
 
 gboolean greeter_probably_login_prompt = FALSE;
 
+static void process_operation (guchar opcode, const gchar *args);
+
 void
 greeter_ignore_buttons (gboolean val)
 {
@@ -124,52 +126,64 @@ greeter_ctrl_handler (GIOChannel *source
 		      gint fd)
 {
     gchar buf[PIPE_SIZE];
+    gchar *p;
     gsize len;
-    GtkWidget *dlg;
-    char *tmp;
-    char *session;
-    GreeterItemInfo *conversation_info;
-    static GnomeCanvasItem *disabled_cover = NULL;
-    gchar *language;
-    gchar *selected_user = NULL;
 
     /* If this is not incoming i/o then return */
     if (cond != G_IO_IN) 
       return TRUE;
 
-    /* Read random garbage from i/o channel until STX is found */
+    /* Read random garbage from i/o channel until first STX is found */
     do {
       g_io_channel_read_chars (source, buf, 1, &len, NULL);
       
       if (len != 1)
 	return TRUE;
-    }  while (buf[0] && buf[0] != STX);
+    } while (buf[0] && buf[0] != STX);
 
-    /* Read opcode */
-    g_io_channel_read_chars (source, buf, 1, &len, NULL);
-
-    /* If opcode couldn't be read */
-    if (len != 1)
+    memset (buf, '\0', sizeof (buf));
+    if (g_io_channel_read_chars (source, buf, sizeof (buf) - 1, &len, NULL) !=
+	G_IO_STATUS_NORMAL)
       return TRUE;
 
+    p = memchr (buf, STX, len);
+
+    if (p != NULL) {
+      len = p - buf;
+      g_io_channel_seek_position (source, -(sizeof (buf) - len), G_SEEK_CUR, NULL);
+      memset (buf + len, '\0', sizeof (buf) - len);
+    }
+      
+    process_operation ((guchar) buf[0], buf + 1);
+    return TRUE;
+}
+
+static void
+process_operation (guchar       op_code,
+		   const gchar *args)
+{
+    GtkWidget *dlg;
+    char *tmp;
+    char *session;
+    GreeterItemInfo *conversation_info;
+    static GnomeCanvasItem *disabled_cover = NULL;
+    gchar *language;
+    gchar *selected_user = NULL;
+
+
     /* Parse opcode */
-    switch (buf[0]) {
+    switch (op_code) {
     case GDM_SETLOGIN:
 	/* somebody is trying to fool us this is the user that
 	 * wants to log in, and well, we are the gullible kind */
-        g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL);
-	buf[len-1] = '\0';
 	
-	greeter_item_pam_set_user (buf);
+	greeter_item_pam_set_user (args);
 	printf ("%c\n", STX);
 	fflush (stdout);
 	break;
 
     case GDM_PROMPT:
-        g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL);
-	buf[len-1] = '\0';
-
-	tmp = ve_locale_to_utf8 (buf);
+	tmp = ve_locale_to_utf8 (args);
 	if (tmp != NULL && strcmp (tmp, _("Username:")) == 0) {
 		gdm_common_login_sound (gdm_config_get_string (GDM_KEY_SOUND_PROGRAM),
 					gdm_config_get_string (GDM_KEY_SOUND_ON_LOGIN_FILE),
@@ -190,9 +204,7 @@ greeter_ctrl_handler (GIOChannel *source
 	break;
 
     case GDM_NOECHO:
-        g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL);
-	buf[len-1] = '\0';
-	tmp = ve_locale_to_utf8 (buf);
+	tmp = ve_locale_to_utf8 (args);
 
 	if (tmp != NULL && strcmp (tmp, _("Password:")) == 0)
 		greeter_probably_login_prompt = FALSE;
@@ -204,9 +216,7 @@ greeter_ctrl_handler (GIOChannel *source
 	break;
 
     case GDM_MSG:
-        g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL);
-	buf[len-1] = '\0';
-	tmp = ve_locale_to_utf8 (buf);
+	tmp = ve_locale_to_utf8 (args);
 	greeter_item_pam_message (tmp);
 	g_free (tmp);
 	printf ("%c\n", STX);
@@ -214,10 +224,7 @@ greeter_ctrl_handler (GIOChannel *source
 	break;
 
     case GDM_ERRBOX:
-        g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL);
-	buf[len-1] = '\0';
-
-	tmp = ve_locale_to_utf8 (buf);
+	tmp = ve_locale_to_utf8 (args);
 	greeter_item_pam_error (tmp);
 	g_free (tmp);
 	
@@ -226,13 +233,10 @@ greeter_ctrl_handler (GIOChannel *source
 	break;
 
     case GDM_ERRDLG:
-        g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL);
-	buf[len-1] = '\0';
-
 	/* we should be now fine for focusing new windows */
 	gdm_wm_focus_new_windows (TRUE);
 
-	tmp = ve_locale_to_utf8 (buf);
+	tmp = ve_locale_to_utf8 (args);
 	dlg = ve_hig_dialog_new (NULL /* parent */,
 				 GTK_DIALOG_MODAL /* flags */,
 				 GTK_MESSAGE_ERROR,
@@ -253,10 +257,7 @@ greeter_ctrl_handler (GIOChannel *source
 	break;
 
     case GDM_SESS:
-        g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-	buf[len-1] = '\0';
-
-	tmp = ve_locale_to_utf8 (buf);
+	tmp = ve_locale_to_utf8 (args);
 	session = greeter_session_lookup (tmp);
 	g_free (tmp);
 
@@ -272,9 +273,7 @@ greeter_ctrl_handler (GIOChannel *source
 	break;
 
     case GDM_LANG:
-        g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-	buf[len-1] = '\0';
-	language = greeter_language_get_language (buf);
+	language = greeter_language_get_language (args);
 	if (greeter_language_get_save_language () == GTK_RESPONSE_CANCEL)
 	    printf ("%c%s\n", STX, GDM_RESPONSE_CANCEL);
 	else
@@ -284,8 +283,6 @@ greeter_ctrl_handler (GIOChannel *source
 	break;
 
     case GDM_SSESS:
-        g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
 	if (greeter_save_session () == GTK_RESPONSE_YES)
 	  printf ("%cY\n", STX);
 	else
@@ -295,8 +292,6 @@ greeter_ctrl_handler (GIOChannel *source
 	break;
 
     case GDM_SLANG:
-        g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
 	if (greeter_language_get_save_language () == GTK_RESPONSE_YES)
 	    printf ("%cY\n", STX);
 	else
@@ -309,14 +304,12 @@ greeter_ctrl_handler (GIOChannel *source
 	/* fall thru to reset */
 
     case GDM_RESETOK:
-        g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-	buf[len-1] = '\0';
 
 	conversation_info = greeter_lookup_id ("pam-conversation");
 	
 	if (conversation_info)
 	  {
-	    tmp = ve_locale_to_utf8 (buf);
+	    tmp = ve_locale_to_utf8 (args);
 	    g_object_set (G_OBJECT (conversation_info->item),
 			  "text", tmp,
 			  NULL);
@@ -331,8 +324,6 @@ greeter_ctrl_handler (GIOChannel *source
 	break;
 
     case GDM_QUIT:
-        g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
 	greeter_item_timed_stop ();
 
 	if (require_quarter) {
@@ -368,8 +359,6 @@ greeter_ctrl_handler (GIOChannel *source
 	break;
 
     case GDM_STARTTIMER:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
 	greeter_item_timed_start ();
 	
 	printf ("%c\n", STX);
@@ -377,8 +366,6 @@ greeter_ctrl_handler (GIOChannel *source
 	break;
 
     case GDM_STOPTIMER:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
 	greeter_item_timed_stop ();
 
 	printf ("%c\n", STX);
@@ -386,7 +373,6 @@ greeter_ctrl_handler (GIOChannel *source
 	break;
 
     case GDM_DISABLE:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
 	gtk_widget_set_sensitive (window, FALSE);
 
 	if (disabled_cover == NULL)
@@ -407,7 +393,6 @@ greeter_ctrl_handler (GIOChannel *source
 	break;
 
     case GDM_ENABLE:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
 	gtk_widget_set_sensitive (window, TRUE);
 
 	if (disabled_cover != NULL)
@@ -424,14 +409,11 @@ greeter_ctrl_handler (GIOChannel *source
      * back a NULL response so that the daemon quits sending them */
     case GDM_NEEDPIC:
     case GDM_READPIC:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
 	printf ("%c\n", STX);
 	fflush (stdout);
 	break;
 
     case GDM_NOFOCUS:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
 	gdm_wm_no_login_focus_push ();
 	
 	printf ("%c\n", STX);
@@ -439,8 +421,6 @@ greeter_ctrl_handler (GIOChannel *source
 	break;
 
     case GDM_FOCUS:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
 	gdm_wm_no_login_focus_pop ();
 	
 	printf ("%c\n", STX);
@@ -448,8 +428,6 @@ greeter_ctrl_handler (GIOChannel *source
 	break;
 
     case GDM_SAVEDIE:
-	g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
 	/* Set busy cursor */
 	gdm_common_setup_cursor (GDK_WATCH);
 
@@ -460,8 +438,6 @@ greeter_ctrl_handler (GIOChannel *source
 	_exit (EXIT_SUCCESS);
 
     case GDM_QUERY_CAPSLOCK:
-        g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
 	if (greeter_is_capslock_on ())
 	    printf ("%cY\n", STX);
 	else
@@ -471,11 +447,9 @@ greeter_ctrl_handler (GIOChannel *source
 	break;
 	
     default:
-	gdm_common_fail_greeter ("Unexpected greeter command received: '%c'", buf[0]);
+	gdm_common_fail_greeter ("Unexpected greeter command received: '%c'", op_code);
 	break;
     }
-
-    return (TRUE);
 }
 
 static gboolean
@@ -1150,7 +1124,10 @@ main (int argc, char *argv[])
   if G_LIKELY (! DOING_GDM_DEVELOPMENT) {
     ctrlch = g_io_channel_unix_new (STDIN_FILENO);
     g_io_channel_set_encoding (ctrlch, NULL, NULL);
-    g_io_channel_set_buffered (ctrlch, FALSE);
+    g_io_channel_set_buffered (ctrlch, TRUE);
+    g_io_channel_set_flags (ctrlch, 
+			    g_io_channel_get_flags (ctrlch) | G_IO_FLAG_NONBLOCK,
+			    NULL);
     g_io_add_watch (ctrlch, 
 		    G_IO_IN | G_IO_PRI | G_IO_ERR | G_IO_HUP | G_IO_NVAL,
 		    (GIOFunc) greeter_ctrl_handler,

gdm-2.15.5-reset-pam.patch:
 daemon/gdm.c          |    8 ++++++++
 daemon/gdm.h          |    4 ++++
 daemon/slave.c        |   34 +++++++++++++++++++++++++++-------
 gui/greeter/greeter.c |   18 +++++-------------
 4 files changed, 44 insertions(+), 20 deletions(-)

--- NEW FILE gdm-2.15.5-reset-pam.patch ---
--- ./daemon/gdm.h.reset-pam	2006-07-07 15:11:37.000000000 +0200
+++ ./daemon/gdm.h	2006-07-07 15:12:37.000000000 +0200
@@ -710,6 +710,9 @@
 /* Start a new standard X flexible server */
 #define GDM_SOP_FLEXI_XSERVER "FLEXI_XSERVER" /* no arguments */
 
+/* Reset any in progress authentication conversations */
+#define GDM_SOP_CANCEL_LOGIN_REQUESTS "CANCEL_LOGIN_REQUESTS" /* no arguments */
+
 /* Notification protocol */
 /* keys */
 #define GDM_NOTIFY_ALLOW_REMOTE_ROOT "AllowRemoteRoot" /* <true/false as int> */
@@ -736,6 +739,7 @@
 #define GDM_NOTIFY_SOFT_RESTART_SERVERS "SOFT_RESTART_SERVERS"
 #define GDM_NOTIFY_GO "GO"
 #define GDM_NOTIFY_TWIDDLE_POINTER "TWIDDLE_POINTER"
+#define GDM_NOTIFY_RESET "RESET"
 
 /* Ack for a slave message */
 /* Note that an extra response can follow an 'ack' */
--- ./daemon/slave.c.reset-pam	2006-07-07 15:11:37.000000000 +0200
+++ ./daemon/slave.c	2006-07-07 15:12:37.000000000 +0200
@@ -128,6 +128,12 @@
 static int greeter_fd_out = -1;
 static int greeter_fd_in = -1;
 
+/* a dup of the other side of greeter_fd_in so that
+ * the slave can talk to itself from its sig handler
+ * using the greeter ipc mechanism
+ */
+static int slave_fd_out = -1;
+
 #ifdef HAVE_TSOL
 static gboolean have_suntsol_extension = FALSE;
 #endif
@@ -618,7 +624,7 @@
 }
 
 static void
-whack_greeter_fds (void)
+whack_greeter_and_slave_fds (void)
 {
 	if (greeter_fd_out > 0)
 		VE_IGNORE_EINTR (close (greeter_fd_out));
@@ -626,6 +632,9 @@
 	if (greeter_fd_in > 0)
 		VE_IGNORE_EINTR (close (greeter_fd_in));
 	greeter_fd_in = -1;
+	if (slave_fd_out > 0)
+		VE_IGNORE_EINTR (close (slave_fd_out));
+	slave_fd_out = -1;
 }
 
 static void
@@ -1076,7 +1085,7 @@
 
 	d->greetpid = 0;
 
-	whack_greeter_fds ();
+	whack_greeter_and_slave_fds ();
 
 	gdm_slave_send_num (GDM_SOP_GREETPID, 0);
 
@@ -1842,7 +1851,7 @@
 
 		d->greetpid = 0;
 
-		whack_greeter_fds ();
+		whack_greeter_and_slave_fds ();
 
 		gdm_slave_send_num (GDM_SOP_GREETPID, 0);
 	}
@@ -2075,6 +2084,12 @@
 			break;
 		}
 
+		if (do_cancel) {
+			gdm_debug ("canceling...");
+			gdm_slave_greeter_ctl_no_ret (GDM_RESETOK, "");
+			continue;
+		}
+
 		if (login == NULL) {
 			char *failuresound = gdm_get_value_string (GDM_KEY_SOUND_ON_LOGIN_FAILURE_FILE);
 
@@ -2673,9 +2688,9 @@
 	
     default:
 	VE_IGNORE_EINTR (close (pipe1[0]));
-	VE_IGNORE_EINTR (close (pipe2[1]));
+	whack_greeter_and_slave_fds ();
 
-	whack_greeter_fds ();
+	slave_fd_out = pipe2[1];
 
 	greeter_fd_out = pipe1[1];
 	greeter_fd_in = pipe2[0];
@@ -4663,7 +4678,7 @@
 
 			greet = FALSE;
 			d->greetpid = 0;
-			whack_greeter_fds ();
+			whack_greeter_and_slave_fds ();
 			gdm_slave_send_num (GDM_SOP_GREETPID, 0);
 
 			do_restart_greeter = TRUE;
@@ -4675,7 +4690,7 @@
 			continue;
 		}
 
-		whack_greeter_fds ();
+		whack_greeter_and_slave_fds ();
 
 		/* if greet is TRUE, then the greeter died outside of our
 		 * control really, so clean up and die, something is wrong
@@ -4818,6 +4833,11 @@
 				gdm_wait_for_go = FALSE;
 			} else if (strcmp (&s[1], GDM_NOTIFY_TWIDDLE_POINTER) == 0) {
 				gdm_twiddle_pointer (d);
+			} else if (strcmp (&s[1], GDM_NOTIFY_RESET) == 0) {
+				if (!d->logged_in) {
+					gdm_fdprintf (slave_fd_out, "%c%c%c\n", 
+						      STX, BEL, GDM_INTERRUPT_CANCEL);
+				}
 			}
 		}
 	}
--- ./daemon/gdm.c.reset-pam	2006-07-07 15:11:37.000000000 +0200
+++ ./daemon/gdm.c	2006-07-07 15:12:37.000000000 +0200
@@ -2345,6 +2345,14 @@
 				     TRUE /* handled */,
 				     FALSE /* chooser */,
 				     NULL, 0, NULL, NULL);
+	} else if (strcmp (msg, GDM_SOP_CANCEL_LOGIN_REQUESTS) == 0) {
+		GSList *li;
+		for (li = displays; li != NULL; li = li->next) {
+			GdmDisplay *d = li->data;
+			if (!d->logged_in) {
+				send_slave_command (d, GDM_NOTIFY_RESET);
+			}
+		}
 	}
 }
 
--- ./gui/greeter/greeter.c.reset-pam	2006-07-07 15:12:01.000000000 +0200
+++ ./gui/greeter/greeter.c	2006-07-07 15:14:33.000000000 +0200
@@ -165,7 +165,6 @@
     GtkWidget *dlg;
     char *tmp;
     char *session;
-    GreeterItemInfo *conversation_info;
     static GnomeCanvasItem *disabled_cover = NULL;
     gchar *language;
     gchar *selected_user = NULL;
@@ -304,18 +303,11 @@
 	/* fall thru to reset */
 
     case GDM_RESETOK:
-
-	conversation_info = greeter_lookup_id ("pam-conversation");
-	
-	if (conversation_info)
-	  {
-	    tmp = ve_locale_to_utf8 (args);
-	    g_object_set (G_OBJECT (conversation_info->item),
-			  "text", tmp,
-			  NULL);
-	    g_free (tmp);
-	  }
-
+	greeter_item_ulist_unset_selected_user ();
+	greeter_item_pam_prompt ("", PW_ENTRY_SIZE, TRUE);
+	greeter_item_pam_message ("");
+	greeter_item_pam_error ("");
+ 
 	printf ("%c\n", STX);
 	fflush (stdout);
 	greeter_ignore_buttons (FALSE);


Index: gdm.spec
===================================================================
RCS file: /cvs/dist/rpms/gdm/devel/gdm.spec,v
retrieving revision 1.165
retrieving revision 1.166
diff -u -r1.165 -r1.166
--- gdm.spec	13 Jun 2006 19:16:19 -0000	1.165
+++ gdm.spec	7 Jul 2006 21:26:52 -0000	1.166
@@ -27,26 +27,24 @@
 
 Patch1: gdm-2.14.1-change-defaults.patch
 Patch2: gdm-2.8.0.2-add-pam-timestamp-module.patch
-Patch4: gdm-2.8.0.2-session-errors-in-tmp.patch
-Patch5: gdm-2.13.0.4-update-switchdesk-location.patch
-Patch6: gdm-2.6.0.7-wait-for-bootup.patch
-Patch7: gdm-2.8.0.2-clean-up-xsession-errors.patch
-Patch8: gdm-2.8.0.2-merge-resources.patch
-Patch9: gdm-2.6.0.8-boot-throbber.patch
-Patch10: gdm-2.8.0.2-dont-malloc-in-signal-handlers.patch
-Patch11: gdm-2.6.0.8-xdmcp.patch
-Patch12: gdm-2.8.0.2-process-all-messages.patch
-Patch13: gdm-2.8.0.2-hide-throbber.patch
-Patch15: gdm-2.13.0.4-audit-login.patch
-Patch16: gdm-2.13.0.4-modularx.patch
-Patch17: gdm-2.8.0.4-call-dbus-launch.patch
-Patch18: gdm-2.8.0.4-dont-call-xsm.patch
-Patch19: gdm-2.13.0.4-add-gnome-cflags.patch
-Patch22: gdm-2.13.0.7-pam_stack.patch
-# got upstreamed
-#Patch23: gdm-2.15.3-chown.patch
-#Patch24: gdm-2.15.3-support-xdm-nodaemon-option.patch
-#Patch25: gdm-2.15.3-CVE-2006-2452.patch
+Patch3: gdm-2.8.0.2-session-errors-in-tmp.patch
+Patch4: gdm-2.13.0.4-update-switchdesk-location.patch
+Patch5: gdm-2.6.0.7-wait-for-bootup.patch
+Patch6: gdm-2.8.0.2-clean-up-xsession-errors.patch
+Patch7: gdm-2.8.0.2-merge-resources.patch
+Patch8: gdm-2.6.0.8-boot-throbber.patch
+Patch9: gdm-2.8.0.2-dont-malloc-in-signal-handlers.patch
+Patch10: gdm-2.6.0.8-xdmcp.patch
+Patch11: gdm-2.8.0.2-hide-throbber.patch
+Patch12: gdm-2.13.0.4-audit-login.patch
+Patch13: gdm-2.13.0.4-modularx.patch
+Patch14: gdm-2.8.0.4-call-dbus-launch.patch
+Patch15: gdm-2.8.0.4-dont-call-xsm.patch
+Patch16: gdm-2.13.0.4-add-gnome-cflags.patch
+Patch17: gdm-2.13.0.7-pam_stack.patch
+Patch18: gdm-2.15.5-process-all-ops.patch
+Patch19: gdm-2.15.5-move-default-message.patch
+Patch20: gdm-2.15.5-reset-pam.patch
 
 BuildRoot: %{_tmppath}/gdm-%{PACKAGE_VERSION}-root
 
@@ -107,24 +105,24 @@
 
 %patch1 -p1 -b .change-defaults
 %patch2 -p1 -b .add-pam-timestamp-module
-%patch4 -p1 -b .session-errors-in-tmp
-%patch5 -p1 -b .update-switchdesk-location
-##%patch6 -p1 -b .wait-for-bootup
-%patch7 -p1 -b .clean-up-xsession-errors
-%patch8 -p1 -b .merge-resources
-##%patch9 -p1 -b .boot-throbber
-%patch10 -p1 -b .dont-malloc-in-signal-handlers
-##%patch11 -p1 -b .xdmcp
-##%patch12 -p1 -b .process-all-messages
-%patch13 -p1 -b .hide-throbber
-%patch15 -p1 -b .audit-login
-%patch16 -p1 -b .modularx
-%patch17 -p1 -b .call-dbus-launch
-%patch18 -p1 -b .dont-call-xsm
-%patch19 -p1 -b .add-gnome-cflags
-%patch22 -p1 -b .pam_stack
-#%patch23 -p1 -b .chown
-#%patch24 -p1 -b .support-xdm-nodaemon-option
+%patch3 -p1 -b .session-errors-in-tmp
+%patch4 -p1 -b .update-switchdesk-location
+##%patch5 -p1 -b .wait-for-bootup
+%patch6 -p1 -b .clean-up-xsession-errors
+%patch7 -p1 -b .merge-resources
+##%patch8 -p1 -b .boot-throbber
+%patch9 -p1 -b .dont-malloc-in-signal-handlers
+##%patch10 -p1 -b .xdmcp
+%patch11 -p1 -b .hide-throbber
+%patch12 -p1 -b .audit-login
+%patch13 -p1 -b .modularx
+%patch14 -p1 -b .call-dbus-launch
+%patch15 -p1 -b .dont-call-xsm
+%patch16 -p1 -b .add-gnome-cflags
+%patch17 -p1 -b .pam_stack
+%patch18 -p1 -b .process-all-ops
+%patch19 -p1 -b .move-default-message
+%patch20 -p1 -b .reset-pam
 
 # fix the time format for ja
 perl -pi -e "s|^msgstr \"%a %b %d, %H:%M\"|msgstr \"%m/%d \(%a\) %H:%M\"|; s|^msgstr \"%a %b %d, %I:%M %p\"|msgstr \"%m/%d \(%a\) %p %I:%M\"|" po/ja.po
@@ -319,6 +317,15 @@
 %attr(1770, root, gdm) %dir %{_localstatedir}/gdm
 
 %changelog
+* Fri Jul 7 2006 Ray Strode <rstrode at redhat.com> 1:2.15.5-2
+- add patch to process all operations when more than one comes
+  in really quickly
+- move default "Please enter your username" message to the
+  greeter instead of the slave so that it doesn't get stacked if
+  a pam module has a non default message
+- add new message for reseting the current login operation
+  (like the cancel button does, but accessible via the gdm fifo)
+
 * Tue Jun 13 2006 Matthias Clasen <mclasen at redhat.com> 1:2.15.5-1
 - Update to 2.15.5
 


--- gdm-2.15.3-CVE-2006-2452.patch DELETED ---


--- gdm-2.15.3-chown.patch DELETED ---


--- gdm-2.15.3-support-xdm-nodaemon-option.patch DELETED ---


--- gdm-2.8.0.2-process-all-messages.patch DELETED ---




More information about the fedora-cvs-commits mailing list