From: Defunct Date: Sat, 29 Apr 2017 19:02:36 +0000 (+0000) Subject: nm: IKE/ESP proposal customization support X-Git-Tag: 5.5.3dr2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8e1b986c10790cb3f372b73dee95a65efd3c1f9f;p=thirdparty%2Fstrongswan.git nm: IKE/ESP proposal customization support Closes strongswan/strongswan#70. --- diff --git a/src/frontends/gnome/properties/nm-strongswan-dialog.ui b/src/frontends/gnome/properties/nm-strongswan-dialog.ui index 278fd006b8..e1af547210 100644 --- a/src/frontends/gnome/properties/nm-strongswan-dialog.ui +++ b/src/frontends/gnome/properties/nm-strongswan-dialog.ui @@ -426,5 +426,150 @@ 2 + + + True + False + 6 + + + True + False + 0 + <b>Cipher proposals</b> + True + + + False + False + 0 + + + + + True + False + 12 + + + True + False + + + _Enable custom proposals + True + True + False + True + True + + + True + True + 0 + + + + + True + False + 2 + 2 + 6 + 6 + + + True + False + 0 + 1 + _IKE: + True + ike-entry + + + GTK_FILL + + + + + + True + True + True + A list of proposals for IKE seperated by ";". (A suffix of ! enforces strict mode) + • + True + False + False + True + True + + + 1 + 2 + + + + + + True + False + 0 + _ESP: + True + address-entry + + + 1 + 2 + GTK_FILL + + + + + + True + True + True + A list of proposals for ESP seperated by ";". (A suffix of ! enforces strict mode) + • + True + False + False + True + True + + + 1 + 2 + 1 + 2 + + + + + + True + True + 1 + + + + + + + True + True + 1 + + + + + False + False + 3 + + diff --git a/src/frontends/gnome/properties/nm-strongswan.c b/src/frontends/gnome/properties/nm-strongswan.c index b791068266..8deaa8468a 100644 --- a/src/frontends/gnome/properties/nm-strongswan.c +++ b/src/frontends/gnome/properties/nm-strongswan.c @@ -228,6 +228,15 @@ show_toggled_cb (GtkCheckButton *button, StrongswanPluginUiWidget *self) gtk_entry_set_visibility (GTK_ENTRY (widget), visible); } +static void +toggle_proposal_cb(GtkCheckButton *button, StrongswanPluginUiWidget *self) +{ + StrongswanPluginUiWidgetPrivate *priv = STRONGSWAN_PLUGIN_UI_WIDGET_GET_PRIVATE (self); + gboolean visible = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)); + gtk_widget_set_sensitive(GTK_WIDGET(gtk_builder_get_object(priv->builder, "ike-entry")), visible); + gtk_widget_set_sensitive(GTK_WIDGET(gtk_builder_get_object(priv->builder, "esp-entry")), visible); +} + static void password_storage_changed_cb (GObject *entry, GParamSpec *pspec, gpointer user_data) { @@ -372,6 +381,34 @@ init_plugin_ui (StrongswanPluginUiWidget *self, NMConnection *connection, GError } g_signal_connect (G_OBJECT (widget), "toggled", G_CALLBACK (settings_changed_cb), self); + widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "proposal-check")); + value = nm_setting_vpn_get_data_item(settings, "proposal"); + if (value && strcmp(value, "yes") == 0) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE); + else + toggle_proposal_cb(GTK_CHECK_BUTTON(widget), self); + g_signal_connect (G_OBJECT (widget), "toggled", G_CALLBACK (toggle_proposal_cb), self); + + widget = GTK_WIDGET(gtk_builder_get_object(priv->builder, "ike-entry")); + value = nm_setting_vpn_get_data_item(settings, "ike"); + if (value) + { + value = g_strdelimit (g_strdup (value), ";", ','); + gtk_entry_set_text (GTK_ENTRY (widget), value); + g_free ((char*)value); + } + g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK (settings_changed_cb), self); + + widget = GTK_WIDGET(gtk_builder_get_object(priv->builder, "esp-entry")); + value = nm_setting_vpn_get_data_item(settings, "esp"); + if (value) + { + value = g_strdelimit (g_strdup (value), ";", ','); + gtk_entry_set_text (GTK_ENTRY (widget), value); + g_free ((char*)value); + } + g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK (settings_changed_cb), self); + return TRUE; } @@ -507,6 +544,26 @@ update_connection (NMVpnEditor *iface, active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); nm_setting_vpn_add_data_item (settings, "ipcomp", active ? "yes" : "no"); + widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "proposal-check")); + active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); + nm_setting_vpn_add_data_item (settings, "proposal", active ? "yes" : "no"); + + widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "ike-entry")); + str = (char *) gtk_entry_get_text (GTK_ENTRY (widget)); + if (str && strlen (str)) { + str = g_strdelimit (g_strdup (str), ",", ';'); + nm_setting_vpn_add_data_item (settings, "ike", str); + g_free (str); + } + + widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "esp-entry")); + str = (char *) gtk_entry_get_text (GTK_ENTRY (widget)); + if (str && strlen (str)) { + str = g_strdelimit (g_strdup (str), ",", ';'); + nm_setting_vpn_add_data_item (settings, "esp", str); + g_free (str); + } + nm_connection_add_setting (connection, NM_SETTING (settings)); return TRUE; }