parent
63965111d1
commit
86eace12c6
@ -1,136 +0,0 @@
|
||||
From 4ecbe9f176b6d29aa51bf7800d0495e1c949f5bc Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Thu, 11 Aug 2016 14:38:53 +0200
|
||||
Subject: [PATCH 1/1] fix recent change in behavior for "comp-lzo=no" setting
|
||||
|
||||
openvpn supports 4 different ways for --comp-lzo:
|
||||
1) no --comp-lzo option
|
||||
2) --comp-lzo yes
|
||||
3) --comp-lzo [adaptive]
|
||||
4) --comp-lzo no
|
||||
|
||||
Before commit 2ecf18c25a7bee7f0122d9d666a7e11cd8b55ea3, nm-openvpn
|
||||
only supported 1) and 2). Those were expressed in NM's connection
|
||||
by either omitting the comp-lzo setting or setting "comp-lzo=yes".
|
||||
|
||||
Arguably due to a bug, old plasma-nm would configure connections with
|
||||
comp-lzo=no to mean 1), so after update of nm-openvpn to 2ecf18c2 those
|
||||
connections changed to mean 4), which broke some existing configurations.
|
||||
That was later attemted to be fixed in plasma-nm by commit [1], which
|
||||
however only affects new connections and cannot fix existing connections
|
||||
for users.
|
||||
|
||||
Ultimatley, the "comp-lzo=no" setting is spoiled due to that.
|
||||
|
||||
The fix is to add a new setting "comp-lzo=no-by-default" which shall
|
||||
have the meaning 4) and pass "--comp-lzo no" to openvpn. A connection
|
||||
with "comp-lzo=no" is again treated as 1).
|
||||
|
||||
This fixes old connections that were created by old plasma-nm before commit
|
||||
[1] by restoring the old meaning.
|
||||
|
||||
This however now breaks users of recent nm-openvpn which were deliberately setting
|
||||
"comp-lzo=no" to mean option 4), most notably users of recent plasma-nm (since
|
||||
commit [1]). Users of the properties plugin for nm-connection-editor/gnome-control-center
|
||||
are anyway unable to configure "comp-lzo=no" in the UI, so probably isn't a real
|
||||
issue for many users.
|
||||
|
||||
plasma-nm bugs:
|
||||
[1] https://quickgit.kde.org/?p=plasma-nm.git&a=commit&h=31bcd5f2cffd1c19fbd10ab0f4172f2d82eff194
|
||||
https://bugs.kde.org/show_bug.cgi?id=365816
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1365663
|
||||
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=769177
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1355688
|
||||
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=833166
|
||||
(cherry picked from commit 62bdd278d69cc396479af9d05a0b776d5ad386bf)
|
||||
---
|
||||
properties/auth-helpers.c | 5 ++++-
|
||||
properties/import-export.c | 14 ++++++++++++--
|
||||
src/nm-openvpn-service.c | 24 ++++++++++++++++++++++++
|
||||
3 files changed, 40 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/properties/auth-helpers.c b/properties/auth-helpers.c
|
||||
index 85985c8..7244df1 100644
|
||||
--- a/properties/auth-helpers.c
|
||||
+++ b/properties/auth-helpers.c
|
||||
@@ -2010,7 +2010,10 @@ advanced_dialog_new_hash_from_dialog (GtkWidget *dialog, GError **error)
|
||||
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) {
|
||||
/* we only have a checkbox, which we either map to "--comp-lzo yes" or
|
||||
* no "--comp-lzo" flag. In the UI, we cannot express "--comp-lzo [adaptive]"
|
||||
- * or "--comp-lzo no". */
|
||||
+ * or "--comp-lzo no".
|
||||
+ *
|
||||
+ * Note that "--comp-lzo no" must be encoded as "comp-lzo=no-by-default" (bgo#769177).
|
||||
+ */
|
||||
g_hash_table_insert (hash, g_strdup (NM_OPENVPN_KEY_COMP_LZO), g_strdup ("yes"));
|
||||
}
|
||||
|
||||
diff --git a/properties/import-export.c b/properties/import-export.c
|
||||
index 90b4631..ddb1cd3 100644
|
||||
--- a/properties/import-export.c
|
||||
+++ b/properties/import-export.c
|
||||
@@ -951,13 +951,23 @@ do_import (const char *path, const char *contents, gsize contents_len, GError **
|
||||
}
|
||||
|
||||
if (NM_IN_STRSET (params[0], NMV_OVPN_TAG_COMP_LZO)) {
|
||||
+ const char *v;
|
||||
+
|
||||
if (!args_params_check_nargs_minmax (params, 0, 1, &line_error))
|
||||
goto handle_line_error;
|
||||
- if (!NM_IN_STRSET (params[1], NULL, "no", "yes", "adaptive")) {
|
||||
+
|
||||
+ v = params[1] ?: "adaptive";
|
||||
+
|
||||
+ if (nm_streq (v, "no")) {
|
||||
+ /* old plasma-nm used to set "comp-lzo=no" to mean unset, thus it spoiled
|
||||
+ * to "no" option to be used in the connection. Workaround that, by instead
|
||||
+ * using "no-by-default" (bgo#769177). */
|
||||
+ v = "no-by-default";
|
||||
+ } else if (!NM_IN_STRSET (v, "yes", "adaptive")) {
|
||||
line_error = g_strdup_printf (_("unsupported comp-lzo argument"));
|
||||
goto handle_line_error;
|
||||
}
|
||||
- setting_vpn_add_data_item (s_vpn, NM_OPENVPN_KEY_COMP_LZO, params[1] ?: "adaptive");
|
||||
+ setting_vpn_add_data_item (s_vpn, NM_OPENVPN_KEY_COMP_LZO, v);
|
||||
continue;
|
||||
}
|
||||
|
||||
diff --git a/src/nm-openvpn-service.c b/src/nm-openvpn-service.c
|
||||
index e5a1aa9..9238a45 100644
|
||||
--- a/src/nm-openvpn-service.c
|
||||
+++ b/src/nm-openvpn-service.c
|
||||
@@ -1250,6 +1250,30 @@ nm_openvpn_start_openvpn_binary (NMOpenvpnPlugin *plugin,
|
||||
}
|
||||
|
||||
tmp = nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_COMP_LZO);
|
||||
+
|
||||
+ /* openvpn understands 4 different modes for --comp-lzo, which have
|
||||
+ * different meaning:
|
||||
+ * 1) no --comp-lzo option
|
||||
+ * 2) --comp-lzo yes
|
||||
+ * 3) --comp-lzo [adaptive]
|
||||
+ * 4) --comp-lzo no
|
||||
+ *
|
||||
+ * In the past, nm-openvpn only supported 1) and 2) by having no
|
||||
+ * comp-lzo connection setting or "comp-lzo=yes", respectively.
|
||||
+ *
|
||||
+ * However, old plasma-nm would set "comp-lzo=no" in the connection
|
||||
+ * to mean 1). Thus, "comp-lzo=no" is spoiled to mean 4) in order
|
||||
+ * to preserve backward compatibily.
|
||||
+ * We use instead a special value "no-by-default" to express "no".
|
||||
+ *
|
||||
+ * See bgo#769177
|
||||
+ */
|
||||
+ if (NM_IN_STRSET (tmp, "no")) {
|
||||
+ /* means no --comp-lzo option. */
|
||||
+ tmp = NULL;
|
||||
+ } else if (NM_IN_STRSET (tmp, "no-by-default"))
|
||||
+ tmp = "no";
|
||||
+
|
||||
if (NM_IN_STRSET (tmp, "yes", "no", "adaptive")) {
|
||||
add_openvpn_arg (args, "--comp-lzo");
|
||||
add_openvpn_arg (args, tmp);
|
||||
--
|
||||
2.7.4
|
||||
|
@ -0,0 +1,471 @@
|
||||
From 40ee847d32c11d0bc7c1b06fefa9a9ef8e2b0570 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Mon, 13 Feb 2017 12:30:16 +0100
|
||||
Subject: [PATCH 1/4] service: avoid strlen() for checking whether a string is
|
||||
empty
|
||||
|
||||
Possibly the compiler can optimize it not to evaluate the full string length,
|
||||
just to verify whether the string is empty. Still, I think it's bad style.
|
||||
|
||||
(cherry picked from commit 2a4a4a49d8b97e3cbe37307f6b6c1053df946ce4)
|
||||
---
|
||||
src/nm-openvpn-service.c | 26 +++++++++++++-------------
|
||||
1 file changed, 13 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/src/nm-openvpn-service.c b/src/nm-openvpn-service.c
|
||||
index d7bd29f..d6e36a6 100644
|
||||
--- a/src/nm-openvpn-service.c
|
||||
+++ b/src/nm-openvpn-service.c
|
||||
@@ -1406,7 +1406,7 @@ nm_openvpn_start_openvpn_binary (NMOpenvpnPlugin *plugin,
|
||||
|
||||
/* Cipher */
|
||||
tmp = nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_CIPHER);
|
||||
- if (tmp && strlen (tmp)) {
|
||||
+ if (tmp && tmp[0]) {
|
||||
add_openvpn_arg (args, "--cipher");
|
||||
add_openvpn_arg (args, tmp);
|
||||
}
|
||||
@@ -1419,7 +1419,7 @@ nm_openvpn_start_openvpn_binary (NMOpenvpnPlugin *plugin,
|
||||
|
||||
/* Keysize */
|
||||
tmp = nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_KEYSIZE);
|
||||
- if (tmp && strlen (tmp)) {
|
||||
+ if (tmp && tmp[0]) {
|
||||
add_openvpn_arg (args, "--keysize");
|
||||
if (!add_openvpn_arg_int (args, tmp)) {
|
||||
g_set_error (error,
|
||||
@@ -1440,25 +1440,25 @@ nm_openvpn_start_openvpn_binary (NMOpenvpnPlugin *plugin,
|
||||
|
||||
/* TA */
|
||||
tmp = nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_TA);
|
||||
- if (tmp && strlen (tmp)) {
|
||||
+ if (tmp && tmp[0]) {
|
||||
add_openvpn_arg (args, "--tls-auth");
|
||||
add_openvpn_arg_utf8safe (args, tmp);
|
||||
|
||||
tmp = nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_TA_DIR);
|
||||
- if (tmp && strlen (tmp))
|
||||
+ if (tmp && tmp[0])
|
||||
add_openvpn_arg (args, tmp);
|
||||
}
|
||||
|
||||
/* tls-remote */
|
||||
tmp = nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_TLS_REMOTE);
|
||||
- if (tmp && strlen (tmp)) {
|
||||
+ if (tmp && tmp[0]) {
|
||||
add_openvpn_arg (args, "--tls-remote");
|
||||
add_openvpn_arg (args, tmp);
|
||||
}
|
||||
|
||||
/* verify-x509-name */
|
||||
tmp = nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_VERIFY_X509_NAME);
|
||||
- if (tmp && strlen (tmp)) {
|
||||
+ if (tmp && tmp[0]) {
|
||||
const char *name;
|
||||
gs_free char *type = NULL;
|
||||
|
||||
@@ -1483,7 +1483,7 @@ nm_openvpn_start_openvpn_binary (NMOpenvpnPlugin *plugin,
|
||||
|
||||
/* remote-cert-tls */
|
||||
tmp = nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_REMOTE_CERT_TLS);
|
||||
- if (tmp && strlen (tmp)) {
|
||||
+ if (tmp && tmp[0]) {
|
||||
add_openvpn_arg (args, "--remote-cert-tls");
|
||||
add_openvpn_arg (args, tmp);
|
||||
}
|
||||
@@ -1500,7 +1500,7 @@ nm_openvpn_start_openvpn_binary (NMOpenvpnPlugin *plugin,
|
||||
if (!connection_type_is_tls_mode (connection_type)) {
|
||||
/* Ignore --reneg-sec option if we are not in TLS mode (as enabled
|
||||
* by --client below). openvpn will error out otherwise, see bgo#749050. */
|
||||
- } else if (tmp && strlen (tmp)) {
|
||||
+ } else if (tmp && tmp[0]) {
|
||||
add_openvpn_arg (args, "--reneg-sec");
|
||||
if (!add_openvpn_arg_int (args, tmp)) {
|
||||
g_set_error (error,
|
||||
@@ -1532,7 +1532,7 @@ nm_openvpn_start_openvpn_binary (NMOpenvpnPlugin *plugin,
|
||||
|
||||
/* TUN MTU size */
|
||||
tmp = nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_TUNNEL_MTU);
|
||||
- if (tmp && strlen (tmp)) {
|
||||
+ if (tmp && tmp[0]) {
|
||||
add_openvpn_arg (args, "--tun-mtu");
|
||||
if (!add_openvpn_arg_int (args, tmp)) {
|
||||
g_set_error (error,
|
||||
@@ -1546,7 +1546,7 @@ nm_openvpn_start_openvpn_binary (NMOpenvpnPlugin *plugin,
|
||||
|
||||
/* fragment size */
|
||||
tmp = nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_FRAGMENT_SIZE);
|
||||
- if (tmp && strlen (tmp)) {
|
||||
+ if (tmp && tmp[0]) {
|
||||
add_openvpn_arg (args, "--fragment");
|
||||
if (!add_openvpn_arg_int (args, tmp)) {
|
||||
g_set_error (error,
|
||||
@@ -1620,12 +1620,12 @@ nm_openvpn_start_openvpn_binary (NMOpenvpnPlugin *plugin,
|
||||
add_cert_args (args, s_vpn);
|
||||
} else if (!strcmp (connection_type, NM_OPENVPN_CONTYPE_STATIC_KEY)) {
|
||||
tmp = nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_STATIC_KEY);
|
||||
- if (tmp && strlen (tmp)) {
|
||||
+ if (tmp && tmp[0]) {
|
||||
add_openvpn_arg (args, "--secret");
|
||||
add_openvpn_arg_utf8safe (args, tmp);
|
||||
|
||||
tmp = nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_STATIC_KEY_DIRECTION);
|
||||
- if (tmp && strlen (tmp))
|
||||
+ if (tmp && tmp[0])
|
||||
add_openvpn_arg (args, tmp);
|
||||
}
|
||||
|
||||
@@ -1659,7 +1659,7 @@ nm_openvpn_start_openvpn_binary (NMOpenvpnPlugin *plugin,
|
||||
add_openvpn_arg (args, "--auth-user-pass");
|
||||
|
||||
tmp = nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_CA);
|
||||
- if (tmp && strlen (tmp)) {
|
||||
+ if (tmp && tmp[0]) {
|
||||
add_openvpn_arg (args, "--ca");
|
||||
add_openvpn_arg_utf8safe (args, tmp);
|
||||
}
|
||||
--
|
||||
2.9.3
|
||||
|
||||
|
||||
From 1a21babccc3eb77c5b4a2953e7c45aaec670b120 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Mon, 13 Feb 2017 11:31:40 +0100
|
||||
Subject: [PATCH 2/4] service: minor refactoring of nm_find_openvpn()
|
||||
|
||||
And rename to openvpn_binary_find_exepath().
|
||||
The prefix "openvpn_binary_" will be used for related functions.
|
||||
|
||||
(cherry picked from commit 05cb6356bb4d27fb1c2ca5f8a7bfdf23fe424f0c)
|
||||
---
|
||||
src/nm-openvpn-service.c | 41 ++++++++++++++++++++---------------------
|
||||
1 file changed, 20 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/src/nm-openvpn-service.c b/src/nm-openvpn-service.c
|
||||
index d6e36a6..d88ed19 100644
|
||||
--- a/src/nm-openvpn-service.c
|
||||
+++ b/src/nm-openvpn-service.c
|
||||
@@ -188,6 +188,25 @@ _LOGD_enabled (void)
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
+static const char *
|
||||
+openvpn_binary_find_exepath (void)
|
||||
+{
|
||||
+ static const char *paths[] = {
|
||||
+ "/usr/sbin/openvpn",
|
||||
+ "/sbin/openvpn",
|
||||
+ "/usr/local/sbin/openvpn",
|
||||
+ };
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < G_N_ELEMENTS (paths); i++) {
|
||||
+ if (g_file_test (paths[i], G_FILE_TEST_EXISTS))
|
||||
+ return paths[i];
|
||||
+ }
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+/*****************************************************************************/
|
||||
+
|
||||
static void
|
||||
pids_pending_data_free (PidsPendingData *pid_data)
|
||||
{
|
||||
@@ -886,26 +905,6 @@ connection_type_is_tls_mode (const char *connection_type)
|
||||
|| strcmp (connection_type, NM_OPENVPN_CONTYPE_PASSWORD_TLS) == 0;
|
||||
}
|
||||
|
||||
-static const char *
|
||||
-nm_find_openvpn (void)
|
||||
-{
|
||||
- static const char *openvpn_binary_paths[] = {
|
||||
- "/usr/sbin/openvpn",
|
||||
- "/sbin/openvpn",
|
||||
- "/usr/local/sbin/openvpn",
|
||||
- NULL
|
||||
- };
|
||||
- const char **openvpn_binary = openvpn_binary_paths;
|
||||
-
|
||||
- while (*openvpn_binary != NULL) {
|
||||
- if (g_file_test (*openvpn_binary, G_FILE_TEST_EXISTS))
|
||||
- break;
|
||||
- openvpn_binary++;
|
||||
- }
|
||||
-
|
||||
- return *openvpn_binary;
|
||||
-}
|
||||
-
|
||||
static void
|
||||
add_openvpn_arg (GPtrArray *args, const char *arg)
|
||||
{
|
||||
@@ -1154,7 +1153,7 @@ nm_openvpn_start_openvpn_binary (NMOpenvpnPlugin *plugin,
|
||||
return FALSE;
|
||||
|
||||
/* Find openvpn */
|
||||
- openvpn_binary = nm_find_openvpn ();
|
||||
+ openvpn_binary = openvpn_binary_find_exepath ();
|
||||
if (!openvpn_binary) {
|
||||
g_set_error_literal (error,
|
||||
NM_VPN_PLUGIN_ERROR,
|
||||
--
|
||||
2.9.3
|
||||
|
||||
|
||||
From adc7dd5148c12917eee1c2c92ddb605e2ecd6b2c Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Mon, 13 Feb 2017 12:30:26 +0100
|
||||
Subject: [PATCH 3/4] service: for OpenVPN 2.4 and newer, handle --tls-remote
|
||||
option via --verify-x509-name
|
||||
|
||||
The tls-remote option got removed from OpenVPN 2.4. This requires users
|
||||
to fix their existing configurations to use verify-x509-name instead.
|
||||
|
||||
Using tls-remote on a recent OpenVPN binary thus fails to establish
|
||||
the connection, which is an annoyance for the user. Let the plugin
|
||||
automatically convert the "tls-remote $NAME" option to "verify-x509-name
|
||||
$NAME name". Note that the two options are not entirely equivalent, thus
|
||||
the is a chance that this wrongly rejects a server that would have worked
|
||||
before, or ever worse, that it wronlgy accepts a server that would have
|
||||
been rejected.
|
||||
|
||||
But in most common cases, the workaround should work fine.
|
||||
The user is still strongly encouraged to update his configuration.
|
||||
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=776045
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1421241
|
||||
(cherry picked from commit f7421ef277222bd640c432afefc21ef5a98477bc)
|
||||
---
|
||||
src/nm-openvpn-service.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++--
|
||||
1 file changed, 85 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/nm-openvpn-service.c b/src/nm-openvpn-service.c
|
||||
index d88ed19..fa59537 100644
|
||||
--- a/src/nm-openvpn-service.c
|
||||
+++ b/src/nm-openvpn-service.c
|
||||
@@ -70,6 +70,13 @@ G_DEFINE_TYPE (NMOpenvpnPlugin, nm_openvpn_plugin, NM_TYPE_VPN_SERVICE_PLUGIN)
|
||||
|
||||
#define NM_OPENVPN_PLUGIN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_OPENVPN_PLUGIN, NMOpenvpnPluginPrivate))
|
||||
|
||||
+typedef enum {
|
||||
+ OPENVPN_BINARY_VERSION_INVALID,
|
||||
+ OPENVPN_BINARY_VERSION_UNKNOWN,
|
||||
+ OPENVPN_BINARY_VERSION_2_3_OR_OLDER,
|
||||
+ OPENVPN_BINARY_VERSION_2_4_OR_NEWER,
|
||||
+} OpenvpnBinaryVersion;
|
||||
+
|
||||
typedef struct {
|
||||
char *default_username;
|
||||
char *username;
|
||||
@@ -205,6 +212,64 @@ openvpn_binary_find_exepath (void)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
+static OpenvpnBinaryVersion
|
||||
+openvpn_binary_detect_version (const char *exepath)
|
||||
+{
|
||||
+ gs_free char *s_stdout = NULL;
|
||||
+ const char *s;
|
||||
+ int exit_code;
|
||||
+ int n;
|
||||
+
|
||||
+ g_return_val_if_fail (exepath && exepath[0] == '/', OPENVPN_BINARY_VERSION_UNKNOWN);
|
||||
+
|
||||
+ if (!g_spawn_sync (NULL,
|
||||
+ (char *[]) { (char *) exepath, "--version", NULL },
|
||||
+ NULL,
|
||||
+ G_SPAWN_STDERR_TO_DEV_NULL,
|
||||
+ NULL,
|
||||
+ NULL,
|
||||
+ &s_stdout,
|
||||
+ NULL,
|
||||
+ &exit_code,
|
||||
+ NULL))
|
||||
+ return OPENVPN_BINARY_VERSION_UNKNOWN;
|
||||
+
|
||||
+ if ( !WIFEXITED (exit_code)
|
||||
+ || WEXITSTATUS (exit_code) != 1) {
|
||||
+ /* expect return code 1 (OPENVPN_EXIT_STATUS_USAGE) */
|
||||
+ return OPENVPN_BINARY_VERSION_UNKNOWN;
|
||||
+ }
|
||||
+
|
||||
+ /* the output for --version starts with title_string, which starts with PACKAGE_STRING,
|
||||
+ * which looks like "OpenVPN 2.#...". Do a strict parsing here... */
|
||||
+ if ( !s_stdout
|
||||
+ || !g_str_has_prefix (s_stdout, "OpenVPN 2."))
|
||||
+ return OPENVPN_BINARY_VERSION_UNKNOWN;
|
||||
+ s = &s_stdout[NM_STRLEN ("OpenVPN 2.")];
|
||||
+
|
||||
+ if (!g_ascii_isdigit (s[0]))
|
||||
+ return OPENVPN_BINARY_VERSION_UNKNOWN;
|
||||
+
|
||||
+ n = 0;
|
||||
+ do {
|
||||
+ if (n > G_MAXINT / 100)
|
||||
+ return OPENVPN_BINARY_VERSION_UNKNOWN;
|
||||
+ n = (n * 10) + (s[0] - '0');
|
||||
+ } while (g_ascii_isdigit ((++s)[0]));
|
||||
+
|
||||
+ if (n <= 3)
|
||||
+ return OPENVPN_BINARY_VERSION_2_3_OR_OLDER;
|
||||
+ return OPENVPN_BINARY_VERSION_2_4_OR_NEWER;
|
||||
+}
|
||||
+
|
||||
+static OpenvpnBinaryVersion
|
||||
+openvpn_binary_detect_version_cached (const char *exepath, OpenvpnBinaryVersion *cached)
|
||||
+{
|
||||
+ if (G_UNLIKELY (*cached == OPENVPN_BINARY_VERSION_INVALID))
|
||||
+ *cached = openvpn_binary_detect_version (exepath);
|
||||
+ return *cached;
|
||||
+}
|
||||
+
|
||||
/*****************************************************************************/
|
||||
|
||||
static void
|
||||
@@ -1119,12 +1184,14 @@ nm_openvpn_start_openvpn_binary (NMOpenvpnPlugin *plugin,
|
||||
gboolean dev_type_is_tap;
|
||||
char *stmp;
|
||||
const char *defport, *proto_tcp;
|
||||
+ const char *tls_remote = NULL;
|
||||
const char *nm_openvpn_user, *nm_openvpn_group, *nm_openvpn_chroot;
|
||||
gs_free char *bus_name = NULL;
|
||||
NMSettingVpn *s_vpn;
|
||||
const char *connection_type;
|
||||
gint64 v_int64;
|
||||
char sbuf_64[65];
|
||||
+ OpenvpnBinaryVersion openvpn_binary_version = OPENVPN_BINARY_VERSION_INVALID;
|
||||
|
||||
s_vpn = nm_connection_get_setting_vpn (connection);
|
||||
if (!s_vpn) {
|
||||
@@ -1451,8 +1518,17 @@ nm_openvpn_start_openvpn_binary (NMOpenvpnPlugin *plugin,
|
||||
/* tls-remote */
|
||||
tmp = nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_TLS_REMOTE);
|
||||
if (tmp && tmp[0]) {
|
||||
- add_openvpn_arg (args, "--tls-remote");
|
||||
- add_openvpn_arg (args, tmp);
|
||||
+ if (openvpn_binary_detect_version_cached (openvpn_binary, &openvpn_binary_version) != OPENVPN_BINARY_VERSION_2_4_OR_NEWER) {
|
||||
+ _LOGW ("the tls-remote option is deprecated and removed from OpenVPN 2.4. Update your connection to use verify-x509-name");
|
||||
+ add_openvpn_arg (args, "--tls-remote");
|
||||
+ add_openvpn_arg (args, tmp);
|
||||
+ } else {
|
||||
+ _LOGW ("the tls-remote option is deprecated and removed from OpenVPN 2.4. For compatibility, the plugin uses \"verify-x509-name\" \"%s\" \"name\" instead. Update your connection to use verify-x509-name", tmp);
|
||||
+ add_openvpn_arg (args, "--verify-x509-name");
|
||||
+ add_openvpn_arg (args, tmp);
|
||||
+ add_openvpn_arg (args, "name");
|
||||
+ }
|
||||
+ tls_remote = tmp;
|
||||
}
|
||||
|
||||
/* verify-x509-name */
|
||||
@@ -1461,6 +1537,13 @@ nm_openvpn_start_openvpn_binary (NMOpenvpnPlugin *plugin,
|
||||
const char *name;
|
||||
gs_free char *type = NULL;
|
||||
|
||||
+ if (tls_remote) {
|
||||
+ g_set_error (error, NM_VPN_PLUGIN_ERROR,
|
||||
+ NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
|
||||
+ _("Invalid configuration with tls-remote and verify-x509-name."));
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
name = strchr (tmp, ':');
|
||||
if (name) {
|
||||
type = g_strndup (tmp, name - tmp);
|
||||
--
|
||||
2.9.3
|
||||
|
||||
|
||||
From 11049e7c888fcc74896b34ea86f09d38a561fc35 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Mon, 13 Feb 2017 12:56:27 +0100
|
||||
Subject: [PATCH 4/4] properties: discourage use of tls-remote in GUI
|
||||
|
||||
Mark the entry as "error" when selecting the deprecated
|
||||
tls-remote option.
|
||||
|
||||
This is to make it more apparent to the user that he
|
||||
should avoid this setting.
|
||||
|
||||
(cherry picked from commit 1c2986b8881b3b28d493f66cc804da12712cc2a7)
|
||||
---
|
||||
properties/auth-helpers.c | 14 ++++++++++++--
|
||||
properties/import-export.c | 2 +-
|
||||
properties/nm-openvpn-dialog.ui | 2 ++
|
||||
3 files changed, 15 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/properties/auth-helpers.c b/properties/auth-helpers.c
|
||||
index 4d1e1ce..2f880dd 100644
|
||||
--- a/properties/auth-helpers.c
|
||||
+++ b/properties/auth-helpers.c
|
||||
@@ -1211,7 +1211,7 @@ populate_tls_remote_mode_entry_combo (GtkEntry* entry, GtkComboBox *box,
|
||||
|
||||
gtk_list_store_append (store, &iter);
|
||||
gtk_list_store_set (store, &iter,
|
||||
- TLS_REMOTE_MODE_COL_NAME, _("Verify subject partially (legacy mode)"),
|
||||
+ TLS_REMOTE_MODE_COL_NAME, _("Verify subject partially (legacy mode, strongly discouraged)"),
|
||||
TLS_REMOTE_MODE_COL_VALUE, TLS_REMOTE_MODE_LEGACY,
|
||||
-1);
|
||||
|
||||
@@ -1250,6 +1250,7 @@ tls_remote_changed (GtkWidget *widget, gpointer user_data)
|
||||
GtkWidget *entry, *combo, *ok_button;
|
||||
GtkTreeIter iter;
|
||||
gboolean entry_enabled = TRUE, entry_has_error = FALSE;
|
||||
+ gboolean legacy_tls_remote = FALSE;
|
||||
|
||||
entry = GTK_WIDGET (gtk_builder_get_object (builder, "tls_remote_entry"));
|
||||
combo = GTK_WIDGET (gtk_builder_get_object (builder, "tls_remote_mode_combo"));
|
||||
@@ -1272,6 +1273,7 @@ tls_remote_changed (GtkWidget *widget, gpointer user_data)
|
||||
|
||||
entry_enabled = TRUE;
|
||||
entry_has_error = !subject || !subject[0];
|
||||
+ legacy_tls_remote = nm_streq (tls_remote_mode, TLS_REMOTE_MODE_LEGACY);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1280,9 +1282,17 @@ tls_remote_changed (GtkWidget *widget, gpointer user_data)
|
||||
widget_set_error (entry);
|
||||
gtk_widget_set_sensitive (ok_button, FALSE);
|
||||
} else {
|
||||
- widget_unset_error (entry);
|
||||
+ if (legacy_tls_remote) {
|
||||
+ /* selecting tls-remote is not an error, but strongly discouraged. I wish
|
||||
+ * there would be a warning-class as well. Anyway, mark the widget as
|
||||
+ * erroneous, although this doesn't make the connection invalid (which
|
||||
+ * is an ugly inconsistency). */
|
||||
+ widget_set_error (entry);
|
||||
+ } else
|
||||
+ widget_unset_error (entry);
|
||||
gtk_widget_set_sensitive (ok_button, TRUE);
|
||||
}
|
||||
+
|
||||
}
|
||||
|
||||
static void
|
||||
diff --git a/properties/import-export.c b/properties/import-export.c
|
||||
index 1993026..7b42e0b 100644
|
||||
--- a/properties/import-export.c
|
||||
+++ b/properties/import-export.c
|
||||
@@ -1256,7 +1256,7 @@ do_import (const char *path, const char *contents, gsize contents_len, GError **
|
||||
}
|
||||
|
||||
if (NM_IN_STRSET (params[0], NMV_OVPN_TAG_VERIFY_X509_NAME)) {
|
||||
- const char *type = "subject";
|
||||
+ const char *type = NM_OPENVPN_VERIFY_X509_NAME_TYPE_SUBJECT;
|
||||
gs_free char *item = NULL;
|
||||
|
||||
if (!args_params_check_nargs_minmax (params, 1, 2, &line_error))
|
||||
diff --git a/properties/nm-openvpn-dialog.ui b/properties/nm-openvpn-dialog.ui
|
||||
index b2ca176..5558b70 100644
|
||||
--- a/properties/nm-openvpn-dialog.ui
|
||||
+++ b/properties/nm-openvpn-dialog.ui
|
||||
@@ -1918,6 +1918,8 @@ When enabled, connection will only succeed if the server certificate matches som
|
||||
Matching can either apply to the whole certificate subject (all the fields),
|
||||
or just the Common Name (CN field).
|
||||
|
||||
+The legacy option tls-remote is deprecated and removed from OpenVPN 2.4 and newer. Do not use it anymore.
|
||||
+
|
||||
config: verify-x509-name subject-or-name [mode]
|
||||
config (legacy mode): tls-remote subject-or-name</property>
|
||||
<property name="model">model9</property>
|
||||
--
|
||||
2.9.3
|
||||
|
Loading…
Reference in new issue