[NetworkManager-openvpn/th/support-proto: 2/2] all: add support for "proto" flag
- From: Thomas Haller <thaller src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [NetworkManager-openvpn/th/support-proto: 2/2] all: add support for "proto" flag
- Date: Fri, 23 Oct 2020 13:59:32 +0000 (UTC)
commit 3901bcdfff516f1d0c1c5b5f3ee78b322bcc480a
Author: Thomas Haller <thaller redhat com>
Date: Fri Oct 23 15:31:26 2020 +0200
all: add support for "proto" flag
Previously, only "proto-tcp" was supported, which could be a boolean
(anything or "yes").
Obsolete the old flag, and add a "proto" key. If it is present,
"proto-tcp" is ignored.
The GUI still only has a boolean checkbox and cannot express all the
options. Editing a profile in the GUI always sets either "udp" or
"tcp-client".
properties/import-export.c | 21 ++++++++++++------
properties/nm-openvpn-editor.c | 14 ++++++++++--
shared/nm-service-defines.h | 1 +
shared/utils.h | 7 ++++--
src/nm-openvpn-service.c | 49 +++++++++++++++++++++---------------------
5 files changed, 57 insertions(+), 35 deletions(-)
---
diff --git a/properties/import-export.c b/properties/import-export.c
index a6478d9..29e1541 100644
--- a/properties/import-export.c
+++ b/properties/import-export.c
@@ -924,9 +924,16 @@ do_import (const char *path, const char *contents, gsize contents_len, GError **
line_error = g_strdup_printf (_("proto expects protocol type like “udp” or
“tcp”"));
goto handle_line_error;
}
- if (!NM_IN_STRSET (params[1], "udp", "udp4", "udp6")) {
- setting_vpn_add_data_item (s_vpn, NM_OPENVPN_KEY_PROTO_TCP, "yes");
- }
+ setting_vpn_add_data_item_or_remove (s_vpn,
+ NM_OPENVPN_KEY_PROTO,
+ NM_IN_STRSET (params[1], "udp")
+ ? NULL
+ : params[1]);
+ setting_vpn_add_data_item_or_remove (s_vpn,
+ NM_OPENVPN_KEY_PROTO_TCP,
+ NM_IN_STRSET (params[1],
NMOVPN_PROTCOL_TYPES_UDP)
+ ? NULL
+ : "yes");
continue;
}
@@ -2111,10 +2118,10 @@ do_export_create (NMConnection *connection, const char *path, GError **error)
args_write_line (f, NMV_OVPN_TAG_DEV_TYPE, device_type);
}
- args_write_line (f,
- NMV_OVPN_TAG_PROTO,
- nm_streq0 (nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_PROTO_TCP), "yes")
- ? "tcp" : "udp");
+ value = nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_PROTO);
+ if (!value)
+ value = nm_streq0 (nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_PROTO_TCP), "yes") ?
"tcp" : "udp";
+ args_write_line (f, NMV_OVPN_TAG_PROTO, value);
args_write_line_setting_value_int (f, NMV_OVPN_TAG_PORT, s_vpn, NM_OPENVPN_KEY_PORT);
diff --git a/properties/nm-openvpn-editor.c b/properties/nm-openvpn-editor.c
index 2d0f204..dc34b04 100644
--- a/properties/nm-openvpn-editor.c
+++ b/properties/nm-openvpn-editor.c
@@ -670,6 +670,7 @@ static const char *const advanced_keys[] = {
NM_OPENVPN_KEY_PING_EXIT,
NM_OPENVPN_KEY_PING_RESTART,
NM_OPENVPN_KEY_PORT,
+ NM_OPENVPN_KEY_PROTO,
NM_OPENVPN_KEY_PROTO_TCP,
NM_OPENVPN_KEY_PROXY_PORT,
NM_OPENVPN_KEY_PROXY_RETRY,
@@ -1433,6 +1434,7 @@ advanced_dialog_new (GHashTable *hash, const char *contype)
GtkListStore *store;
GtkTreeIter iter;
int vint;
+ gboolean vbool;
guint32 active;
NMSettingSecretFlags pw_flags;
GError *error = NULL;
@@ -1565,9 +1567,15 @@ advanced_dialog_new (GHashTable *hash, const char *contype)
_builder_init_toggle_button (builder, "mssfix_checkbutton", _hash_get_boolean (hash,
NM_OPENVPN_KEY_MSSFIX));
_builder_init_toggle_button (builder, "float_checkbutton", _hash_get_boolean (hash,
NM_OPENVPN_KEY_FLOAT));
- _builder_init_toggle_button (builder, "tcp_checkbutton", _hash_get_boolean (hash,
NM_OPENVPN_KEY_PROTO_TCP));
_builder_init_toggle_button (builder, "ncp_disable_checkbutton", _hash_get_boolean (hash,
NM_OPENVPN_KEY_NCP_DISABLE));
+ value = g_hash_table_lookup (hash, NM_OPENVPN_KEY_PROTO);
+ if (value)
+ vbool = !NM_IN_STRSET (value, NMOVPN_PROTCOL_TYPES_UDP);
+ else
+ vbool = _hash_get_boolean (hash, NM_OPENVPN_KEY_PROTO_TCP);
+ _builder_init_toggle_button (builder, "tcp_checkbutton", vbool);
+
/* Populate device-related widgets */
dev = g_hash_table_lookup (hash, NM_OPENVPN_KEY_DEV);
dev_type = g_hash_table_lookup (hash, NM_OPENVPN_KEY_DEV_TYPE);
@@ -1932,8 +1940,10 @@ advanced_dialog_new_hash_from_dialog (GtkWidget *dialog)
g_hash_table_insert (hash, NM_OPENVPN_KEY_FLOAT, g_strdup ("yes"));
widget = GTK_WIDGET (gtk_builder_get_object (builder, "tcp_checkbutton"));
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) {
+ g_hash_table_insert (hash, NM_OPENVPN_KEY_PROTO, g_strdup ("tcp-client"));
g_hash_table_insert (hash, NM_OPENVPN_KEY_PROTO_TCP, g_strdup ("yes"));
+ }
widget = GTK_WIDGET (gtk_builder_get_object (builder, "ncp_disable_checkbutton"));
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
diff --git a/shared/nm-service-defines.h b/shared/nm-service-defines.h
index 46b4104..6e20d99 100644
--- a/shared/nm-service-defines.h
+++ b/shared/nm-service-defines.h
@@ -58,6 +58,7 @@
#define NM_OPENVPN_KEY_PING_EXIT "ping-exit"
#define NM_OPENVPN_KEY_PING_RESTART "ping-restart"
#define NM_OPENVPN_KEY_PORT "port"
+#define NM_OPENVPN_KEY_PROTO "proto"
#define NM_OPENVPN_KEY_PROTO_TCP "proto-tcp"
#define NM_OPENVPN_KEY_PROXY_PORT "proxy-port"
#define NM_OPENVPN_KEY_PROXY_RETRY "proxy-retry"
diff --git a/shared/utils.h b/shared/utils.h
index 477ad70..388da12 100644
--- a/shared/utils.h
+++ b/shared/utils.h
@@ -102,10 +102,13 @@ gboolean is_pkcs12 (const char *filepath);
gboolean is_encrypted (const char *filename);
-#define NMOVPN_PROTCOL_TYPES \
+#define NMOVPN_PROTCOL_TYPES_UDP \
"udp", \
"udp4", \
- "udp6", \
+ "udp6"
+
+#define NMOVPN_PROTCOL_TYPES \
+ NMOVPN_PROTCOL_TYPES_UDP, \
"tcp", \
"tcp4", \
"tcp6", \
diff --git a/src/nm-openvpn-service.c b/src/nm-openvpn-service.c
index e9fa084..e5aa911 100644
--- a/src/nm-openvpn-service.c
+++ b/src/nm-openvpn-service.c
@@ -162,6 +162,7 @@ static const ValidProperty valid_properties[] = {
{ NM_OPENVPN_KEY_PING_EXIT, G_TYPE_INT, 0, G_MAXINT, FALSE },
{ NM_OPENVPN_KEY_PING_RESTART, G_TYPE_INT, 0, G_MAXINT, FALSE },
{ NM_OPENVPN_KEY_MAX_ROUTES, G_TYPE_INT, 0, 100000000, FALSE },
+ { NM_OPENVPN_KEY_PROTO, G_TYPE_STRING, 0, 0, FALSE },
{ NM_OPENVPN_KEY_PROTO_TCP, G_TYPE_BOOLEAN, 0, 0, FALSE },
{ NM_OPENVPN_KEY_PORT, G_TYPE_INT, 1, 65535, FALSE },
{ NM_OPENVPN_KEY_PROXY_TYPE, G_TYPE_STRING, 0, 0, FALSE },
@@ -1322,7 +1323,8 @@ nm_openvpn_start_openvpn_binary (NMOpenvpnPlugin *plugin,
gs_unref_ptrarray GPtrArray *args = NULL;
GPid pid;
gboolean dev_type_is_tap;
- const char *defport, *proto_tcp;
+ const char *defport;
+ const char *proto_global;
const char *compress;
const char *tls_remote = NULL;
const char *nm_openvpn_user, *nm_openvpn_group, *nm_openvpn_chroot;
@@ -1379,9 +1381,14 @@ nm_openvpn_start_openvpn_binary (NMOpenvpnPlugin *plugin,
if (!nmovpn_arg_is_set (defport))
defport = NULL;
- proto_tcp = nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_PROTO_TCP);
- if (!nmovpn_arg_is_set (proto_tcp))
- proto_tcp = NULL;
+ proto_global = nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_PROTO);
+ if (!proto_global) {
+ proto_global = nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_PROTO_TCP);
+ if (nm_streq0 (proto_global, "yes"))
+ proto_global = "tcp-client";
+ else
+ proto_global = "udp";
+ }
tmp = nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_REMOTE);
if (tmp && *tmp) {
@@ -1392,7 +1399,9 @@ nm_openvpn_start_openvpn_binary (NMOpenvpnPlugin *plugin,
tmp_remaining = tmp_clone = g_strdup (tmp);
while ((tok = strsep (&tmp_remaining, " \t,")) != NULL) {
gs_free char *str_free = NULL;
- const char *host, *port, *proto;
+ const char *host;
+ const char *port;
+ const char *proto;
gssize eidx;
eidx = nmovpn_remote_parse (tok,
@@ -1422,27 +1431,19 @@ nm_openvpn_start_openvpn_binary (NMOpenvpnPlugin *plugin,
} else
args_add_strv (args, "1194"); /* default IANA port */
- if (proto) {
- if (nm_streq (proto, "tcp"))
- args_add_strv (args, "tcp-client");
- else if (nm_streq (proto, "tcp4"))
- args_add_strv (args, "tcp4-client");
- else if (nm_streq (proto, "tcp6"))
- args_add_strv (args, "tcp6-client");
- else if (NM_IN_STRSET (proto, NMOVPN_PROTCOL_TYPES))
- args_add_strv (args, proto);
- else {
- g_set_error (error,
- NM_VPN_PLUGIN_ERROR,
- NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
- _("Invalid proto “%s”."), proto);
- return FALSE;
- }
- } else if (nm_streq0 (proto_tcp, "yes"))
+ if (!proto)
+ proto = proto_global;
+
+ if (nm_streq (proto, "tcp"))
args_add_strv (args, "tcp-client");
+ else if (nm_streq (proto, "tcp4"))
+ args_add_strv (args, "tcp4-client");
+ else if (nm_streq (proto, "tcp6"))
+ args_add_strv (args, "tcp6-client");
else {
- args_add_strv (args, "udp");
- args_add_strv (args, "--explicit-exit-notify");
+ args_add_strv (args, proto);
+ if (NM_IN_STRSET (proto, NMOVPN_PROTCOL_TYPES_UDP))
+ args_add_strv (args, "--explicit-exit-notify");
}
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]