From fb7a88c968e2508bb95ad595cadb9c7445badf30 Mon Sep 17 00:00:00 2001
From: Tambet Ingo <tambet@gmail.com>
Date: Tue, 13 Jan 2009 13:52:42 +0200
Subject: [PATCH] CA system certificates.


diff --git a/src/applet.glade b/src/applet.glade
index 54a5c3d..f175658 100644
--- a/src/applet.glade
+++ b/src/applet.glade
@@ -1443,7 +1443,7 @@ Shared Key</property>
       <child>
 	<widget class="GtkTable" id="table8">
 	  <property name="visible">True</property>
-	  <property name="n_rows">6</property>
+	  <property name="n_rows">7</property>
 	  <property name="n_columns">2</property>
 	  <property name="homogeneous">False</property>
 	  <property name="row_spacing">6</property>
@@ -1574,9 +1574,71 @@ Shared Key</property>
 	  </child>
 
 	  <child>
-	    <widget class="GtkLabel" id="eap_tls_private_key_label">
+	    <widget class="GtkFileChooserButton" id="eap_tls_user_cert_button">
 	      <property name="visible">True</property>
-	      <property name="label" translatable="yes">Private Key:</property>
+	      <property name="title" translatable="yes">Select A File</property>
+	      <property name="action">GTK_FILE_CHOOSER_ACTION_OPEN</property>
+	      <property name="local_only">True</property>
+	      <property name="show_hidden">False</property>
+	      <property name="do_overwrite_confirmation">False</property>
+	      <property name="width_chars">-1</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">1</property>
+	      <property name="bottom_attach">2</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options">fill</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkCheckButton" id="show_checkbutton">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label" translatable="yes">Show password</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="active">False</property>
+	      <property name="inconsistent">False</property>
+	      <property name="draw_indicator">True</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">6</property>
+	      <property name="bottom_attach">7</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkEntry" id="eap_tls_private_key_password_entry">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="editable">True</property>
+	      <property name="visibility">False</property>
+	      <property name="max_length">0</property>
+	      <property name="text" translatable="yes"></property>
+	      <property name="has_frame">True</property>
+	      <property name="activates_default">False</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">5</property>
+	      <property name="bottom_attach">6</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="eap_tls_private_key_password_label">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Private Key Password:</property>
 	      <property name="use_underline">False</property>
 	      <property name="use_markup">False</property>
 	      <property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -1594,37 +1656,17 @@ Shared Key</property>
 	    <packing>
 	      <property name="left_attach">0</property>
 	      <property name="right_attach">1</property>
-	      <property name="top_attach">3</property>
-	      <property name="bottom_attach">4</property>
+	      <property name="top_attach">5</property>
+	      <property name="bottom_attach">6</property>
 	      <property name="x_options">fill</property>
 	      <property name="y_options"></property>
 	    </packing>
 	  </child>
 
 	  <child>
-	    <widget class="GtkFileChooserButton" id="eap_tls_private_key_button">
-	      <property name="visible">True</property>
-	      <property name="title" translatable="yes">Select A File</property>
-	      <property name="action">GTK_FILE_CHOOSER_ACTION_OPEN</property>
-	      <property name="local_only">True</property>
-	      <property name="show_hidden">False</property>
-	      <property name="do_overwrite_confirmation">False</property>
-	      <property name="width_chars">-1</property>
-	    </widget>
-	    <packing>
-	      <property name="left_attach">1</property>
-	      <property name="right_attach">2</property>
-	      <property name="top_attach">3</property>
-	      <property name="bottom_attach">4</property>
-	      <property name="x_options">fill</property>
-	      <property name="y_options">fill</property>
-	    </packing>
-	  </child>
-
-	  <child>
-	    <widget class="GtkLabel" id="eap_tls_private_key_password_label">
+	    <widget class="GtkLabel" id="eap_tls_private_key_label">
 	      <property name="visible">True</property>
-	      <property name="label" translatable="yes">Private Key Password:</property>
+	      <property name="label" translatable="yes">Private Key:</property>
 	      <property name="use_underline">False</property>
 	      <property name="use_markup">False</property>
 	      <property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -1650,30 +1692,30 @@ Shared Key</property>
 	  </child>
 
 	  <child>
-	    <widget class="GtkEntry" id="eap_tls_private_key_password_entry">
+	    <widget class="GtkFileChooserButton" id="eap_tls_private_key_button">
 	      <property name="visible">True</property>
-	      <property name="can_focus">True</property>
-	      <property name="editable">True</property>
-	      <property name="visibility">False</property>
-	      <property name="max_length">0</property>
-	      <property name="text" translatable="yes"></property>
-	      <property name="has_frame">True</property>
-	      <property name="activates_default">False</property>
+	      <property name="title" translatable="yes">Select A File</property>
+	      <property name="action">GTK_FILE_CHOOSER_ACTION_OPEN</property>
+	      <property name="local_only">True</property>
+	      <property name="show_hidden">False</property>
+	      <property name="do_overwrite_confirmation">False</property>
+	      <property name="width_chars">-1</property>
 	    </widget>
 	    <packing>
 	      <property name="left_attach">1</property>
 	      <property name="right_attach">2</property>
 	      <property name="top_attach">4</property>
 	      <property name="bottom_attach">5</property>
-	      <property name="y_options"></property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options">fill</property>
 	    </packing>
 	  </child>
 
 	  <child>
-	    <widget class="GtkCheckButton" id="show_checkbutton">
+	    <widget class="GtkCheckButton" id="eap_tls_ca_cert_system">
 	      <property name="visible">True</property>
 	      <property name="can_focus">True</property>
-	      <property name="label" translatable="yes">Show password</property>
+	      <property name="label" translatable="yes">Use System CA Certificates</property>
 	      <property name="use_underline">True</property>
 	      <property name="relief">GTK_RELIEF_NORMAL</property>
 	      <property name="focus_on_click">True</property>
@@ -1684,28 +1726,8 @@ Shared Key</property>
 	    <packing>
 	      <property name="left_attach">1</property>
 	      <property name="right_attach">2</property>
-	      <property name="top_attach">5</property>
-	      <property name="bottom_attach">6</property>
-	      <property name="x_options">fill</property>
-	      <property name="y_options"></property>
-	    </packing>
-	  </child>
-
-	  <child>
-	    <widget class="GtkFileChooserButton" id="eap_tls_user_cert_button">
-	      <property name="visible">True</property>
-	      <property name="title" translatable="yes">Select A File</property>
-	      <property name="action">GTK_FILE_CHOOSER_ACTION_OPEN</property>
-	      <property name="local_only">True</property>
-	      <property name="show_hidden">False</property>
-	      <property name="do_overwrite_confirmation">False</property>
-	      <property name="width_chars">-1</property>
-	    </widget>
-	    <packing>
-	      <property name="left_attach">1</property>
-	      <property name="right_attach">2</property>
-	      <property name="top_attach">1</property>
-	      <property name="bottom_attach">2</property>
+	      <property name="top_attach">3</property>
+	      <property name="bottom_attach">4</property>
 	      <property name="x_options">fill</property>
 	      <property name="y_options">fill</property>
 	    </packing>
@@ -1955,7 +1977,7 @@ Shared Key</property>
       <child>
 	<widget class="GtkTable" id="table10">
 	  <property name="visible">True</property>
-	  <property name="n_rows">4</property>
+	  <property name="n_rows">5</property>
 	  <property name="n_columns">2</property>
 	  <property name="homogeneous">False</property>
 	  <property name="row_spacing">6</property>
@@ -2058,6 +2080,25 @@ Shared Key</property>
 	  </child>
 
 	  <child>
+	    <widget class="GtkVBox" id="eap_ttls_inner_auth_vbox">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<placeholder/>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">4</property>
+	      <property name="bottom_attach">5</property>
+	      <property name="x_options">fill</property>
+	    </packing>
+	  </child>
+
+	  <child>
 	    <widget class="GtkLabel" id="eap_ttls_inner_auth_label">
 	      <property name="visible">True</property>
 	      <property name="label" translatable="yes">Inner Authentication:</property>
@@ -2078,8 +2119,8 @@ Shared Key</property>
 	    <packing>
 	      <property name="left_attach">0</property>
 	      <property name="right_attach">1</property>
-	      <property name="top_attach">2</property>
-	      <property name="bottom_attach">3</property>
+	      <property name="top_attach">3</property>
+	      <property name="bottom_attach">4</property>
 	      <property name="x_options">fill</property>
 	      <property name="y_options"></property>
 	    </packing>
@@ -2095,29 +2136,32 @@ Shared Key</property>
 	    <packing>
 	      <property name="left_attach">1</property>
 	      <property name="right_attach">2</property>
-	      <property name="top_attach">2</property>
-	      <property name="bottom_attach">3</property>
+	      <property name="top_attach">3</property>
+	      <property name="bottom_attach">4</property>
 	      <property name="x_options">fill</property>
 	      <property name="y_options">fill</property>
 	    </packing>
 	  </child>
 
 	  <child>
-	    <widget class="GtkVBox" id="eap_ttls_inner_auth_vbox">
+	    <widget class="GtkCheckButton" id="eap_ttls_ca_cert_system">
 	      <property name="visible">True</property>
-	      <property name="homogeneous">False</property>
-	      <property name="spacing">0</property>
-
-	      <child>
-		<placeholder/>
-	      </child>
+	      <property name="can_focus">True</property>
+	      <property name="label" translatable="yes">Use System CA Certificates</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="active">False</property>
+	      <property name="inconsistent">False</property>
+	      <property name="draw_indicator">True</property>
 	    </widget>
 	    <packing>
-	      <property name="left_attach">0</property>
+	      <property name="left_attach">1</property>
 	      <property name="right_attach">2</property>
-	      <property name="top_attach">3</property>
-	      <property name="bottom_attach">4</property>
+	      <property name="top_attach">2</property>
+	      <property name="bottom_attach">3</property>
 	      <property name="x_options">fill</property>
+	      <property name="y_options">fill</property>
 	    </packing>
 	  </child>
 	</widget>
@@ -2771,7 +2815,7 @@ Shared Key</property>
       <child>
 	<widget class="GtkTable" id="table13">
 	  <property name="visible">True</property>
-	  <property name="n_rows">5</property>
+	  <property name="n_rows">6</property>
 	  <property name="n_columns">2</property>
 	  <property name="homogeneous">False</property>
 	  <property name="row_spacing">6</property>
@@ -2886,8 +2930,8 @@ Shared Key</property>
 	    <packing>
 	      <property name="left_attach">0</property>
 	      <property name="right_attach">2</property>
-	      <property name="top_attach">4</property>
-	      <property name="bottom_attach">5</property>
+	      <property name="top_attach">5</property>
+	      <property name="bottom_attach">6</property>
 	      <property name="x_options">fill</property>
 	    </packing>
 	  </child>
@@ -2913,31 +2957,14 @@ Shared Key</property>
 	    <packing>
 	      <property name="left_attach">0</property>
 	      <property name="right_attach">1</property>
-	      <property name="top_attach">3</property>
-	      <property name="bottom_attach">4</property>
+	      <property name="top_attach">4</property>
+	      <property name="bottom_attach">5</property>
 	      <property name="x_options">fill</property>
 	      <property name="y_options"></property>
 	    </packing>
 	  </child>
 
 	  <child>
-	    <widget class="GtkComboBox" id="eap_peap_inner_auth_combo">
-	      <property name="visible">True</property>
-	      <property name="items" translatable="yes"> </property>
-	      <property name="add_tearoffs">False</property>
-	      <property name="focus_on_click">True</property>
-	    </widget>
-	    <packing>
-	      <property name="left_attach">1</property>
-	      <property name="right_attach">2</property>
-	      <property name="top_attach">3</property>
-	      <property name="bottom_attach">4</property>
-	      <property name="x_options">fill</property>
-	      <property name="y_options">fill</property>
-	    </packing>
-	  </child>
-
-	  <child>
 	    <widget class="GtkLabel" id="eap_peap_version_label">
 	      <property name="visible">True</property>
 	      <property name="label" translatable="yes">PEAP Version:</property>
@@ -2958,14 +2985,31 @@ Shared Key</property>
 	    <packing>
 	      <property name="left_attach">0</property>
 	      <property name="right_attach">1</property>
-	      <property name="top_attach">2</property>
-	      <property name="bottom_attach">3</property>
+	      <property name="top_attach">3</property>
+	      <property name="bottom_attach">4</property>
 	      <property name="x_options">fill</property>
 	      <property name="y_options"></property>
 	    </packing>
 	  </child>
 
 	  <child>
+	    <widget class="GtkComboBox" id="eap_peap_inner_auth_combo">
+	      <property name="visible">True</property>
+	      <property name="items" translatable="yes"> </property>
+	      <property name="add_tearoffs">False</property>
+	      <property name="focus_on_click">True</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">4</property>
+	      <property name="bottom_attach">5</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options">fill</property>
+	    </packing>
+	  </child>
+
+	  <child>
 	    <widget class="GtkComboBox" id="eap_peap_version_combo">
 	      <property name="visible">True</property>
 	      <property name="items" translatable="yes">Automatic
@@ -2977,6 +3021,28 @@ Version 1</property>
 	    <packing>
 	      <property name="left_attach">1</property>
 	      <property name="right_attach">2</property>
+	      <property name="top_attach">3</property>
+	      <property name="bottom_attach">4</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options">fill</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkCheckButton" id="eap_peap_ca_cert_system">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label" translatable="yes">Use System CA Certificates</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="active">False</property>
+	      <property name="inconsistent">False</property>
+	      <property name="draw_indicator">True</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
 	      <property name="top_attach">2</property>
 	      <property name="bottom_attach">3</property>
 	      <property name="x_options">fill</property>
diff --git a/src/wireless-security/eap-method-peap.c b/src/wireless-security/eap-method-peap.c
index 8d82fee..d2e849e 100644
--- a/src/wireless-security/eap-method-peap.c
+++ b/src/wireless-security/eap-method-peap.c
@@ -141,6 +141,11 @@ fill_connection (EAPMethod *parent, NMConnection *connection)
 		g_object_set_data (G_OBJECT (connection), NMA_PATH_CA_CERT_TAG, NULL);
 	}
 
+	widget = glade_xml_get_widget (parent->xml, "eap_peap_ca_cert_system");
+	g_object_set (G_OBJECT (s_8021x), NM_SETTING_802_1X_SYSTEM_CA_CERTS,
+		      gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)),
+		      NULL);
+
 	if (eap_method_get_ignore_ca_cert (parent))
 		g_object_set_data (G_OBJECT (connection), NMA_CA_CERT_IGNORE_TAG, GUINT_TO_POINTER (TRUE));
 	else
@@ -169,6 +174,7 @@ fill_connection (EAPMethod *parent, NMConnection *connection)
 	eap_method_fill_connection (eap, connection);
 	eap_method_unref (eap);
 }
+
 static void
 inner_auth_combo_changed_cb (GtkWidget *combo, gpointer user_data)
 {
@@ -255,6 +261,12 @@ inner_auth_combo_init (EAPMethodPEAP *method,
 	return combo;
 }
 
+static void
+ca_cert_system_toggled (GtkToggleButton *togglebutton, gpointer user_data)
+{
+  gtk_widget_set_sensitive (GTK_WIDGET (user_data), !gtk_toggle_button_get_active (togglebutton));
+}
+
 EAPMethodPEAP *
 eap_method_peap_new (const char *glade_file,
                      WirelessSecurity *parent,
@@ -262,6 +274,7 @@ eap_method_peap_new (const char *glade_file,
 {
 	EAPMethodPEAP *method;
 	GtkWidget *widget;
+	GtkWidget *ca_button;
 	GladeXML *xml;
 	GtkFileFilter *filter;
 	NMSetting8021x *s_8021x = NULL;
@@ -305,6 +318,7 @@ eap_method_peap_new (const char *glade_file,
 		s_8021x = NM_SETTING_802_1X (nm_connection_get_setting (connection, NM_TYPE_SETTING_802_1X));
 
 	widget = glade_xml_get_widget (xml, "eap_peap_ca_cert_button");
+	ca_button = widget;
 	g_assert (widget);
 	gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (widget), TRUE);
 	gtk_file_chooser_button_set_title (GTK_FILE_CHOOSER_BUTTON (widget),
@@ -320,6 +334,18 @@ eap_method_peap_new (const char *glade_file,
 			gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (widget), filename);
 	}
 
+	widget = glade_xml_get_widget (xml, "eap_peap_ca_cert_system");
+	g_signal_connect (widget, "toggled",
+			  G_CALLBACK (ca_cert_system_toggled),
+			  ca_button);
+	if (s_8021x) {
+	  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), nm_setting_802_1x_get_system_ca_certs (s_8021x));
+	  gtk_widget_set_sensitive (GTK_WIDGET (ca_button), !nm_setting_802_1x_get_system_ca_certs (s_8021x));
+	}
+	g_signal_connect (G_OBJECT (widget), "toggled",
+			  (GCallback) wireless_security_changed_cb,
+			  parent);
+
 	widget = inner_auth_combo_init (method, glade_file, connection);
 	inner_auth_combo_changed_cb (widget, (gpointer) method);
 
diff --git a/src/wireless-security/eap-method-tls.c b/src/wireless-security/eap-method-tls.c
index 7d78d07..7f65401 100644
--- a/src/wireless-security/eap-method-tls.c
+++ b/src/wireless-security/eap-method-tls.c
@@ -220,6 +220,11 @@ fill_connection (EAPMethod *parent, NMConnection *connection)
 		                   NULL);
 	}
 
+	widget = glade_xml_get_widget (parent->xml, "eap_tls_ca_cert_system");
+	g_object_set (G_OBJECT (s_8021x), NM_SETTING_802_1X_SYSTEM_CA_CERTS,
+			    gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)),
+			    NULL);
+
 	if (eap_method_get_ignore_ca_cert (parent)) {
 		g_object_set_data (G_OBJECT (connection),
 		                   method->phase2 ? NMA_PHASE2_CA_CERT_IGNORE_TAG : NMA_CA_CERT_IGNORE_TAG,
@@ -334,6 +339,12 @@ setup_filepicker (GladeXML *xml,
 		g_signal_connect (G_OBJECT (widget), "notify::filter", (GCallback) reset_filter, filter);
 }
 
+static void
+ca_cert_system_toggled (GtkToggleButton *togglebutton, gpointer user_data)
+{
+	gtk_widget_set_sensitive (GTK_WIDGET (user_data), !gtk_toggle_button_get_active (togglebutton));
+}
+
 EAPMethodTLS *
 eap_method_tls_new (const char *glade_file,
                     WirelessSecurity *parent,
@@ -342,6 +353,7 @@ eap_method_tls_new (const char *glade_file,
 {
 	EAPMethodTLS *method;
 	GtkWidget *widget;
+	GtkWidget *ca_button;
 	GladeXML *xml;
 	NMSetting8021x *s_8021x = NULL;
 
@@ -423,6 +435,19 @@ eap_method_tls_new (const char *glade_file,
 	                  parent, method, connection,
 	                  phase2 ? NMA_PATH_PHASE2_PRIVATE_KEY_TAG : NMA_PATH_PRIVATE_KEY_TAG);
 
+	ca_button = glade_xml_get_widget (xml, "eap_tls_ca_cert_button");
+	widget = glade_xml_get_widget (xml, "eap_tls_ca_cert_system");
+	g_signal_connect (widget, "toggled",
+				   G_CALLBACK (ca_cert_system_toggled),
+				   ca_button);
+	if (s_8021x) {
+		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), nm_setting_802_1x_get_system_ca_certs (s_8021x));
+		gtk_widget_set_sensitive (GTK_WIDGET (ca_button), !nm_setting_802_1x_get_system_ca_certs (s_8021x));
+	}
+	g_signal_connect (G_OBJECT (widget), "toggled",
+				   (GCallback) wireless_security_changed_cb,
+				   parent);
+
 	widget = glade_xml_get_widget (xml, "show_checkbutton");
 	g_assert (widget);
 	g_signal_connect (G_OBJECT (widget), "toggled",
diff --git a/src/wireless-security/eap-method-ttls.c b/src/wireless-security/eap-method-ttls.c
index b455fc8..28ef723 100644
--- a/src/wireless-security/eap-method-ttls.c
+++ b/src/wireless-security/eap-method-ttls.c
@@ -136,6 +136,11 @@ fill_connection (EAPMethod *parent, NMConnection *connection)
 		g_object_set_data (G_OBJECT (connection), NMA_PATH_CA_CERT_TAG, NULL);
 	}
 
+	widget = glade_xml_get_widget (parent->xml, "eap_ttls_ca_cert_system");
+	g_object_set (G_OBJECT (s_8021x), NM_SETTING_802_1X_SYSTEM_CA_CERTS,
+		      gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)),
+		      NULL);
+
 	if (eap_method_get_ignore_ca_cert (parent))
 		g_object_set_data (G_OBJECT (connection), NMA_CA_CERT_IGNORE_TAG, GUINT_TO_POINTER (TRUE));
 	else
@@ -287,6 +292,12 @@ inner_auth_combo_init (EAPMethodTTLS *method,
 	return combo;
 }
 
+static void
+ca_cert_system_toggled (GtkToggleButton *togglebutton, gpointer user_data)
+{
+  gtk_widget_set_sensitive (GTK_WIDGET (user_data), !gtk_toggle_button_get_active (togglebutton));
+}
+
 EAPMethodTTLS *
 eap_method_ttls_new (const char *glade_file,
                      WirelessSecurity *parent,
@@ -294,6 +305,7 @@ eap_method_ttls_new (const char *glade_file,
 {
 	EAPMethodTTLS *method;
 	GtkWidget *widget;
+	GtkWidget *ca_button;
 	GladeXML *xml;
 	GtkFileFilter *filter;
 	NMSetting8021x *s_8021x = NULL;
@@ -337,6 +349,7 @@ eap_method_ttls_new (const char *glade_file,
 		s_8021x = NM_SETTING_802_1X (nm_connection_get_setting (connection, NM_TYPE_SETTING_802_1X));
 
 	widget = glade_xml_get_widget (xml, "eap_ttls_ca_cert_button");
+	ca_button = widget;
 	g_assert (widget);
 	gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (widget), TRUE);
 	gtk_file_chooser_button_set_title (GTK_FILE_CHOOSER_BUTTON (widget),
@@ -352,6 +365,18 @@ eap_method_ttls_new (const char *glade_file,
 			gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (widget), filename);
 	}
 
+	widget = glade_xml_get_widget (xml, "eap_ttls_ca_cert_system");
+	g_signal_connect (widget, "toggled",
+			  G_CALLBACK (ca_cert_system_toggled),
+			  ca_button);
+	if (s_8021x) {
+	  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), nm_setting_802_1x_get_system_ca_certs (s_8021x));
+	  gtk_widget_set_sensitive (GTK_WIDGET (ca_button), !nm_setting_802_1x_get_system_ca_certs (s_8021x));
+	}
+	g_signal_connect (G_OBJECT (widget), "toggled",
+			  (GCallback) wireless_security_changed_cb,
+			  parent);
+
 	widget = glade_xml_get_widget (xml, "eap_ttls_anon_identity_entry");
 	if (s_8021x && nm_setting_802_1x_get_anonymous_identity (s_8021x))
 		gtk_entry_set_text (GTK_ENTRY (widget), nm_setting_802_1x_get_anonymous_identity (s_8021x));
-- 
1.6.0.2

