[network-manager-vpnc] ui: add 'Vendor' and 'Perfect Forward Secrecy' options to GUI (bgo #666932)



commit 14733a43a15bba3861f585872986cff4c5136bee
Author: JiÅÃ KlimeÅ <jklimes redhat com>
Date:   Mon Feb 27 09:48:23 2012 +0100

    ui: add 'Vendor' and 'Perfect Forward Secrecy' options to GUI (bgo #666932)

 properties/nm-vpnc-dialog.ui |   90 ++++++++++++++++++++++++++++++++++++-
 properties/nm-vpnc.c         |  101 +++++++++++++++++++++++++++++++++++++++++-
 src/nm-vpnc-service.h        |   11 ++++-
 3 files changed, 198 insertions(+), 4 deletions(-)
---
diff --git a/properties/nm-vpnc-dialog.ui b/properties/nm-vpnc-dialog.ui
index e29bc66..e321849 100644
--- a/properties/nm-vpnc-dialog.ui
+++ b/properties/nm-vpnc-dialog.ui
@@ -61,6 +61,28 @@
       </row>
     </data>
   </object>
+  <object class="GtkListStore" id="model6">
+    <columns>
+      <!-- column-name gchararray -->
+      <column type="gchararray"/>
+    </columns>
+    <data>
+      <row>
+        <col id="0"> </col>
+      </row>
+    </data>
+  </object>
+  <object class="GtkListStore" id="model7">
+    <columns>
+      <!-- column-name gchararray -->
+      <column type="gchararray"/>
+    </columns>
+    <data>
+      <row>
+        <col id="0"> </col>
+      </row>
+    </data>
+  </object>
   <object class="GtkDialog" id="vpnc-advanced-dialog">
     <property name="can_focus">False</property>
     <property name="border_width">5</property>
@@ -163,6 +185,38 @@
                         <property name="y_options"></property>
                       </packing>
                     </child>
+                    <child>
+                      <object class="GtkLabel" id="label28">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">Vendor:</property>
+                      </object>
+                      <packing>
+                        <property name="top_attach">2</property>
+                        <property name="bottom_attach">3</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkComboBox" id="vendor_combo">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="model">model6</property>
+                        <property name="tooltip_text" translatable="yes">Vendor of your IPsec gateway&#10;config: Vendor &lt;cisco/netscreen&gt;</property>
+                        <child>
+                          <object class="GtkCellRendererText" id="renderer6"/>
+                          <attributes>
+                            <attribute name="text">0</attribute>
+                          </attributes>
+                        </child>
+                      </object>
+                      <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>
+                      </packing>
+                    </child>
                   </object>
                 </child>
               </object>
@@ -304,6 +358,38 @@
                       </packing>
                     </child>
                     <child>
+                      <object class="GtkLabel" id="label6">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">Perfect Forward Secrecy:</property>
+                      </object>
+                      <packing>
+                        <property name="top_attach">3</property>
+                        <property name="bottom_attach">4</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkComboBox" id="pfsecrecy_combo">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="model">model7</property>
+                        <property name="tooltip_text" translatable="yes">Diffie-Hellman group to use for PFS&#10;config: Perfect Forward Secrecy &lt;nopfs/dh1/dh2/dh5/server&gt;</property>
+                        <child>
+                          <object class="GtkCellRendererText" id="renderer7"/>
+                          <attributes>
+                            <attribute name="text">0</attribute>
+                          </attributes>
+                        </child>
+                      </object>
+                      <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>
+                      </packing>
+                    </child>
+                    <child>
                       <object class="GtkCheckButton" id="disable_dpd_checkbutton">
                         <property name="label" translatable="yes">Disable Dead Peer Detection</property>
                         <property name="visible">True</property>
@@ -316,8 +402,8 @@
                       <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="top_attach">4</property>
+                        <property name="bottom_attach">5</property>
                       </packing>
                     </child>
                     <child>
diff --git a/properties/nm-vpnc.c b/properties/nm-vpnc.c
index 1fa5c70..98f8878 100644
--- a/properties/nm-vpnc.c
+++ b/properties/nm-vpnc.c
@@ -6,7 +6,7 @@
  *
  * Copyright (C) 2005 David Zeuthen, <davidz redhat com>
  * Copyright (C) 2005 - 2008 Dan Williams, <dcbw redhat com>
- * Copyright (C) 2005 - 2011 Red Hat, Inc.
+ * Copyright (C) 2005 - 2012 Red Hat, Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -454,6 +454,8 @@ init_plugin_ui (VpncPluginUiWidget *self,
 	int active = -1;
 	const char *natt_mode = NULL;
 	const char *ike_dh_group = NULL;
+	const char *vendor = NULL;
+	const char *pfs_group = NULL;
 	gboolean enabled = FALSE;
 	GtkFileFilter *filter;
 
@@ -559,6 +561,34 @@ init_plugin_ui (VpncPluginUiWidget *self,
 	}
 	g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK (stuff_changed_cb), self);
 
+	/* Vendor combo */
+	active = -1;
+	store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
+	if (s_vpn)
+		vendor = nm_setting_vpn_get_data_item (s_vpn, NM_VPNC_KEY_VENDOR);
+
+	gtk_list_store_append (store, &iter);
+	gtk_list_store_set (store, &iter, 0, _("Cisco (default)"), 1, NM_VPNC_VENDOR_CISCO, -1);
+	if ((active < 0) && vendor) {
+		if (!strcmp (vendor, NM_VPNC_VENDOR_CISCO))
+			active = 0;
+	}
+
+	gtk_list_store_append (store, &iter);
+	gtk_list_store_set (store, &iter, 0, _("Netscreen"), 1, NM_VPNC_VENDOR_NETSCREEN, -1);
+	if ((active < 0) && vendor) {
+		if (!strcmp (vendor, NM_VPNC_VENDOR_NETSCREEN))
+			active = 1;
+	}
+
+	widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "vendor_combo"));
+	g_return_val_if_fail (widget != NULL, FALSE);
+	gtk_size_group_add_widget (priv->group, GTK_WIDGET (widget));
+	gtk_combo_box_set_model (GTK_COMBO_BOX (widget), GTK_TREE_MODEL (store));
+	g_object_unref (store);
+	gtk_combo_box_set_active (GTK_COMBO_BOX (widget), active < 0 ? 0 : active);
+	g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK (stuff_changed_cb), self);
+
 	active = -1;
 	store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
 	if (s_vpn)
@@ -652,6 +682,55 @@ init_plugin_ui (VpncPluginUiWidget *self,
 	}
 	g_signal_connect (G_OBJECT (widget), "toggled", G_CALLBACK (stuff_changed_cb), self);
 
+	/* Perfect Forward Secrecy combo */
+	active = -1;
+	store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
+	if (s_vpn)
+		pfs_group = nm_setting_vpn_get_data_item (s_vpn, NM_VPNC_KEY_PERFECT_FORWARD);
+
+	gtk_list_store_append (store, &iter);
+	gtk_list_store_set (store, &iter, 0, _("Server (default)"), 1, NM_VPNC_PFS_SERVER, -1);
+	if ((active < 0) && pfs_group) {
+		if (!strcmp (pfs_group, NM_VPNC_PFS_SERVER))
+			active = 0;
+	}
+
+	gtk_list_store_append (store, &iter);
+	gtk_list_store_set (store, &iter, 0, _("None"), 1, NM_VPNC_PFS_NOPFS, -1);
+	if ((active < 0) && pfs_group) {
+		if (!strcmp (pfs_group, NM_VPNC_PFS_NOPFS))
+			active = 1;
+	}
+
+	gtk_list_store_append (store, &iter);
+	gtk_list_store_set (store, &iter, 0, _("DH Group 1"), 1, NM_VPNC_PFS_DH1, -1);
+	if ((active < 0) && pfs_group) {
+		if (!strcmp (pfs_group, NM_VPNC_PFS_DH1))
+			active = 2;
+	}
+
+	gtk_list_store_append (store, &iter);
+	gtk_list_store_set (store, &iter, 0, _("DH Group 2"), 1, NM_VPNC_PFS_DH2, -1);
+	if ((active < 0) && pfs_group) {
+		if (!strcmp (pfs_group, NM_VPNC_PFS_DH2))
+			active = 3;
+	}
+
+	gtk_list_store_append (store, &iter);
+	gtk_list_store_set (store, &iter, 0, _("DH Group 5"), 1, NM_VPNC_PFS_DH5, -1);
+	if ((active < 0) && pfs_group) {
+		if (!strcmp (pfs_group, NM_VPNC_PFS_DH5))
+			active = 4;
+	}
+
+	widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "pfsecrecy_combo"));
+	g_return_val_if_fail (widget != NULL, FALSE);
+	gtk_size_group_add_widget (priv->group, GTK_WIDGET (widget));
+	gtk_combo_box_set_model (GTK_COMBO_BOX (widget), GTK_TREE_MODEL (store));
+	g_object_unref (store);
+	gtk_combo_box_set_active (GTK_COMBO_BOX (widget), active < 0 ? 0 : active);
+	g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK (stuff_changed_cb), self);
+
 	widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "show_passwords_checkbutton"));
 	g_return_val_if_fail (widget != NULL, FALSE);
 	g_signal_connect (G_OBJECT (widget), "toggled",
@@ -810,6 +889,16 @@ update_connection (NMVpnPluginUiWidgetInterface *iface,
 	if (str && strlen (str))
 		nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_DOMAIN, str);
 
+	widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "vendor_combo"));
+	model = gtk_combo_box_get_model (GTK_COMBO_BOX (widget));
+	if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (widget), &iter)) {
+		const char *vendor = NULL;
+
+		gtk_tree_model_get (model, &iter, 1, &vendor, -1);
+		nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_VENDOR, vendor);
+	} else
+		nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_VENDOR, NM_VPNC_VENDOR_CISCO);
+
 	widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "encryption_combo"));
 	switch (gtk_combo_box_get_active (GTK_COMBO_BOX (widget))) {
 	case ENC_TYPE_WEAK:
@@ -843,6 +932,16 @@ update_connection (NMVpnPluginUiWidgetInterface *iface,
 	} else
 		nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_DHGROUP, NM_VPNC_DHGROUP_DH2);
 
+	widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "pfsecrecy_combo"));
+	model = gtk_combo_box_get_model (GTK_COMBO_BOX (widget));
+	if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (widget), &iter)) {
+		const char *pfs = NULL;
+
+		gtk_tree_model_get (model, &iter, 1, &pfs, -1);
+		nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_PERFECT_FORWARD, pfs);
+	} else
+		nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_PERFECT_FORWARD, NM_VPNC_PFS_SERVER);
+
 	widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "disable_dpd_checkbutton"));
 	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) {
 		nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_DPD_IDLE_TIMEOUT, "0");
diff --git a/src/nm-vpnc-service.h b/src/nm-vpnc-service.h
index cf9b6ea..a1d0088 100644
--- a/src/nm-vpnc-service.h
+++ b/src/nm-vpnc-service.h
@@ -15,7 +15,7 @@
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *
- * (C) Copyright 2005 - 2011 Red Hat, Inc.
+ * (C) Copyright 2005 - 2012 Red Hat, Inc.
  * (C) Copyright 2007 - 2008 Novell, Inc.
  */
 
@@ -71,6 +71,15 @@
 #define NM_VPNC_DHGROUP_DH2 "dh2"
 #define NM_VPNC_DHGROUP_DH5 "dh5"
 
+#define NM_VPNC_PFS_SERVER "server"
+#define NM_VPNC_PFS_NOPFS  "nopfs"
+#define NM_VPNC_PFS_DH1    "dh1"
+#define NM_VPNC_PFS_DH2    "dh2"
+#define NM_VPNC_PFS_DH5    "dh5"
+
+#define NM_VPNC_VENDOR_CISCO     "cisco"
+#define NM_VPNC_VENDOR_NETSCREEN "netscreen"
+
 typedef struct {
 	NMVPNPlugin parent;
 } NMVPNCPlugin;



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