diff --git a/net/openvpn/Makefile b/net/openvpn/Makefile index a52054c1..e6530071 100644 --- a/net/openvpn/Makefile +++ b/net/openvpn/Makefile @@ -2,7 +2,7 @@ # $Id$ # PORTNAME= openvpn -PORTVERSION= 2.4.9 +PORTVERSION= 2.5.5 CATEGORIES= security net #MASTER_SITES= http://openvpn.net/release/ MASTER_SITES+= http://swupdate.openvpn.net/community/releases/ diff --git a/net/openvpn/distinfo b/net/openvpn/distinfo index 767e4abc..1318bcad 100644 --- a/net/openvpn/distinfo +++ b/net/openvpn/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1591166889 -SHA256 (openvpn-2.4.9.tar.xz) = 641f3add8694b2ccc39fd4fd92554e4f089ad16a8db6d2b473ec284839a5ebe2 -SIZE (openvpn-2.4.9.tar.xz) = 954264 +TIMESTAMP = 1645868736 +SHA256 (openvpn-2.5.5.tar.xz) = 119bd69fa0210838f6cdaa273696dc738efa200f454dbe11eb6dfb75dfb6003b +SIZE (openvpn-2.5.5.tar.xz) = 1147184 diff --git a/net/openvpn/files/patch-configure b/net/openvpn/files/patch-configure deleted file mode 100644 index 22643631..00000000 --- a/net/openvpn/files/patch-configure +++ /dev/null @@ -1,11 +0,0 @@ ---- configure.orig 2016-08-23 14:19:07 UTC -+++ configure -@@ -17160,8 +17160,6 @@ fi - $as_echo "!! WARNING !! The cmoka git submodule has not been initialized or updated. Unit testing cannot be performed." >&6; } - fi - else -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: !! WARNING !! CMake is NOT available. Unit testing cannot be performed." >&5 --$as_echo "!! WARNING !! CMake is NOT available. Unit testing cannot be performed." >&6; } - if false; then - CMOCKA_INITIALIZED_TRUE= - CMOCKA_INITIALIZED_FALSE='#' diff --git a/net/openvpn/files/patch-doc_man-sections_generic-options.rst b/net/openvpn/files/patch-doc_man-sections_generic-options.rst new file mode 100644 index 00000000..a6fecf86 --- /dev/null +++ b/net/openvpn/files/patch-doc_man-sections_generic-options.rst @@ -0,0 +1,11 @@ +--- doc/man-sections/generic-options.rst.orig 2021-10-31 16:17:17 UTC ++++ doc/man-sections/generic-options.rst +@@ -431,7 +431,7 @@ which mode OpenVPN is configured as. + able to gain control of an OpenVPN session. Though OpenVPN's security + features make this unlikely, it is provided as a second line of defense. + +- By setting ``user`` to :code:`nobody` or somebody similarly unprivileged, ++ By setting ``user`` to :code:`openvpn` or somebody similarly unprivileged, + the hostile party would be limited in what damage they could cause. Of + course once you take away privileges, you cannot return them to an + OpenVPN session. This means, for example, that if you want to reset an diff --git a/net/openvpn/files/patch-doc_openvpn.8 b/net/openvpn/files/patch-doc_openvpn.8 new file mode 100644 index 00000000..a536dae7 --- /dev/null +++ b/net/openvpn/files/patch-doc_openvpn.8 @@ -0,0 +1,20 @@ +--- doc/openvpn.8.orig 2021-10-05 05:57:01 UTC ++++ doc/openvpn.8 +@@ -358,7 +358,7 @@ lower priority, \fBn\fP less than zero is higher prior + .B \-\-persist\-key + Don\(aqt re\-read key files across \fBSIGUSR1\fP or \fB\-\-ping\-restart\fP\&. + .sp +-This option can be combined with \fB\-\-user nobody\fP to allow restarts ++This option can be combined with \fB\-\-user openvpn\fP to allow restarts + triggered by the \fBSIGUSR1\fP signal. Normally if you drop root + privileges in OpenVPN, the daemon cannot be restarted since it will now + be unable to re\-read protected key files. +@@ -577,7 +577,7 @@ useful to protect the system in the event that some ho + able to gain control of an OpenVPN session. Though OpenVPN\(aqs security + features make this unlikely, it is provided as a second line of defense. + .sp +-By setting \fBuser\fP to \fBnobody\fP or somebody similarly unprivileged, ++By setting \fBuser\fP to \fBopenvpn\fP or somebody similarly unprivileged, + the hostile party would be limited in what damage they could cause. Of + course once you take away privileges, you cannot return them to an + OpenVPN session. This means, for example, that if you want to reset an diff --git a/net/openvpn/files/patch-doc_openvpn.8.html b/net/openvpn/files/patch-doc_openvpn.8.html new file mode 100644 index 00000000..5b1e8e80 --- /dev/null +++ b/net/openvpn/files/patch-doc_openvpn.8.html @@ -0,0 +1,20 @@ +--- doc/openvpn.8.html.orig 2021-10-05 05:57:01 UTC ++++ doc/openvpn.8.html +@@ -650,7 +650,7 @@ lower priority, n le + + --persist-key +

Don't re-read key files across SIGUSR1 or --ping-restart.

+-

This option can be combined with --user nobody to allow restarts ++

This option can be combined with --user openvpn to allow restarts + triggered by the SIGUSR1 signal. Normally if you drop root + privileges in OpenVPN, the daemon cannot be restarted since it will now + be unable to re-read protected key files.

+@@ -824,7 +824,7 @@ initialization, dropping privileges in the process. Th + useful to protect the system in the event that some hostile party was + able to gain control of an OpenVPN session. Though OpenVPN's security + features make this unlikely, it is provided as a second line of defense.

+-

By setting user to nobody or somebody similarly unprivileged, ++

By setting user to openvpn or somebody similarly unprivileged, + the hostile party would be limited in what damage they could cause. Of + course once you take away privileges, you cannot return them to an + OpenVPN session. This means, for example, that if you want to reset an diff --git a/net/openvpn/files/patch-git-098edbb1f5a2e1360fd6a4ae0642b63bec12e992 b/net/openvpn/files/patch-git-098edbb1f5a2e1360fd6a4ae0642b63bec12e992 deleted file mode 100644 index b563b279..00000000 --- a/net/openvpn/files/patch-git-098edbb1f5a2e1360fd6a4ae0642b63bec12e992 +++ /dev/null @@ -1,136 +0,0 @@ -From 098edbb1f5a2e1360fd6a4ae0642b63bec12e992 Mon Sep 17 00:00:00 2001 -From: Jeremy Evans -Date: Wed, 20 May 2020 11:34:04 -0700 -Subject: [PATCH] Switch assertion failure to returning false - -This assertion failure can be hit in production, which causes the -openvpn server process to stop and all clients to be disconnected. -Bug #1270 has been filed for this issue on Trac by another user -who has experienced the issue, and this patch attempts to address it. - -Tracing callers, it appears that some callers check ks->authenticated -before calling, but others do not. It may be possible to add the check -for the callers that do not check, but this seems to be a simpler -solution. - -To give some background, we hit this assertion failure, with the -following log output: - -``` -Tue May 19 15:57:05 2020 username/73.135.141.11:1194 PUSH: Received -control message: 'PUSH_REQUEST' -Tue May 19 15:57:05 2020 username/73.135.141.11:1194 SENT CONTROL -[username]: 'PUSH_REPLY,redirect-gateway -def1,comp-lzo,persist-key,persist-tun,route-gateway 10.28.47.1,topology -subnet,ping 10,ping-restart 120,ifconfig 10.28.47.38 255.255.255.0,peer-id -89' (status=1) -Tue May 19 15:57:05 2020 username/73.135.141.11:1194 Assertion failed at -/path/to/openvpn-2.4.7/src/openvpn/ssl.c:1944 (ks->authenticated) -Tue May 19 15:57:05 2020 username/73.135.141.11:1194 Exiting due to fatal -error -Tue May 19 15:57:05 2020 username/73.135.141.11:1194 Closing TUN/TAP -interface -``` - -using the following OpenVPN server configuration: - -``` -port 1194 -proto udp -dev-type tun -ca ca.crt -cert server.crt -key server.key -dh dh.pem -topology subnet -push "redirect-gateway def1" -push "comp-lzo" -push "persist-key" -push "persist-tun" -keepalive 10 120 -comp-lzo -user nobody -group nobody -persist-key -persist-tun -cd /home/openvpn/server -chroot /var/empty -daemon -verb 3 -crl-verify crl.pem -tls-auth ta.key 0 -cipher AES-256-CBC -tls-version-min 1.2 -tls-cipher ECDHE-RSA-AES256-GCM-SHA384 -ncp-disable -mute-replay-warnings -script-security 3 -auth-user-pass-verify "ldap-auth/ldap-auth" via-env -auth-user-pass-optional -``` - -and the following command line options: - -``` ---config openvpn.conf --dev tun1 --local 206.131.72.52 \ ---log-append openvpn.log --status openvpn-status.log \ ---server 10.28.47.0 255.255.255.0 -``` - -The failed assertion is inside the function -`tls_session_generate_data_channel_keys`, which is called 3 other places -in `ssl.c.`: - -* `key_method_2_write`: checks for `ks->authenticated` before calling - -* `key_method_2_read`: appears to run in client mode but not in server - mode - -* `tls_session_update_crypto_params`: runs in server mode and does not - check before calling - -That leads me to believe the problem caller is -`tls_session_update_crypto_params`. There.s three callers of -`tls_session_update_crypto_params`:. - -* `incoming_push_message` (`push.c`): Probably this caller, since the - server pushes configuration to clients, and the log shows the - assertion failure right after the push reply. - -* `multi_process_file_closed` (`multi.c`): Not this caller. NCP is - disabled in config, and async push was not enabled when compiling. - -* `do_deferred_options` (`init.c`): Not this caller. The server - configuration doesn't pull. - -Changing the assertion to returning false appears to be the simplest -fix. Another approach would be changing callers to check -`ks->authenticated` before calling, either -`tls_session_update_crypto_params` or `incoming_push_message`. - -Signed-off-by: Jeremy Evans -Acked-by: Steffan Karger -Message-Id: <20200520183404.54822-1-code@jeremyevans.net> -URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg19914.html -Signed-off-by: Gert Doering -(cherry picked from commit 984bd1e1601e4b9562dbc88b02a8db60b884286f) ---- - src/openvpn/ssl.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/src/openvpn/ssl.c b/src/openvpn/ssl.c -index cf6689982..215147f37 100644 ---- ./src/openvpn/ssl.c -+++ ./src/openvpn/ssl.c -@@ -1941,7 +1941,10 @@ tls_session_generate_data_channel_keys(struct tls_session *session) - const struct session_id *server_sid = !session->opt->server ? - &ks->session_id_remote : &session->session_id; - -- ASSERT(ks->authenticated); -+ if (!ks->authenticated) { -+ msg(D_TLS_ERRORS, "TLS Error: key_state not authenticated"); -+ goto cleanup; -+ } - - ks->crypto_options.flags = session->opt->crypto_flags; - if (!generate_key_expansion(&ks->crypto_options.key_ctx_bi, diff --git a/net/openvpn/files/patch-git-38b46e6bf65489c2c5d75da1c02a3a1c33e6da88 b/net/openvpn/files/patch-git-38b46e6bf65489c2c5d75da1c02a3a1c33e6da88 deleted file mode 100644 index f798c6cd..00000000 --- a/net/openvpn/files/patch-git-38b46e6bf65489c2c5d75da1c02a3a1c33e6da88 +++ /dev/null @@ -1,61 +0,0 @@ -From 38b46e6bf65489c2c5d75da1c02a3a1c33e6da88 Mon Sep 17 00:00:00 2001 -From: Selva Nair -Date: Thu, 20 Feb 2020 22:00:28 -0500 -Subject: [PATCH] Persist management-query-remote and proxy prompts - -Currently this prompt is only output once, not re-written to the -management interface when the management client connects. It is thus -not seen by a client that connects after the prompt is output or one that -disconnects and reconnects. This leads to a deadlock: the daemon waiting -for the "remote" command from the client, the latter not aware of it. - -Resolve by adding the ">REMOTE" and ">PROXY" prompt to -man.persist.special_state_msg as done for other persisted prompts such -as ">PASSWORD" - -Signed-off-by: Selva Nair -Acked-by: Gert Doering -Message-Id: <1582254028-7763-1-git-send-email-selva.nair@gmail.com> -URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg19497.html -Signed-off-by: Gert Doering -(cherry picked from commit 93ba6ccddafcc87f336f50dadde144ea4f6178ad) ---- - src/openvpn/init.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/src/openvpn/init.c b/src/openvpn/init.c -index 8bac74f97..e153682ed 100644 ---- ./src/openvpn/init.c -+++ ./src/openvpn/init.c -@@ -269,6 +269,7 @@ ce_management_query_proxy(struct context *c) - buf_printf(&out, ">PROXY:%u,%s,%s", (l ? l->current : 0) + 1, - (proto_is_udp(ce->proto) ? "UDP" : "TCP"), np(ce->remote)); - management_notify_generic(management, BSTR(&out)); -+ management->persist.special_state_msg = BSTR(&out); - } - ce->flags |= CE_MAN_QUERY_PROXY; - while (ce->flags & CE_MAN_QUERY_PROXY) -@@ -280,6 +281,7 @@ ce_management_query_proxy(struct context *c) - break; - } - } -+ management->persist.special_state_msg = NULL; - gc_free(&gc); - } - -@@ -349,6 +351,7 @@ ce_management_query_remote(struct context *c) - buf_printf(&out, ">REMOTE:%s,%s,%s", np(ce->remote), ce->remote_port, - proto2ascii(ce->proto, ce->af, false)); - management_notify_generic(management, BSTR(&out)); -+ management->persist.special_state_msg = BSTR(&out); - - ce->flags &= ~(CE_MAN_QUERY_REMOTE_MASK << CE_MAN_QUERY_REMOTE_SHIFT); - ce->flags |= (CE_MAN_QUERY_REMOTE_QUERY << CE_MAN_QUERY_REMOTE_SHIFT); -@@ -362,6 +365,7 @@ ce_management_query_remote(struct context *c) - break; - } - } -+ management->persist.special_state_msg = NULL; - } - gc_free(&gc); - diff --git a/net/openvpn/files/patch-git-b89e48b015e581a4a0f5c306e2ab20da34c862ea b/net/openvpn/files/patch-git-b89e48b015e581a4a0f5c306e2ab20da34c862ea deleted file mode 100644 index de810ca5..00000000 --- a/net/openvpn/files/patch-git-b89e48b015e581a4a0f5c306e2ab20da34c862ea +++ /dev/null @@ -1,214 +0,0 @@ -From b89e48b015e581a4a0f5c306e2ab20da34c862ea Mon Sep 17 00:00:00 2001 -From: Selva Nair -Date: Tue, 24 Jul 2018 22:34:53 -0400 -Subject: [PATCH] Parse static challenge response in auth-pam plugin - -If static challenge is in use, the password passed to the plugin by openvpn -is of the form "SCRV1:base64-pass:base64-response". Parse this string to -separate it into password and response and use them to respond to queries -in the pam conversation function. - -On the plugin parameters line the substitution keyword for the static -challenge response is "OTP". For example, for pam config named "test" that -prompts for "user", "password" and "pin", use - -plugin openvpn-auth-pam.so "test user USERNAME password PASSWORD pin OTP" - -Signed-off-by: Selva Nair - -Acked-by: Gert Doering -Message-Id: <1532486093-24793-1-git-send-email-selva.nair@gmail.com> -URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg17307.html -Signed-off-by: Gert Doering -(cherry picked from commit 7369d01bf360bcfa02f26c05b86dde5496d120f6) ---- - src/plugins/auth-pam/README.auth-pam | 15 ++++-- - src/plugins/auth-pam/auth-pam.c | 75 +++++++++++++++++++++++++++- - 2 files changed, 84 insertions(+), 6 deletions(-) - -diff --git a/src/plugins/auth-pam/README.auth-pam b/src/plugins/auth-pam/README.auth-pam -index e12369021..908156542 100644 ---- a/src/plugins/auth-pam/README.auth-pam -+++ ./src/plugins/auth-pam/README.auth-pam -@@ -36,19 +36,20 @@ pairs to answer PAM module queries. - - For example: - -- plugin openvpn-auth-pam.so "login login USERNAME password PASSWORD" -+ plugin openvpn-auth-pam.so "login login USERNAME password PASSWORD pin OTP" - - tells auth-pam to (a) use the "login" PAM module, (b) answer a --"login" query with the username given by the OpenVPN client, and --(c) answer a "password" query with the password given by the --OpenVPN client. This provides flexibility in dealing with the different -+"login" query with the username given by the OpenVPN client, -+(c) answer a "password" query with the password, and (d) answer a -+"pin" query with the OTP given by the OpenVPN client. -+This provides flexibility in dealing with different - types of query strings which different PAM modules might generate. - For example, suppose you were using a PAM module called - "test" which queried for "name" rather than "login": - - plugin openvpn-auth-pam.so "test name USERNAME password PASSWORD" - --While "USERNAME" "COMMONNAME" and "PASSWORD" are special strings which substitute -+While "USERNAME" "COMMONNAME" "PASSWORD" and "OTP" are special strings which substitute - to client-supplied values, it is also possible to name literal values - to use as PAM module query responses. For example, suppose that the - login module queried for a third parameter, "domain" which -@@ -61,6 +62,10 @@ the operation of this plugin: - - client-cert-not-required - username-as-common-name -+ static-challenge -+ -+Use of --static challenege is required to pass a pin (represented by "OTP" in -+parameter substituion) or a second password. - - Run OpenVPN with --verb 7 or higher to get debugging output from - this plugin, including the list of queries presented by the -diff --git a/src/plugins/auth-pam/auth-pam.c b/src/plugins/auth-pam/auth-pam.c -index 5ba4dc4cb..1324307f1 100644 ---- a/src/plugins/auth-pam/auth-pam.c -+++ ./src/plugins/auth-pam/auth-pam.c -@@ -6,6 +6,7 @@ - * packet compression. - * - * Copyright (C) 2002-2018 OpenVPN Inc -+ * Copyright (C) 2016-2018 Selva Nair - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 -@@ -64,6 +65,7 @@ - - /* Pointers to functions exported from openvpn */ - static plugin_secure_memzero_t plugin_secure_memzero = NULL; -+static plugin_base64_decode_t plugin_base64_decode = NULL; - - /* - * Plugin state, used by foreground -@@ -87,6 +89,7 @@ struct auth_pam_context - * "USERNAME" -- substitute client-supplied username - * "PASSWORD" -- substitute client-specified password - * "COMMONNAME" -- substitute client certificate common name -+ * "OTP" -- substitute static challenge response if available - */ - - #define N_NAME_VALUE 16 -@@ -111,6 +114,7 @@ struct user_pass { - char username[128]; - char password[128]; - char common_name[128]; -+ char response[128]; - - const struct name_value_list *name_value_list; - }; -@@ -276,6 +280,66 @@ name_value_match(const char *query, const char *match) - return strncasecmp(match, query, strlen(match)) == 0; - } - -+/* -+ * Split and decode up->password in the form SCRV1:base64_pass:base64_response -+ * into pass and response and save in up->password and up->response. -+ * If the password is not in the expected format, input is not changed. -+ */ -+static void -+split_scrv1_password(struct user_pass *up) -+{ -+ const int skip = strlen("SCRV1:"); -+ if (strncmp(up->password, "SCRV1:", skip) != 0) -+ { -+ return; -+ } -+ -+ char *tmp = strdup(up->password); -+ if (!tmp) -+ { -+ fprintf(stderr, "AUTH-PAM: out of memory parsing static challenge password\n"); -+ goto out; -+ } -+ -+ char *pass = tmp + skip; -+ char *resp = strchr(pass, ':'); -+ if (!resp) /* string not in SCRV1:xx:yy format */ -+ { -+ goto out; -+ } -+ *resp++ = '\0'; -+ -+ int n = plugin_base64_decode(pass, up->password, sizeof(up->password)-1); -+ if (n > 0) -+ { -+ up->password[n] = '\0'; -+ n = plugin_base64_decode(resp, up->response, sizeof(up->response)-1); -+ if (n > 0) -+ { -+ up->response[n] = '\0'; -+ if (DEBUG(up->verb)) -+ { -+ fprintf(stderr, "AUTH-PAM: BACKGROUND: parsed static challenge password\n"); -+ } -+ goto out; -+ } -+ } -+ -+ /* decode error: reinstate original value of up->password and return */ -+ plugin_secure_memzero(up->password, sizeof(up->password)); -+ plugin_secure_memzero(up->response, sizeof(up->response)); -+ strcpy(up->password, tmp); /* tmp is guaranteed to fit in up->password */ -+ -+ fprintf(stderr, "AUTH-PAM: base64 decode error while parsing static challenge password\n"); -+ -+out: -+ if (tmp) -+ { -+ plugin_secure_memzero(tmp, strlen(tmp)); -+ free(tmp); -+ } -+} -+ - OPENVPN_EXPORT int - openvpn_plugin_open_v3(const int v3structver, - struct openvpn_plugin_args_open_in const *args, -@@ -316,6 +380,7 @@ openvpn_plugin_open_v3(const int v3structver, - - /* Save global pointers to functions exported from openvpn */ - plugin_secure_memzero = args->callbacks->plugin_secure_memzero; -+ plugin_base64_decode = args->callbacks->plugin_base64_decode; - - /* - * Make sure we have two string arguments: the first is the .so name, -@@ -599,6 +664,10 @@ my_conv(int n, const struct pam_message **msg_array, - { - aresp[i].resp = searchandreplace(match_value, "COMMONNAME", up->common_name); - } -+ else if (strstr(match_value, "OTP")) -+ { -+ aresp[i].resp = searchandreplace(match_value, "OTP", up->response); -+ } - else - { - aresp[i].resp = strdup(match_value); -@@ -787,6 +856,9 @@ pam_server(int fd, const char *service, int verb, const struct name_value_list * - #endif - } - -+ /* If password is of the form SCRV1:base64:base64 split it up */ -+ split_scrv1_password(&up); -+ - if (pam_auth(service, &up)) /* Succeeded */ - { - if (send_control(fd, RESPONSE_VERIFY_SUCCEEDED) == -1) -@@ -818,10 +890,11 @@ pam_server(int fd, const char *service, int verb, const struct name_value_list * - command); - goto done; - } -+ plugin_secure_memzero(up.response, sizeof(up.response)); - } - done: -- - plugin_secure_memzero(up.password, sizeof(up.password)); -+ plugin_secure_memzero(up.response, sizeof(up.response)); - #ifdef USE_PAM_DLOPEN - dlclose_pam(); - #endif diff --git a/net/openvpn/files/patch-git-cab48ad43eaba51c54fa23e55b0b2eb436dd921f b/net/openvpn/files/patch-git-cab48ad43eaba51c54fa23e55b0b2eb436dd921f deleted file mode 100644 index 8ba8e7f2..00000000 --- a/net/openvpn/files/patch-git-cab48ad43eaba51c54fa23e55b0b2eb436dd921f +++ /dev/null @@ -1,40 +0,0 @@ -From cab48ad43eaba51c54fa23e55b0b2eb436dd921f Mon Sep 17 00:00:00 2001 -From: Selva Nair -Date: Tue, 7 Aug 2018 22:44:31 -0400 -Subject: [PATCH] Accept empty password and/or response in auth-pam plugin - -In the auth-pam plugin correctly parse the static challenge string -even when password or challenge response is empty. - -Whether an empty user input is an error is determined by the PAM -conversation function depending on whether the PAM module queries -for it or not. - -Signed-off-by: Selva Nair -Acked-by: Gert Doering -Message-Id: <1533696271-21799-2-git-send-email-selva.nair@gmail.com> -URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg17382.html -Signed-off-by: Gert Doering -(cherry picked from commit 7a8109023f4c345fe12f23421c5fa7e88e1ea85b) ---- - src/plugins/auth-pam/auth-pam.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/plugins/auth-pam/auth-pam.c b/src/plugins/auth-pam/auth-pam.c -index 1324307f1..88b53204b 100644 ---- a/src/plugins/auth-pam/auth-pam.c -+++ ./src/plugins/auth-pam/auth-pam.c -@@ -310,11 +310,11 @@ split_scrv1_password(struct user_pass *up) - *resp++ = '\0'; - - int n = plugin_base64_decode(pass, up->password, sizeof(up->password)-1); -- if (n > 0) -+ if (n >= 0) - { - up->password[n] = '\0'; - n = plugin_base64_decode(resp, up->response, sizeof(up->response)-1); -- if (n > 0) -+ if (n >= 0) - { - up->response[n] = '\0'; - if (DEBUG(up->verb)) diff --git a/net/openvpn/files/patch-git-fc0297143494e0a0f08564d90dbb210669d0abf5 b/net/openvpn/files/patch-git-fc0297143494e0a0f08564d90dbb210669d0abf5 deleted file mode 100644 index c946f8c7..00000000 --- a/net/openvpn/files/patch-git-fc0297143494e0a0f08564d90dbb210669d0abf5 +++ /dev/null @@ -1,28 +0,0 @@ -From fc0297143494e0a0f08564d90dbb210669d0abf5 Mon Sep 17 00:00:00 2001 -From: Antonio Quartulli -Date: Sat, 30 May 2020 02:05:54 +0200 -Subject: [PATCH] pool: prevent IPv6 pools to be larger than 2^16 addresses - -Signed-off-by: Antonio Quartulli -Acked-by: Gert Doering -Message-Id: <20200530000600.1680-2-a@unstable.cc> -URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg19945.html -Signed-off-by: Gert Doering -(cherry picked from commit 81d66a1f14d4be3282dd648ecc2049658e3a65ed) ---- - src/openvpn/pool.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/openvpn/pool.c b/src/openvpn/pool.c -index da28bc06b..e45bf88a2 100644 ---- ./src/openvpn/pool.c -+++ ./src/openvpn/pool.c -@@ -183,7 +183,7 @@ ifconfig_pool_init(int type, in_addr_t start, in_addr_t end, - if (pool->ipv6) - { - pool->base_ipv6 = ipv6_base; -- pool->size_ipv6 = ipv6_netbits>96 ? ( 1<<(128-ipv6_netbits) ) -+ pool->size_ipv6 = ipv6_netbits > 112 ? (1 << (128 - ipv6_netbits)) - : IFCONFIG_POOL_MAX; - - msg( D_IFCONFIG_POOL, "IFCONFIG POOL IPv6: (IPv4) size=%d, size_ipv6=%d, netbits=%d, base_ipv6=%s", diff --git a/net/openvpn/files/patch-src_openvpn_ssl__openssl.c b/net/openvpn/files/patch-src_openvpn_ssl__openssl.c deleted file mode 100644 index 6d66949a..00000000 --- a/net/openvpn/files/patch-src_openvpn_ssl__openssl.c +++ /dev/null @@ -1,69 +0,0 @@ -In the corner case that the global OpenSSL has an invalid command like - - MinProtocol = TLSv1.0 - -(Due to OpenSSL's idiosyncrasies MinProtocol = TLSv1 would be correct) - -the SSL_ctx_new function leaves the errors for parsing the config file -on the stack. - -OpenSSL: error:14187180:SSL routines:ssl_do_config:bad value - -Since the later functions, especially the one of loading the -certificates expected a clean error this error got reported at the -wrong place. - -Print the warnings with crypto_msg when we detect that we are in this -situation (this also clears the stack). ---- - src/openvpn/ssl_openssl.c | 10 ++++++++++ - 1 file changed, 10 insertions(+) - -Acked-by: Gert Doering - -"Explanation and Code make sense, Debian testing confirmed it fixes -the problem observed" (which was a user error in the end, but led to an -unexpected error in openvpn). - -Basic client test run with openssl 1.1.1 on Linux/Gentoo. - -Your patch has been applied to the master and release/2.4 branch. - -commit 75aa88af774abaa168bf72e43e1dbb57be14c044 (master) -commit 125654bfa6f99a251b581522182e85748dd8043a (release/2.4) -Author: Arne Schwabe -Date: Tue Apr 21 12:11:22 2020 +0200 - - Fix tls_ctx_client/server_new leaving error on OpenSSL error stack - - Acked-by: Gert Doering - Message-Id: <20200421101122.24284-1-arne@rfc2549.org> - URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg19802.html - Signed-off-by: Gert Doering - ---- src/openvpn/ssl_openssl.c.orig 2020-04-16 13:26:45 UTC -+++ src/openvpn/ssl_openssl.c -@@ -110,6 +110,11 @@ tls_ctx_server_new(struct tls_root_ctx *ctx) - { - crypto_msg(M_FATAL, "SSL_CTX_new SSLv23_server_method"); - } -+ if (ERR_peek_error() != 0) -+ { -+ crypto_msg(M_WARN, "Warning: TLS server context initialisation " -+ "has warnings."); -+ } - } - - void -@@ -122,6 +127,11 @@ tls_ctx_client_new(struct tls_root_ctx *ctx) - if (ctx->ctx == NULL) - { - crypto_msg(M_FATAL, "SSL_CTX_new SSLv23_client_method"); -+ } -+ if (ERR_peek_error() != 0) -+ { -+ crypto_msg(M_WARN, "Warning: TLS client context initialisation " -+ "has warnings."); - } - } - diff --git a/net/openvpn/files/patch-src_plugins_auth-pam_auth-pam.c b/net/openvpn/files/patch-src_plugins_auth-pam_auth-pam.c new file mode 100644 index 00000000..633bc0f0 --- /dev/null +++ b/net/openvpn/files/patch-src_plugins_auth-pam_auth-pam.c @@ -0,0 +1,10 @@ +--- src/plugins/auth-pam/auth-pam.c.orig 2021-06-21 04:44:39 UTC ++++ src/plugins/auth-pam/auth-pam.c +@@ -39,6 +39,7 @@ + #include + #include + #include ++#include + #include + #include + #include diff --git a/net/openvpn/files/patch-tests__t_cltsrv.sh b/net/openvpn/files/patch-tests__t_cltsrv.sh index e1dcb3ca..9d0af369 100644 --- a/net/openvpn/files/patch-tests__t_cltsrv.sh +++ b/net/openvpn/files/patch-tests__t_cltsrv.sh @@ -40,7 +40,7 @@ + add='proto udp6 ' +fi +for i in server client ; do -+ sed -e "s/localhost/$2/" -e "/^remote /a\\ ++ sed -e "s|localhost|${2%/*}|" -e "/^remote /a\\ +$add" ${root}/sample-config-files/loopback-$i \ + >${root}/sample-config-files/loopback-$i.test +done diff --git a/net/openvpn/pkg-plist b/net/openvpn/pkg-plist index 4416425b..73714ea7 100644 --- a/net/openvpn/pkg-plist +++ b/net/openvpn/pkg-plist @@ -1,25 +1,16 @@ -sbin/openvpn +include/openvpn-msg.h include/openvpn-plugin.h - lib/openvpn/plugins/openvpn-plugin-auth-pam.la lib/openvpn/plugins/openvpn-plugin-auth-pam.so lib/openvpn/plugins/openvpn-plugin-down-root.la lib/openvpn/plugins/openvpn-plugin-down-root.so - -share/doc/openvpn/README.auth-pam -share/doc/openvpn/README.down-root -share/doc/openvpn/management-notes.txt - +man/man5/openvpn-examples.5.gz +man/man8/openvpn.8.gz +sbin/openvpn +share/examples/openvpn/client.conf +share/examples/openvpn/server.conf +share/examples/openvpn/tls-home.conf +share/examples/openvpn/tls-office.conf @dir lib/openvpn/plugins @dir lib/openvpn -@dir share/doc/openvpn -@dir share/doc - -%%EXAMPLESDIR%%/client.conf -%%EXAMPLESDIR%%/server.conf -%%EXAMPLESDIR%%/static-home.conf -%%EXAMPLESDIR%%/static-office.conf -%%EXAMPLESDIR%%/tls-home.conf -%%EXAMPLESDIR%%/tls-office.conf -@dir %%EXAMPLESDIR%% - +@dir share/examples/openvpn