0
0
mirror of https://github.com/OpenVPN/openvpn3.git synced 2024-09-19 19:52:15 +02:00
Commit Graph

4093 Commits

Author SHA1 Message Date
Razvan Cojocaru
6b56849c87 Add default virtual destructors to base classes with virtual functions
Without this fix, the openvpn3-linux build is broken whenever a
dependency enables -Wnon-virtual-dtor (which protobuf 27.3
currently does on Arch Linux). The openvpn3-linux build treats
warnings as errors.

Jira: OVPN3-1242
Signed-off-by: Razvan Cojocaru <razvan.cojocaru@openvpn.com>
(cherry picked from commit 6217fa0e1a)
2024-08-20 19:32:30 +02:00
David Sommerseth
8ced530d72
Merge OpenVPN 3 Core Library version 3.10 into released
Signed-off-by: David Sommerseth <davids@openvpn.net>
2024-08-15 17:28:38 +02:00
David Sommerseth
22369c80d6
Release: OpenVPN 3 Core Library, version 3.10
Signed-off-by: David Sommerseth <davids@openvpn.net>
2024-08-15 16:33:01 +02:00
Arne Schwabe
b201027807 Do not reject control message with trailing newlines
The previous fix to reject invalid control message was a bit too aggressive
as scripts often accidentally include an extra newline at the end of the
control message.

Jira: OVPN3-1225
Signed-off-by: Arne Schwabe <arne@openvpn.net>
2024-07-05 12:54:03 +02:00
Lev Stipakov
5022f305f5 aws: account for RandomAPI change
Signed-off-by: Lev Stipakov <lev@openvpn.net>
2024-06-26 11:06:20 +00:00
Arne Schwabe
dca41905a5
Allow disabling TLS 1.3 in certcheck to more easily debug problems
Jira: OVPN3-1216
Signed-off-by: Arne Schwabe <arne@openvpn.net>
2024-06-25 19:06:31 +02:00
Arne Schwabe
2747bfc1d1
Implement changes to allow test dpc certcheck to be tested
Signed-off-by: Arne Schwabe <arne@openvpn.net>
2024-06-25 19:06:14 +02:00
Arne Schwabe
fdead3f04c
Allow setting a maximum TLS version
This is something useful for debugging. We do not expose this feature
to avoid it being used for real connections.

Signed-off-by: Arne Schwabe <arne@openvpn.net>
2024-06-25 19:05:31 +02:00
Charlie Vigue
ac4f7a5c19
Change cxa1 protocol tag to dpc1
Minor change to a string tag.

Signed-off-by: Charlie Vigue <charlie.vigue@openvpn.com>
2024-06-20 09:53:21 +02:00
David Sommerseth
5e83af3e2c
Fix spelling errors raised by Debian linter
Reported-by: Marc Leeman <marc.leeman@gmail.com>
Signed-off-by: David Sommerseth <davids@openvpn.net>
2024-06-19 20:57:15 +02:00
Heiko Hund
1477df691e mac agent: reinstall host route during restart
The host route to the VPN server disappeared when a mac client, using
the agent, was reconnecting. That was causing --redirect-gateway tunnels
to break because no traffic could be sent anymore. Cause for this was
some internal state in the agent not being reset when the utun device
is temporarily removed during the restart.

Signed-off-by: Heiko Hund <heiko@openvpn.net>
2024-06-11 18:04:23 +02:00
David Sommerseth
19bec178fb
Preparing QA cycle for OpenVPN 3 Core library release v3.10
Signed-off-by: David Sommerseth <davids@openvpn.net>
2024-06-06 15:38:41 +02:00
David Sommerseth
10c6a56cb1
Release: OpenVPN 3 Core Library, version 3.9
Signed-off-by: David Sommerseth <davids@openvpn.net>
2024-06-05 14:18:58 +02:00
David Sommerseth
f2e67aaf9b
Merge OpenVPN 3 Core Library v3.9 to master
Signed-off-by: David Sommerseth <davids@openvpn.net>
2024-06-05 10:40:55 +02:00
Arne Schwabe
3ceb4fff0c Allow ACC communication before PUSH_REPLY by using auth pending method
This is reusing the auth pending method as this is just another method where
the final authentication decision is pending on some results. In this case
custom messages going back and forth. This can be tested using

   client-pending-auth 5 1 "ACC:1000 A:6 cck1:certcheck:cxa1:fortune" 60'

with OpenVPN 2.x servers easily.

Also correctly use ClientEvent::Base::Ptr with the Clientevents to avoid
problems with not correctly using RCPtr

Signed-off-by: Arne Schwabe <arne@openvpn.net>
2024-06-04 14:28:08 +00:00
Lev Stipakov
8c15ed2ac5 Fix broken disableClientCert config option
Commit 0c5e356 ("Simplify client options classes") has
indeed simplified options handling by consolidating
options into the base class. However "disble_client_cert"
option was copied, not moved, from its original location.
As a consequence, it become broken.

Fix by removing unneeded copy of this option and use the
one from correct location in options base class.

Signed-off-by: Lev Stipakov <lev@openvpn.net>
2024-06-03 12:29:48 +03:00
Arne Schwabe
47cd774423 Allow setting a logger prefix
Signed-off-by: Arne Schwabe <arne@openvpn.net>
2024-05-30 20:09:19 +00:00
Arne Schwabe
0f32847f2c Reject invalid control channel messages
Instead of silently ignoring errors in control channel message and removing
invalid characters, we should be more strict and reject these message.

A similar change has been also submitted to OpenVPN 2.x
2024-05-30 15:27:29 +00:00
Charlie Vigue
75d9d0fae5 Add certificate to EvalConfig
Clients need access to the server VPN ca for whitelisting reasons
so it is now available inside the EvalConfig structure. Implemented
the change and added a unit test for same.

Signed-off-by: Charlie Vigue <charlie.vigue@openvpn.net>
2024-05-30 15:27:29 +00:00
Razvan Cojocaru
272d0ef07d Fix LOG_{DEBUG, INFO} conflicts with syslog.h
The syslog.h UNIX header already #defines LOG_{DEBUG, INFO} as
log-level constants, which means that we can't have code that
includes both openvpn/log/logger.hpp and syslog.h.

This patch renames all the LOG_<LEVEL>() macros to
OVPN_LOG_<LEVEL>(), to hopefully eliminate "macro already defined"
conflicts in the future.

Signed-off-by: Razvan Cojocaru <razvan.cojocaru@openvpn.com>
2024-05-30 08:45:08 +03:00
Arne Schwabe
7db23f14fe Remove OpenSSL < 1.1.1 support 2024-05-29 19:32:20 +00:00
Arne Schwabe
8833600936 Allow outputting certificates in PEM encoding during handshake
This allow debugging the certificates the server sends. It did this as hack
two times before. I think it is now time to get this officially in.

Signed-off-by: Arne Schwabe <arne@openvpn.net>
2024-05-29 19:32:19 +00:00
Arne Schwabe
b1de7b2e76 Make functions in x509certinfo.hpp static inline
Compilers will otherwise complain about unused function when this header
is included in a compilation unit that only uses a subset of the functions
(e.g. in a unit test).

Signed-off-by: Arne Schwabe <arne@openvpn.net>
2024-05-29 19:32:19 +00:00
Heiko Hund
733d00b7e6 WFP: block DNS traffic to loopback conditionally
Before this commit traffic to loopback was limited when only DNS
(port 53) was blocked, due to the "not loopback" match condition being
replaced instead of the match condition being made more specific.

This broke the client option to override access to DNS servers listening
on loopback.

To fix this three things are done:
  1) do not add DNS block rules if the override option is active.
  2) explicitly block port 53 on loopback, except when the override
     option is active.
  3) remove the implicit block of port 53 on loopback and instead let
     the firewall rule for non-loopback devices only.

Signed-off-by: Heiko Hund <heiko@openvpn.net>
2024-05-28 14:57:04 +02:00
Arne Schwabe
d554fdcd8e Properly implement certcheck using EPKI
This also moves some of the reasonsibility from ClientProto to
OpenVPNClient. This plays better with the EPKI implementation and also
does not break the idea of the current certcheck implementation as we now
just give the certcheck in client protocol a preconfigured SSL Config instead
of all the certificates individually.
2024-05-28 10:48:07 +00:00
Arne Schwabe
0cafed2016 Allow the EPKI API to properly use the epki alias to distinguish certs
The implementation would previously return the alias the client library
requested to use but would not allow to have multiple different
external aliases be correctly used. This adds supports to have the
correct alias being used as part of the signature callback.
2024-05-28 10:48:07 +00:00
Arne Schwabe
86288dbae4 Also log certificate details during TLS verify and use common setup routine 2024-05-28 10:48:07 +00:00
Heiko Hund
42a62f85bb NRPT: improve code for local resolver exception
Instead of relying on passing an empty domain name into the NRPT class
for the '.' rule not to be created, skip calling the NRPT code
altogether. Since there's no rule generated in the case where local
resolvers should be used when no split DNS is to be configured, skipping
the NRPT call is more readable and less magic, when viewed from the
setup class. Also more effective during runtime.

Signed-off-by: Heiko Hund <heiko@openvpn.net>
2024-05-27 04:17:42 +02:00
Razvan Cojocaru
4b10dc453a Add AsioContextStore::stop()
This is meant to help with the following scenario: main thread
creates secondary threads, each secondary thread asks the context
store for its own context, then goes into a "forever" scheduling
loop. Main thread waits for the secondary threads to finish, and
owns the context store. It would be nice to be able to have yet
another thread (say, a SIGINT handler) be able to call .stop()
on all the contexts managed by the context store, thus being able
to end the loops in the secondary threads and allow the main
thread to exit.

Signed-off-by: Razvan Cojocaru <razvan.cojocaru@openvpn.com>
2024-05-22 16:19:13 +00:00
Frank Lichtenheld
d3c9db602d UT: Allow to run unittests with as root via ctest
Allow to set a program to get root (e.g. "sudo").
This allows to run the sitnl tests via ctest.

Only required on Linux, since those tests are
Linux-only.

Signed-off-by: Frank Lichtenheld <frank@lichtenheld.com>
2024-05-22 16:19:11 +00:00
Frank Lichtenheld
51bc835ac4 UT: Add options to add_test so that ctest does what we want
Previously this logic was encoded in Jenkinsfile by
running the UTs manually. Much preferable to just
use ctest.

Signed-off-by: Frank Lichtenheld <frank@lichtenheld.com>
2024-05-22 16:19:11 +00:00
Lev Stipakov
a5aba173a7
stats: update last_packet_received when using DCO
With DCO, userspace has no visibility of packets arriving
on data channel. To provide "last packet received" time,
update it when stats are pulled from DCO and there is a
difference in incoming transport bytes.

Signed-off-by: Lev Stipakov <lev@openvpn.net>
2024-05-21 13:42:37 +02:00
Charlie Vigue
075688e180 Implement certcheck used by the appcontrol feature
The AppControl feature provides an internal communications channel that
is described in detail in the relevant commits that implement it. This
change adds two intrinsic app control 'protocols' to the list of
supported handlers in the client. The new protocols are:

- cxa1: This is a request for the client to begin a TLS handshake via
the app control channel.
- cck1: This is the protocol that allows the exchange of the requested
TLS handshake data.

The 'cxa1' handler parses the request and initiates the handshake from
the client. This handshake is exchanged via the 'cck1' protocol and
serves to prove to the server that the client has access to the required
private key.

Signed-off-by: Charlie Vigue <charlie.vigue@openvpn.com>
2024-05-17 09:18:18 +00:00
Frank Lichtenheld
11dd85f8bd GHA: Fix action pinning
- Some actions were not pinned at all.
- Note full version number in comment so that renovate
  provides better changelog.

Signed-off-by: Frank Lichtenheld <frank@lichtenheld.com>
2024-05-15 16:28:00 +00:00
Frank Lichtenheld
d1fc3a7cad jsonhelper: Extend disabling -Wdangling-reference to GCC 14+
According to the notes in the issues and changelog GCC
has fixed some false-positives of this but basically
accepted the rest and will not fix them.

They introduced gnu::no_dangling attribute to allow people
to override this warning on a class/function basis. But
that doesn't help us since we also need to support older
compilers.

Signed-off-by: Frank Lichtenheld <frank@lichtenheld.com>
2024-05-15 16:27:59 +00:00
Frank Lichtenheld
a7b64c97b2 IP::PoolType: Fix constructor definition
pool.hpp:158:13: error:
template-id not allowed for destructor in C++20
[-Werror=template-id-cdtor]
  158 |     virtual ~PoolType<ADDR>() = default;

Signed-off-by: Frank Lichtenheld <frank@lichtenheld.com>
2024-05-15 16:27:59 +00:00
David Sommerseth
38bc028fed
Preparing QA cycle for OpenVPN 3 Core library release v3.9
Signed-off-by: David Sommerseth <davids@openvpn.net>
2024-05-14 18:17:16 +02:00
Heiko Hund
2da11e9693 dns option: handle allow_local_dns_resolvers
This flag was introduced to allow clients to decide if they want to
ignore non-split DNS option pushed to them. So, to be compatible with
the previous behavior with --dhcp-option, we act on the flag as wenn
when there are no resolve-domains specified.

Signed-off-by: Heiko Hund <heiko@openvpn.net>
2024-05-13 14:07:53 +02:00
Heiko Hund
57d79c2c9e remove dead code for Windows pre-Vista
Signed-off-by: Heiko Hund <heiko@openvpn.net>
2024-05-13 14:07:53 +02:00
Heiko Hund
1483c1248c add support for --block-outside-dns option
The option is only enforced with the --dns option, since DNS settings
coming in via --dhcp-option have always voluntarily blocked port 53.
This behavior is kept for backwards compatibility.

Since the --dns option allows local name servers to continue to work,
even thought no split DNS is pushed, supporting the option makes sense.
If admins do not want any DNS queries outside the tunnel, this is the
option to push alongside the --dns options.

Signed-off-by: Heiko Hund <heiko@openvpn.net>
2024-05-13 14:07:53 +02:00
Heiko Hund
157c66f8a5 send new IV_PROTO flag for --dns implementation
Incompatible changes to the --dns server address and --dns server
exclude-domains options were introduced after the code for handling them
was released. Add and send a new IV_PROTO flag, so servers which act on
the flags set can differentiate between clients which have implemented
--dns and those which just support the new option. This enables them to
decide which variant of options to send to the client.

Signed-off-by: Heiko Hund <heiko@openvpn.net>
2024-05-13 14:07:53 +02:00
Heiko Hund
d7606f4cfb apply --dns options the new way
Previous to this --dns and DNS related --dhcp-options shared the same
code to apply the settings to Windows and macOS systems. So, both
options were pretty much just aliases, with --dns offering more and
finer grained settings that were mostly ignored.

Now --dhcp-options are applied the way they have always been and --dns
does it its own - the new - way. Reason for this behavioral change is
foremost that we want it to be the same between openvpn version 2 and
version 3. But there are also a few new features (e.g. DNSSEC), previously
not present with the --dhcp-options.

The name server and split-domain configuration is exclusively set via
NRPT on Windows, since it overrules any other resolver setting. If there
is no split DNS configured and all domains are resolved using the pushed
name server, we make sure that local domain names are still resolvable by
adding so called exclude NRPT rules, that make sure local domains get
resolved by their local DNS resolvers.

Since Windows does not know about alternative secure transports, the
'transport' and 'sni' settings are ignored.

For macOS the 'dnssec' setting is ignored in addition to that. Besides
that not much does change on that platform. In case of --dns options the
explicit values are used now. The API in use may be changed at a later time.

Signed-off-by: Heiko Hund <heiko@openvpn.net>
2024-05-13 14:07:53 +02:00
Heiko Hund
9bc6986873 add Windows network utilities and abstraction layer
Create a struct NetApi, which contains various network related functions
that will be used. This is done so that these operations can be injected
as a dependency and thus replaced with mock operation for the purpose of
testing.

There are also functions which operate solely on the Registry, those are
left out of the NetApi since they can already be abstracted by struct Reg.

Signed-off-by: Heiko Hund <heiko@openvpn.net>
2024-05-13 14:07:53 +02:00
Heiko Hund
bc24b7c80d add Windows Registry operations abstraction layer
Create a struct Reg, which contains various setter and getter functions
for different registry types and other operations that will be used.
This is done so that these operations can be injected as a dependency
and thus replaced with mock operation for the purpose of testing.
Besides that it makes code more brief and less error prone, since
there's now one implementation for converting C <-> C++ for each operation.

Move existing class RegKey and class RegKeyEnumerator into struct Reg as
well, so they are now known as Reg::Key and Reg::KeyEnumerator.

Signed-off-by: Heiko Hund <heiko@openvpn.net>
2024-05-13 14:07:53 +02:00
Heiko Hund
08d5438742 wstring: fix UTF-8 and MULTI_SZ conv functions
Functions from_utf8() and to_utf8() added one extra '\0' glyph to the
output string, i.e. if the input basic_string::size() was 8 the output
was 9. Normally this would not make a difference since for most string
usage, as the extra NUL at the end would mostly be ignored. However if
you used the output string to append to another string the extra NULs
were actually also appended, resulting in a string with embedded NUL
characters. Which is a problem with the next use case.

The pack_string_vector() function failed to produce a wide MULTI_SZ
string from a vector of strings, unlike advertised. The extra NUL
actually led to the MULTI_SZ string always being terminated after the
first string. Besides that, the function actually never terminated the
MULTI_SZ in the first place and also failed to handle empty vectors
gracefully.

Signed-off-by: Heiko Hund <heiko@openvpn.net>
2024-05-13 14:07:53 +02:00
Heiko Hund
2d4584449f string: make split and join work with std::wstring
Signed-off-by: Heiko Hund <heiko@openvpn.net>
2024-05-13 14:07:53 +02:00
Heiko Hund
c535e2bd75 wstring: remove deprecated C++11 codecvt API
Since C++17 the codecvt header is deprecated and scheduled for removal
in C++26. MSVC warns about use of the deprecated API already, other will
follow soon. It was decided to deprecate and remove it since it does not
support the current UNICODE standard anymore.

Also test for the _WIN32 define, instead of WIN32, so that this keeps
working with MinGW headers, when cross-compiling.

Signed-off-by: Heiko Hund <heiko@openvpn.net>
2024-05-13 14:07:53 +02:00
Heiko Hund
3aa4121fa9 silence mingw 12 compiler warning
MinGW's g++ displays this warning when compiling:

warning: the address of ‘IP_ADDRESS_STRING::String’ will never be NULL [-Waddress]

since String is defined as a C array, it can never be nullptr, so the
warning is correct and the check can be removed.

Signed-off-by: Heiko Hund <heiko@openvpn.net>
2024-05-13 14:07:53 +02:00
Heiko Hund
5e61f9ccbf initialize the RegKey handle correctly
Instead of using nullptr for uninitialized RegKey, use the value defined
in WIN32 API for that. We need to check for it anyways, so unifying this
makes the checks more straight forward.

Signed-off-by: Heiko Hund <heiko@openvpn.net>
2024-05-13 14:07:53 +02:00
Arne Schwabe
2780eb9581 Spell none cipher with lowercase
OpenVPN uses a idiosyncrasy that all ciphers are uppercase but none is
spelt lowercase and excepts this idiosyncrasy also in IV_CIPHERS

Signed-off-by: Arne Schwabe <arne@openvpn.net>
2024-05-08 16:39:25 +00:00