|
|
e2a1de9 |
diff -up gdm-2.19.5/gui/greeter/greeter.c.reset-pam gdm-2.19.5/gui/greeter/greeter.c
|
|
|
e2a1de9 |
--- gdm-2.19.5/gui/greeter/greeter.c.reset-pam 2007-07-30 14:51:01.000000000 -0400
|
|
|
e2a1de9 |
+++ gdm-2.19.5/gui/greeter/greeter.c 2007-07-31 00:10:18.000000000 -0400
|
|
|
e2a1de9 |
@@ -224,7 +224,6 @@ process_operation (guchar op_code,
|
|
|
e2a1de9 |
GtkWidget *dlg;
|
|
|
e2a1de9 |
char *tmp;
|
|
|
e2a1de9 |
char *session;
|
|
|
e2a1de9 |
- GreeterItemInfo *conversation_info;
|
|
|
e2a1de9 |
static GnomeCanvasItem *disabled_cover = NULL;
|
|
|
e2a1de9 |
gint lookup_status = SESSION_LOOKUP_SUCCESS;
|
|
|
e2a1de9 |
gchar *firstmsg = NULL;
|
|
|
e2a1de9 |
@@ -428,17 +427,10 @@ process_operation (guchar op_code,
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
first_prompt = TRUE;
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
- conversation_info = greeter_lookup_id ("pam-conversation");
|
|
|
e2a1de9 |
-
|
|
|
e2a1de9 |
- if (conversation_info)
|
|
|
e2a1de9 |
- {
|
|
|
e2a1de9 |
- tmp = ve_locale_to_utf8 (args);
|
|
|
e2a1de9 |
- g_object_set (G_OBJECT (conversation_info->item),
|
|
|
e2a1de9 |
- "text", tmp,
|
|
|
e2a1de9 |
- NULL);
|
|
|
e2a1de9 |
- g_free (tmp);
|
|
|
e2a1de9 |
- }
|
|
|
e2a1de9 |
-
|
|
|
e2a1de9 |
+ greeter_item_ulist_unset_selected_user ();
|
|
|
e2a1de9 |
+ greeter_item_pam_prompt ("", PW_ENTRY_SIZE, TRUE);
|
|
|
e2a1de9 |
+ greeter_item_pam_message ("");
|
|
|
e2a1de9 |
+
|
|
|
e2a1de9 |
printf ("%c\n", STX);
|
|
|
e2a1de9 |
fflush (stdout);
|
|
|
e2a1de9 |
greeter_ignore_buttons (FALSE);
|
|
|
e2a1de9 |
diff -up gdm-2.19.5/daemon/slave.c.reset-pam gdm-2.19.5/daemon/slave.c
|
|
|
e2a1de9 |
--- gdm-2.19.5/daemon/slave.c.reset-pam 2007-07-30 14:51:14.000000000 -0400
|
|
|
e2a1de9 |
+++ gdm-2.19.5/daemon/slave.c 2007-07-31 00:13:39.000000000 -0400
|
|
|
e2a1de9 |
@@ -173,6 +173,12 @@ static int gdm_normal_runlevel =
|
|
|
e2a1de9 |
static pid_t extra_process = 0;
|
|
|
e2a1de9 |
static int extra_status = 0;
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
+/* a dup of the other side of greeter_fd_in so that
|
|
|
e2a1de9 |
+ * the slave can talk to itself from its sig handler
|
|
|
e2a1de9 |
+ * using the greeter ipc mechanism
|
|
|
e2a1de9 |
+ */
|
|
|
e2a1de9 |
+static int slave_fd_out = -1;
|
|
|
e2a1de9 |
+
|
|
|
e2a1de9 |
#ifdef HAVE_TSOL
|
|
|
e2a1de9 |
static gboolean have_suntsol_extension = FALSE;
|
|
|
e2a1de9 |
#endif
|
|
|
e2a1de9 |
@@ -661,7 +667,7 @@ ignore_xerror_handler (Display *disp, XE
|
|
|
e2a1de9 |
}
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
static void
|
|
|
e2a1de9 |
-whack_greeter_fds (void)
|
|
|
e2a1de9 |
+whack_greeter_and_slave_fds (void)
|
|
|
e2a1de9 |
{
|
|
|
e2a1de9 |
if (greeter_fd_out > 0)
|
|
|
e2a1de9 |
VE_IGNORE_EINTR (close (greeter_fd_out));
|
|
|
e2a1de9 |
@@ -669,6 +675,9 @@ whack_greeter_fds (void)
|
|
|
e2a1de9 |
if (greeter_fd_in > 0)
|
|
|
e2a1de9 |
VE_IGNORE_EINTR (close (greeter_fd_in));
|
|
|
e2a1de9 |
greeter_fd_in = -1;
|
|
|
e2a1de9 |
+ if (slave_fd_out > 0)
|
|
|
e2a1de9 |
+ VE_IGNORE_EINTR (close (slave_fd_out));
|
|
|
e2a1de9 |
+ slave_fd_out = -1;
|
|
|
e2a1de9 |
}
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
static void
|
|
|
e2a1de9 |
@@ -1154,7 +1163,7 @@ gdm_slave_whack_greeter (void)
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
d->greetpid = 0;
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
- whack_greeter_fds ();
|
|
|
e2a1de9 |
+ whack_greeter_and_slave_fds ();
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
gdm_slave_send_num (GDM_SOP_GREETPID, 0);
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
@@ -2003,7 +2012,7 @@ restart_the_greeter (void)
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
d->greetpid = 0;
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
- whack_greeter_fds ();
|
|
|
e2a1de9 |
+ whack_greeter_and_slave_fds ();
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
gdm_slave_send_num (GDM_SOP_GREETPID, 0);
|
|
|
e2a1de9 |
}
|
|
|
e2a1de9 |
@@ -2240,6 +2249,12 @@ gdm_slave_wait_for_login (void)
|
|
|
e2a1de9 |
break;
|
|
|
e2a1de9 |
}
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
+ if (do_cancel) {
|
|
|
e2a1de9 |
+ gdm_debug ("canceling...");
|
|
|
e2a1de9 |
+ gdm_slave_greeter_ctl_no_ret (GDM_RESETOK, "");
|
|
|
e2a1de9 |
+ continue;
|
|
|
e2a1de9 |
+ }
|
|
|
e2a1de9 |
+
|
|
|
e2a1de9 |
if (login_user == NULL) {
|
|
|
e2a1de9 |
const char *failuresound = gdm_daemon_config_get_value_string (GDM_KEY_SOUND_ON_LOGIN_FAILURE_FILE);
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
@@ -2853,10 +2868,10 @@ gdm_slave_greeter (void)
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
default:
|
|
|
e2a1de9 |
VE_IGNORE_EINTR (close (pipe1[0]));
|
|
|
e2a1de9 |
- VE_IGNORE_EINTR (close (pipe2[1]));
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
- whack_greeter_fds ();
|
|
|
e2a1de9 |
+ whack_greeter_and_slave_fds ();
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
+ slave_fd_out = pipe2[1];
|
|
|
e2a1de9 |
greeter_fd_out = pipe1[1];
|
|
|
e2a1de9 |
greeter_fd_in = pipe2[0];
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
@@ -5147,7 +5162,7 @@ gdm_slave_child_handler (int sig)
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
greet = FALSE;
|
|
|
e2a1de9 |
d->greetpid = 0;
|
|
|
e2a1de9 |
- whack_greeter_fds ();
|
|
|
e2a1de9 |
+ whack_greeter_and_slave_fds ();
|
|
|
e2a1de9 |
gdm_slave_send_num (GDM_SOP_GREETPID, 0);
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
do_restart_greeter = TRUE;
|
|
|
e2a1de9 |
@@ -5159,7 +5174,7 @@ gdm_slave_child_handler (int sig)
|
|
|
e2a1de9 |
continue;
|
|
|
e2a1de9 |
}
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
- whack_greeter_fds ();
|
|
|
e2a1de9 |
+ whack_greeter_and_slave_fds ();
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
/* if greet is TRUE, then the greeter died outside of our
|
|
|
e2a1de9 |
* control really, so clean up and die, something is wrong
|
|
|
e2a1de9 |
@@ -5302,6 +5317,11 @@ gdm_slave_handle_usr2_message (void)
|
|
|
e2a1de9 |
gdm_wait_for_go = FALSE;
|
|
|
e2a1de9 |
} else if (strcmp (&s[1], GDM_NOTIFY_TWIDDLE_POINTER) == 0) {
|
|
|
e2a1de9 |
gdm_twiddle_pointer (d);
|
|
|
e2a1de9 |
+ } else if (strcmp (&s[1], GDM_NOTIFY_RESET) == 0) {
|
|
|
e2a1de9 |
+ if (!d->logged_in) {
|
|
|
e2a1de9 |
+ gdm_fdprintf (slave_fd_out, "%c%c%c\n",
|
|
|
e2a1de9 |
+ STX, BEL, GDM_INTERRUPT_CANCEL);
|
|
|
e2a1de9 |
+ }
|
|
|
e2a1de9 |
}
|
|
|
e2a1de9 |
} else if (s[0] == GDM_SLAVE_NOTIFY_RESPONSE) {
|
|
|
e2a1de9 |
gdm_got_ack = TRUE;
|
|
|
e2a1de9 |
diff -up gdm-2.19.5/daemon/gdm-daemon-config-keys.h.reset-pam gdm-2.19.5/daemon/gdm-daemon-config-keys.h
|
|
|
e2a1de9 |
--- gdm-2.19.5/daemon/gdm-daemon-config-keys.h.reset-pam 2007-07-30 14:51:14.000000000 -0400
|
|
|
e2a1de9 |
+++ gdm-2.19.5/daemon/gdm-daemon-config-keys.h 2007-07-31 00:10:18.000000000 -0400
|
|
|
e2a1de9 |
@@ -229,6 +229,7 @@ G_BEGIN_DECLS
|
|
|
e2a1de9 |
#define GDM_NOTIFY_SOFT_RESTART_SERVERS "SOFT_RESTART_SERVERS"
|
|
|
e2a1de9 |
#define GDM_NOTIFY_GO "GO"
|
|
|
e2a1de9 |
#define GDM_NOTIFY_TWIDDLE_POINTER "TWIDDLE_POINTER"
|
|
|
e2a1de9 |
+#define GDM_NOTIFY_RESET "RESET"
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
G_END_DECLS
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
diff -up gdm-2.19.5/daemon/gdm.c.reset-pam gdm-2.19.5/daemon/gdm.c
|
|
|
e2a1de9 |
--- gdm-2.19.5/daemon/gdm.c.reset-pam 2007-07-30 14:51:14.000000000 -0400
|
|
|
e2a1de9 |
+++ gdm-2.19.5/daemon/gdm.c 2007-07-31 00:10:18.000000000 -0400
|
|
|
e2a1de9 |
@@ -2578,6 +2578,14 @@ gdm_handle_message (GdmConnection *conn,
|
|
|
e2a1de9 |
TRUE /* handled */,
|
|
|
e2a1de9 |
FALSE /* chooser */,
|
|
|
e2a1de9 |
NULL, 0, NULL, NULL, NULL);
|
|
|
e2a1de9 |
+} else if (strcmp (msg, GDM_SOP_CANCEL_LOGIN_REQUESTS) == 0) {
|
|
|
e2a1de9 |
+ GSList *li, *displays = gdm_daemon_config_get_display_list ();
|
|
|
e2a1de9 |
+ for (li = displays; li != NULL; li = li->next) {
|
|
|
e2a1de9 |
+ GdmDisplay *d = li->data;
|
|
|
e2a1de9 |
+ if (!d->logged_in) {
|
|
|
e2a1de9 |
+ send_slave_command (d, GDM_NOTIFY_RESET);
|
|
|
e2a1de9 |
+ }
|
|
|
e2a1de9 |
+ }
|
|
|
e2a1de9 |
} else if (strncmp (msg, "opcode="GDM_SOP_SHOW_ERROR_DIALOG,
|
|
|
e2a1de9 |
strlen ("opcode="GDM_SOP_SHOW_ERROR_DIALOG)) == 0) {
|
|
|
e2a1de9 |
char **list;
|
|
|
e2a1de9 |
diff -up gdm-2.19.5/daemon/gdm-socket-protocol.h.reset-pam gdm-2.19.5/daemon/gdm-socket-protocol.h
|
|
|
e2a1de9 |
--- gdm-2.19.5/daemon/gdm-socket-protocol.h.reset-pam 2007-07-30 14:51:14.000000000 -0400
|
|
|
e2a1de9 |
+++ gdm-2.19.5/daemon/gdm-socket-protocol.h 2007-07-31 00:10:18.000000000 -0400
|
|
|
e2a1de9 |
@@ -155,6 +155,9 @@
|
|
|
e2a1de9 |
#define GDM_SOP_SHOW_QUESTION_DIALOG "SHOW_QUESTION_DIALOG" /* show the question dialog from daemon */
|
|
|
e2a1de9 |
#define GDM_SOP_SHOW_ASKBUTTONS_DIALOG "SHOW_ASKBUTTON_DIALOG" /* show the askbutton dialog from daemon */
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
+/* Reset any in progress authentication conversations */
|
|
|
e2a1de9 |
+#define GDM_SOP_CANCEL_LOGIN_REQUESTS "CANCEL_LOGIN_REQUESTS" /* no arguments */
|
|
|
e2a1de9 |
+
|
|
|
e2a1de9 |
|
|
|
e2a1de9 |
/* Ack for a slave message */
|
|
|
e2a1de9 |
/* Note that an extra response can follow an 'ack' */
|