[evolution] Bug #671537 - Option to validate SSL certificates with libsoup



commit 12256b4f1cc7def560824ed5fb3c506669709a32
Author: Milan Crha <mcrha redhat com>
Date:   Mon Apr 23 12:42:50 2012 +0200

    Bug #671537 - Option to validate SSL certificates with libsoup

 configure.ac                                       |    2 +-
 plugins/caldav/caldav-browse-server.c              |   20 ++++++++++++--
 plugins/caldav/caldav-browse-server.h              |    9 +++++-
 plugins/caldav/caldav-source.c                     |   15 +++++++++-
 plugins/calendar-http/calendar-http.c              |   28 +++++++++++++++++--
 .../webdav-account-setup/webdav-contacts-source.c  |   10 +++++++
 6 files changed, 74 insertions(+), 10 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 917c0dd..e294594 100644
--- a/configure.ac
+++ b/configure.ac
@@ -46,7 +46,7 @@ m4_define([webkitgtk_minimum_version], [1.8.0])
 m4_define([javascriptcoregtk_minimum_version], [1.8.0])
 m4_define([gconf_minimum_version], [2.0.0])		dnl XXX Just a Guess
 m4_define([libgdata_minimum_version], [0.10])
-m4_define([libsoup_minimum_version], [2.37.2.1])
+m4_define([libsoup_minimum_version], [2.37.91])
 m4_define([libxml_minimum_version], [2.7.3])
 m4_define([shared_mime_info_minimum_version], [0.22])
 m4_define([libpst_minimum_version], [0.6.54])
diff --git a/plugins/caldav/caldav-browse-server.c b/plugins/caldav/caldav-browse-server.c
index 789396e..8ff459c 100644
--- a/plugins/caldav/caldav-browse-server.c
+++ b/plugins/caldav/caldav-browse-server.c
@@ -1279,7 +1279,8 @@ init_dialog (GtkDialog *dialog,
              const gchar *username,
              const gchar *usermail,
              gboolean autoschedule,
-             gint source_type)
+             gint source_type,
+	     gboolean ignore_invalid_cert)
 {
 	GtkBox *content_area;
 	GtkWidget *label, *info_box, *spinner, *info_label, *hbox;
@@ -1413,7 +1414,10 @@ init_dialog (GtkDialog *dialog,
 	gtk_widget_hide (*new_url_entry);
 	gtk_widget_hide (spinner);
 
-	session = soup_session_sync_new ();
+	session = soup_session_sync_new_with_options (
+		SOUP_SESSION_SSL_USE_SYSTEM_CA_FILE, !ignore_invalid_cert,
+		NULL);
+
 	if (g_getenv ("CALDAV_DEBUG") != NULL) {
 		SoupLogger *logger;
 
@@ -1581,6 +1585,7 @@ caldav_browse_server (GtkWindow *parent,
                       const gchar *server_url,
                       const gchar *username,
                       gboolean use_ssl,
+		      gboolean ignore_invalid_cert,
                       gchar **new_usermail,
                       gboolean *new_autoschedule,
                       gint source_type)
@@ -1616,7 +1621,16 @@ caldav_browse_server (GtkWindow *parent,
 	new_url_entry = NULL;
 	new_usermail_combo = NULL;
 	new_autoschedule_check = NULL;
-	init_dialog (GTK_DIALOG (dialog), &new_url_entry, &new_usermail_combo, &new_autoschedule_check, url, username, new_usermail ? *new_usermail : NULL, new_autoschedule ? *new_autoschedule : FALSE, source_type);
+	init_dialog (GTK_DIALOG (dialog),
+		&new_url_entry,
+		&new_usermail_combo,
+		&new_autoschedule_check,
+		url,
+		username,
+		new_usermail ? *new_usermail : NULL,
+		new_autoschedule ? *new_autoschedule : FALSE,
+		source_type,
+		ignore_invalid_cert);
 
 	if (new_url_entry && gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) {
 		const gchar *txt;
diff --git a/plugins/caldav/caldav-browse-server.h b/plugins/caldav/caldav-browse-server.h
index 6a275f1..8f37603 100644
--- a/plugins/caldav/caldav-browse-server.h
+++ b/plugins/caldav/caldav-browse-server.h
@@ -26,6 +26,13 @@
 
 /* Opens a window with a list of available calendars for a given server;
  * Returns server URL of a calendar user chose, or NULL to let it be as is. */
-gchar *caldav_browse_server (GtkWindow *parent, const gchar *server_url, const gchar *username, gboolean use_ssl, gchar **new_usermail, gboolean *new_autoschedule, gint source_type);
+gchar *	caldav_browse_server	(GtkWindow *parent,
+				 const gchar *server_url,
+				 const gchar *username,
+				 gboolean use_ssl,
+				 gboolean ignore_invalid_cert,
+				 gchar **new_usermail,
+				 gboolean *new_autoschedule,
+				 gint source_type);
 
 #endif /* CALDAV_BROWSE_SERVER_H */
diff --git a/plugins/caldav/caldav-source.c b/plugins/caldav/caldav-source.c
index b56b4b2..130d0fa 100644
--- a/plugins/caldav/caldav-source.c
+++ b/plugins/caldav/caldav-source.c
@@ -153,7 +153,7 @@ browse_cal_clicked_cb (GtkButton *button,
                        gpointer user_data)
 {
 	GtkEntry *url, *username, *usermail;
-	GtkToggleButton *ssl, *autoschedule;
+	GtkToggleButton *ssl, *ignore_cert, *autoschedule;
 	gchar *new_url, *new_usermail;
 	gboolean new_autoschedule;
 
@@ -161,6 +161,7 @@ browse_cal_clicked_cb (GtkButton *button,
 
 	url = g_object_get_data (G_OBJECT (button), "caldav-url");
 	ssl = g_object_get_data (G_OBJECT (button), "caldav-ssl");
+	ignore_cert = g_object_get_data (G_OBJECT (button), "caldav-ignore-cert");
 	username = g_object_get_data (G_OBJECT (button), "caldav-username");
 	usermail = g_object_get_data (G_OBJECT (button), "caldav-usermail");
 	autoschedule = g_object_get_data (G_OBJECT (button), "caldav-autoschedule");
@@ -169,6 +170,8 @@ browse_cal_clicked_cb (GtkButton *button,
 	g_return_if_fail (GTK_IS_ENTRY (url));
 	g_return_if_fail (ssl != NULL);
 	g_return_if_fail (GTK_IS_TOGGLE_BUTTON (ssl));
+	g_return_if_fail (ignore_cert != NULL);
+	g_return_if_fail (GTK_IS_TOGGLE_BUTTON (ignore_cert));
 	g_return_if_fail (username != NULL);
 	g_return_if_fail (GTK_IS_ENTRY (username));
 	g_return_if_fail (usermail != NULL);
@@ -184,6 +187,7 @@ browse_cal_clicked_cb (GtkButton *button,
 		gtk_entry_get_text (url),
 		gtk_entry_get_text (username),
 		gtk_toggle_button_get_active (ssl),
+		gtk_toggle_button_get_active (ignore_cert),
 		&new_usermail,
 		&new_autoschedule,
 		GPOINTER_TO_INT (user_data));
@@ -208,7 +212,7 @@ oge_caldav (EPlugin *epl,
 	ECalConfigTargetSource *t = (ECalConfigTargetSource *) data->target;
 	ESource      *source;
 	SoupURI      *suri;
-	GtkWidget    *parent, *location, *ssl, *user, *mail, *autoschedule, *browse_cal;
+	GtkWidget    *parent, *location, *ssl, *ignore_cert, *user, *mail, *autoschedule, *browse_cal;
 	gchar        *uri, *username;
 	guint         n_rows;
 
@@ -246,6 +250,12 @@ oge_caldav (EPlugin *epl,
 		G_CALLBACK (location_changed_cb), source);
 
 	ssl = e_plugin_util_add_check (parent, _("Use _secure connection"), source, "ssl", "1", "0");
+	ignore_cert = e_plugin_util_add_check (parent, _("_Ignore invalid SSL certificate"), source, "ignore-invalid-cert", "1", NULL);
+
+	g_object_bind_property (
+		ssl, "active",
+		ignore_cert, "sensitive",
+		G_BINDING_SYNC_CREATE);
 
 	user = e_plugin_util_add_entry (parent, _("User_name:"), NULL, NULL);
 	gtk_entry_set_text (GTK_ENTRY (user), username ? username : "");
@@ -271,6 +281,7 @@ oge_caldav (EPlugin *epl,
 
 	g_object_set_data (G_OBJECT (browse_cal), "caldav-url", location);
 	g_object_set_data (G_OBJECT (browse_cal), "caldav-ssl", ssl);
+	g_object_set_data (G_OBJECT (browse_cal), "caldav-ignore-cert", ignore_cert);
 	g_object_set_data (G_OBJECT (browse_cal), "caldav-username", user);
 	g_object_set_data (G_OBJECT (browse_cal), "caldav-usermail", mail);
 	g_object_set_data (G_OBJECT (browse_cal), "caldav-autoschedule", autoschedule);
diff --git a/plugins/calendar-http/calendar-http.c b/plugins/calendar-http/calendar-http.c
index f88b6af..b0b2560 100644
--- a/plugins/calendar-http/calendar-http.c
+++ b/plugins/calendar-http/calendar-http.c
@@ -137,7 +137,7 @@ e_calendar_http_secure (EPlugin *epl,
                         EConfigHookItemFactoryData *data)
 {
 	ECalConfigTargetSource *t = (ECalConfigTargetSource *) data->target;
-	GtkWidget *secure_setting;
+	GtkWidget *secure_setting, *ignore_cert, *grid;
 
 	if ((!e_plugin_util_is_source_proto (t->source, "http") &&
 	     !e_plugin_util_is_source_proto (t->source, "https") &&
@@ -146,7 +146,7 @@ e_calendar_http_secure (EPlugin *epl,
 	}
 
 	secure_setting = e_plugin_util_add_check (
-		data->parent, _("Use _secure connection"),
+		NULL, _("Use _secure connection"),
 		t->source, "use_ssl", "1", "0");
 
 	/* Store pointer to secure checkbox so we can retrieve it in url_changed() */
@@ -154,7 +154,29 @@ e_calendar_http_secure (EPlugin *epl,
 		G_OBJECT (data->parent), "secure_checkbox",
 		(gpointer) secure_setting);
 
-	return secure_setting;
+	ignore_cert = e_plugin_util_add_check (NULL, _("_Ignore invalid SSL certificate"), t->source, "ignore-invalid-cert", "1", NULL);
+
+	g_object_bind_property (
+		secure_setting, "active",
+		ignore_cert, "sensitive",
+		G_BINDING_SYNC_CREATE);
+
+	grid = gtk_grid_new ();
+	gtk_grid_attach (GTK_GRID (grid), secure_setting, 0, 0, 1, 1);
+	gtk_grid_attach (GTK_GRID (grid), ignore_cert, 0, 1, 1, 1);
+	gtk_widget_show_all (grid);
+
+	if (GTK_IS_TABLE (data->parent)) {
+		gint row;
+		
+		g_object_get (data->parent, "n-rows", &row, NULL);
+
+		gtk_table_attach (GTK_TABLE (data->parent), grid, 1, 2, row , row + 1, GTK_FILL, 0, 0, 0);
+	} else {
+		gtk_container_add (GTK_CONTAINER (data->parent), grid);
+	}
+
+	return grid;
 }
 
 static void
diff --git a/plugins/webdav-account-setup/webdav-contacts-source.c b/plugins/webdav-account-setup/webdav-contacts-source.c
index f81abe3..ef6a102 100644
--- a/plugins/webdav-account-setup/webdav-contacts-source.c
+++ b/plugins/webdav-account-setup/webdav-contacts-source.c
@@ -219,6 +219,7 @@ plugin_webdav_contacts (EPlugin *epl,
 
 	GtkWidget    *section;
 	GtkWidget    *vbox2;
+	GtkWidget    *ignore_cert;
 
 	GtkBox       *hbox;
 	GtkWidget    *spacer;
@@ -288,6 +289,15 @@ plugin_webdav_contacts (EPlugin *epl,
 	gtk_box_pack_start (hbox, GTK_WIDGET (uidata->avoid_ifmatch_toggle),
 			   FALSE, FALSE, 0);
 
+	hbox = GTK_BOX (gtk_hbox_new (FALSE, 10));
+	gtk_box_pack_start (GTK_BOX (vbox2), GTK_WIDGET (hbox), TRUE, TRUE, 0);
+
+	spacer = gtk_label_new("   ");
+	gtk_box_pack_start (hbox, spacer, FALSE, FALSE, 0);
+
+	ignore_cert = e_plugin_util_add_check (NULL, _("_Ignore invalid SSL certificate"), source, "ignore-invalid-cert", "1", NULL);
+	gtk_box_pack_start (hbox, ignore_cert, TRUE, TRUE, 0);
+
 	set_ui_from_source (uidata);
 
 	gtk_widget_show_all (vbox2);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]