View | Details | Raw Unified | Return to bug 2640
Collapse All | Expand All

(-)a/contrib/Makefile (-2 / +3 lines)
Lines 1-4 Link Here
1
PKG_CONFIG = pkg-config
1
PKG_CONFIG = pkg-config
2
GTK_VERSION = 2.0
2
3
3
all:
4
all:
4
	@echo "Valid targets: gnome-ssh-askpass1 gnome-ssh-askpass2"
5
	@echo "Valid targets: gnome-ssh-askpass1 gnome-ssh-askpass2"
Lines 9-17 gnome-ssh-askpass1: gnome-ssh-askpass1.c Link Here
9
		`gnome-config --libs gnome gnomeui`
10
		`gnome-config --libs gnome gnomeui`
10
11
11
gnome-ssh-askpass2: gnome-ssh-askpass2.c
12
gnome-ssh-askpass2: gnome-ssh-askpass2.c
12
	$(CC) $(CFLAGS) `$(PKG_CONFIG) --cflags gtk+-2.0` \
13
	$(CC) $(CFLAGS) `$(PKG_CONFIG) --cflags gtk+-$(GTK_VERSION)` \
13
		gnome-ssh-askpass2.c -o gnome-ssh-askpass2 \
14
		gnome-ssh-askpass2.c -o gnome-ssh-askpass2 \
14
		`$(PKG_CONFIG) --libs gtk+-2.0 x11`
15
		`$(PKG_CONFIG) --libs gtk+-$(GTK_VERSION) x11`
15
16
16
clean:
17
clean:
17
	rm -f *.o gnome-ssh-askpass1 gnome-ssh-askpass2 gnome-ssh-askpass
18
	rm -f *.o gnome-ssh-askpass1 gnome-ssh-askpass2 gnome-ssh-askpass
(-)a/contrib/gnome-ssh-askpass2.c (-18 / +19 lines)
Lines 57-75 Link Here
57
#include <gdk/gdkx.h>
57
#include <gdk/gdkx.h>
58
58
59
static void
59
static void
60
report_failed_grab (const char *what)
60
report_failed_grab (GtkWidget *parent_window, const char *what)
61
{
61
{
62
	GtkWidget *err;
62
	GtkWidget *err;
63
63
64
	err = gtk_message_dialog_new(NULL, 0,
64
	err = gtk_message_dialog_new(GTK_WINDOW(parent_window), 0,
65
				     GTK_MESSAGE_ERROR,
65
				     GTK_MESSAGE_ERROR,
66
				     GTK_BUTTONS_CLOSE,
66
				     GTK_BUTTONS_CLOSE,
67
				     "Could not grab %s. "
67
				     "Could not grab %s. "
68
				     "A malicious client may be eavesdropping "
68
				     "A malicious client may be eavesdropping "
69
				     "on your session.", what);
69
				     "on your session.", what);
70
	gtk_window_set_position(GTK_WINDOW(err), GTK_WIN_POS_CENTER);
70
	gtk_window_set_position(GTK_WINDOW(err), GTK_WIN_POS_CENTER);
71
	gtk_label_set_line_wrap(GTK_LABEL((GTK_MESSAGE_DIALOG(err))->label),
72
				TRUE);
73
71
74
	gtk_dialog_run(GTK_DIALOG(err));
72
	gtk_dialog_run(GTK_DIALOG(err));
75
73
Lines 89-110 passphrase_dialog(char *message) Link Here
89
	const char *failed;
87
	const char *failed;
90
	char *passphrase, *local;
88
	char *passphrase, *local;
91
	int result, grab_tries, grab_server, grab_pointer;
89
	int result, grab_tries, grab_server, grab_pointer;
92
	GtkWidget *dialog, *entry;
90
	GtkWidget *parent_window, *dialog, *entry;
93
	GdkGrabStatus status;
91
	GdkGrabStatus status;
94
92
95
	grab_server = (getenv("GNOME_SSH_ASKPASS_GRAB_SERVER") != NULL);
93
	grab_server = (getenv("GNOME_SSH_ASKPASS_GRAB_SERVER") != NULL);
96
	grab_pointer = (getenv("GNOME_SSH_ASKPASS_GRAB_POINTER") != NULL);
94
	grab_pointer = (getenv("GNOME_SSH_ASKPASS_GRAB_POINTER") != NULL);
97
	grab_tries = 0;
95
	grab_tries = 0;
98
96
99
	dialog = gtk_message_dialog_new(NULL, 0,
97
	/* Create an invisible parent window so that GtkDialog doesn't
98
	 * complain.  */
99
	parent_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
100
101
	dialog = gtk_message_dialog_new(GTK_WINDOW(parent_window), 0,
100
					GTK_MESSAGE_QUESTION,
102
					GTK_MESSAGE_QUESTION,
101
					GTK_BUTTONS_OK_CANCEL,
103
					GTK_BUTTONS_OK_CANCEL,
102
					"%s",
104
					"%s",
103
					message);
105
					message);
104
106
105
	entry = gtk_entry_new();
107
	entry = gtk_entry_new();
106
	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), entry, FALSE,
108
	gtk_box_pack_start(
107
	    FALSE, 0);
109
	    GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), entry,
110
	    FALSE, FALSE, 0);
108
	gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE);
111
	gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE);
109
	gtk_widget_grab_focus(entry);
112
	gtk_widget_grab_focus(entry);
110
	gtk_widget_show(entry);
113
	gtk_widget_show(entry);
Lines 112-119 passphrase_dialog(char *message) Link Here
112
	gtk_window_set_title(GTK_WINDOW(dialog), "OpenSSH");
115
	gtk_window_set_title(GTK_WINDOW(dialog), "OpenSSH");
113
	gtk_window_set_position (GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);
116
	gtk_window_set_position (GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);
114
	gtk_window_set_keep_above(GTK_WINDOW(dialog), TRUE);
117
	gtk_window_set_keep_above(GTK_WINDOW(dialog), TRUE);
115
	gtk_label_set_line_wrap(GTK_LABEL((GTK_MESSAGE_DIALOG(dialog))->label),
116
				TRUE);
117
118
118
	/* Make <enter> close dialog */
119
	/* Make <enter> close dialog */
119
	gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
120
	gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
Lines 127-134 passphrase_dialog(char *message) Link Here
127
	if (grab_pointer) {
128
	if (grab_pointer) {
128
		for(;;) {
129
		for(;;) {
129
			status = gdk_pointer_grab(
130
			status = gdk_pointer_grab(
130
			   (GTK_WIDGET(dialog))->window, TRUE, 0, NULL,
131
			    (gtk_widget_get_window(GTK_WIDGET(dialog))), TRUE,
131
			   NULL, GDK_CURRENT_TIME);
132
			    0, NULL, NULL, GDK_CURRENT_TIME);
132
			if (status == GDK_GRAB_SUCCESS)
133
			if (status == GDK_GRAB_SUCCESS)
133
				break;
134
				break;
134
			usleep(GRAB_WAIT * 1000);
135
			usleep(GRAB_WAIT * 1000);
Lines 139-146 passphrase_dialog(char *message) Link Here
139
		}
140
		}
140
	}
141
	}
141
	for(;;) {
142
	for(;;) {
142
		status = gdk_keyboard_grab((GTK_WIDGET(dialog))->window,
143
		status = gdk_keyboard_grab(
143
		   FALSE, GDK_CURRENT_TIME);
144
		    gtk_widget_get_window(GTK_WIDGET(dialog)), FALSE,
145
		    GDK_CURRENT_TIME);
144
		if (status == GDK_GRAB_SUCCESS)
146
		if (status == GDK_GRAB_SUCCESS)
145
			break;
147
			break;
146
		usleep(GRAB_WAIT * 1000);
148
		usleep(GRAB_WAIT * 1000);
Lines 157-163 passphrase_dialog(char *message) Link Here
157
159
158
	/* Ungrab */
160
	/* Ungrab */
159
	if (grab_server)
161
	if (grab_server)
160
		XUngrabServer(GDK_DISPLAY());
162
		XUngrabServer(gdk_x11_get_default_xdisplay());
161
	if (grab_pointer)
163
	if (grab_pointer)
162
		gdk_pointer_ungrab(GDK_CURRENT_TIME);
164
		gdk_pointer_ungrab(GDK_CURRENT_TIME);
163
	gdk_keyboard_ungrab(GDK_CURRENT_TIME);
165
	gdk_keyboard_ungrab(GDK_CURRENT_TIME);
Lines 193-202 passphrase_dialog(char *message) Link Here
193
	gdk_pointer_ungrab(GDK_CURRENT_TIME);
195
	gdk_pointer_ungrab(GDK_CURRENT_TIME);
194
 nograb:
196
 nograb:
195
	if (grab_server)
197
	if (grab_server)
196
		XUngrabServer(GDK_DISPLAY());
198
		XUngrabServer(gdk_x11_get_default_xdisplay());
197
	gtk_widget_destroy(dialog);
199
	gtk_widget_destroy(dialog);
198
	
200
	
199
	report_failed_grab(failed);
201
	report_failed_grab(parent_window, failed);
200
202
201
	return (-1);
203
	return (-1);
202
}
204
}
203
- 

Return to bug 2640