File gdm-2.19.3-reset-pam.patch of Package gdmfactory

--- gdm-2.16.4/gui/greeter/greeter.c.reset-pam	2006-10-30 15:56:34.000000000 -0500
+++ gdm-2.16.4/gui/greeter/greeter.c	2006-12-15 11:11:07.000000000 -0500
@@ -168,7 +168,6 @@
     GtkWidget *dlg;
     char *tmp;
     char *session;
-    GreeterItemInfo *conversation_info;
     static GnomeCanvasItem *disabled_cover = NULL;
     gchar *language;
     gchar *selected_user = NULL;
@@ -328,16 +327,9 @@
 	if (gtk_start_again_button != NULL)
                 gtk_widget_set_sensitive (gtk_start_again_button, FALSE);
 
-	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 ("");
 
 	printf ("%c\n", STX);
 	fflush (stdout);
--- gdm-2.16.4/daemon/slave.c.reset-pam	2006-12-15 11:03:01.000000000 -0500
+++ gdm-2.16.4/daemon/slave.c	2006-12-15 11:03:01.000000000 -0500
@@ -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
@@ -620,7 +626,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));
@@ -628,6 +634,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
@@ -1078,7 +1087,7 @@
 
 	d->greetpid = 0;
 
-	whack_greeter_fds ();
+	whack_greeter_and_slave_fds ();
 
 	gdm_slave_send_num (GDM_SOP_GREETPID, 0);
 
@@ -1844,7 +1853,7 @@
 
 		d->greetpid = 0;
 
-		whack_greeter_fds ();
+		whack_greeter_and_slave_fds ();
 
 		gdm_slave_send_num (GDM_SOP_GREETPID, 0);
 	}
@@ -2076,6 +2085,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);
 
@@ -4673,7 +4688,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
@@ -4816,6 +4831,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);
+				}
 			}
 		}
 	}
--- gdm-2.19.3/daemon/slave.c~	2007-07-18 14:10:20.000000000 -0400
+++ gdm-2.19.3/daemon/slave.c	2007-07-18 14:12:23.000000000 -0400
@@ -2877,10 +2877,11 @@ gdm_slave_greeter (void)
 
 	default:
 		VE_IGNORE_EINTR (close (pipe1[0]));
-		VE_IGNORE_EINTR (close (pipe2[1]));
 
 		whack_greeter_and_slave_fds ();
 
+		slave_fd_out = pipe2[1];
+
 		greeter_fd_out = pipe1[1];
 		greeter_fd_in = pipe2[0];
 
@@ -4858,7 +4859,7 @@ gdm_slave_child_handler (int sig)
 
 				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;
--- gdm-2.19.3/daemon/gdm-socket-protocol.h~	2007-06-17 13:07:39.000000000 -0400
+++ gdm-2.19.3/daemon/gdm-socket-protocol.h	2007-07-25 14:47:23.000000000 -0400
@@ -155,6 +155,8 @@
 #define GDM_SOP_SHOW_QUESTION_DIALOG "SHOW_QUESTION_DIALOG"  /* show the question dialog from daemon */
 #define GDM_SOP_SHOW_ASKBUTTONS_DIALOG "SHOW_ASKBUTTON_DIALOG"  /* show the askbutton dialog from daemon */
 
+/* Reset any in progress authentication conversations */
+#define GDM_SOP_CANCEL_LOGIN_REQUESTS "CANCEL_LOGIN_REQUESTS" /* no arguments */
 
 /* Ack for a slave message */
 /* Note that an extra response can follow an 'ack' */
--- gdm-2.19.3/daemon/gdm-daemon-config-keys.h~	2007-06-17 13:07:38.000000000 -0400
+++ gdm-2.19.3/daemon/gdm-daemon-config-keys.h	2007-07-25 14:46:49.000000000 -0400
@@ -226,6 +226,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"
 
 G_END_DECLS
 
--- gdm-2.19.3/daemon/slave.c~	2007-07-25 15:25:09.000000000 -0400
+++ gdm-2.19.3/daemon/slave.c	2007-07-25 15:26:22.000000000 -0400
@@ -4881,7 +4881,7 @@ gdm_slave_child_handler (int sig)
 				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
--- gdm-2.19.3/daemon/gdm.c~	2007-07-25 15:40:40.000000000 -0400
+++ gdm-2.19.3/daemon/gdm.c	2007-07-25 15:41:39.000000000 -0400
@@ -4344,6 +4344,14 @@ gdm_handle_user_message (GdmConnection *
 	        	gdm_connection_write (conn, "OK false\n");
 	} else if (strcmp (msg, GDM_SUP_CLOSE) == 0) {
 		gdm_connection_close (conn);
+ 	} else if (strcmp (msg, GDM_SOP_CANCEL_LOGIN_REQUESTS) == 0) {
+ 		GSList *li;
+ 		for (li = gdm_daemon_config_get_display_list (); li != NULL; li = li->next) {
+ 			GdmDisplay *d = li->data;
+ 			if (!d->logged_in) {
+ 				send_slave_command (d, GDM_NOTIFY_RESET);
+ 			}
+ 		}
 	} else {
 		gdm_connection_write (conn, "ERROR 0 Not implemented\n");
 		gdm_connection_close (conn);
openSUSE Build Service is sponsored by