Package: network-manager-vpnc
Version: 0.9.8.6-1

For firewall rules, it would be nice if the VPN interface could be
configured to have a predictable name instead of generic "tun0".

It turns out vpnc already supports this, we just need to expose the
option in NetworkManager.
diff -urN a/properties/nm-vpnc.c b/properties/nm-vpnc.c
--- a/properties/nm-vpnc.c      2013-09-13 12:01:23.000000000 -0400
+++ b/properties/nm-vpnc.c      2014-02-04 18:21:47.714491746 -0500
@@ -702,6 +702,16 @@
        }
        g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK 
(spinbutton_changed_cb), self);
 
+       widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, 
"interface_name_entry"));
+       g_return_val_if_fail (widget != NULL, FALSE);
+       gtk_size_group_add_widget (priv->group, GTK_WIDGET (widget));
+       if (s_vpn) {
+               value = nm_setting_vpn_get_data_item (s_vpn, 
NM_VPNC_KEY_INTERFACE_NAME);
+               if (value && strlen (value))
+                       gtk_entry_set_text (GTK_ENTRY (widget), value);
+       }
+       g_signal_connect (G_OBJECT (widget), "changed", G_CALLBACK 
(stuff_changed_cb), self);
+
        widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, 
"disable_dpd_checkbutton"));
        g_return_val_if_fail (widget != NULL, FALSE);
        if (s_vpn) {
@@ -992,6 +1002,11 @@
        port = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widget));
        nm_setting_vpn_add_data_item (s_vpn, NM_VPNC_KEY_LOCAL_PORT, 
g_strdup_printf ("%d", port));
 
+       widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, 
"interface_name_entry"));
+       str = (char *) gtk_entry_get_text (GTK_ENTRY (widget));
+       if (str && strlen (str))
+               nm_setting_vpn_add_data_item (s_vpn, 
NM_VPNC_KEY_INTERFACE_NAME, str);
+
        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");
@@ -1540,6 +1555,12 @@
                g_free (tmp);
        }
 
+       buf = key_file_get_string_helper (keyfile, "main", "InterfaceName", 
NULL);
+       if (buf) {
+               nm_setting_vpn_add_data_item (s_vpn, 
NM_VPNC_KEY_INTERFACE_NAME, buf);
+               g_free (buf);
+       }
+
        g_key_file_free (keyfile);
        return connection;
 
@@ -1572,6 +1593,7 @@
        const char *group_pw = NULL;
        GString *routes = NULL;
        GString *uselegacyikeport = NULL;
+       const char *interfacename = NULL;
        gboolean success = FALSE;
        guint32 routes_count = 0;
        gboolean save_password = FALSE;
@@ -1697,6 +1719,10 @@
        if (!value || !strcmp (value, "0"))
                g_string_assign (uselegacyikeport, "UseLegacyIKEPort=0\n");
 
+       value = nm_setting_vpn_get_data_item (s_vpn, 
NM_VPNC_KEY_INTERFACE_NAME);
+       if (value && strlen (value))
+               interfacename = value;
+
        fprintf (f, 
                 "[main]\n"
                 "Description=%s\n"
@@ -1736,6 +1762,7 @@
                 "SingleDES=%s\n"
                 "SPPhonebook=\n"
                 "%s"
+                 "InterfaceName=%s\n"
                 "X-NM-Use-NAT-T=%s\n"
                 "X-NM-Force-NAT-T=%s\n"
                 "X-NM-SaveGroupPassword=%s\n"
@@ -1752,6 +1779,7 @@
                 /* PeerTimeout */   peertimeout != NULL ? peertimeout : "0",
                 /* SingleDES */     singledes ? "1" : "0",
                 /* UseLegacyIKEPort */ (uselegacyikeport->len) ? 
uselegacyikeport->str : "",
+                /* InterfaceName */ interfacename != NULL ? interfacename : "",
                 /* X-NM-Use-NAT-T */ use_natt ? "1" : "0",
                 /* X-NM-Force-NAT-T */ use_force_natt ? "1" : "0",
                 /* X-NM-SaveGroupPassword */ save_group_password ? "1" : "0",
diff -urN a/properties/nm-vpnc-dialog.ui b/properties/nm-vpnc-dialog.ui
--- a/properties/nm-vpnc-dialog.ui      2013-02-18 18:08:36.000000000 -0500
+++ b/properties/nm-vpnc-dialog.ui      2014-02-04 18:16:39.050497185 -0500
@@ -477,6 +477,36 @@
                       </packing>
                     </child>
                     <child>
+                      <object class="GtkLabel" id="interface_name_label">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">Interface 
name:</property>
+                        <property name="use_underline">True</property>
+                        <property 
name="mnemonic_widget">interface_name_entry</property>
+                      </object>
+                      <packing>
+                        <property name="top_attach">5</property>
+                        <property name="bottom_attach">6</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkEntry" id="interface_name_entry">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="invisible_char">•</property>
+                        <property name="invisible_char_set">True</property>
+                        <property name="tooltip_text" 
translatable="yes">Visible name of the TUN/TAP interface
+config: Interface name &lt;ASCII string&gt;</property>
+                      </object>
+                      <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>
+                      </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>
diff -urN a/src/nm-vpnc-service.c b/src/nm-vpnc-service.c
--- a/src/nm-vpnc-service.c     2013-09-13 12:07:19.000000000 -0400
+++ b/src/nm-vpnc-service.c     2014-02-04 18:17:40.494496102 -0500
@@ -97,6 +97,7 @@
        { NM_VPNC_KEY_NAT_TRAVERSAL_MODE,    ITEM_TYPE_STRING, 0, 0 },
        { NM_VPNC_KEY_CISCO_UDP_ENCAPS_PORT, ITEM_TYPE_INT, 0, 65535 },
        { NM_VPNC_KEY_LOCAL_PORT,            ITEM_TYPE_INT, 0, 65535 },
+       { NM_VPNC_KEY_INTERFACE_NAME,        ITEM_TYPE_STRING, 0, 0 },
        /* Hybrid Auth */
        { NM_VPNC_KEY_AUTHMODE,              ITEM_TYPE_STRING, 0, 0 },
        { NM_VPNC_KEY_CA_FILE,               ITEM_TYPE_PATH, 0, 0 },
diff -urN a/src/nm-vpnc-service.h b/src/nm-vpnc-service.h
--- a/src/nm-vpnc-service.h     2013-02-18 18:08:36.000000000 -0500
+++ b/src/nm-vpnc-service.h     2014-02-04 18:17:23.902496395 -0500
@@ -55,6 +55,7 @@
 #define NM_VPNC_KEY_DPD_IDLE_TIMEOUT "DPD idle timeout (our side)"
 #define NM_VPNC_KEY_CISCO_UDP_ENCAPS_PORT "Cisco UDP Encapsulation Port"
 #define NM_VPNC_KEY_LOCAL_PORT "Local Port"
+#define NM_VPNC_KEY_INTERFACE_NAME "Interface name"
 #define NM_VPNC_KEY_AUTHMODE "IKE Authmode"
 #define NM_VPNC_KEY_CA_FILE "CA-File"
 

Reply via email to