]> git.ipfire.org Git - thirdparty/openvpn.git/log
thirdparty/openvpn.git
2 years agoAllows renegotiation only to start if session is fully established
Arne Schwabe [Fri, 9 Sep 2022 19:59:00 +0000 (21:59 +0200)] 
Allows renegotiation only to start if session is fully established

This change makes the state machine more strict in terms of transaction
that are allowed. The benefit of this change are twofold:

 - only allow renegotiations after pushed option handling is done,
   to ensure that pushed options which might affect renegotiation
   have been processed on both sides
   This is a prerequisite for the upcoming secure renegotiation patch set
 - avoids corner cases of a peer (or an attacker) trying to renegotiate the
   session while the original session is not fully setup. Currently there
   there are no problems known with this but it is better to avoid the
   corner case in the first time.

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Heiko Hund <heiko@ist.eigentlich.net>
Message-Id: <20220909195902.2011798-1-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25162.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoAllow Authtoken lifetime to be short than renegotiation time
Arne Schwabe [Mon, 17 Oct 2022 09:51:45 +0000 (11:51 +0200)] 
Allow Authtoken lifetime to be short than renegotiation time

Currently the life time of the auth-token is tied to the renegotiation
time.  While this is fine for many setups, some setups prefer a user
to be no longer authenticated when the user disconnects from the VPN
for a certain amount of time.

This commit allows to shorten the renewal time of the auth-token and
ensures that the server resends the auth-token often enough over the
existing control channel. This way of updating the auth token is a lot
more lightweight than the alternative (frequent renegotiations).

Patch v2: fix grammar mistakes (thanks Gert), fix unit tests

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20221017095145.2580186-1-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25407.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoChange exit signal in P2P to be a SIGUSR1 and delayed CC exit in P2MP
Arne Schwabe [Sun, 16 Oct 2022 15:49:53 +0000 (17:49 +0200)] 
Change exit signal in P2P to be a SIGUSR1 and delayed CC exit in P2MP

From the implemention of explicit-notify and the fact that it is a an
OCC message (basically the rudimentary predecessor to control channel),
this message is very old.

I think in the past this feature fit nicely to the weird inetd + openvpn
mode that seems to have far to many hacks still left in our code. With
inetd, it made sense that the server instance quits if you press C-c
on the client.

In our current state where inetd is no longer supported, this behaviour
to exit makes little sense and this patch changes the behaviour to SIGUSR1.

Testing this lead to a confused v2 of the patch and also finally the
insight that if a CC channel exit is triggered too early the remaining
control channel packets coming in after that can trigger the HMAC code
to open a sessions again if the whole session lasted less than two
minutes (with default settings).

Patch v2: use different signals for p2mp and p2p
Patch v3: use delayed exit for P2MP/CC exit and USR1 for everything else

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20221016154953.2483509-1-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25403.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoEnsure only CBC, CFB, OFB and AEAD ciphers are considered valid data ciphers
Arne Schwabe [Mon, 10 Oct 2022 15:55:15 +0000 (17:55 +0200)] 
Ensure only CBC, CFB, OFB and AEAD ciphers are considered valid data ciphers

Make sure cipher_valid only considers these four operations as valid.
This fixes that something like --data-ciphers  AES-256-GCM:AES-128-CCM
will start but later fail when trying to use the CCM cipher.

We say "a supported AEAD" mode in our error since CCM is also an AEAD mode
but one we don't support, unlike GCM.

Patch v2: add the indication if the cipher was optional into the message

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Frank Lichtenheld <frank@lichtenheld.com>
Message-Id: <20221010155515.1687151-1-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25379.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoInsert client connection data into PAM environment
Paolo Cerrito [Mon, 10 Oct 2022 12:27:46 +0000 (14:27 +0200)] 
Insert client connection data into PAM environment

OpenVPN provides the IPv4/IPv6 address of incoming client connections
to the plugin-api by means of two environment variables, $untrusted_ip
and $untrusted_ip6.  This patch adds support to plugin-auth-pam to pass
this information to the PAM stack as pam_set_item(PAM_RHOST).

v3:
- styled code as openvpn
- added check for remote, if NULL after all get_env, put to point
  to empy string

Signed-off-by: Paolo Cerrito <wardragon78@gmail.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20221010122745.19809-1-wardragon78@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25375.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoEnable -Werror on macOS builds
Arne Schwabe [Sun, 9 Oct 2022 14:00:42 +0000 (16:00 +0200)] 
Enable -Werror on macOS builds

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20221009140042.1560899-1-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25369.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoFix OpenVPN querying user/password if auth-token with user expires
Arne Schwabe [Sun, 9 Oct 2022 13:08:05 +0000 (15:08 +0200)] 
Fix OpenVPN querying user/password if auth-token with user expires

The problematic behaviour happens when starting a profile without
auth-user-pass and then connecting to a server that pushes auth-token.
When the auth token expires OpenVPN asks for auth User and password
again (but it shouldn't).

The problem is that the auth_user_pass_setup sets
auth_user_pass_enabled = true; This function is called from two places.
In ssl.c it is only called with an auth-token present or that
variable already set. The other one is init_query_passwords.

Move setting auth_user_pass_enabled to the second place to ensure it is
only set if we really want passwords.

Patch v2: Remove unrelated code change
Patch v3: Rebase to master
Patch v4: Rebase to master

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: David Sommerseth <davids@openvpn.net>
Acked-by: Heiko Hund <heiko@ist.eigentlich.net>
Message-Id: <20221009130805.1556517-1-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25367.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoget_user_pass_cr: get password from stdin if missing inline
Antonio Quartulli [Wed, 14 Sep 2022 18:59:37 +0000 (20:59 +0200)] 
get_user_pass_cr: get password from stdin if missing inline

Until now, when HTTP proxy user and password were specified inline,
it was assumed that both creds were specified. A missing password would
result in an empty password being stored.

This behaviour is not ideal, as we want to allow the user to store the
username, but let the password be entered via stdin.

This affects both http proxy and authentication inline'd creds.

Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220914185937.31423-2-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25215.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoauth-user-pass: add support for inline credentials
Antonio Quartulli [Sat, 17 Sep 2022 13:48:32 +0000 (15:48 +0200)] 
auth-user-pass: add support for inline credentials

--auth-user-pass is probably the only option expecting a filename as
argument that cannot be inline'd as of today.

This patch allows specifying username and password inline in the config
file within the <auth-user-pass></auth-user-pass> tag.

This logic was already implemented for --http-proxy-user-pass, therefore
it was just about applying it to this specific option as well.
Note that the current logic expects username and password to always be
specified when inline. Therefore omitting the password will result in
storing an empty password.

A later patch will change this behaviour to make it consistent with the
classic case (username writte in file), where the password is requested
via stdin when missing.

While a it, add an empty line between prototypes in init.c to make
uncrustify happy.

Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220917134832.16359-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25236.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoimplement --session-timeout
Dmitry Zelenkovsky [Thu, 6 Oct 2022 20:37:31 +0000 (22:37 +0200)] 
implement --session-timeout

Disconnect clients after session-timeout expires.
session-timeout can be defined in ccd files in order to limit
per-user connection time.

Signed-off-by: Dmitry Zelenkovsky <dmitry@zelenkovsky.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20221006203731.13529-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25352.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoDocument/cleanup event_timeout functions
Arne Schwabe [Thu, 6 Oct 2022 12:29:40 +0000 (14:29 +0200)] 
Document/cleanup event_timeout functions

Remove function event_timeout_clear_ret as it is unused.

Cleanup event_timeout_trigger a bit. Do an instant return false if the
timeout is not defined and inline local_now and use
event_timeout_remaining instead of local duplicated code.

Add doxygen comments for all timeout function, especially for the
event_timeout_trigger function that is hard to understand otherwise.

Patch v2: add many fixes/correction suggested by Frank

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Frank Lichtenheld <frank@lichtenheld.com>
Message-Id: <20221006122940.1202712-1-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25348.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodo not push route-ipv6 entries that are also in the iroute-ipv6 list
Antonio Quartulli [Tue, 28 Jun 2022 08:20:24 +0000 (10:20 +0200)] 
do not push route-ipv6 entries that are also in the iroute-ipv6 list

A server should push a route to a client only if there is no matching
iroute for the same client.

While this logic works fine for IPv4, there is no IPv6 counterpart.

Implement the same check for IPv6 routes and discard matching ones
from the push list.

Trac: #354
Cc: Gert Doering <gert@greenie.muc.de>
Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Heiko Hund <heiko@ist.eigentlich.net>
Message-Id: <20220628082024.19059-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24577.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodenoise tests/t_lpback.sh
Gert Doering [Tue, 4 Oct 2022 13:14:03 +0000 (15:14 +0200)] 
denoise tests/t_lpback.sh

Introduce V=<nn> levels to t_lpback.sh self test

 V=0  - do not print any output at all
 V=1  - print intro line, summary at end, and "FAIL"+Log for failing tests
 V=99 - print everything + summary

code-wise, introduce test_start() / test_end() functions which do
the $? check as well, so the actual testing code is streamlined.

v2:
  replace indent tabs with spaces
  change [ $V == 1 ] expression to [ $V = 1 ] (POSIXly correct)

Signed-off-by: Gert Doering <gert@greenie.muc.de>
Acked-by: Frank Lichtenheld <frank@lichtenheld.com>
Message-Id: <20221004131403.95597-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25332.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agouse boolean '||' to join two bools, not bitwise '|'
Gert Doering [Tue, 4 Oct 2022 14:51:42 +0000 (16:51 +0200)] 
use boolean '||' to join two bools, not bitwise '|'

FreeBSD 14 clang complains about this:

init.c:3530:13: warning: use of bitwise '|' with boolean operands
[-Wbitwise-instead-of-logical]
            platform_group_get(c->options.groupname,
&c0->platform_state_group)

^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
init.c:3530:13: note: cast one or both operands to int to silence this
warning
1 warning generated.

.. so do what it wants us to do.

Signed-off-by: Gert Doering <gert@greenie.muc.de>
Acked-by: Antonio Quartulli <a@unstable.cc>
Message-Id: <20221004145142.19091-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25333.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoun-break undo_ifconfig_ipv4()/_ipv6() on all non-linux/non-win32 platforms
Gert Doering [Tue, 4 Oct 2022 15:31:27 +0000 (17:31 +0200)] 
un-break undo_ifconfig_ipv4()/_ipv6() on all non-linux/non-win32 platforms

This commit needs a somewhat longer background story to explain the
problem...

undo_ifconfig_ipv4()/_ipv6() started their life as part of the
TARGET_LINUX (only) close_tun() function.

In commit 611fcbc48, these functions were created, to decouple IPv4/IPv6
dependency, still TARGET_LINUX only, with an #ifdef ENABLE_IPROUTE
inside, to differenciate iproute2 vs. old-style ifconfig.

Commit dc7fcd714 changed this to "the new linux API" (sitnl), calling
net_addr_ptp_v4_del() etc. - in the first branch of the #ifdef,
changing from ENABLE_IPROUTE to TARGET_LINUX, inside a TARGET_LINUX,
so the #else branch was never looked at for any platform.  The code
in that #else branch was still "the old linux ifconfig" style to
undo IPv4/IPv6 address config on the tun interface.

Now, commit 0c4d40cb8 comes along and makes undo_ifconfig_ipvX() a
global function, during the bugfix to "don't undo ifconfig if
--ifconfig-noexec is in effect".  Due to "it makes the code a lot
cleaner" undo_ifconfig*() is now called from do_close_tun_simple()
and no longer from (Linux-) close_tun().

*This* now enables the old "linux ifconfig" code to be run on
"all non-windows platforms" - running commands like

   ifconfig tun0 0.0.0.0

to remove the IPv4 address - which plain doesn't work on the BSDs
(and has not been tested anywhere else).

This all said, it's debatable whether any platforms actually NEED
this - all unixoid platforms remove IPv4/IPv6 addresses on interface
destroy time, so for non-persistant tun/tap interfaces, there is no
hard requirement to remove IP addresses on program exit.  For
persistent tun/tap (pre-create with "ifconfig tun7 create") this is
indeed useful to restore the pre-openvpn state by removing anything
OpenVPN configured.

OpenVPN up to 2.5 did not do this IP address removal on any non-Linux
platform, which is better than exec'ing an ifconfig command that does
nothing but print an error message (very annoying in t_client.sh V=1 runs).

This all said: this patch brings an implementation of undo_ifconfig_*()
for TARGET_FREEBSD ("ifconfig tunX $ip -alias"), and brings back the
old "do nothing" behaviour for all other unixoid platforms.  Tested
on FreeBSD 7.4, 12.3, 14.0.

v2: use #elif defined(TARGET_FREEBSD), otherwise it breaks other platforms

Signed-off-by: Gert Doering <gert@greenie.muc.de>
Acked-by: Antonio Quartulli <a@unstable.cc>
Message-Id: <20221004153127.527-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25337.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agointroduce V= level to manage t_client.sh output verbosity
Gert Doering [Tue, 20 Sep 2022 13:23:51 +0000 (15:23 +0200)] 
introduce V= level to manage t_client.sh output verbosity

If t_client.sh is run interactively, more verbose output is useful
to quickly see what it is doing.  If run from a CI environment, going
through lots of output for successful tests just to find the one that
failed is non-useful.

Introduce V=<n> environment variable to control output verbosity

 V=0 - do not print any per-test output at all, just overall summary
 V=1 - print single header line for each successful test
       print full output for failing tests
 V=99 - print full output, always, as before

default is V=1 now

Signed-off-by: Gert Doering <gert@greenie.muc.de>
v2:
 fix erroneous test on "-n"
 do not accumulate extra "\n" in outbuf (V=1)
 fix missing "-e" at "test failures. FAIL." message
 fix missing "\n" when including "diff" output
 fix missing "-n" when printing outbuf (= extra newline)
 (and more newlines being shuffled around)

v3:
 fix quoting on inclusion of "ifconfig/route diff", with newlines...

Acked-by: Frank Lichtenheld <frank@lichtenheld.com>
Acked-by: Antonio Quartulli <a@unstable.cc>
Message-Id: <20220920132351.27718-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25285.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agot_client: add per-instance arguments to fping
Gert Doering [Mon, 26 Sep 2022 08:11:58 +0000 (10:11 +0200)] 
t_client: add per-instance arguments to fping

In addition to global FPING_EXTRA_ARGS now also evaluate
FPING_ARGGS_<suffix>.

This can be used, for example, for a test instance for "will ToS-tagged
packets be sent properly?" by setting FPING_ARGS_2="-O 0x10".

Signed-off-by: Gert Doering <gert@greenie.muc.de>
Acked-by: Frank Lichtenheld <frank@lichtenheld.com>
Message-Id: <20220926081158.40640-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25315.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agomsvc: add branch name and commit hash to version output
Lev Stipakov [Mon, 26 Sep 2022 06:43:10 +0000 (09:43 +0300)] 
msvc: add branch name and commit hash to version output

Add a simple python script which generates header with
branch name and commit hash #defines.

While on it, fix filename in msvc-generate.vcxproj
and add proper copyright header to Makefile.mak.

Signed-off-by: Lev Stipakov <lev@openvpn.net>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220926064310.688-1-lstipakov@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25311.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agosolaris/open_tun: prevent crash when dev is empty string
Antonio Quartulli [Sat, 17 Sep 2022 12:58:11 +0000 (14:58 +0200)] 
solaris/open_tun: prevent crash when dev is empty string

This was originally reported on GH, but never dealt with.
Make sure 'ptr' is always initialized to prevent derefence of null
pointer in case of empty dev string.

While at it, change the if condition to use ptr instead of dev, since
dev is not used anymore in the logic.

Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220917125811.13549-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25235.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodco-win: support for --persist-tun
Lev Stipakov [Tue, 30 Aug 2022 10:49:58 +0000 (13:49 +0300)] 
dco-win: support for --persist-tun

Since version 0.8.0, dco-win driver added support for
DEL_PEER command, which enabled --persist-tun
implementation on client side.

Add real implementation for dco_del_peer on Windows,
which calls DEL_PEER, which clears peer state
on the driver without tearing tunnel down.

When pulled options are changed on restart,
we need to close and reopen tun device. This
is not yes supported for dco-win, so we close
tun and trigger reconnect.

Signed-off-by: Lev Stipakov <lev@openvpn.net>
Acked-by: Frank Lichtenheld <frank@lichtenheld.com>
Message-Id: <20220830104958.91-1-lstipakov@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25136.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoImplement AUTH_FAIL, TEMP message support
Arne Schwabe [Wed, 14 Sep 2022 17:01:34 +0000 (19:01 +0200)] 
Implement AUTH_FAIL, TEMP message support

This allows a server to indicate a temporary problem on the server and
allows the server to indicate how to proceed (i.e. move to the next server,
retry the same server, wait a certain time,...)

This adds options_utils.c/h to be able to unit test the new function.

Patch v2: Improve documentation, format man page better, comment that
          protocol-flags is not a user usable option.

Patch v3: cleanup parse_auth_failed_temp to use a simple const string
          instead of a buffer

Patch v4: move message + strlen(TEMP) to caller

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Heiko Hund <heiko@ist.eigentlich.net>
Message-Id: <20220914170134.2659433-1-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25210.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoImplement exit notification via control channel
Arne Schwabe [Wed, 14 Sep 2022 16:50:41 +0000 (18:50 +0200)] 
Implement exit notification via control channel

Current exit notification relies on data channel messages with specific
prefix. Adding these to new data channel modules (DCO) adds unncessary
complexity for the data for messages that from their idea belong to the
control channel anyway.

This patch adds announcing support for control channel and sending/receving
it. We use the simple EXIT message for this.

Patch v2: add comment about protocol-flags to be not a user visible option,
          fix various grammar mistakes, remove unused argument to
          receive_exit_message

Patch v3: rename data_channel_crypto_flags to imported_protocol_flags
          add tls-ekm to protocol-flags.

Patch v4: rebase, use a buffer for the code that prepares the push reply

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Heiko Hund <heiko@ist.eigentlich.net>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220914165041.2658423-1-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25209.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodelete_routes(_ipv6): avoid memleak if RT_DEFINED is not set
Antonio Quartulli [Sat, 17 Sep 2022 22:42:27 +0000 (00:42 +0200)] 
delete_routes(_ipv6): avoid memleak if RT_DEFINED is not set

In this case the function would exit without releasing the argv object
initialized via argv_new().

Move initialization of argv after thic check is performed.

While at it, also move the declaration of gc and initizlize it with
gc_new().

Reported-by: Camille Guérin <guerincamille56@gmail.com>
Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220917224227.16988-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25245.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodoc: add "ovpn-dco" to usage and man page
Lev Stipakov [Sat, 17 Sep 2022 16:34:25 +0000 (19:34 +0300)] 
doc: add "ovpn-dco" to usage and man page

While on it, remove redundant sentence
and quotation mark from --windows-driver man
description.

Signed-off-by: Lev Stipakov <lev@openvpn.net>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220917163425.351-1-lstipakov@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25240.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoAllow scripts and plugins to set a custom AUTH_FAILED message
Arne Schwabe [Wed, 24 Aug 2022 14:08:48 +0000 (16:08 +0200)] 
Allow scripts and plugins to set a custom AUTH_FAILED message

This is currently only possible when using the management interface
and the client-deny functionality.

Patch v3: add missing gc_free

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Heiko Hund <heiko@ist.eigentlich.net>
Message-Id: <20220824140848.88013-1-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25099.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoUse DCO on Windows by default
Lev Stipakov [Thu, 15 Sep 2022 10:40:28 +0000 (13:40 +0300)] 
Use DCO on Windows by default

On startup, check following conditions:

 - ovpn-dco-win driver is installed. Perform this check
   by trying to open adapter by symbolic name.

 - options are compatible with dco. Same checks as on
   Linux and FreeBSD. In addition, check that --mode server
   is not used and --windows-driver is not set to tap-windows6/wintun.

If both checks are passed, use DCO.

Move options_postprocess_mutate_invariant() call
below since it depends on selected windows driver.

dco_check_option() has side effect on Windows -
if dco is not used, it might complain "cipher chachapoly
not supported by dco, disabling dco" if chachapoly
support is missing system-wide. To not to see this,
check dco options only if dco is enabled. This means
moving dco_enabled() from dco_check_startup_option()
to one level above. We do similar thing in
multi_connection_established() before checking ccd options.

Signed-off-by: Lev Stipakov <lev@openvpn.net>
Acked-by: Frank Lichtenheld <frank@lichtenheld.com>
Message-Id: <20220915104028.188-1-lstipakov@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25221.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodoc: cleanup for --data-ciphers and related
Frank Lichtenheld [Tue, 28 Jun 2022 08:08:14 +0000 (10:08 +0200)] 
doc: cleanup for --data-ciphers and related

- Fix various formatting inconsistencies
- Remove outdated (as of 2.6) information from
  --data-ciphers and instead add a link to
  cipher negotiation chapter.
- Some drive-by fixes in related code comments
  and log messages as I was reading them.

Signed-off-by: Frank Lichtenheld <frank@lichtenheld.com>
Acked-by: Arne Schwabe <arne@rfc2549.org>
Message-Id: <20220628080814.745-1-frank@lichtenheld.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24575.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agocleanup open_tun() for TARGET_NETBSD
Gert Doering [Mon, 8 Aug 2022 15:23:44 +0000 (17:23 +0200)] 
cleanup open_tun() for TARGET_NETBSD

- NetBSD "dynamic tap" (--dev tap -> tap<number>) handling had special
  #ifdef'ed code inside open_tun_generic() - pull out, move to NetBSD
  open_tun().  Roughly the same amount of code, less #ifdef, code flow
  is more clear.

- fix one spurious warning about "remote" not being initialized

- adjust NetBSD do_open() comments to actual code - the "pre NetBSD 4.0"
  code has long be removed, but the comment was still there.

Signed-off-by: Gert Doering <gert@greenie.muc.de>
Acked-by: Antonio Quartulli <antonio@openvpn.net>
Message-Id: <20220808152344.17539-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24849.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoFreeBSD networking cleanup
Kristof Provost [Mon, 22 Aug 2022 09:28:34 +0000 (11:28 +0200)] 
FreeBSD networking cleanup

Address a few minor code review remarks:

 - use constants for the inet_ntop() buffers
 - replace argv_printf() + argv_printf_cat() with a single argv_printf()
 - net_route_v4/6 both add and remove, so adjust the error message to
   reflect that.

Signed-off-by: Kristof Provost <kprovost@netgate.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220822092834.14231-2-kprovost@netgate.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25054.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoUpdate android.txt to reflect more recent changes.
Arne Schwabe [Sun, 11 Sep 2022 14:48:34 +0000 (16:48 +0200)] 
Update android.txt to reflect more recent changes.

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220911144834.2220049-1-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25165.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoAdd OpenSSL 3.0 to mingw build
Arne Schwabe [Fri, 26 Aug 2022 15:30:26 +0000 (17:30 +0200)] 
Add OpenSSL 3.0 to mingw build

This also updates the host system to ubuntu 22.04 and remove the
ovpn-dco-win checkout as we now include the required headers in
our own repository.

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Patch v2: rebase

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220826153026.337899-1-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25131.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoAdd example script demonstrating TOTP via auth-pending
Arne Schwabe [Thu, 4 Mar 2021 11:40:18 +0000 (12:40 +0100)] 
Add example script demonstrating TOTP via auth-pending

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Patch v3: Some minor cleanups in the script (rename CNs, add more comments)

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: David Sommerseth <davids@openvpn.net>
Message-Id: <20210304114018.8442-1-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg21603.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodco.c: check certain options only on startup
Lev Stipakov [Fri, 9 Sep 2022 12:18:41 +0000 (15:18 +0300)] 
dco.c: check certain options only on startup

Following options are set on startup and cannot be changed later:

 - dev
 - dev-type
 - connections list
 - mode
 - topology

Same for system-wide availability of dco.

dco_check_option_conflict(), where those options
were checked, is also called in server mode when
client is connected. Move those checks to
dco_check_startup_option_conflict() which is only
called at startup.

Since we moved dco_enabled() check to startup,
dco_check_option_conflict() might now trigger exit
on Windows if system lacks chachapoly support.
Since dco checks only need to be performed for
dco, wrap those into "if (dco_enabled) {}".

Signed-off-by: Lev Stipakov <lev@openvpn.net>
Acked-by: Antonio Quartulli <a@unstable.cc>
Message-Id: <20220909121841.646-1-lstipakov@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25158.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodco: trigger ping timeout event only if the peer expired
Antonio Quartulli [Thu, 18 Aug 2022 14:44:31 +0000 (16:44 +0200)] 
dco: trigger ping timeout event only if the peer expired

DEL_PEER events can be sent by ovpn-dco to userspace for various reasons.
We should trigger the ping timeout reaction only if the reason was
"peer has expired".

Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220818144431.208337-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25000.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoImplement --client-crresponse script options and plugin interface
Arne Schwabe [Wed, 24 Aug 2022 11:09:30 +0000 (13:09 +0200)] 
Implement --client-crresponse script options and plugin interface

This allows scripts and plugins to parse/react to a CR_RESPONSE message

Patch V2: doc fixes, do not put script under ENABLE_PLUGIN
Patch V3: rebase
Patch V4: fix else branch of the verify_crresponse_script function
Patch V5: unify message when unable to create/write crresponse file

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Heiko Hund <heiko@ist.eigentlich.net>
Message-Id: <20220824110930.73009-1-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25089.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agomsvc: remove .filters files
Lev Stipakov [Mon, 5 Sep 2022 11:56:39 +0000 (14:56 +0300)] 
msvc: remove .filters files

Filters file defines custom logical folders in
Solution Explorer. We don't use this functionality
and it requires maintenance, so let's remove those.

While on it, remove dco linux files from VS project.

Signed-off-by: Lev Stipakov <lev@openvpn.net>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220905115639.379-1-lstipakov@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25149.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodo_persist_tuntap: remove indentation level
Lev Stipakov [Fri, 9 Sep 2022 06:41:26 +0000 (09:41 +0300)] 
do_persist_tuntap: remove indentation level

Reverse if condition - this allows us to get rid of
indentation level, which makes code easier to read.

Signed-off-by: Lev Stipakov <lev@openvpn.net>
Acked-by: Antonio Quartulli <antonio@openvpn.net>
Message-Id: <20220909064126.482-1-lstipakov@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25153.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoChange command help to match man page and implementation
Arne Schwabe [Thu, 8 Sep 2022 16:14:35 +0000 (18:14 +0200)] 
Change command help to match man page and implementation

Acked-by: Frank Lichtenheld <frank@lichtenheld.com>
Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220908161435.327109-1-frank@lichtenheld.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25151.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoAdjust Linux+FreeBSD DCO device name handling to 'non DCO linux style'
Gert Doering [Mon, 29 Aug 2022 19:01:24 +0000 (21:01 +0200)] 
Adjust Linux+FreeBSD DCO device name handling to 'non DCO linux style'

On Linux, tun devices are created according to the following algorithm
  --dev tun    -> try tun0, tun1, ... tun255, use first free
  --dev anything -> create a TUN device named "anything"
(as long as "anything" is not "null" or "tap[N]")

DCO was following the "other platform convention", where everything
not having a digit was iterated ("--dev tun-home" -> "tun-home0") -
which does not work for classic tun/tap devices on the BSDs anyway,
so is not the best model.

Adjust open_tun_dco_generic() to document expected behaviour and
do the thing.

Signed-off-by: Gert Doering <gert@greenie.muc.de>
Acked-by: Kristof Provost <kprovost@netgate.com>
Acked-by: Antonio Quartulli <a@unstable.cc>
Message-Id: <20220829190124.2636045-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25134.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodco-win: update GH Actions config file
Antonio Quartulli [Fri, 26 Aug 2022 08:41:11 +0000 (10:41 +0200)] 
dco-win: update GH Actions config file

In order to build OpenVPN with DCO support on Windows there is no need
to pull the full ovpn-dco-win source code, because we now ship the
UAPI header within OpenVPN directly. This also eliminates the need
to specify the DCO_SOURCEDIR var.

At the same time, DCO is always enabled therefore passing --enable-dco
at configure time is not needed anymore.

Signed-off-by: Lev Stipakov <lev@openvpn.net>
Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220826084111.239523-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25120.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoDCO: require valid netbits setting for non-primary iroutes.
Gert Doering [Sat, 20 Aug 2022 14:01:24 +0000 (16:01 +0200)] 
DCO: require valid netbits setting for non-primary iroutes.

The existing DCO code had extra logic for "if this is not
MR_WITH_NETBITS, set 32/128 as address length", but only for
iroute addition.  For iroute deletion, this was missing, and
subsequently iroute deletion for IPv4 host routes failed on
FreeBSD DCO (commit 3433577a99).

Iroute handling differenciates between "primary" iroutes (coming
from anm IP pool or ccd/ifconfig-push), and "non-primary" iroutes,
coming from --iroute and --iroute-ipv6 statements in per-client config.

"Primary" iroutes always use "-1" for their netbits, but since these
are not installed via DCO, this is of no concern here.  Whether these
can and should be changed needs further study on internal route
learning and cleanup.

Refactor options.c and multi.c to ensure that netbits is always set
for non-primary iroutes - and ASSERT() on this in the DCO path, so we can
find out if there might be other code violating this.

Change options.c::option_iroute() to always set netbits=32 for IPv4
host routes (options_iroute_ipv6() never differenciated).  Since
netmask_to_netbits() also insists on "-1" for host routes, change
to netmask_to_netbits2().

Remove all the extra MR_WITH_NETBITS logic from dco.c, where it should
have never appeared.

Signed-off-by: Gert Doering <gert@greenie.muc.de>
Acked-by: Kristof Provost <kprovost@netgate.com>
Acked-by: Antonio Quartulli <a@unstable.cc>
Message-Id: <20220820140124.11325-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25044.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoFix declaration of pubkeys in test_provider.c in MSVC builds
Arne Schwabe [Wed, 24 Aug 2022 16:57:18 +0000 (18:57 +0200)] 
Fix declaration of pubkeys in test_provider.c in MSVC builds

  Error: test_provider.c(74): error C2099: initializer is not a constant

Fix this issue by making the const char* to const char[]. This is probably
of one the weird array decay corner cases

I could not find another/better way around this issue.

This error only occurs when building unit tests with windows which our
normal build system does not do but my out of tree cmake build script
tries and fails.

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Frank Lichtenheld <frank@lichtenheld.com>
Message-Id: <20220824165718.102002-1-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25102.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agot_client.sh: do not require fping6
Frank Lichtenheld [Mon, 22 Aug 2022 14:18:06 +0000 (16:18 +0200)] 
t_client.sh: do not require fping6

fping and fping6 were merged in version 4.0,
released in 2017. Many recent distributions do
not include the compatibility symlink anymore.

So if we find fping but not fping6 do not error
out but assume that fping is capable of IPv6.

Signed-off-by: Frank Lichtenheld <frank@lichtenheld.com>
Acked-by: Antonio Quartulli <a@unstable.cc>
Message-Id: <20220822141806.39406-1-frank@lichtenheld.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25058.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodco-win: add documentation to README.dco.md
Antonio Quartulli [Sat, 13 Aug 2022 20:42:21 +0000 (22:42 +0200)] 
dco-win: add documentation to README.dco.md

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Signed-off-by: Lev Stipakov <lev@openvpn.net>
Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220813204224.22576-4-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24921.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodco-win: implement ovpn-dco support in P2P Windows code path
Antonio Quartulli [Thu, 25 Aug 2022 13:14:49 +0000 (16:14 +0300)] 
dco-win: implement ovpn-dco support in P2P Windows code path

With this change it is possible to use ovpn-dco-win when running OpenVPN
in client or P2P mode.

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Signed-off-by: Lev Stipakov <lev@openvpn.net>
Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220825131449.260-1-lstipakov@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25108.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoInclude libressl and macOS 12 to macOS github actions
Arne Schwabe [Mon, 22 Aug 2022 18:41:47 +0000 (20:41 +0200)] 
Include libressl and macOS 12 to macOS github actions

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220822184147.281142-2-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25065.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoGithub Actions: Add libreSSL actions
Arne Schwabe [Mon, 22 Aug 2022 18:41:46 +0000 (20:41 +0200)] 
Github Actions: Add libreSSL actions

Also we don't officially support it, it is nice to know when we break it.

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220822184147.281142-1-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25064.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoHandle EVP_MD_CTX as an opaque struct
Max Fillinger [Thu, 11 Aug 2022 12:07:22 +0000 (14:07 +0200)] 
Handle EVP_MD_CTX as an opaque struct

Building OpenVPN on the latest OpenBSD snapshot failed because EVP_MD_CTX
is an opaque struct in LibreSSL now. Therefore, call md_ctx_new() instead
of declaring them on the stack. When they're not on the stack anymore, we
don't have to call EVP_MD_CTX_init() anymore, but we need to call
EVP_MD_CTX_free() instead of cleanup.

Signed-off-by: Max Fillinger <maximilian.fillinger@foxcrypto.com>
Acked-by: Arne Schwabe <arne@rfc2549.org>
Message-Id: <20220811120722.29168-2-maximilian.fillinger@foxcrypto.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24873.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoUpdate openssl_compat.h for newer LibreSSL
Max Fillinger [Mon, 22 Aug 2022 15:40:37 +0000 (17:40 +0200)] 
Update openssl_compat.h for newer LibreSSL

LibreSSL has added some of the functions that are defined here. However,
we still need RSA_F_RSA_OSSL_PRIVATE_ENCRYPT.

v2: Change ifdef condition for RSA_F_RSA_OSSL_PRIVATE_ENCRYPT.
v3: Don't break WolfSSL.

Signed-off-by: Max Fillinger <maximilian.fillinger@foxcrypto.com>
Acked-by: Arne Schwabe <arne@rfc2549.org>
Message-Id: <20220822154037.44320-1-maximilian.fillinger@foxcrypto.com>
URL: https://www.mail-archive.com/search?l=mid&q=20220822154037.44320-1-maximilian.fillinger@foxcrypto.com
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agovcpkg: bump baseline version
Lev Stipakov [Sat, 20 Aug 2022 11:27:55 +0000 (14:27 +0300)] 
vcpkg: bump baseline version

This allows us to use newer versions of
dependencies, such as openssl 3.0.2 -> 3.0.5.

Signed-off-by: Lev Stipakov <lev@openvpn.net>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220820112755.285-1-lstipakov@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25042.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoSupport creating iroute route entries on FreeBSD
Kristof Provost [Fri, 12 Aug 2022 13:41:54 +0000 (15:41 +0200)] 
Support creating iroute route entries on FreeBSD

Signed-off-by: Kristof Provost <kprovost@netgate.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220812134154.16729-3-kprovost@netgate.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24895.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodco-win: use run-time dynamic linking for GetOverlappedResultEx
Lev Stipakov [Sat, 20 Aug 2022 08:47:19 +0000 (11:47 +0300)] 
dco-win: use run-time dynamic linking for GetOverlappedResultEx

This function is available starting from Windows 8. Calling it
"as is" causes startup error on Windows 7.

dco-win driver available on Windows 10 20H1 and newer. On older
systems installer will not show nor install the driver and dco-win code
won't be reached. It is safe to load GetOverlappedResultEx in runtime
and exit in case of error.

Signed-off-by: Lev Stipakov <lev@openvpn.net>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220820084719.243-1-lstipakov@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25038.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoFreeBSD-DCO: repair device iteration to find first free interface.
Gert Doering [Fri, 19 Aug 2022 18:24:39 +0000 (20:24 +0200)] 
FreeBSD-DCO: repair device iteration to find first free interface.

During review/update phase, FreeBSD/DCO's ability to find the first
free tun interface on "--dev tun" got broken, due to two issues:

 - create_interface() called msg(M_ERR|...), which is a fatal error
   and aborts OpenVPN, so "no retry with 'tun1' after 'tun0' failed"

   Change to M_WARN|M_ERRNO (= warning level, add strerror(errno), return).

 - open_tun_dco_generic() expects "-errno" as return value of
   open_tun_dco(), and breaks the loop on -EPERM.  create_interface()
   was returning "-1" instead (ioctl() error signalling), which happens
   to be "-EPERM" on FreeBSD.

   Change create_interface() to return -errno.

While at it, remove logging of errors from dco_freebsd.c::open_tun_dco()
(because all errors from create_interface() would be already logged there),
reducing open_tun_dco() to just a wrapper around create_interface().

Signed-off-by: Gert Doering <gert@greenie.muc.de>
Acked-by: Kristof Provost <kprovost@netgate.com>
Message-Id: <20220819182439.71531-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25034.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoDon't "undo" ifconfig on exit if it wasn't done
Max Fillinger [Wed, 10 Aug 2022 15:30:06 +0000 (17:30 +0200)] 
Don't "undo" ifconfig on exit if it wasn't done

When running with --ifconfig-noexec, OpenVPN does not execute ifconfig,
but on exit, it still tries to "undo" the configuration it would have
done. This patch fixes it by extracting an undo_ifconfig() function from
close_tun(). The undo function is called before close_tun(), but only if
--ifconfig-noexec isn't set. This is symmetric to how open_tun() and
do_ifconfig() are used.

v2: Fix tabs-vs-spaces.
v3: Fix another style mistake.
v4: Move undo_ifconfig{4,6}() out of #ifdef TARGET_LINUX.
v5: Keep ctx argument in close_tun().
v6: Fix bug in non-Linux non-Windows version of undo_ifconfig_ipv6

Signed-off-by: Max Fillinger <maximilian.fillinger@foxcrypto.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220810153006.18860-1-maximilian.fillinger@foxcrypto.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24860.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoFix auth-token usage with management-def-auth
Selva Nair [Mon, 4 Jul 2022 02:58:40 +0000 (22:58 -0400)] 
Fix auth-token usage with management-def-auth

When auth-token verify succeeds during a reauth, other auth
methods (plugin, script, management) are skipped unless
external-auth is in effect (skip_auth gets set to true).

However, in this case, the status of management-def-auth
(ks->mda_status) stays at its default value of ACF_PENDING
and will never change. This causes TLS keys to go out of sync
and an eventual client disconnect.

Further, a message saying username/password authentication is
"deferred" gets logged which is misleading.
For example:

test/127.0.0.1:35874 TLS: Username/auth-token authentication
    succeeded for username 'test'

followed by

test/127.0.0.1:35874 TLS: Username/Password authentication
    deferred for username 'test' [CN SET]

Fix by setting ks->mda_status to ACF_DISABLED, and do not
set ks->authenticated = KS_AUTH_DEFERRED when skip_auth is true.

Also log a warning message when token is marked as expired on
missing the reneg window.

Reported by: Connor Edwards <connor.edwards@b2c2.com>

Signed-off-by: Selva Nair <selva.nair@gmail.com>
Acked-by: Arne Schwabe <arne@rfc2549.org>
Message-Id: <20220704025840.2558-1-selva.nair@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24627.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodco-win: check for incompatible options
Antonio Quartulli [Fri, 19 Aug 2022 06:52:50 +0000 (08:52 +0200)] 
dco-win: check for incompatible options

At the moment dco-win doesn't support --persist-tun and --server,
so check for these options at startup time.

Signed-off-by: Antonio Quartulli <a@unstable.cc>
Signed-off-by: Lev Stipakov <lev@openvpn.net>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220819065250.222590-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25014.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodco-win: introduce low-level code for handling ovpn-dco-win in Windows
Antonio Quartulli [Sat, 13 Aug 2022 20:42:18 +0000 (22:42 +0200)] 
dco-win: introduce low-level code for handling ovpn-dco-win in Windows

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Signed-off-by: Lev Stipakov <lev@openvpn.net>
Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Lev Stipakov <lstipakov@gmail.com>
Message-Id: <20220813204224.22576-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24919.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodco: move availability check to the end of check_option_conflict() function
Antonio Quartulli [Tue, 2 Aug 2022 13:03:12 +0000 (15:03 +0200)] 
dco: move availability check to the end of check_option_conflict() function

To better arrange the order DCO option conflict messages are printed, we
decided to first perform all needed checks on provided options and, only
at the end, if no conflict was detected, to check if DCO is really
available on the system.

This way a user gets prompted with all warnings about their
configuration first and, when everything is fixed, they will see if DCO
is available or not.

While at it, compress the first check in just one if to make the code
simpler.

Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Frank Lichtenheld <frank@lichtenheld.com>
Message-Id: <20220802130312.18871-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24783.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agossl_util: fix prototype style
Antonio Quartulli [Thu, 18 Aug 2022 08:05:50 +0000 (10:05 +0200)] 
ssl_util: fix prototype style

Function prototypes should have the return type on the same line as the
function name itself. Fix this in ssl_util.h.

Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220818080550.177771-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24983.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodco.h: fix return type when DCO is not enabled
Lev Stipakov [Wed, 17 Aug 2022 20:12:23 +0000 (22:12 +0200)] 
dco.h: fix return type when DCO is not enabled

The correct return type for those functions is int,
so adjust return type accordingly for the cases
when DCO is not defined.

Signed-off-by: Lev Stipakov <lev@openvpn.net>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220817201223.302-1-lstipakov@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24968.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodco-win: ensure the DCO API is not used when running on Windows
Antonio Quartulli [Sun, 14 Aug 2022 08:51:17 +0000 (10:51 +0200)] 
dco-win: ensure the DCO API is not used when running on Windows

On Windows the high level API should still use the link_socket object to
read and write packets. For this reason, even if dco_installed is true,
we still need to rely on the classic link_socket object.

Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Lev Stipakov <lstipakov@gmail.com>
Message-Id: <20220814085117.7128-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24929.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodco: turn platform config checks into separate function
Timo Rothenpieler [Wed, 17 Aug 2022 21:08:57 +0000 (23:08 +0200)] 
dco: turn platform config checks into separate function

All the checks in there are only relevant during startup, and
specifically the capability check might cause issues when checking a CCD
config later at runtime.

So move them to their own function and call it only during startup.
Acked-by: Antonio Quartulli <a@unstable.cc>
Message-Id: <20220817210857.1558-1-timo@rothenpieler.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24969.html

Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoInclude DCO status in GLOBAL_STATS status v2 output
Arne Schwabe [Sat, 13 Aug 2022 21:11:04 +0000 (23:11 +0200)] 
Include DCO status in GLOBAL_STATS status v2 output

This is allows querying the DCO status from management interface or by
sending SIGUSR2 without doing an error-prone parsing of the startup log.

Also remove comment that serves no purpose anymore.

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Lev Stipakov <lstipakov@gmail.com>
Message-Id: <20220813211104.411554-1-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24923.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodco: don't pass VPN IPs to NEW_PEER API in P2P mode
Antonio Quartulli [Mon, 15 Aug 2022 22:39:41 +0000 (00:39 +0200)] 
dco: don't pass VPN IPs to NEW_PEER API in P2P mode

When adding a peer to a P2P interface, the VPN IPs are not really used by
DCO as there is no routing happening in this mode.

For this reason don't pass any VPN IP when adding a new peer in p2p mode.

Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220815223941.26839-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24940.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoRename OPT_P_IPWIN32 to OPT_P_DHCPDNS and include --dns in it
Arne Schwabe [Wed, 17 Aug 2022 07:59:25 +0000 (09:59 +0200)] 
Rename OPT_P_IPWIN32 to OPT_P_DHCPDNS and include --dns in it

The dns options are very similar to dhcp-option and should fall
under the same option mask. For that rename the OPT_P_IPWIN32 mask
to OPT_P_DHCPDNS and include dns in it.

This effects currently route-nopull which block all host side
network/dns configuration but did not block the new dns option.
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220817075925.815184-1-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24946.html

Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoFix IV_PLAT_VER and UV_ variables sent without push-peer-info
Arne Schwabe [Wed, 17 Aug 2022 13:53:48 +0000 (15:53 +0200)] 
Fix IV_PLAT_VER and UV_ variables sent without push-peer-info

Commit 8c72d7981 changed the push_peer_info_detail to have an
additional level for P2P NCP and shifting most of the other levels
with 1. The check for UV_ and IV_PLAT_VER was not changed accordingly.

Fixes: 8c72d7981 ("Support NCP in pure P2P VPN setups")
Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Antonio Quartulli <a@unstable.cc>
Message-Id: <20220817135348.844178-1-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24956.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodco: disable DCO if --user specified but unable to retain capabilities
Timo Rothenpieler [Wed, 17 Aug 2022 13:18:17 +0000 (15:18 +0200)] 
dco: disable DCO if --user specified but unable to retain capabilities

If run under network manager, OpenVPN starts with uid=0 and
'--user nm-openvpn', but is lacking the CAP_SETPCAP capabilities
to retain CAP_NET_ADMIN after dropping root privileges.

In DCO mode, OpenVPN must have CAP_NET_ADMIN today, always, otherwise
TLS renegotiation / key rotation will not be possible.

So, check at startup, if --user is specified, if CAP_NET_ADMIN is
permitted and CAP_SETPCAP is available.  If either of the capabilities
is missing, disable DCO.  Traditional tun/tap works with "uid=0 on
tun open, and setuid() afterwards".

Long-Term, get NM to enable OpenVPN to run with CAP_NET_ADMIN.

Debian bug report: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1017379

Signed-off-by: Timo Rothenpieler <timo@rothenpieler.org>
Tested-By: Bernhard Schmidt <berni@birkenwald.de>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220817131817.467-1-timo@rothenpieler.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24952.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoGithub Actions: update used actions
Timo Rothenpieler [Wed, 17 Aug 2022 13:23:02 +0000 (15:23 +0200)] 
Github Actions: update used actions

In the case of the Microsoft action, this fixes security relevant issues
according to their release notes:
https://github.com/microsoft/setup-msbuild/releases

Unfortunately they don't appear to be following the usual scheme of v1
referring to all v1.x.x, but instead v1 just points to v1.0.0.

The primary change with all the Github-Provided actions is the switch to a
more up-to-date NodeJS version (16). Not all that relevant when you just
use the action as is, but on top of that, the old versions are in
low-maintenance mode, and basically are considered obsolete.
Github is actively migrating people to the latest ones via dependabot
wherever they can.
Acked-by: Arne Schwabe <arne@rfc2549.org>
Message-Id: <20220817132302.538-1-timo@rothenpieler.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24954.html

Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agotun: properly handle device interface list
Lev Stipakov [Sun, 14 Aug 2022 21:53:03 +0000 (23:53 +0200)] 
tun: properly handle device interface list

Device interface is a path which is used by userspace
to access device. A driver can create one or more device
interfaces and specify "reference string", so that userspace
could enumerate all device interfaces in the list and pick
the corrct one which ends with reference string.

Before our code had an assumption that either driver
creates only one device interface or the "right" interface
is alwways first in the list. As it turned out, that assumtion
does not always hold, so here we iterate through all device
interfaces in the list.

In follow-up dco-win patch we pick the device interface
from the list which ends with specific reference string.

v3: change allocation to use regular gc_malloc() instead of buffer.

Signed-off-by: Lev Stipakov <lev@openvpn.net>
Acked-by: Antonio Quartulli <a@unstable.cc>
Message-Id: <20220814215303.305-1-lstipakov@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24938.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodco: properly name variables
Antonio Quartulli [Sat, 13 Aug 2022 20:42:24 +0000 (22:42 +0200)] 
dco: properly name variables

renamed remote_addrX variables to vpn_addrX to make it clear that they
refer to the address over the VPN/tunnel

Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220813204224.22576-7-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24916.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoerror.c: remove unused crash() function
Lev Stipakov [Sat, 13 Aug 2022 21:20:40 +0000 (00:20 +0300)] 
error.c: remove unused crash() function

This has been added in 2006 and as of now not used.

Signed-off-by: Lev Stipakov <lev@openvpn.net>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220813212040.113-1-lstipakov@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24924.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodco: move message to DCO debug level and reword a bit
Antonio Quartulli [Fri, 12 Aug 2022 13:06:57 +0000 (15:06 +0200)] 
dco: move message to DCO debug level and reword a bit

This message is purely a debug message, so it should go to the
appropriate log level. At the same time make it more clear.

Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220812130657.29899-11-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24893.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoovpn-dco: print some netlink messages to debug level
Antonio Quartulli [Fri, 12 Aug 2022 13:06:55 +0000 (15:06 +0200)] 
ovpn-dco: print some netlink messages to debug level

Netlink errors detected during dco availability detection are not really
required and can confuse the user.
Have them printed to the dco debug level.

Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220812130657.29899-9-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24892.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoApply uncrustify changes that were forgotten in the FreeBSD DCO 1/2 patch.
Gert Doering [Sat, 13 Aug 2022 12:44:38 +0000 (14:44 +0200)] 
Apply uncrustify changes that were forgotten in the FreeBSD DCO 1/2 patch.

commit f08fcc2f1eb159 has a few whitespace errors that uncrustify
complained on merge, but due to git handling mistakes, these were not
properly included in the actual commit.  Fix.

Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodo_close_tun: get rid of one level of indentation
Antonio Quartulli [Sat, 13 Aug 2022 12:04:28 +0000 (14:04 +0200)] 
do_close_tun: get rid of one level of indentation

OpenVPN often uses a multi-indentation pattern with no real gain:

if (a)
{
    if (b)
    {
        ...
    }
}

This approach makes the code harder to read because a lot of space is
eaten by indentation.

Cases like this can be easily converted by negating the first condition
and exiting immediately:

if (!a)
{
    return;
}

if (b)
{
    ...
}

Apply this change to do_close_tun() only for now in order to make the
functiona bit easier to read.

Ideally, this approach should be adopted for other parts of the code as
well.

NOTE: this patch is better viewed with "git show -w" as the real change
is only about 3 lines. The rest is indentation change.

Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220813120428.6767-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24908.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoovpn-dco: introduce FreeBSD data-channel offload support
Kristof Provost [Fri, 12 Aug 2022 13:41:53 +0000 (15:41 +0200)] 
ovpn-dco: introduce FreeBSD data-channel offload support

Implement data-channel offload for FreeBSD. The implementation and flow
is very similar to that of the Linux DCO support.

Signed-off-by: Kristof Provost <kprovost@netgate.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220812134154.16729-2-kprovost@netgate.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24894.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodo_open_tun: restyle 'can preserve TUN' check
Antonio Quartulli [Fri, 12 Aug 2022 13:06:48 +0000 (15:06 +0200)] 
do_open_tun: restyle 'can preserve TUN' check

The current condition checking if the TUN interface was preserved is
dependant on the platform being Android or not. This makes the code
reasonably ugly, especially because uncrustify can't indent properly.

On top of that, we will require an extra condition only for windows+DCO,
which will make the check even uglier.

For this reason, factor out the check in a separate function which can
keep the ifdefs craziness well hidden, while do_open_tun becomes
(a bit) cleaner.

Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Lev Stipakov <lstipakov@gmail.com>
Message-Id: <20220812130657.29899-2-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24884.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoGitHub Actions: Add new libcap-ng-dev dependency
Timo Rothenpieler [Thu, 11 Aug 2022 11:34:22 +0000 (13:34 +0200)] 
GitHub Actions: Add new libcap-ng-dev dependency

Linux builds need this now in order to retain capabilities when dropping
root privileges.
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220811113422.451-1-timo@rothenpieler.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24870.html

Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoApply uncrustify changes that were forgotten in the last patch.
Gert Doering [Thu, 11 Aug 2022 11:26:58 +0000 (13:26 +0200)] 
Apply uncrustify changes that were forgotten in the last patch.

commit 2e359a088226ab1e5 has a few whitespace errors that uncrustify
complained on merge, but due to git handling mistakes, these were not
properly included in the actual commit.  Fix.

Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoLinux: Retain CAP_NET_ADMIN when dropping privileges
Timo Rothenpieler [Sat, 14 May 2022 10:37:17 +0000 (12:37 +0200)] 
Linux: Retain CAP_NET_ADMIN when dropping privileges

On Linux, when dropping privileges, interaction with
the network configuration, such as tearing down routes
or ovpn-dco interfaces will fail when --user/--group are
used.

This patch sets the CAP_NET_ADMIN capability, which grants
the needed privileges during the lifetime of the OpenVPN
process when dropping root privileges.

Signed-off-by: Timo Rothenpieler <timo@rothenpieler.org>
Reviewed-By: David Sommerseth <davids@openvpn.net>
Acked-by: Frank Lichtenheld <frank@lichtenheld.com>
Message-Id: <20220514103717.235-1-timo@rothenpieler.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24360.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoRemove outdated information from ChangeLog, point at release branches.
Gert Doering [Wed, 10 Aug 2022 08:47:01 +0000 (10:47 +0200)] 
Remove outdated information from ChangeLog, point at release branches.

ChangeLog is not maintained in "master", document as such.

Signed-off-by: Gert Doering <gert@greenie.muc.de>
Acked-by: Arne Schwabe <arne@rfc2549.org>
Message-Id: <20220810084701.13226-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24854.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agotun.c: remove unused gc_arena from init_tun()
Lev Stipakov [Tue, 9 Aug 2022 07:22:20 +0000 (10:22 +0300)] 
tun.c: remove unused gc_arena from init_tun()

Signed-off-by: Lev Stipakov <lev@openvpn.net>
Acked-by: Antonio Quartulli <a@unstable.cc>
Message-Id: <20220809072220.255-1-lstipakov@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24851.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoconfig-version.h: remove unused includes
Frank Lichtenheld [Mon, 8 Aug 2022 08:54:11 +0000 (10:54 +0200)] 
config-version.h: remove unused includes

We only need to include this when we want the
git version.

Signed-off-by: Frank Lichtenheld <frank@lichtenheld.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220808085411.9159-1-frank@lichtenheld.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24839.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agoCleanup: get rid of 'dynamic' argument of open_tun_generic()
Gert Doering [Sun, 7 Aug 2022 19:35:35 +0000 (21:35 +0200)] 
Cleanup: get rid of 'dynamic' argument of open_tun_generic()

All callers of open_tun_generic() always set dynamic=true - so just
get rid of it.  While at it, move "int i" into the for() loop.

Signed-off-by: Gert Doering <gert@greenie.muc.de>
Acked-by: Antonio Quartulli <antonio@openvpn.net>
Message-Id: <20220807193535.15377-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24838.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodco: turn supported ciphers list into a function
Antonio Quartulli [Sun, 7 Aug 2022 10:04:04 +0000 (12:04 +0200)] 
dco: turn supported ciphers list into a function

Other platforms may need more complex logic to decide whether a cipher
is supported or not, therefore turn hardcoded list into a function that
can be implemented by each platform independently.

Signed-off-by: Lev Stipakov <lev@openvpn.net>
Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Heiko Hund <heiko@ist.eigentlich.net>
Message-Id: <20220807100404.8618-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24835.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
2 years agodco: disable DCO if --allow-compress yes/asym was specified
Antonio Quartulli [Sun, 7 Aug 2022 09:53:29 +0000 (11:53 +0200)] 
dco: disable DCO if --allow-compress yes/asym was specified

Allowing compression means that we may accept a pushable compress
setting.
This scenario can't work with DCO therefore disable it when compression
is allowed.

Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220807095329.28819-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24834.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
3 years agoopenvpnmsica: remove OpenVPNService state check code
Lev Stipakov [Thu, 28 Jul 2022 11:17:12 +0000 (14:17 +0300)] 
openvpnmsica: remove OpenVPNService state check code

This code reads the state of OpenVPNService,
such as startup mode and running, and sets MSI
property value. If that property is set, installer
selects OpenVPNService as a feature to be installed.

This has been superseded by change in installer:

  https://github.com/OpenVPN/openvpn-build/pull/261

which, in addition to checking the state of OpenVPNService,
applies that state to the newly installed service.

  - by default, OpenVPNService feature is now checked
and service is installed

  - in clean installation, service startup mode is set to "manual"
and service is not started

  - in upgrade, installer preserves the service state, such
as startup mode and started/stopped

With all those changes to installer, we don't need this code
in openvpnmsica.

Signed-off-by: Lev Stipakov <lev@openvpn.net>
Acked-by: Selva Nair <selva.nair@gmail.com>
Message-Id: <20220728111712.94-1-lstipakov@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24752.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
3 years agoReduce usage of __DATE__
Frank Lichtenheld [Thu, 4 Aug 2022 15:03:01 +0000 (17:03 +0200)] 
Reduce usage of __DATE__

To increase the reproducibility of builds
we shouldn't use __DATE__. However, for
the development builds there is some demand
for leaving this in.

So as suggested by Gert Doering go for a
compromise where we only use __DATE__ if
we also include the git information. This
will remove this information from release
builds, but not from builds done directly
from the git checkout.

Signed-off-by: Frank Lichtenheld <frank@lichtenheld.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220804150301.62856-2-frank@lichtenheld.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24807.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
3 years agodco: perform pull options check only if we pulled any option
Antonio Quartulli [Fri, 5 Aug 2022 15:08:37 +0000 (17:08 +0200)] 
dco: perform pull options check only if we pulled any option

The do_deferred_options() function is invoked also on the server side in
order to process all negotiated bits.

However, in this case we should not perform any pull options check, as
it's required only on the client side.

Move check within the "if (options.pull)" block to ensure we perform the
check only when required.

Reported-By: Gert Doering <gert@greenie.muc.de>
Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220805150837.8169-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24824.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
3 years agodco: implement dco support for p2mp/server code path
Antonio Quartulli [Fri, 5 Aug 2022 06:45:55 +0000 (08:45 +0200)] 
dco: implement dco support for p2mp/server code path

This change introduces ovpn-dco support along the p2mp/server code path.
Some code seems to be duplicate of the p2p version, but details are
different, so it couldn't be shared.

Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Heiko Hund <heiko@ist.eigentlich.net>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220805064555.13385-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24811.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
3 years agoBreak 'try 256 dco devices' loop on EPERM
Gert Doering [Thu, 4 Aug 2022 08:25:02 +0000 (10:25 +0200)] 
Break 'try 256 dco devices' loop on EPERM

If we get a permission denied error on one DCO device, trying 255 more
times will not succeed, and just fill the log file with errors.

Also, remove the msg() call there because it was at debug level
(needed --verb 4 to be seen), didn't see the correct errno, and the
sitnl code already prints the error.

v2: use "else if"

Signed-off-by: Gert Doering <gert@greenie.muc.de>
Acked-by: Antonio Quartulli <a@unstable.cc>
Message-Id: <20220804082502.1750074-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24799.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
3 years agodco: add documentation for ovpn-dco-linux
Antonio Quartulli [Fri, 5 Aug 2022 09:37:03 +0000 (11:37 +0200)] 
dco: add documentation for ovpn-dco-linux

Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Frank Lichtenheld <frank@lichtenheld.com>
Message-Id: <20220805093703.27940-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24817.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
3 years agodco: implement dco support for p2p/client code path
Antonio Quartulli [Thu, 4 Aug 2022 07:14:01 +0000 (09:14 +0200)] 
dco: implement dco support for p2p/client code path

With this change we introduce ovpn-dco support only along the p2p/client
code path. Server codebase is still unchanged.

Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220804071401.12410-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24798.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
3 years agodco: check that pulled options are compatible
Antonio Quartulli [Thu, 4 Aug 2022 06:40:16 +0000 (08:40 +0200)] 
dco: check that pulled options are compatible

A server may push options that are not compatible with DCO.
In this case we should log a message and bail out.

Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220804064016.20414-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24797.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
3 years agopush: fix compilation with --disable-management and --enable-werror
Antonio Quartulli [Wed, 3 Aug 2022 15:40:49 +0000 (17:40 +0200)] 
push: fix compilation with --disable-management and --enable-werror

The authfail_extended and buf variables are only used when
ENABLE_MANAGEMENT is defined. However, they are currently declared
outside of any ifdefs, thus triggering a warning.

Move the declaration of these 2 down, right before their usage (within
the existing "#ifdef ENABLE_MANAGEMENT" block.

Fixes: ("Cleanup receive_auth_failed and simplify method")
Cc: Arne Schwabe <arne@rfc2549.org>
Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220803154049.1213-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24792.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
3 years agodco: split option parsing routines
Antonio Quartulli [Wed, 3 Aug 2022 09:50:12 +0000 (11:50 +0200)] 
dco: split option parsing routines

DCO will try to install keys upon generating them, however, this happens
when parsing pushed cipher options (due to NCP).

For this reason we need to postpone parsing pushed cipher options to
*after* the tunnel interface has been opened, otherwise we would have
no DCO netdev object to operate on.

At the same time we split the parsing code, so that we can ensure that
the NEW_PEER call can happen after the received peer-id has been parsed
(it is required by all DCO API calls).

Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220803095012.24975-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24789.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
3 years agodco: periodically check and possibly rotate/delete keys
Antonio Quartulli [Tue, 2 Aug 2022 15:16:04 +0000 (17:16 +0200)] 
dco: periodically check and possibly rotate/delete keys

Data channel keys are periodically regenerated and installed in ovpn-dco.
However, there is a certain moment when keys are rotated in order
to elect the new primary one.

Check the key status in userspace so that kernelspace can be informed as
well when rotations happen.

Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220802151604.2801-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24785.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
3 years agoCleanup receive_auth_failed and simplify method
Arne Schwabe [Fri, 20 May 2022 21:32:48 +0000 (23:32 +0200)] 
Cleanup receive_auth_failed and simplify method

This simplifies the buffer handling in the method and adds a quick
return instead of wrapping the whole method in a if (pull) block

Patch V2: remove uncessary ifdef/endif and unnecassary block
Acked-by: Frank Lichtenheld <frank@lichtenheld.com>
Message-Id: <20220520213250.3126372-3-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24412.html

Signed-off-by: Gert Doering <gert@greenie.muc.de>
3 years agoAllow a few levels of recursion in virtual_output_callback()
Selva Nair [Thu, 28 Jul 2022 03:45:08 +0000 (23:45 -0400)] 
Allow a few levels of recursion in virtual_output_callback()

Without this, replies to commands from the management client
are sometimes lost if the server is writing when a command
comes in and leads to a recursive call to this function.

For some reason I've not been able to trigger this on Linux,
but it does sometimes happen on Windows during intense write
activity by openvpn.exe sending log lines to the management
client.

Signed-off-by: Selva Nair <selva.nair@gmail.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220728034508.15180-2-selva.nair@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24751.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
3 years agoDo not skip ERROR:/SUCCESS: response from management interface
Selva Nair [Thu, 28 Jul 2022 03:45:07 +0000 (23:45 -0400)] 
Do not skip ERROR:/SUCCESS: response from management interface

Generally we expect a response of SUCCESS: or ERROR: to every
command sent to the management interface. But, while in
the management-hold state, sending "signal foo" returns only
the following reply (with foo = SIGHUP, SIGUSR1 etc.):

>HOLD:Waiting for hold release:0

Fix by always responding

ERROR: signal 'foo' is currently ignored"
followed by the above line.

Though this is seldom seen in practice[*], such violation of the
protocol could stall clients like the GUI. So fix it.

[*] One way this happens is with SIGHUP sent before the daemon
is on hold state which it enters before the SIGHUP is received.

Signed-off-by: Selva Nair <selva.nair@gmail.com>
Acked-by: Arne Schwabe <arne@rfc2549.org>
Message-Id: <20220728034508.15180-1-selva.nair@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24750.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>