For your consideration.

Adds the option "Disable DTLS and ESP" to the UI.
Default is unchecked, DTLS is left enabled.
diff -ur NetworkManager-openconnect-1.2.6.orig/auth-dialog/main.c NetworkManager-openconnect-1.2.6/auth-dialog/main.c
--- NetworkManager-openconnect-1.2.6.orig/auth-dialog/main.c	2020-04-06 07:02:44.000000000 +0200
+++ NetworkManager-openconnect-1.2.6/auth-dialog/main.c	2021-01-14 12:55:03.641645629 +0100
@@ -814,11 +814,11 @@
 	gtk_box_pack_start(GTK_BOX(hbox), cancel_button, FALSE, FALSE, 0);
 	g_signal_connect(cancel_button, "clicked", G_CALLBACK(cert_dialog_cancel_clicked), dlg);
 	gtk_widget_show(cancel_button);
-	
+
 	prevent_invalid_cert = g_hash_table_lookup(ui_data->options,
 							NM_OPENCONNECT_KEY_PREVENT_INVALID_CERT);									
 	invalid_cert_allowed = prevent_invalid_cert ? !strcmp(prevent_invalid_cert, "no") : TRUE;
-	
+
 	if (invalid_cert_allowed) {
 		security_expander = gtk_expander_new(_("I really know what I am doing"));
 		gtk_box_pack_start(GTK_BOX(vbox), security_expander, FALSE, FALSE, 0);
@@ -1034,6 +1034,8 @@
 	char *token_mode;
 	char *token_secret;
 	char *protocol;
+	char *disable_dtls;
+	gboolean disable_dtls_allowed;
 
 	hostname = g_hash_table_lookup (options, NM_OPENCONNECT_KEY_GATEWAY);
 	if (!hostname) {
@@ -1095,7 +1097,7 @@
 						   NM_OPENCONNECT_KEY_CSD_WRAPPER);
 		if (csd_wrapper && !csd_wrapper[0])
 			csd_wrapper = NULL;
-
+		
 		openconnect_setup_csd(vpninfo, getuid(), 1, OC3DUP (csd_wrapper));
 	}
 
@@ -1122,6 +1124,9 @@
 	if (pem_passphrase_fsid && cert && !strcmp(pem_passphrase_fsid, "yes"))
 		openconnect_passphrase_from_fsid(vpninfo);
 
+       disable_dtls = g_hash_table_lookup(ui_data->options, NM_OPENCONNECT_KEY_DISABLE_DTLS);
+	disable_dtls_allowed = disable_dtls ? !strcmp(disable_dtls, "yes") : TRUE;
+
 	token_mode = g_hash_table_lookup (options, NM_OPENCONNECT_KEY_TOKEN_MODE);
 	token_secret = g_hash_table_lookup (secrets, NM_OPENCONNECT_KEY_TOKEN_SECRET);
 	if (!token_secret || !token_secret[0])
diff -ur NetworkManager-openconnect-1.2.6.orig/properties/nm-openconnect-dialog.ui NetworkManager-openconnect-1.2.6/properties/nm-openconnect-dialog.ui
--- NetworkManager-openconnect-1.2.6.orig/properties/nm-openconnect-dialog.ui	2020-04-06 07:02:44.000000000 +0200
+++ NetworkManager-openconnect-1.2.6/properties/nm-openconnect-dialog.ui	2021-01-14 12:54:55.486616165 +0100
@@ -712,6 +712,25 @@
                 <property name="fill">False</property>
               </packing>
             </child>
+            <child>
+              <object class="GtkCheckButton" id="disable_dtls_button">
+                <property name="border_width">2</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="label" translatable="yes">Disable DTLS and ESP</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>
+              </object>
+              <packing>
+                <property name="padding">0</property>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+              </packing>
+            </child>
           </object>
           <packing>
             <property name="padding">0</property>
diff -ur NetworkManager-openconnect-1.2.6.orig/properties/nm-openconnect-editor.c NetworkManager-openconnect-1.2.6/properties/nm-openconnect-editor.c
--- NetworkManager-openconnect-1.2.6.orig/properties/nm-openconnect-editor.c	2020-04-06 07:02:44.000000000 +0200
+++ NetworkManager-openconnect-1.2.6/properties/nm-openconnect-editor.c	2021-01-14 12:54:55.486616165 +0100
@@ -353,6 +353,17 @@
 	}
 	g_signal_connect (G_OBJECT (widget), "toggled", G_CALLBACK (stuff_changed_cb), self);
 
+        widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "disable_dtls_button"));
+        if (!widget)
+                return FALSE;
+        if (s_vpn) {
+                value = nm_setting_vpn_get_data_item (s_vpn, NM_OPENCONNECT_KEY_DISABLE_DTLS);
+                if (value && !strcmp(value, "yes"))
+                        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (widget), TRUE);
+        }
+        g_signal_connect (G_OBJECT (widget), "toggled", G_CALLBACK (stuff_changed_cb), self);
+
+
 	widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "csd_button"));
 	if (!widget)
 		return FALSE;
@@ -457,6 +468,10 @@
 	str = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget))?"yes":"no";
 	nm_setting_vpn_add_data_item (s_vpn, NM_OPENCONNECT_KEY_PREVENT_INVALID_CERT, str);
 
+	widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "disable_dtls_button"));
+	str = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget))?"yes":"no";
+	nm_setting_vpn_add_data_item (s_vpn, NM_OPENCONNECT_KEY_DISABLE_DTLS, str);
+
 	widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "csd_button"));
 	str = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget))?"yes":"no";
 	nm_setting_vpn_add_data_item (s_vpn, NM_OPENCONNECT_KEY_CSD_ENABLE, str);
diff -ur NetworkManager-openconnect-1.2.6.orig/properties/nm-openconnect-editor-plugin.c NetworkManager-openconnect-1.2.6/properties/nm-openconnect-editor-plugin.c
--- NetworkManager-openconnect-1.2.6.orig/properties/nm-openconnect-editor-plugin.c	2020-04-06 07:02:44.000000000 +0200
+++ NetworkManager-openconnect-1.2.6/properties/nm-openconnect-editor-plugin.c	2021-01-14 12:54:55.487616169 +0100
@@ -264,6 +264,11 @@
 	if (true)
 		nm_setting_vpn_add_data_item (s_vpn, NM_OPENCONNECT_KEY_PREVENT_INVALID_CERT, "yes");
 
+	/* No dtls post */
+	bval = g_key_file_get_boolean (keyfile, "openconnect", "DisableDTLS", NULL);
+	if (true)
+		nm_setting_vpn_add_data_item (s_vpn, NM_OPENCONNECT_KEY_DISABLE_DTLS, "yes");
+
 	/* Soft token mode */
 	buf = g_key_file_get_string (keyfile, "openconnect", "StokenSource", NULL);
 	if (buf)
@@ -297,6 +302,7 @@
 	const char *privkey = NULL;
 	gboolean pem_passphrase_fsid = FALSE;
 	gboolean prevent_invalid_cert = FALSE;
+	gboolean disable_dtls = FALSE;
 	const char *token_mode = NULL;
 	const char *token_secret = NULL;
 	gboolean success = FALSE;
@@ -366,6 +372,10 @@
 	if (value && !strcmp (value, "yes"))
 		prevent_invalid_cert = TRUE;
 
+	value = nm_setting_vpn_get_data_item (s_vpn, NM_OPENCONNECT_KEY_DISABLE_DTLS);
+	if (value && !strcmp (value, "yes"))
+		disable_dtls = TRUE;
+
 	value = nm_setting_vpn_get_data_item (s_vpn, NM_OPENCONNECT_KEY_TOKEN_MODE);
 	if (value && strlen (value))
 		token_mode = value;
@@ -393,6 +403,7 @@
 		 "PrivateKey=%s\n"
 		 "FSID=%s\n"
 		 "PreventInvalidCert=%s\n"
+		 "DisableDTLS=%s\n"
 		 "StokenSource=%s\n"
 		 "StokenString=%s\n",
 		 /* Description */           nm_setting_connection_get_id (s_con),
@@ -407,6 +418,7 @@
 		 /* Private Key */           privkey ? privkey : "",
 		 /* FSID */                  pem_passphrase_fsid ? "1" : "0",
 		 /* Prevent invalid cert */  prevent_invalid_cert ? "1" : "0",
+		 /* NO DTLS Post */           disable_dtls ? "1" : "0",
 		 /* Soft token mode */       token_mode ? token_mode : "",
 		 /* Soft token secret */     token_secret ? token_secret : "");
 
diff -ur NetworkManager-openconnect-1.2.6.orig/shared/nm-service-defines.h NetworkManager-openconnect-1.2.6/shared/nm-service-defines.h
--- NetworkManager-openconnect-1.2.6.orig/shared/nm-service-defines.h	2020-04-06 07:02:44.000000000 +0200
+++ NetworkManager-openconnect-1.2.6/shared/nm-service-defines.h	2021-01-14 12:54:55.487616169 +0100
@@ -42,6 +42,7 @@
 #define NM_OPENCONNECT_KEY_MTU "mtu"
 #define NM_OPENCONNECT_KEY_PEM_PASSPHRASE_FSID "pem_passphrase_fsid"
 #define NM_OPENCONNECT_KEY_PREVENT_INVALID_CERT "prevent_invalid_cert"
+#define NM_OPENCONNECT_KEY_DISABLE_DTLS "disable_dtls"
 #define NM_OPENCONNECT_KEY_PROTOCOL "protocol"
 #define NM_OPENCONNECT_KEY_PROXY "proxy"
 #define NM_OPENCONNECT_KEY_CSD_ENABLE "enable_csd_trojan"
diff -ur NetworkManager-openconnect-1.2.6.orig/src/nm-openconnect-service.c NetworkManager-openconnect-1.2.6/src/nm-openconnect-service.c
--- NetworkManager-openconnect-1.2.6.orig/src/nm-openconnect-service.c	2020-04-06 07:02:44.000000000 +0200
+++ NetworkManager-openconnect-1.2.6/src/nm-openconnect-service.c	2021-01-14 12:54:55.487616169 +0100
@@ -88,6 +88,7 @@
 	{ NM_OPENCONNECT_KEY_MTU,         G_TYPE_STRING, 0, 0 },
 	{ NM_OPENCONNECT_KEY_PEM_PASSPHRASE_FSID, G_TYPE_BOOLEAN, 0, 0 },
 	{ NM_OPENCONNECT_KEY_PREVENT_INVALID_CERT, G_TYPE_BOOLEAN, 0, 0 },
+	{ NM_OPENCONNECT_KEY_DISABLE_DTLS, G_TYPE_BOOLEAN, 0, 0 },
 	{ NM_OPENCONNECT_KEY_PROTOCOL,    G_TYPE_STRING, 0, 0 },
 	{ NM_OPENCONNECT_KEY_PROXY,       G_TYPE_STRING, 0, 0 },
 	{ NM_OPENCONNECT_KEY_CSD_ENABLE,  G_TYPE_BOOLEAN, 0, 0 },
@@ -396,6 +397,7 @@
 	char csd_user_arg[60];
 	const char *props_vpn_gw, *props_cookie, *props_cacert, *props_mtu, *props_gwcert, *props_proxy;
 	const char *props_csd_enable, *props_csd_wrapper;
+	const char *props_disable_dtls_disable;
 	const char *protocol;
 
 	/* Find openconnect */
@@ -487,6 +489,11 @@
 		g_ptr_array_add (openconnect_argv, (gpointer) priv->tun_name);
 	}
 
+        props_disable_dtls_disable = nm_setting_vpn_get_data_item (s_vpn, NM_OPENCONNECT_KEY_DISABLE_DTLS);
+	if (props_disable_dtls_disable && !strcmp (props_disable_dtls_disable, "yes")) {
+			g_ptr_array_add (openconnect_argv, (gpointer) "--no-dtls");
+	}
+
 	props_csd_enable = nm_setting_vpn_get_data_item (s_vpn, NM_OPENCONNECT_KEY_CSD_ENABLE);
 	props_csd_wrapper = nm_setting_vpn_get_data_item (s_vpn, NM_OPENCONNECT_KEY_CSD_WRAPPER);
 	if (props_csd_enable && !strcmp (props_csd_enable, "yes") && props_csd_wrapper) {
_______________________________________________
openconnect-devel mailing list
openconnect-devel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/openconnect-devel

Reply via email to