Skip to content

Tags

Tags give the ability to mark specific points in history as being important
  • v24 protected
    OpenVPN 3 Linux v24 (Stable release)
    
    The v24 release is another stable release.  This resolves issues
    reported in several earlier releases and improves OpenVPN 3 Linux
    in several areas.
    
    * Improvement: Add --dns option support
    
      DNS resolver settings has been troublesome for many years, since
      there are slightly different implementations which handles the
      possible pushed DNS options differently between OS platforms and
      even across client implementations on a single platform.  This
      is being attempted resolved by a new --dns option which can be
      used instead of the various --dhcp-option settings related to
      DNS.
    
      The --dns option has been available since OpenVPN 2.6.  The
      OpenVPN 3 Core Library has had this support v3.7.  But the needed
      processing of this option has been lacking in OpenVPN 3 Linux
      until now.
    
      With the --dns option, it provides possibilities to configure
      more modern DNS features such as split-DNS, DNS-over-TLS and
      DNSSEC.  This will in most cases work out-of-the box when using
      systemd-resolved as the local DNS resolver - but it also depends
      on the features available in systemd-resolved in the Linux
      distribution being used.
    
      Currently, systemd-resolved does not support DNS-over-HTTPS [1].
      If this is being attempted, the connection will disconnect.
    
      For users only using /etc/resolv.conf, only the traditional
      DNS server and search domain settings will be configured.
      All the additional DNS features will be ignored.
    
      [1] <https://github.com/systemd/systemd/issues/8639>
    
    * Improvement: Provide better details about the remote server
    
      The openvpn3 sessions-list would list a "Session name" when
      a client session has successfully connected to a remote server.
      This information was static and not changed since the initial
      connection.  If the VPN configuration profile had more and
      different --remote lines, only the first connection would be
      reflected in this "Session name".
    
      In v24 this has been changed by querying the VPN client
      process about the server it is currently connected to.  The
      "Session name" line has thus been replaced with a "Connected to"
      line which will also include details about connection protocol,
      DCO mode and port number in use.
    
      Note: Due to an issue in the OpenVPN 3 Core Library, the
      port number is currently not provided on DCO connections.
    
    * Improvement: Provide better messages to end-user on session start issues
    
      When starting a VPN session, it could fail for various reasons.
      The reason itself was never provided to the end-user starting the
      session and it was needed to dig into the log files to figure out
      why it was failing.
    
      With this release, the openvpn3 session-start command will present
      an end-user friendly reason when the client process provides a
      reason for the failure.  This reduces the need to search the
      logs for the initial understanding why it failed.
    
    * Improvement: Better error message when modifying sealed configurations
    
      When attempting to modify a sealed VPN configuration profile
      (which are read-only), a fairly verbose, debug-like error
      message was provided to the user.  This has been improved
      to give a more end-user friendly error message instead.
    
    * Improvement: Upgrade to OpenVPN 3 Core Library v3.10.4
    
      This resolves an issue where a configuration profile using
      --pull-filter with single quotes instead of double quotes would
      be incorrectly parsed.
    
      There could also appear issues for VPN sessions with DCO enabled
      could fail if --inactive was used.  This has been fixed in this
      Core Library release.
    
    * Bugfix: Starting VPN sessions could fail on slower systems
    
      In some cases, the openvpn3-service-backendstart would not
      start quickly enough.  This would result in the Session Manager
      as it would not get a response back soon enough that the
      VPN client process has been started - and it would fail
      the VPN session start.
    
      With the updated GDBus++ and further improvements in the
      Session Manager, it will now be more graceful to slower
      starting services and not fail as quickly.  This allows
      the supporting helper services to be able to start properly
      before interacting with them.
    
    * Bugfix: Add support for dhcp-option ADAPTER_DOMAIN_SUFFIX
    
      The ADAPTER_DOMAIN_SUFFIX is one of these ambiguous
      --dhcp-options being treated differently across client
      implementations.  This setting has so far been ignored in
      OpenVPN 3 Linux until this release.  The best user experience
      seemed to be achieved by parsing this as an alias to the
      DOMAIN-SEARCH feature.  This seems to align best with
      common user expectations.
    
    * Bugfix: DNS search domains might not be removed from /etc/resolv.conf
    
      Under some unclear situations, the DNS search domains was not
      always removed in /etc/resolv.conf.  This has been an open issue
      for a long time, but it seems to have improved since the v22_dev
      with GDBus++.  We still see this occasionally on a few Linux
      distributions with systemd-resolved.  But since we also see the
      systemd-resolved accepting the DNS updates and removals, we
      believe this is might be more an issue in systemd-resolved at
      this point.  This issue appears now only with systemd-resolved
      and is not reproducible in all environments.
    
    * Bugfix: Duplicated name servers or search domains to /etc/resolv.conf
    
      In prior releases, when the Network Configuration service was
      configured to use /etc/resolv.conf for DNS resolving it could
      append duplicated DNS name servers and search domains if
      duplicates where pushed or added by other VPN connections or
      present prior to starting the VPN session.
    
      In v24 duplicated name servers and search domains are filtered
      out to only have a single presence of them in /etc/resolv.conf.
    
    * Bugfix: openvpn3 sessions-list does not reflect the correct DCO status
    
      When running the openvpn3 sessions-list and
      openvpn3-admin sessionmgr-service --list-sessions commands, the
      DCO status was not necessarily reflecting the reality.
    
      Typically, if the VPN client process failed to activate and use
      the DCO kernel module, it would still be listed as DCO enabled
      while in reality being a normal tun interface.
    
      This has been resolved in v24 where it will now query the VPN
      client process for the actual DCO status - not just the
      configured and requested DCO mode.
    
    * Bugfix: Stray VPN sessions not cleaned up
    
      In cases where a VPN session have had a log forwarder enabled
      (like via the openvpn3 log command) and that log forwarder
      has been stopped, the VPN session would be lingering
      in the Session Manager as a stray session with no available
      session details.  This is also seen via openvpn3 sessions-list.
      Attempting to remove the session using openvpn3 session-manage
      would fail with an error.
    
      This has been resolved in v24, where the error situations which
      might appear if a previous log forwarder could not be identified
      are now properly handled and will not block the internal session
      clean-up in the Session Manager.
    
    * Bugfix: Spurious CreateVirtualInterface() errors when re-starting failing sessions
    
      In some special situations where a running VPN session stopped
      and attempted restarted after a openvpn3 session-manage --cleanup,
      the tunnel would fail with various CreateVirtualInterface() and
      TUN_SETUP_FAILED errors.
    
      The session management code has been gradually improved since
      v22_dev, v23 and now v24 - where stopped and failing sessions
      are handled better and removed correctly in the Session Manager.
    
    * Bugfix: openvpn3 log with --session-path does not work
    
      In some scenarios, using openvpn3 log --session-path did not
      work and did not report any log events.  This has been under
      investigation for a long time and this issue has not been seen
      since the release with v22_dev and GDBus++.  We consider this
      issue resolved with the updated openvpn3-service-log service in
      the v22_dev release.
    
    * Bugfix: openvpn3 session-start fails with only 2FA authentication
    
      The openvpn3 session-start would fail to start a session if the
      configuration profile would only require 2FA authentication.  This
      has also been fixed since the v22_dev with GDBus++ release which
      included a refactoring of how VPN sessions were established.
    
    * Bugfix: Spurious GLib error messages
    
      The shell completion (with bash-completion installed) could
      often appear with disturbing and confusing GLib-GObject-CRITICAL
      errors in the output.  This has most likely been fixed since
      v22_dev and the migration to the GDBus++ library.  Since this did
      not happen each time and it varied a bit which Linux distributions
      it happened on we've kept this on our radar for some time.  We
      now feel more confident this type of errors is being handled
      properly and should not disturb the user any more.
    
    Known issues:
    
      - openvpn3-admin journal --since has a time zone related issue
        and may not list all log events within the closest hours.
    
    ---- Changes from v23 to v24 ---------------------------------------
    
    David Sommerseth (56):
          configmgr: Improve error message on sealed config profiles
          configmgr: Switch to std::set<> for target lists for ACL checks
          docs: Re-enable doxygen build target
          client: Add support for --dhcp-option ADAPTER_DOMAIN_SUFFIX
          client: Stop running VPN clients in client destructor
          client: Properly plug-in DBus::MainLoop handling in BackendClientObject
          client: Make BackendSignals::LogFATAL() thread safe
          client: Extend BackendSignals to have access to a DBus::MainLoop object
          client: Improve exception handling when starting client worker thread
          client: Handle COMPRESS_ERROR events
          ovpn3cli/session-start: Retrieve more status details when throwing SessionException
          client: Fix incorrect error message in NetCfgTunBuilder::socket_protect()
          client: Move DNS scope logging from LOG_DEBUG to LOG_VERB2
          cleanup: Remove pointless local scope ovpn3cli::session::start_session()
          configmgr: Add debug option --use-session-bus
          log: Rework the tear-down of ProxyLogEvents objects
          netcfg: Cleanup NetCfgException
          dbus/signals: Add Signals::StatusChange::LastEvent()
          client: Add BackendSignals::LastStatusEvent()
          client: Add new property: connection
          sessionmgr:  Implement extraction of connection details from client
          client: Extract DCO status from ConnectionInfo when available
          ovpn3cli/sessions-list: Improve session information with connection details
          build: Minor tweaks to D-Bus/systemd/state-dir build options
          netcfg/proxy: Make all proxy methods const methods
          netcfg/proxy: Extend NetCfgProxy::Device with openvpn::DnsOptions parsing
          client: Enable --dns option parsing in the VPN client
          netcfg/resolved: Extend systemd-resolved proxy with DNSSEC support
          policy/netcfg: Grant privilege to set DNSSEC on systemd-resolved
          netcfg/systemd-resolved: Implement support for setting the DNSSEC mode
          netcfg: Extend NetCfgDevice with D-Bus APIs for DNSSEC
          netcfg/proxy: Extend NetCfgProxy::Device with DNSSEC support
          netcfg/proxy: Extend NetCfgProxy::Device::AddDnsOptions() with DNSSEC support
          netcfg/resolved: Extend systemd-resolved proxy with SetDNSOverTLS()
          policy/netcfg: Grant privilege to set DNS-overTLS in systemd-resolved
          netcfg/systemd-resolved: Implement support for setting the DNS transport mode
          netcfg/systemd-resolved: Refactor and simplify the code
          netcfg: Extend NetCfgDevice with D-Bus APIs for setting DNS transport
          netcfg/proxy: Extend NetCfgProxy::Device with DNS transport support
          netcfg/proxy: Extend NetCfgProxy::Device::AddDnsOptions() with DNS transport support
          codestyle: Fix misc deviating code style to conform with .clang-format
          dbus/signals: Include iostream
          client: Improve debugging in openvpn3-service-backendstart
          client/backendstart: Move LogServiceProxy inside the service object
          sessionmgr: Add RegistrationRequest debug logging
          sessionmgr: Allow net.openvpn.v3.backends to settle before accessing it
          ovpn3cli: Start a glib2 MainLoop in the command line tools
          sessionmgr/proxy: Replace sleep with waiting for SESS_CREATED signal
          ovpn3cli/sessions-list: Don't show "Connected to" without any details
          netcfg/proxy: Disable support for DoH
          core: Update to latest OpenVPN 3 Core Library v3.10.4
          vendor: Update to ASIO 1.32.0
          client: Fix missing handling of the delayed shutdown thread in BackendSignals
          sessionmgr: Fix misbehaviour if GetUID() fails in Session::helper_stop_log_forwards()
          client: Add support for a couple more TLS error events
          ovpn3cli: Improve mainloop start synchronisation
    
    Petr Portnov (2):
          build: reduce hardcoded 'asio_path'
          build: allow installation directories' customization
    
    Razvan Cojocaru (7):
          cleanup: Remove stray semicolons
          configmgr/overrides: Remove OverrideType::invalid
          configmgr/overrides: Use glib2::DataType::Extract(value)
          configmgr/overrides: Remove struct OverrideValue
          configmgr/overrides: Rename ValidOverride -> Override
          sessionmgr: Remove unused Session::connection_started bool
          netcfg/resolvconf-file: Don't add nameservers that already exist
    
    --------------------------------------------------------------------
    
    
  • v23 protected
    OpenVPN 3 Linux v23 (Stable release)
    
    The v23 release is stable release which expands the distribution target
    since v22_dev was released.  The goal for this step was to stabilize the
    codebase which was migrated to GDBus++ and the new Meson building system.
    
    This release brings back the OpenVPN 3 AWS-VPC Add-on which was not
    ready for the v22_dev release.  This service has also been migrated to
    use GDBus++.  The behaviour of this add-on should otherwise be identical
    to the service shipped in v21 and older releases.
    
    In addition, a new add-on is included in this release.  The Cloud Connexa
    service is being extended with a new functionality, referred to as Device
    Posture Checks (DPC).  This feature will enable the VPN server to request
    certain checks to be performed on the client side and reported back to
    the server.  These checks are restricted to what the new OpenVPN 3 Device
    Posture Service (openvpn3-service-devposture) provides.  To enable the
    client-side functionality, the VPN client configuration must be pre-
    imported and an Enterprise ID must be assigned to the configuration
    profile.  That will allow the server to request Device Posture Checks
    to be performed.
    
    The currently implemented DPC tests only provides platform information,
    like Linux distribution name and version, kernel versions, CPU
    architecture and the client's local time.  In future releases, more tests
    may be implemented.
    
    Known issues:
    
      - Shell completion may list duplicated options in some cases
    
      - openvpn3-admin journal --since has a time zone related issue
        and may not list all log events within the closest hours.
    
    Other changes:
    
    * Improvement: Upgrade to OpenVPN 3 Core Library v3.10.1
    
      This library update provides the functionality to provide the
      Device Posture Check functionality in the OpenVPN wire
      protocol.  A fix to resolve compilation errors when the
      -Wnon-virtual-dtor compiler flag is enabled is included too.
    
    * Bugfix: Report client and version correctly in IV_GUI_VER
    
      The v22_dev release unfortunately changed the format of the
      IV_GUI_VER.  It would report: 'openvpn3-linux/v22:dev' when
      it should have been 'OpenVPN3/Linux/v22_dev'.  This has
      been corrected.
    
    * Bugfix: --tag option not working with config-import or config-manage
    
      A regression bug was introduced in v22_dev which handled the
      available tracking of Configuration Manager features incorrectly
      and ended up disabling this feature in the openvpn3 config-import
      and openvpn3 config-manage commands.  This has been fixed.
    
    * Bugfix: systemd-resolved support rejected IPv6 DNS resolver address
    
      An oversight in the systemd-resolved implementation refused to accept
      pushed DNS resolver addresses when it was an IPv6 address.  This has
      been fixed and both IPv4 and IPv6 addresses are now fully supported.
    
    * Improvement: Python configuration parser support for --connect-retry{,-max}
    
      The Python configuration parser in the openvpn3 module did
      not provide a pass-through for --connect-retry and --connect-retry-max
      options.  This would result in configuration profiles containing
      these options would not function when using the Python based tools
      while it would work using the 'openvpn3' command.
    
    Credits
    -------
    
    Thanks goes to those continuing testing and reporting issues.  A
    special thanks to Grzegorz Gutowski who provided the fix to the
    Python module.  He is also the project lead behind the openvpn3-indicator
    project, which provides a tray-icon for OpenVPN 3 Linux.  If you
    use a graphical desktop, that's a project worth checking out!
    
    Many thanks also goes to Razvan Cojocaru who has stepped in providing
    many great improvements and done all the work for the Device Posture
    support in OpenVPN 3 Linux.  And Lev Stipakov who migrated the
    OpenVPN 3 AWS-VPC add-on service to GDBus++
    
    ---- Changes from v22_dev to v23 ---------------------------------------
    
    David Sommerseth (24):
          configmgr: Load configuration profiles before starting the D-Bus service
          netcfg: Make NetCfgNotifSubscriptions use uint32_t as filter bit mask
          codestyle: Fix minor code style deviations
          build: Enable overriding OpenVPN 3 Core Library version string
          scripts: Modify the output of the --gui-version
          addons/devposture: Fix compilation error with older JsonCpp libraries
          addons/devposture: Make devposture-proxy test program more generic
          addons/devposture: Document the Enterprise Profile file format
          build: Install some additional documentation by default
          docs: Clarify a GDBus++ and mbed TLS build dependencies better
          build: Set PACKAGE_NAME to 'OpenVPN3/Linux'
          Some minor #include clean-ups
          configmgr: Cleaning up #include files
          configmgr: Use CoreLog for logging events from the Core library.
          client: Don't stop if devposture service is unavailable
          devposture/test: Improve argument parsing in devposture-proxy
          addon/devposture/proxy: Properly re-throw DevPosture::Proxy::Handler exceptions
          netcfg/resolved: Factor out resolved::Exception to a separate file
          tests/resolved: Extend systemd-resolved proxy test client with IPv6 support
          netcfg/resolved: Add new D-Bus IP Address parser class
          netcfg/resolved: Use GDBus++ glib2 helpers extracting data in SearchDomains::GetGVariant
          netcfg/resolved: Plug-in resolved::IPAddress into ResolverRecord
          netcfg/resolved: Refactor out resolved::ResolverRecord
          core: Update to OpenVPN 3 Core Library v3.10.1
    
    Grzegorz Gutowski (1):
          python: Pass through --connect-retry and --connect-retry-max
    
    Lev Stipakov (5):
          netcfg: use proper C++ base type for NetCfgChangeType
          netcfg/proxy: Check non-response call for nullptr before freeing
          configmgr: remove unused class members
          addons/aws: Switch to GDBus++
          addons/aws: adapt to core RandomAPI changes
    
    Razvan Cojocaru (10):
          core: Update to OpenVPN 3 Core Library releaseprep/3.10
          addons/devposture: Add openvpn3-linux-devposture
          configmgr: Add the enterprise-profile override
          ovpn3cli/config: Add openvpn3 config-manage --enterprise-profile
          client: Plug in Device Posture support
          configmgr: Use a regular expression to determine version number
          configmgr: Accumulate proxy feature flags instead of overwriting
          netcfg: Check stub-resolv.conf before giving up on systemd-resolved
          common: give SingleCommand a virtual destructor
          addons/devposture: Add core_ver and extra_ver to client_info
    
  • v22_dev protected
    OpenVPN 3 Linux v22_dev (Limited Release)
    
    This is a limited release primarily targeting Fedora 39 and newer plus
    Ubuntu 24.04.  Other Linux distributions shipping glib2 version 2.76
    or newer will also benefit from this release.
    
    This release contains a massive re-factoring of the D-Bus integration
    layer with glib2.  The glib2 2.76 and newer releases contains several
    internal changes which broke the D-Bus implementation layer in
    OpenVPN 3 Linux v21 and older releases [1]. To fix this, it was decided
    to split out the base D-Bus integration into a new standalone library
    which OpenVPN 3 Linux will depend on.  This new project is called
    GDBus++.
    
    [1] <https://github.com/OpenVPN/openvpn3-linux/issues/171>
    
    This change brings in a vastly improved D-Bus integration which will
    now make extended use of multi-threading when processing D-Bus method
    calls and implements modern C++17 approaches when handling requests to
    registered D-Bus objects.  It has also been a strong focus on getting
    rid of as much of various glib2 warnings which could occasionally appear
    in prior OpenVPN 3 Linux releases.
    
    There are most likely a still a lot more room for improvements to both
    the new DBus++ and the upgraded OpenVPN 3 Linux code, which is why this
    release targets a more limited release scope.
    
    That said, this new code can be made available for all the officially
    supported RPM distributions by enabling a "development snapshots" repository.
    But this repository will also not have the same QA guarantees as the
    official stable repositories.
    
    This release has only been through the full QA validation on Fedora 39,
    Fedora 40 and Ubuntu 24.04.
    
    On a development note, this project has now migrated to use Meson [2] as
    the build system.  The autoconf/automake build system is now completely
    removed.  The Meson build system has turned out to be way simpler to
    use and configure than autotools ever was, especially from a developers
    point of view.
    
    [2] <https://mesonbuild.com/>
    
    There are unfortunately a few known issues which is targeted for
    the coming v23 release:
    
      - AWS VPC integration is not yet ready, so this add-on is currently
        not available in this v22_dev release.
    
      - Shell completion may list duplicated options in some cases
    
      - openvpn3-admin journal --since has a time zone related issue
        and may not list all log events within the closest hours.
    
    Other changes worth mentioning with this release:
    
    * Improvement: Upgrade to OpenVPN 3 Core library v3.8.5
    
      This upgrade contains several bug fixes related to the option
      parser, mostly issues reported by a wide range of users.  In
      addition to incorrect behaviour with the stub compression when
      the --compress option was used.
    
    * Improvement: openvpn3-admin journal --since argument
    
      The --since argument can now use the keywords 'today' and
      'yesterday'.
    
    * Bug fix: openvpn3-admin log-service would not change some settings
    
      On some distributions, the --dbus-details and other boolean flags
      was not properly changed when requested.  This has been improved.
    
    Credits
    -------
    
    Finally, it is needed to give a HUGE THANK YOU to all the community
    testers which installed and tested rolling development snapshots during
    the development of this release.  Without all this testing, we would
    not have the same confidence in this release as we have now.  All your
    help and feedback has been really valuable and helpful during this the
    development phase.
    
    ---- Changes from v21 to v22_dev ---------------------------------------
    
    David Sommerseth (324):
          ovpn3cli/admin: log-service lacked initial state and init
          ovpn3cli/admin: Add today/yesterday to journal --since
          codestyle: Use default lambda scope indentation
          processwatch: Remove the processwatch.hpp feature
          idlecheck: Remove IdleChecker implementation for GDBus++ refactoring
          build: Add bare meson build setup
          GDBus++: First step in migrating to the new D-Bus implementation
          GDBus++: Rework constants setup for OpenVPN 3 Linux
          GDBus++: Migrate the log/proxy-log.hpp implementation
          build: Add bare meson setup for generating man pages
          build: Install the base D-Bus policy
          build: Replace individual D-Bus auto-start service files with a template
          GDBus++: Migrate openvpn3-service-backendstart
          build: Add some log handling into the internal shared common library
          GDBus++: Migrate D-Bus proxy code for net.openvpn.v3.config
          client: Simplify StatusEvent() constructors
          build: Extend version extraction to include a few git flags
          build: Build and install SELinux policies via Meson
          GDBus++: Partial migration of netcfg code required to build VPN client backend
          common: Extend RequiresQueue with callback functionality
          GDBus++: Complete migration of StatusEvent()
          GDBus++: Kick out THROW_LOGEXCEPTION() macro
          GDBus++: GDBus++: Complete migration of LogEvent()
          GDBus++/LogSender: Use SignalDeclaration() methods setting up signals
          GDBus++/common: Improve RequiresQueue, avoid static_cast<>()
          GDBus++: First stab at migrating openvpn3-service-client
          build/selinux: Fix wrongly behaving SELinux build detection
          build: Fix issues with missing sd_id128 variable in meson
          build: Prepare the ground for building dco-keyconfig.proto
          GDBus++/common: Migrate PlatformInfo
          GDBUs++/sessionmgr: Initial migration of SessionManager::Event()
          GDBus++/netcfg: Initial migration of NetCfg:DNS::ResolverSettings()
          netcfg: Enforce smart-pointer usage for  NetCfg::DNS::ResolverSettings()
          GDBus++/netcfg: Extend NetCfgChangeType with GDBus++ glib2 helpers
          GDBus++: Migrate the unit tests
          client/log: Rewrite the Core library D-Bus log implementation
          client: Fix minor coding style issues in ConnectionStatDetails
          common: Refactor build-config.h inclusion in MachineID
          Avoid including build-config.h in header files
          GDBus++: Complete migration of NetCfg::DNS::SettingsManager
          common: Add missing sstream include file in configfileparser.hpp
          GDBus++: Migrated NetCfgSubscriptions
          client: Minor code cleanup in core-client.hpp
          GDBus++: Migrate NetCfgSignals
          GDBus++: Extend NetCfgProxy::Device with DCO support
          GDBus++/client: Fix dco and log_level property handling
          client: Remove pointless debug logging of the current run status
          client: Add debug logging when validate_sender() rejects a caller
          build: Use --prod-version as Meson project version
          build: Replace hard-coded -Werror with werror option
          client/core: Rename 'signal' object to 'signals'
          client/core: Reorder and fix #include file related challenges
          client/core: Relocate statistics.hpp include
          client/core: Clean up some #include hierarchy in core-client/core-client-netcfg
          build: Add libnl-3.0 as a dependency
          build: Add debug_internal build configuration flag
          client: Add BackendSignals::Create() static helper function
          log/proxy: Use DBus::Object::Path instead of std::string
          configmgr/proxy: Use DBus::Object::Path instead of std::string
          client: Use DBus::Object::Path in NetCfgTunBuilder::netcfg_get_device_path()
          client: Cleanup leftovers in NetCfgTunBuilder for ovpncli-netcfg
          client: Add debug logging when requesting NetCfg Cleanup()
          netcfg/proxy: Use DBus::Object::Path instead of std::string
          tests/netcfg: Migrate netcfg-changeevent-selftest to GDBus++/meson
          netcfg: Migrate NetCfgChangeEvent fully to GDBus++
          tests/netcfg: Migrate netcfg-proxy-unit to GDBus++/Meson
          tests/netcfg: List D-Bus paths if the "Re-fetching" fails
          core: Update to OpenVPN 3 Core Library v3.8.4
          netcfg/dns: Migrate NetCfg::DNS::resolved proxy to GDBus++
          netcfg/dns: Refactor the SettingsManager and ResolverBackendInterface
          netcfg/dns: Refactor NetCfg::DNS::ResolvConfFile
          netcfg/dns: Fix NetCfg::DNS::ResolverSettings::operator<<() behaviour
          netcfg/dns: Refactor NetCfg::DNS::SystemdResolved
          netcfg/build: Include NetCfgChangeType into the static netcfg library
          build: Move some netcfg components out of the static libnetcfg library
          GDBus++: Migrate openvpn3-service-netcfg (non-DCO)
          selinux: Allow openvpn3-service-netcfg to use syslog
          client: Fix incorrect empty session_path property
          client: Explicitly set the scope on a few Core library types
          netcfg/dns: Fix glib2 GVariant ref counting issues
          netcfg: Preserve a pointer to the LogWriter object in NetCfgDevice
          netcfg: Return the proper data type in DcoAvailable
          netcfg: GDBus++: Complete migration of openvpn3-service-netcfg
          vendor: Remove googletest as a git submodule
          netcfg: Check the results when preserving capabilities
          netcfg/dns: systemd-resolved SetDefaultRoute is a method
          netcfg/dns: Detect unsupported SetDefaultRoute feature in systemd-resolved
          sessionmgr: Replace GetIntrospection() with SessionManager::Event::SignalDeclaration()
          sessionmgr: Minor cleanups of SessionManager::Event
          log: Make the StatusChange signal optional in LogSender
          log: Make LogWriter::Ptr a std::shared_ptr
          netcfg: Use DBus::Object::Path in method_fetch_interface_list()
          client: Add AttentionReq class
          GDBus++/tests: Migrate signal-listener
          configmgr/proxy: Do an extra object existence check in ctor
          dbus: Add a GDBus++ DBus::Object extension - Object::ACL
          core: Update to OpenVPN 3 Core Library v3.8.5
          Provide operator<<() function for OpenVPN 3 Linux specific types
          log: Fix incorrect data type in LogProxy::ProxyLogEvents()
          python: Migrate openvpn3.constants generator to Meson
          sessionmgr: Remove not needed arg in SessionManager::Event::SignalDeclaration()
          build: Include dbus/path.cpp into the common static library
          sessionmgr: Adding SessionManager::NewTunnelQueue infrastructure
          sessionmgr: Add generic code for sending session and manager signals
          sessionmgr: GDBus++ migration of the openvpn3-service-sessionmgr
          Codestyle refresh of migrated code
          docs: Update openvpn3-service-sessionmgr man page
          docs: Update D-Bus documentation for net.openvpn.v3.sessions
          vendor: Upgrade ASIO to v1.30.2
          build: Relocate build-version.h for dist packaging
          build: Fix scripts/get-version, use proper path for build-version.h
          build: Generate and install openvpn3/constants.h
          netcfg/dns: Fix missing virtual destructor compiler warnings
          configmgr: Fix warnings about dangling references
          gdbus++: Simplified DBus::Service API
          tests: Extend request-queue-service with file logging
          tests: Add request-queue-test
          tests: Make PlatformInfo unit-test run without D-Bus
          tests: Add more Meson test cases
          tests: Classify already declared Meson test cases
          events: Relocate AttentionReq and StatusEvent
          events: Relocate LogEvent into Events::Log
          dbus: Codestyle cleanup in GDBusPP::Object::Extension::ACL
          dbus/signals: Refactor AttentionRequired and StatusChange signals
          sessionmgr: Cleanup in sessionmgr-events.hpp
          log: Refactor LogFilter to Log::EventFilter
          dbus/signals: Implement ::Signals::Log
          dbus: Clean up minor issues in DBusRequiresQueueProxy
          dbus: Extend DBusRequiresQueueProxy to allow proxy assignment later on
          sessionmgr: Migrate the Session Manager D-Bus proxy client to GDBus++
          dbus/signals: Implement Signals::ReceiveLog
          log: Clarify DBus::Signal::Group::Create() call destination
          signals/statuschange: Harden StatusChange::GetLastStatusChange() in empty cases
          client/backendstart: Rework how StatusChange signals are sent
          client: Rework how backend VPN client sends StatusChange/AttentionRequired
          client: Rework RegistrationRequest signal sending
          sessionmgr: Refactor out StatusChange calls via LogSender
          sessionmgr: Fix a few minor codestyle related issues
          log: Remove StatusChange signal handling from LogSender
          log: Remove classes and features which is no longer needed
          tests: Migrate logservice1 debug/test tool to GDBus++
          tests: Extend logservice1 with logtag settings support
          build: Refactor ENABLE_DEBUG macro in netcfg-dns-direct-file-selftest
          build: Remove debug_internal setting
          common: Add a '[DCO]' tag in get_version() string when DCO enabled
          build: Redo the ENABLE_OVPNDCO macro setup
          log: Clean up LogTag
          log: Extend Log::EventFilter with a smart-pointer creator
          log: Cleanup LogMetaData and LogMetaDataValue
          events: Extend Events::Log() to also carry signal sender details
          signals: Extend Signals::ReceiveLog() to pass signal sender details
          log: Simplify the LogWriter API slightly
          log: LogWriter::Write() implementations must check if metadata is valid
          log/proxy: LogServiceProxy::Detach() must wait for a reply
          log: Make more Log::EventFilter methods publicly available
          log: Improve misleading Log::EventFilter error message
          client: Signals sent should not change the D-Bus path
          client: Backendstarter can use a bit longer idle-exit
          sessionmgr: Improve retrieve sessions helper method
          dbus/signals: std::move() the callback lambda to the signal handler
          events/log: Extend Events::Log to carry a LogTag::Ptr
          log: Simplify LogWriter API - remove PrependMeta() + AddLogTag()
          log: Rework passing of LogTag to the LogWriter backend
          signals/statuschange: Implement Signals::ReceiveStatusChange
          sessionmgr: Disable log forwarding for sessions closing
          GDBus++/log: Migration of net.openvpn.v3.log / openvpn3-service-log
          sessionmgr: Add missing session_name property in Session objects
          log: Initialize logstream pointer properly
          docs: Create, build and install man pages
          log: Remove unused namespace in openvpn3-service-log.cpp
          build/tests: Build the cmdparser-test program
          common: Remove RCPtr from cmdargparser.[ch]pp
          common/cmdargparser: Pass std::string by reference
          common/cmdargparser: Replace typedef with using for consistency
          GDBus++/ovpn3cli: Start migration of openvpn3 and openvpn3-admin cli tools
          policy: Allow access to GetAll property method in backends and log services
          tests: Migrate dbus/get-service-version-prop to Meson and GDBus++
          GDBus++/ovpn3cli: Migrate 'openvpn3-admin version'
          build: Move DNS configuration code from netcfg service to netcfgmgr_lib
          GDBus++/ovpn3cli: Migrate 'openvpn3-admin init-config'
          log/journald: Add O3_LOG_SENDER meta data for log service
          log/journald: Update the journald log parser to new Events::Log location
          log/journald: Extend the journald parser to include the updated log service
          GDBus++/ovpn3cli: Migrate 'openvpn3-admin journal'
          sessionmgr/proxy: Add Session::GetConfigName()
          GDBus++/ovpn3cli: Migrate argument helper functions
          GDBus++/ovpn3cli: Migrate 'openvpn3-admin log-service'
          netcfg/proxy: Enforce NetCfgProxy::Manager to be a smart-pointer
          log: Add additional mutex around log subscription changes
          netcfg: Catch errors sending signals
          netcfg/dns: Preserve device name in systemd-resolved D-Bus proxy
          netcfg/dns: Retrieve values set in NetCfg::DNS::resolved::Link setters
          netcfg/dns-resolved: Implement sending NetworkChange DNS added/removed signals
          netcfg/dns: Provide device name when sending DNS_*_REMOVED signals
          netcfg: Fix incorrect signal subscription D-Bus API
          netcfg: Don't try to send NetworkChange signals without subscribers
          netcfg/NetworkChange: Implement crude subscription ownership tracking
          netcfg: Activate the missing NetworkChange subscription feature
          netcfg/proxy: Fix typo in D-Bus data type subscription retrival
          netcfg: Fix type inconsistency in NetCfgChangeType
          netcfg/proxy: Use DBus::Exception::GetRawError() instead of what()
          netcfg/proxy: Use synchronous call for NotificationUnsubscribe
          netcfg: Base NetCfg exceptions on DBus::Exception
          GDBus++/ovpn3cli: Migrate 'openvpn3-admin netcfg-service'
          sessionmgr/proxy: Don't call StartServiceByName() in the constructor
          build: Add workaround for tinyxml2 macro bug in OpenVPN 3 Core
          sessionmgr/proxy: Implement SessionManager::Proxy::Manager::Introspect()
          sessionmgr/proxy: Implement methods for a few Session object properties
          GDBus++/ovpn3cli: Migrate 'openvpn3-admin sessionmgr-service'
          sessionmgr: Remove superfluous check in helper_retrieve_sessions()
          utils: Add a global time_t to local date/time string converter
          configmgr/proxy: Extend the configmgr proxy with property getters
          GDBus++/ovpn3cli: Migrate 'openvpn3 configs-list'
          configmgr/proxy: Extend the configmgr proxy with CheckObjectExists()
          configmgr/proxy: Add helper code for using smart-pointers
          ovpn3cli/arghelpers: Add optional DBus::Connection to retrieve_config_path()
          GDBus++/ovpn3cli: Migrate 'openvpn3 config-manage'
          GDBus++/ovpn3cli: Migrate 'openvpn3 config-acl'
          GDBus++/ovpn3cli: Migrate 'openvpn3 config-dump'
          GDBus++/ovpn3cli: Migrate 'openvpn3 config-remove'
          GDBus++/ovpn3cli: Migrate 'openvpn3 config-import'
          configmgr/proxy: Improve error message on config object not found
          sessionmgr/proxy: Add GetConfigPath() method
          GDBus++/ovpn3cli: Migrate 'openvpn3 sessions-list'
          GDBus++/ovpn3cli: Migrate 'openvpn3 session-stats'
          sessionmgr/proxy: Add CheckSessionExists() method
          GDBus++/ovpn3cli: Migrate 'openvpn3 session-acl'
          client: Use StatusMinor::SESS_AUTH_URL for pending web authentications
          common/cmdargparser: Add missing #include <sstream>
          dbus: Improve object ownership GetUID/GetPID call error scenarios
          common: Add missing #include<string> in open-uri.hpp
          events: Fix typ0 in the Status method - Get/SetPrintMode
          log/proxy: Harden the LogProxy::Remove() method
          sessionmgr: Improve log_forwarders access across multiple threads
          configmgr/proxy: Update DBus::Proxy::Exception throw APIs
          sessionmgr: Session::method_ready() uses wrong exception string for parsing
          sessionmgr/proxy: Use *::List where possible for handling known std::vector<> types
          sessionmgr/proxy: Session::Ready() cannot use simple_call()
          sessionmgr/proxy: Session::GetLastStatus() should not return a const object
          GDBus++/ovpn3cli: Migrate 'openvpn3 session-auth'
          sessionmgr/proxy: Base SessionManager::Proxy::Exception on DBus::Exception
          ovpn3cli: retrieve_config_path() should return DBus::Object::Path
          sessionmgr/proxy: Provide all details when Proxy::Session::Ready() fallback throws
          configmgr/proxy: OpenVPN3ConfigurationProxy::Import() should return DBus::Object::Path
          ovpn3cli/GDBus++: Migrate 'openvpn3 session-start'
          ovpn3cli/session: Move statistics_plain() helper function to helpers.cpp
          ovpn3cli/GDBus++:  Migrate 'openvpn3 session-manage'
          sessionmgr: Don't wipe the log_forwarders map until we're done
          log/logwriter: Extend the API to handle Events::Status
          common/utils: Add is_colour_terminal() helper function
          tests/GDBus++: Migrate the logfwd-listener test program
          sessionmgr/proxy: Move local exceptions to SessionManager::Proxy::Exception
          ovpn3cli/GDBus++: Migrate 'openvpn3 log'
          ovpn3cli: Make main() provide argv[0] details in exceptions
          GDBus++: Remove left overs from the old DBus implementation
          policy: Be more generous with access to Ping methods
          sessionmgr/proxy: Add extra check at setup to check availability in Manager
          configmgr/proxy: Replace Ping in ctor with CheckObjectExists()
          ovpn3cli/log: Fix signal setup errors with fresh starts
          ovpn3cli/log: LogAttach::lookup_config_name() does not always need iterations
          build: Remove autoconf/automake build configuration
          docs: Update README and BUILD documentation
          codestyle: Do a complete reformat for consistency
          docs/man: The logger service is renamed - openvpn3-service-log
          docs: Update the renamed openvpn3-service-log in misc documentation
          src: Update to the renamed openvpn3-service-log in the sources
          docs/man: Generalize the generation and installation of man pages
          build: Move finding 'cp' from dco to main meson.build
          build: Install the Python code via Meson
          docs: Minor style cleanup in dbus-overview.md
          build: Install the distro/systemd files if systemd is enabled
          build: Remove the '-dev' extension to binaries
          build: Split out the openvpn3/ Python module to a separate meson.build
          build: Prepare and install bash-completion files when enabled
          build: Generate and install polkit and PolicyKit rules
          build: Install the persistent configurations directory
          build: Migrate profilemerge-optionlist test program to Meson
          tests: Build config JSON import/export test programs
          tests: Build open-uri-test
          common: Get rid of glib-unix.h from cmdargparser.hpp
          build: Reduce linking deps for test programs
          build: Don't build unit-tests unless enabled
          ovpn3cli: Fix failing shell-completion for 'openvpn3 log'
          configmgr: Adjust ACLs for Fetch/FetchJSON and public_access rights
          configmgr: Grant read access to more config object properties
          configmgr: Provide better user-error when Authorize() rejects access
          log: Don't duplicate Events::Log() prefix in the log writes
          ovpn3cli/log: Remove duplicated Events::Log details in log output
          configmgr/proxy: Add/Remove tag methods provided odd errors
          ovpn3cli/config-manage: Remove not needed details in errors from --tag and --remove-tag
          ovpn3cli/config-manage: Extract all profile before displaying it
          configmgr/proxy: Add method to retrieve the D-Bus path of the object
          ovpn3cli/config-acl: Add some air around the output and show D-Bus path
          ovpn3cli/config-manage: Add D-Bus path to --show
          configmgr: Fix properties via add_persistent_property() not working
          code style: Use BreakBeforeBinaryOperators: NonAssignment
          code style clean-up
          ovpn3cli/config-manage: Better message on profile objects not found
          ovpn3cli: Improve overall error extraction for the command line
          ovpn3cli/log: Improve error message when LogForward() call fails
          netcfg/proxy: Fix incorrect data type for Device::SetMtu()
          netcfg: Implement missing device object properties
          configmgr: Fix mixed up Log Attach() API usage
          sessionmgr: Generalize the check if the backend VPN proxy is valid
          sessionmgr: Remove the backend VPN proxy if session closing fails
          sessionmgr: Catch errors if DBus::Object::Manager::RemoveObject() fails
          sessionmgr: Fail Authorization() if VPN backend is dead
          configmgr/proxy: Calling CheckObjectExists() should not happen in ctor
          sessionmgr/proxy: Improve the SessionManager::Proxy::Manager setup
          configmgr: Ensure log service is available on config import
          configmgr: Improve error message to user on import errors
          client: Check vpnclient object exists in 'Ready' callback
          ovpn3cli/session-start: Improve stability starting sessions from file
          tests: Don't run config-override-selftest if Config Manager is inaccessible
          configmgr: Extend configuration objects with a Validate() D-Bus method
          ovpn3cli/session-start: Validate config profiles before starting a new VPN session
          python: Add config profile validation in openvpn2 and openvpn3-systemd
          ovpn3cli/config: Add profile validity check in config-manage and configs-list
          github: Add issue template - migration to codeberg.org
          configmgr/proxy: Add feature check for Validate method
          ovpn3cli/session-start: Always refresh feature set setting up configmgr proxy
          netcfg/proxy: Check non-response calls for nullptr before freeing
          client: Catch exceptions from NetCfgProxy::Device method calls
          netcfg: Return when no DNS resolver is configured in method_add_dns_search()
    
    Frank Lichtenheld (1):
          build-selinux-policy: make sure to use bash
    
    Razvan Cojocaru (4):
          GDBus++: Migrate openvpn3-service-configmgr
          build: Use version_compare(), not lexicographical comparisons
          Use get_option('sbindir') instead of hardcoded 'sbin'
          log/syslog: Don't assign NULL to const std::string& parameter
    
    
  • v21 protected
    OpenVPN 3 Linux v21 (stable)
    
    This is primarily a maintenance release with several minor bug fixes
    and general improvements.
    
    * Improvement: Upgrade OpenVPN 3 Core Library to v3.8.2
    
      This is an upgrade from Core Library 3.7, which provides more
      enhancements and adds support for the newer ovpn-dco-v2 kernel module
    
    * Bugfix: OpenVPN 3 Linux AWS VPC lacks support for IMDSv2
    
      mattjbyrd reported the AWS VPC integration was not working with EC2
      instances where IMDSv2 was enforced.  This issue is resolved with
      the OpenVPN 3 Core Library upgrade.
    
      Details: <https://github.com/OpenVPN/openvpn3-linux/issues/192>
    
    * Bugfix: Python StatusCallback did not work without LogCallback enabled
    
      Jeremy Fleischman reported an issue related the openvpn3 Python
      module did not work when just setting up a
      SessionManager.StatusCallback() method.  He provided a fix which is
      now included in v21.  Thanks a lot, Jeremy!
    
      Details: <https://github.com/OpenVPN/openvpn3-linux/commit/ba6fe37e7e28d1e633b56052383da3072f03c11e>
    
    * Bugfix: openvpn3 config-manage override may not always work
    
      The openvpn3 config-manage override options would in some cases not work
      due to a programming error related to an internal set_override() method
      and the SetOverride() D-Bus method.  The result was that typically
      string values ended up empty.  Now all the overrides can be configured
      again.
    
    * Bugfix: OpenVPN 3 Python based configuration parser issues
    
      Several options and --profile-overrides did not work or was completely
      missing, like the dns-scope and allow-compression overrides.  This
      has been improved and the list of overrides should now be up-to-date
      with openvpn3 config-manage.
    
      The Python based option parser also did not fully support overrides
      with a boolean true/false setting properly.  This has also been
      fixed.
    
    * Improvement: Detect needed host specific settings during package install
    
      The OpenVPN 3 Linux v20 introduced the openvpn3-admin init-config
      command.  This has been further improved and will now be run
      automatically during the package installation.  This command will
      probe the system for important features on the system, like what
      kind of system logging is in use, what kind of DNS resolver
      approach being available (systemd-resolved, /etc/resolv.conf) as
      well as doing other sanity checks, like if the needed openvpn
      user/group is present, important directories being configured
      correctly and that SELinux based systems have the proper file
      contexts set up.
    
      The default behaviour is that existing configuration changes done
      will NOT be overwritten.  But if no settings has been set, it will
      generate configurations files better matching the running system.
    
    * Improvements: OpenVPN 3 Log Service
    
      The OpenVPN 3 Log service (openvpn3-service-logger) made it
      hard to track where Attached: and Detached: log events came
      from.  This does now add a PID reference, which can be traced
      more easily in the logs.
    
    * Improvements: OpenVPN 3 Configuration Manager feature support tracking
    
      When upgrading OpenVPN 3 Linux versions, there might be situations
      where an older OpenVPN 3 Configuration Manager will be running but
      the openvpn3 command line tool is newer.  When the command line tool
      attempts to access features in the Configuration Manager backed not
      available, it would result in an error and a poorer user experience.
    
      The code providing the glue interface for the calling side (openvpn3)
      has been extended with a feature/version mapping, so it can filter out
      operations not supported if the backend version is lacking certain
      functions.  In most cases, the openvpn3 config commands will then
      continue to work as before, just not providing access to features
      available in newer back-ends.
    
      A similar functionality is planned for the Session Manager and is
      being considered for the OpenVPN 3 Python module.
    
    * Improvements: OpenVPN 3 Python module
    
      Configuration profiles from OpenVPN Access Server and
      some times OpenVPN Cloud Connexa will often contain "meta options",
      typically prefixed with "# OVPN_".  The Python parser would
      not accept several of the deprecated meta options.  The
      parser has now been extended to filter out those options not
      needed, used or supported by the OpenVPN 3 Core Library.
    
    * Improvements: Adjustments needed to satisfy Debian packaging
    
      Several minor issues has been done to satisfy the Debian package linter
      utility.  There are still some issues left, some will not be possible
      to improve before Debian ships with a newer dbus-daemon - as we need
      functionality present in a newer release.  The dbus-broker is also
      lacking a similar functionality currently.
    
      This work is also done in collaboration with Marc Leeman who is
      working on providing an native Debian repo package for OpenVPN 3 Linux.
      Thanks a lot, Marc!
    
      Details: <https://github.com/OpenVPN/openvpn3-linux/issues/193>
    
    * Feature: Label/tag support for imported OpenVPN configuration profiles
    
      The OpenVPN 3 Configuration Manager and the openvpn3 config-manage and
      configs-list commands has been extended to with the ability to add one
      or more text labels to configuration profiles.  At import time, the
      openvpn3 config-import command can also assign tags immediately.
    
      Users with many imported configuration profiles can more easily filter
      which configurations shown with the openvpn3 configs-list command.
      Other tools (openvpn3-as, openvpn-connector-setup) will also make use
      of this feature as they are being updated, to more easily understand
      where a configuration profile arrived from.
    
    * Feature: JSON formatted output with openvpn3 configs-list and config-dump
    
      The list of configurations can now be retrieved as a JSON formatted
      list via the openvpn3 configs-lists.
    
      The openvpn3 config-dump will normally dump the normal configuration
      using the standard OpenVPN configuration file format.  The JSON format
      will contain all the additional meta options, overrides and access
      control lists not expressed in the standard file format.  This format
      is the same format used internally for persistent configuration
      profiles.
    
    * Feature: Filtering options when retrieving available configurations
    
      The openvpn3 configs-list command has been extended with several
      filter arguments to only extract filters with a specific tag or
      owner as well as a simple prefix filter on the configuration name.
    
      The OpenVPN 3 Configuration Manager also exposes two new D-Bus
      methods to retrieve available configuration profiles based on a
      tag or owner.
    
    * Feature: Simple and verbose list formats in openvpn3 configs-list
    
      The default listing in openvpn3 configs-list has been simplified
      and will only list one configuration profile per line now.  The
      more comprehensive list can be retrieved using the --verbose
      argument.  The verbose list will also include configuration tags.
    
    ---- Changes from v20 to v21 -------------------------------------------
    
    Antonio Quartulli (2):
          ovpn3cli/init-config: use namespace NetCfg::DNS also if no systemd is available
          netcfg-dco: remove code made obsolete by ovpn-dco-v2
    
    David Sommerseth (128):
          Update GitHub pull-req template
          configmgr: Add override caching to OpenVPN3ConfigurationProxy::GetOverrides()
          configmgr: Extend Configuration Proxy with GetOverrideValue()
          ovpn3cli/config: Explicitly provide DNS Resolver Scope setting
          netcfg/dns: Enable default DNS routing when scope is global
          netcfg/dns: Document the NetCfg::DNS::systemdResolved::updateQueueEntry properties
          build: Fix improper cleanup
          aws: Remove execute flag on systemd unit file
          log: Save a flag for changed properties in LogServiceProxy
          log: Extend LogServiceProxy to track what the original value was
          ovpn3cli/admin: Refactor log-service command
          docs: Improve doxygen setup
          common: Add missing header file in lookup.hpp
          netcfg/dns: New method - ResolvConfFile::GetNameServers()
          ovpn3cli: Extend init-config to also consider /etc/resolv.conf
          log: Extend LogMetaDataValue to handle integers
          log: Parse the O3_INTERNAL_METHOD meta data
          log: Extend Logger with GetLogTagPtr() method
          log/service: Refactor out log detaching logic to separate method
          log/service: Enable automatic cleanup of stray subscriptions
          python: Fix ConfigParser.ReadConfigFile not removing semicolon comments
          Update to OpenVPN 3 Core library v3.8 baseline
          client: Check if the configuration is DCO compliant before start
          vendor: Update to ASIO 1.28.0
          log: Add caller PID to Attach/Detach calls
          docs: Remove Linux distributions which is no longer supported
          log: Strip double {tag:...} references in openvpn3-admin journal output
          core: Update to latest OpenVPN 3 Core 3.8 related changes
          ovpn3cli: Add --exists and --quiet to config-manage
          configmgr: Add missing #include<dbus/path.hpp>
          docs: Add missing configmgr description: SetOverride/UnsetOverride
          configmgr: Add support for assigning tags to config profiles
          configmgr: Preserve configuration profile tags on disk
          configmgr: Return gracefully if a method call is not processed
          configmgr: Expose C++ method for checking config profile tags
          configmgr: Add D-Bus method to search for config profile tags
          configmgr/proxy: Extend proxy object with tag management
          ovpn3cli: Show config profile tags in config-manage
          configmgr/proxy: Improve tag management error handling in proxy object
          ovpn3cli: Add tag management to config-manage
          ovpn3cli/config-manage: Consider --quiet in all informational output
          configmgr/proxy: Make tag prefix 'system:' reserved
          python: Extend Configuration implementation with tag management
          python: Implement SearchByTag() in ConfigurationManager object
          python: Extend ConfigurationManager.Import() to add system tags
          python/openvpn3-as: Add an openvpn3-as specific system tag on import
          configmgr: Refactor ConfigManagerObject D-Bus method call handler
          configmgr: Refactor ConfigurationObject D-Bus method call handler
          configmgr: Rework the config profile usage counter check logic
          configmgr: Replace __FUNCTION__ macro in GLibUtils calls
          core: Switch to OpenVPN 3 Core version 3.8
          configmgr: Reorder #include files
          configmgr: Remove stray handler_fetch_json() method
          configmr: Refactor g_variant_get() calls, use GLibUtils instead
          dbus/glib: Extend GVariantBuilder helpers with type override
          configmgr: Refactor std::vector D-Bus return values to use GLibUtils
          configmgr/proxy: Refactor g_variant_get() calls, use GLibUtils instead
          dbus: Extend GLibUtils with ParseGVariantList()
          configmr/proxy: Refactor proxy code retrieving D-Bus arrays
          ovpn3cli: Add --filter-config to configs-list command
          configmgr/proxy: Extend proxy object with tag search
          ovpn3cli: Add --filter-tag to configs-list command
          configmgr: Add D-Bus method to search for profiles by specific owner
          configmgr/proxy: Extend proxy object with SearchByOwner()
          ovpn3cli: Add --filter-owner to configs-list
          ovpn3cli: Add --count to configs-list
          ovpn3cli: Improve configs-list output
          client: Do not reset empty env array in backendstart
          core: Update to OpenVPN 3 Core library v3.8.1
          dbus: Clean up odd init booleans in DBusProxy
          dbus: Cleaning up impropoer DBusProxy internal proxy pointers freeing
          dbus: Remove the DBusProxy() constructor accepting DBus() objects
          dbus: Protect DBusProxy::proxy pointers changes better
          ovpn3cli: Fix signedness comparison issue in cmd_config_manage()
          netcfg: Fix improper use of std::move() variables in NetCfgProxyException
          dbus: Fix copy-paste error in DBusProxy destructor
          configmgr: Use a better data type for timestamps in JSON Export()
          netcfg/unit: Add DNSResolverSettings.AddNameServer_multiple test
          netcfg/dns: Replace RC/RCPtr with std::shared_ptr in ResolverSettings
          netcfg/dns: Be consistent with for-iterators in SettingsManager
          dbus: Add more details when dbus_proxy_call() fails
          dbus: Fix incorrect use of proxy object in DBusProxy::GetNameOwner()
          build: Add a few missing #include files
          netcfg/dns: Improve details on file removal in FileGenerator::Write()
          netcfg/dns: Catch and report errors in ResolvConfFile::~ResolvConfFile()
          netcfg: Check fd properly before close() in NetCfgServiceObject::protect_socket()
          common: Fix potential memleak in SingleCommand::parse_commandline()
          common: Fix incorrect arg passing in Configuration::OptionMapEntry
          common: Fix incorrect lambda arg passing in Configuration::File
          docs: Fix incorrect signal signature for netcfg.NetworkChange
          ovpn3cli/configs-list: Add --json output format
          build: Do not distribute ovpn-dco header as part of openvpn3-linux
          configmgr: Use Json::Value::UInt64 instead of uint64_t
          dbus/glibutils: Don't initialize std::stringstream
          configmgr: Check override type as well as D-Bus type in set_override()
          configmgr: Add missing #include in overrides.hpp
          configmgr: Fix incorrect set_override() declaration
          configmgr: Fix lacking config override value extraction
          configmgr/tests: Update config-override-selftest exception checks
          python: Add support for --ignore-unknown-option in openvpn2
          core/config: Extend OpenVPN Access Server configuration support
          core/config: Filter out meta-options in OptionListJSON::json_export()
          tests: Add unit test for OptionsJSON string and JSON export methods
          common: Extend ParsedArgs::Present(std::vector<>) to optionally return empty string
          ovpn3cli: Don't throw an exception in config-manage if operation is not found
          python: Fix typ0 in error message with incorrect override key
          python: Move supported profile overrides definition
          python: Ensure --profile-overrides is not put into generated config
          python: Add support for allow-compression profile override setting
          ovpn3cli/config: Move openvpn3 config-import into a separate compilation unit
          ovpn3cli/config: Extend JSON schema used by config-dump --json
          python: ConfigParser does not process boolean overrides correctly
          python: Add support for dns-scope profile override in ConfigParser
          core: Update to OpenVPN 3 Core library v3.8.2
          configmgr/proxy: Add framework for backend feature checking
          configmgr/proxy: Add CfgMgrFeatures::TAGS checking
          ovpn3cli/config: Add feature check for configs-list and config-manage
          configmgr/proxy: Add forcing feature loading in the OpenVPN3ConfigurationProxy
          ovpn3cli/config: Add --tag support to config-import
          ovpn3cli/config: Fix typo in JSON key for transfer_owner_session
          ovpn3cli/config: Add missing feature check in config-dump
          proxy: Fix incorrect version extraction logic with non-service root paths
          build: Rework the OpenVPN 3 Core library version macro (OPENVPN_VERSION)
          python: ConfigParser does not accept --bind
          python: ConfigParser did not accept dns-fallback-google and persist-tun overrides
          docs/man: Use the proper section tag in openvpn3-systemd.8
          misc: Fixing several typ0s all over the code base
          docs: Minor touches to README and BUILD docs
    
    Frank Lichtenheld (1):
          docs/man: Fix description in openvpn3-config-manage man page
    
    Jeremy Fleischman (1):
          python: Fix StatusChangeCallback() so it works without a LogCallback
    
    
  • v20 protected
    OpenVPN 3 Linux v20 (stable)
    
    This is the first stable relase of OpenVPN 3 Linux.  This release is
    mostly adding minor improvements, a few bug fix and adding two more
    helper tools.
    
    * Feature: openvpn3-admin journal
    
      This is a helper function to retrieve log events from the OpenVPN 3 Linux
      stack logging with systemd-journald.  It can be considered a lightweight
      journaldctl tool, which is targetting some of the filters useful for
      OpenVPN 3 Linux.
    
    * Feature: openvpn3-admin init-setup
    
      This is another helper function to configure OpenVPN 3 Linux in an
      automated fashion based on the current runtime environment.  It will
      ensure proper   state directories are present with the proper ownership
      and access, as well as SELinux context lables if that is availale.  It
      will check if the needed user/group accounts is present and wether to
      use systemd-journald and systemd-resolved or not.
    
      In the next release, this feature will be used in the the packaging
      scripts for Debian/Ubuntu and Fedora/Red Hat Enterise Linux packaging
      as well.
    
    * Improvement: Full support for CR_TEXT based multi-factor authentication
    
      Prior releases did not fully support CR_TEXT/crtext based authentication
      which would result in disconnecting from the server while querying the
      user for the additional credentials.  This new mode is more efficient and
      will keep the connection to the server alive.
    
    * Improvement: Improve behaviour with incorrect private key passphrase
    
      Prior releases would dump an error message which would not be much
      end-user friendly if the connection failed due to incorrect passphrase
      to the private encryption key needed for the connection.  This has
      been improved and the error handling should be more clear for
      non-technical users.
    
    * Improvement: Run resume and restart operations in the background
    
      Until now, the openvpn3 session-manage --resume and --restart operations
      would run in the foreground, resulting in stopping the VPN session if
      this operation would be interrupted.  These operations can typically run
      in the background.  If a re-authentication would be need, the
      openvpn3 session-auth command is available to complete that operation.
    
      It is also possible to run these operations in the foreground by
      adding the --timeout argument with a value reasonable to wait for this
      operation to complete.
    
    * Improvement: Install openvpn3/constants.h header file
    
      This adds ah eader file which contains all the constants used by the
      OpenVPN 3 Linux stack, which is suitable for C programs.  The constants
      listed here is similar to the constants found when importing the
      Python 3 openvpn3.constants module.  These constants are typically used
      in D-Bus signals issued by the OpenVPN 3 Linux stack.
    
    * Bugfix: Don't hardcode use of  --journald in openvpn3-service-logger
    
      Not all Linux distributions ships with the systemd stack.  Auto-detect
      during build time if systemd support is available or not and fallback to
      syslog if systemd support is lacking.
    
    * Bugfix: Don't hardfail if systemd-resolved is unreachable
    
      If openvpn3-service-netcfg could not reach or access the systemd-resolved
      service, it would hard-fail which again would cause the VPN session to
      fail starting.  This has been changed so the VPN session will succeed,
      but it will instead not do the DNS configuration.  This situation will be
      duely logged in the system logs.
    
    * Documentation: Highlight deprecation of openvpn3-autoload
    
      The openvpn3-autoload feature is being deprecated in favour of using the
      systemd openvpn3-session@.service feature instead.  The openvpn3-autoload
      feature will still be around though, until there is a suitable alternative
      for Linux distributions not capable of using the more native systemd
      approach.
    
    * Documentation: Generic overhaul
    
      Lots of the man pages as well as README.md file has been reviewed and
      updated.  Lots of details has been clarified and the README.md has been
      split up into several files as it has grown quite a lot and some of the
      information would be better to have in other files to avoid duplicating
      the information.
    
    * Code: Coding style
    
      There exists now a .clang-format coding style definition and all the
      C++ source code and headers should now be using this style.
    
    * Copyright: Switch to SPDX license tags
    
      To ease the maintenance of copyright blobs, all files with an AGPL
      copyright blob has been switched to the SPDX license tag.
    
  • v19_beta protected
    OpenVPN 3 Linux v19 (beta)
    
    This release does another round of improving the logging system,
    in addition to bug fixes and other improvements.
    
    * Log system changes
    
      The net.openvpn.v3.log service has been extended to support logging
      directly to systemd-journald as an alternative to syslog.  The
      default log destination has been changed from syslog to journald.
    
      Using the systemd-journald as the log destination allows attaching
      more meta data variables to the log events, which can be used when
      querying the journal using journalctl.  These additional meta data
      variables can be observed when using the 'verbose', 'json',
      'json-pretty' or 'export' output modes (journalctl --output)
    
      The OpenVPN 3 Linux specific meta data variables are prefixed with
      "O3_".  The meta variables OpenVPN 3 Linux may make use of are:
    
      - O3_LOG_GROUP / O3_LOG_CATEGORY
        These are direct mapped to the logging classification described
        here: <https://github.com/OpenVPN/openvpn3-linux/blob/master/docs/dbus/dbus-logging.md>
    
      - O3_LOGTAG
        This tag is unique per openvpn3-service-* process and will be
        changed if the process restarts.  This information has so far
        been added to the beginning of the log lines, as the '{tag:....}'
        prefix.  This prefixing to the log lines can now be removed by
        running:
    
            # openvpn3-admin log-service --enable-log-prefix false
    
        The O3_LOGTAG will have the same content as the prefix, without
        the '{tag:...}' encapsulation; O3_LOGTAG contains only the plain
        identifier.  The log tags currently active can be listed by
        running:
    
            # openvpn3-admin log-service --list-subscriptions
    
      - O3_SENDER, O3_INTERFACE, O3_OBJECT_PATH
        These are added if the D-Bus log details are enabled by running:
    
            # openvpn3-admin log-service --dbus-details true
    
      - O3_SESSION_TOKEN
        This is used by the openvpn3-service-client process, where the
        session token has the same value as the argument the process
        is started with
    
      To list only these OpenVPN 3 Linux meta variables, run this
      command:
    
         # journalctl -o verbose --since today \
              --output-fields=O3_SENDER,O3_INTERFACE,O3_METHOD,O3_OBJECT_PATH,O3_LOGTAG,O3_SESSION_TOKEN,O3_LOG_GROUP,O3_LOG_CATEGORY,MESSAGE \
               _PID=$(pidof openvpn3-service-logger)
    
      This query can be extended further to narrow down the log scope.
      To only list client process log events, add this to the line
      above:  O3_LOG_GROUP=Client
    
    * Enhancement: IV_PLAT_VER sent to server
      This field provides OS details of the platform the OpenVPN 3 client
      is running on.  This will contain an arbitrary string provided by
      either the systemd-hostnamed service, or if that is unavailable it
      will extract some more generic information using the uname()
      system function.
    
      The IV_GUI_VER string has also been slimmed down a bit to only
      provide information about the OpenVPN 3 Linux client alone.  The
      IV_VER will contain information about the OpenVPN 3 Core library
      version which OpenVPN 3 Linux is compiled against.
    
    * Update to OpenVPN 3 Core Library v3.7.1
      This update of the OpenVPN 3 Core library is a maintenance release.
      The changes which touches OpenVPN 3 Linux is related to the ovpn-dco
      kernel module support.  On systems running more VPN sessions in
      parallel with DCO (Data Channel Offload) enabled, the Core library
      could in some situations perform operations on the wrong DCO
      interface.
    
    * Bugfix: Web based authentication with OpenVPN Access Server fix
      When connecting to OpenVPN Access Server configured with web based
      authentication (i.e. SAML), the authentication could fail on
      renegotiations.  The fix currently applied will require to import
      the Access Server profile once again.  This will be improved
      further in the next release.
    
      <https://github.com/OpenVPN/openvpn3-linux/issues/154>
    
    * Bugfix: Python warning with openvpn3-as on Ubuntu 22.04
      When running the openvpn3-as utility on Ubuntu 22.04 it would complain
      about using a deprecated ssl.SSLContext() mode.  This has
      been updated to use the preferred mode.
    
    * Bugfix: openvpn3 command line bash-completion
      The bash-completion support has been changed to avoid adding an
      additional space after file and directory names.
    
    The complete list of changes:
    
    David Sommerseth (74):
          tests: Improve MachineIDTest::get_systemd_api test
          build: Split up proxy-netcfg into a manager and device compilation unit
          core: Update to latest OpenVPN 3 Core Library 3.7 development
          shell: Fix proposing more options to --config shell completion
          shell: Fix trailing spaces in bash-completion
          build: Generate C compatible header file
          dbus: Add missing #include in glibutils.hpp
          log: Move LogTag into its own compilation unit
          log: Extend LogTag to enable/disable the tag mark encapsulation
          log: Extend LogTag with copy constructor
          log: Add new helper classes for log meta data
          log: Implement the new meta data log handling
          log: Extend LogMetaDataValue to process LogTag objects
          log: Extend LogMetaData with GetMetaDataRecords() method
          log: Use LogTag in Logger class instead of std::string
          common: Allow setting default filename in Configuration::File ctor
          common: Extend Configuration::File with Get/Set for more data types
          log: Re-implement configuration state saving
          log: Switch to GLibUtils::ExtractValue in LogEvent
          log: Implement LogTag prefix configuration setting
          log: Extend LogEvent with LogGroup/Category string extraction
          log: Add support for native systemd-journald logging
          log: Implement systemd-journald support in openvpn3-service-logger
          log: Split logwritter.hpp into its own compilation unit
          log: Split out StreamLogWriter and ColourStreamWriter
          log: Split out SyslogWriter to its own compilation unit
          log: Split out JournaldWriter to its own compilation unit
          log: Final change of the logwriter.hpp split-up refactoring
          log: Extend LogWriter API to provide backend info
          log: Extend net.openvpn.v3.log interface with log_method property
          cli/log: Provide information about logging method in use
          cli/log: Add admin --enable-log-prefix config setting
          log: Fix memory corruption with syslog/openlog()
          log: Rework initial opening information in logger service
          common: Extend Configuration::File with GetFilename()
          log: Extend state/config file option coverage
          log/logger: Simplify exclusive option check
          log/logger: Rework configuration/state loading
          log/logger: Extend with D-Bus property for config_file
          common: Add missing include files in cmdparser-exceptions.hpp
          cli/log: Add new options for logger config file management
          logger: Enable --journald as default log method
          build: Don't use space in PACKAGE_NAME
          docs/man: Add missing --auth-req option in openvpn3 session-auth
          docs: Added GitHub pull-request template
          log: Avoid halting logger startup on missing log-service.json
          dbus: Make bus_name and interface protected members in DBusProxy
          dbus/proxy: Check if property proxy is configured
          dbus/connection: Add extra connection tests in DBus constructors
          common: Add PlatformInfo API
          client: Send platform OS/distro peer information to server
          client: Simplify IV_GUI_VER string
          utils: Fix incorrect string concat in get_guiversion()
          tests/unit: Handle PlatformInfo::DBus error gracefully
          python: Use ssl.PROTOCOL_TLS_CLIENT in openvpn3-as
          configmgr: Initialise all members of ConfigurationObject class
          common: inline optparser_mkline function in core-extensions
          build: Fix clang++ warnings related to __LINE__ usage
          sessionmgr: Remove not needed namespace reference
          build: Fix missing override issues in logging and netcfg-signals.hpp
          log: Remove not used class variable in LoggerProxy
          log: Add virtual destructor in LogTag
          log: Pass the LogTag objects as smart pointers
          tests: Extend LogMetaData unit tests (LogMetaData, LogMetaDataValue)
          client: Add workaround for OpenVPN Access Server web authentication
          tests/core: Extend profilemerge-optionlist with dump functionality
          ovpn-dco: Update to latest headers
          docs: Add details about nscd and sssd
          log: Fix lacking LogWriter::AddMeta() doxy doc
          log: Fix missing O3_LOGTAG meta data variable
          cli/log-service: Fix incorrect change detection for log prefixing
          cli/log-service: Correct the behaviour with journald and D-Bus details
          distro: Improve openvpn3-session@.service unit
          core: Update to OpenVPN 3 Core Library v3.7.1
    
    Jagadeesh Kotra (1):
          docs/client: fix typo in net.openvpn.v3.client docs
    
    Raphael Mader (1):
          log: Fix non-systemd build
    
  • v19_betaRC1 protected
  • v18_beta protected
    OpenVPN 3 Linux v18 (beta)
    
    This release does a larger overhaul on the logging system with a few
    additional bug fixes and other improvements.
    
    * Log system changes
    
      In prior releases, the backend VPN client (openvpn3-service-client
      processes) sent Log signals (events) to the log service
      (openvpn3-service-logger process).  If a user wanted to receive
      real-time log events, it could easily do so by flipping a boolean
      flag in the VPN session, managed by the session manager
      (openvpn3-service-sessionmgr process).  In this case, the session
      manager would also pick up Log events from the VPN client and
      forward them.
    
      This architecture had a flaw which meant that if the log forwarding
      in the session manager was enabled for a session, anyone could pick
      up these log events.  And if one of these log listeners turned off
      the log forwarding, this would happen for all other listeners at
      once.  This design also meant that the VPN client process needed to
      send Log events to two different destinations; both the logger and
      the session manager.
    
      With the change introduced in v18_beta, the VPN client process now
      only sends Log events to the logger service.  When a user wants to
      receive log events now, it needs to call the
      net.openvpn.v3.sessions.LogForward() method setting an enable flag
      instead of flipping the receive_log_events boolean property directly.
      The session manager will now do a proper access control to the caller
      and then tell the log service to forward Log events directly to the
      program wanting to receive Log events.  To disable this forwarding,
      the program just calls the same method and unset the enabling flag.
    
      This new architecture also allows multiple log forwarders to run in
      parallel without impacting the other listeners.  Each forwarding are
      now handled independently.  And forwarding Log events will no longer
      impact the session manager any more.
    
    * Enhancement: openvpn3-as profiles can be started via systemd
    
      In v16_beta a new systemd unit file was introduced to make it
      possible to manage VPN sessions via systemd.  With v18_beta
      this integration has been extended to the openvpn3-as utility
      which can download a VPN profile directly from an OpenVPN Access
      Server.
    
      When run as root, two new options can be used:
      --systemd-start and --owner.
    
      The first one will instruct openvpn3-as to enable the imported
      configuration profile to be started automatically during boot.
    
      The --owner takes a username argument, which, when run as root,
      will transfer the ownership of this VPN profile to the given
      username.  When the VPN session is started as root, the session
      will automatically also be owned by the given user.
    
    * Bugfix: openvpn3 session-start with web based authentication
    
      The instruction guide to help continue with web based authentication
      was misleading and no longer correct.  This has been improved and
      the console now contains the correct instructions.
    
    * Bugfix: Configuration manager could mangle --verify-x509-name
    
      When importing a configuration file with the --verify-x509-name
      option, it would often be misinterpreted when the import was
      as a persistent configuration profile.
    
      This has been resolved and the internal on-disk storage format
      for persistent configuration profiles has been upgraded to correctly
      handle this type of option class, with quoted strings.
    
      <https://github.com/OpenVPN/openvpn3-linux/issues/90>
    
    * Bugfix: openvpn3-service-configmgr could segfault
    
      If the oepnvpn3-service-configmgr could not manage to reach the
      net.openvpn.v3.log service (openvpn3-service-logger), it would
      segfault resulting in a core dump needlessly.  This has been
      resolved by adding proper error handling and gracefully exit
      with a more reasonable error message.
    
    * Bugfix: Network Configuration state saving failing silently
    
      When the Network Configuration service (openvpn3-service-netcfg)
      configuration was to be written to disk and failing, the prior
      implementation ignored any errors happening.  This has been
      improved and the error is now presented to the user if there
      is an error saving the configuration file.
    
    * Bugfix: Python based config parser can now handle legacy algorithms
    
      The v17_beta release introduced a --enable-legacy-algorithms flag
      to be set on a configuration profile.  This worked fine via the
      openvpn3 config-manage interface, but the Python parser lacked the
      parsing of this option.  This has now been implemented, via the
      --profile-override option.
    
    * Bugfix: Python based config parser did not accept --auth-nocache
    
      The --auth-nocache is not a feature directly available in OpenVPN 3
      Core library.  But it does not block a configuration file from
      working, so this was put to the internal "ignore list".
    
    * Bugfix: openvpn2 could some times dump spurious error messages
    
      If CTRL-C was performed during the shutdown phase of a VPN session,
      where it would typically wait for statistics data to be collected
      it, could print various errors about local variables being
      unavilable.  This has now been improved.
    
    The complete list of changes:
    
    David Schneider (1):
          docs: Fix incorrect doc paths in net.openvpn.v3.sessions docs
    
    David Sommerseth (79):
          core-extension: Revamp the whole OptionListJSON class
          core-extension: Remove the ProfileMergeJSON class
          ovpn3cli: Improve session-start tip with URL auth
          python: Add support for enable-legacy-algorithms in config parser
          python: Extend openvpn3.Configuration class with GetConfigName()
          python: Extend openvpn3.Configuration class with SetOwnershipTransfer()
          python: Extend openvpn3-as with systemd integration
          python: Extend openvpn3-as with --owner
          log/proxy: Switch over from RCPtr to std::shared_ptr
          log/proxy: Add LogServiceProxyException exception class
          log/proxy: Add LogServiceProxy::AttachInterface() helper function
          configmgr: Switch over to LogServiceProxy::AttachInterface()
          sessionmgr: Switch over to LogServiceProxy::AttachInterface()
          netcfg: Switch over to LogServiceProxy::AttachInterface()
          client: Switch over to LogServiceProxy::AttachInterface()
          addons/aws: Switch over to LogServiceProxy::AttachInterface()
          python: Add --auth-nocache to ConfigParser's ignore list
          python: Fix spurious errors during disconnect in openvpn2
          common: Add error handling to Configuration::File::Save()
          dbus: Fix various warnings in connection.hpp
          dbus: Fix/improve header inclusion in signal.hpp
          client: Add missing include dbus-log.hpp in backend-signal.hpp
          log: Fix several spelling errors in comments in logwriter.hpp
          log: Remove the openvpn namespace and improve includes in dbus-log.hpp
          build: Rework distro/systemd EXTRA_DIST file list
          python: Allow --auth-retry to be passed on
          tests: Fix incorrect namespace closing in machine-id test
          build: Disallow AWS addon builds without OpenSSL
          build: Remove hard-coded gio-unix-2.0 include paths
          common: Fix missing header include for UID/GID lookups
          dbus: Remove the openvpn namespace from DBus related classes
          dbus: Extend DBus class with GetUniqueBusName()
          dbus: Ensure the D-Bus connection is valid
          dbus: Make path.hpp a separate compilation unit
          dbus: Free some GError structures in DBusProxy calls
          log: Refactor service.hpp to be a separate compilation unit
          log: Replace RC/RCPtr based smart pointers with standard C++
          log: Make dbus-log.hpp a separate compilation unit
          log: Don't log or proxy empty log events
          dbus: Extend with DBusSignalProducer::set_object_path()
          client: Extend with BackendSignals::SetSessionPath()
          client: Extend RegistrationConfirmation D-Bus method with session path
          client: Extend BackendSignals with GetSessionPath() method
          client: Provide related session path as a property
          log: Implement net.openvpn.v3.log.AssignSession
          client: Provide session path details to log service
          log: Extend D-Bus logging with path filtering
          log: Extend LogSender with ProxyStatusChange() method
          log: Extend Logger class with LogSender forwarding support
          log: Extend log forwarding to also include StatusChange signals
          log: Implement base LoggerProxy class
          log: Implement ProxyLogEvent method and D-Bus proxy helper class
          log: Implement the LogForwardBase helper class
          sessionmgr: Tear out the current SessionLogEvent implementation
          log: Implement proper access control in LoggerProxy
          sessionmgr: Re-implement log forwarding to end-users
          log: Re-implement LogForwardBase to request forwarding via session manager
          sessionmgr: Fix incorrect #include fencing
          ovpn3cli: Re-implement log command with new logging infrastructure
          log: Implement LogEvent::RemoveToken()
          log: Remove session token from forwarded log events
          python: Rework openvpn3.SessionManager for the new logging infrastructure
          python: Update openvpn2 to properly disable logging on shutdown
          distro/systemd: Disable log forwarding properly on shutdown
          build: Install D-Bus policies in ${datadir}/system.d
          dbus: Extend DBusSignalProducer with SendTarget() method
          log: Extend LogSender::Log() with an optional target address
          client: Rework BackendSignals to avoid Log signal duplication
          dbus: Extend GLibUtils with CreateEmptyBuilderFromType()
          log: Extend LogSender with GetLastLogEvent()
          client: Extend internal session object with last_log_line property
          sessionmgr: Re-implement last_log session object property
          vendor: Upgrade ASIO to 1.22.1
          dco: Upgrade to latest ovpn-dco git master
          policy: Add a mandatory D-Bus policy for Log and StatusChange signals
          docs: Update README with dependencies and distro changes
          docs: Improve the net.openvpn.v3.log docs slightly
          docs/README: Add info about systemd unit file
          docs/README: Fix a few minor details
    
    Jagadeesh Kotra (1):
          docs: Fix missing information for net.openvpn.v3.configuration.Import
    
    
  • v18_betaRC3 protected
  • v18_betaRC2 protected
  • v18_betaRC protected
  • v17_betaUb2204 protected
    OpenVPN 3 Linux v17 (beta, Ubuntu 22.04)
    
    This release is the v17_beta release with an additional backport of a
    patch from the development branch.  This change is required to make
    OpenVPN 3 Linux build on Ubuntu 22.04.  This release is therefor only
    prepared for this particular distribution and version.
    
    David Sommerseth (1):
          build: Remove hard-coded gio-unix-2.0 include paths
    
  • v17_beta protected
    OpenVPN 3 Linux v17 (beta)
    
    This release consists mostly of several enhancements of various sizes.
    
    * Behavior change: Only AEAD ciphers available for data channel by default
    
      As part of the OpenSSL 3 support, non-AEAD ciphers are no longer enabled
      by default on for the data channel cipher.  That means essentially only
      AES-GCM and, if the TLS library supports it, ChaCha20-Poly1305.
    
      To restore the previous behaviour, the configuration profile must be
      imported via 'openvpn3 config-import' and then use an override setting:
    
        $ openvpn3 config-manage --enable-legacy-algorithms true --config $CONFIG_NAME
    
    * Command line: openvpn3 config-dump
    
      The openvpn3 config-show command has been deprecated in favour of
      openvpn3 config-dump.  This to avoid ambiguity in behaviour with
      commands supporting --show and to more clearly indicate it is the
      configuration _file_ and not configuration profile being displayed.
    
    * Feature: openvpn3 session-auth command
    
      This is a new command which can be used to interact with VPN sessions
      requiring interaction related to user authentications.  This is
      useful if the initial connection had not completed properly or that
      the server requires the user to re-authenticate.
    
    * Enhancement: Log level improvements on client log data
    
      In prior releases, the default log level in the backend process
      was set to 6, which is a debug level.  With this release, the
      default log level is 3.  But this is now more easily configurable.
    
      - The OpenVPN 3 VPN Client process now parses and respects the
        --verb option.
    
      - The configuration profile can set a log-level override.
    
      - Running VPN sessions can be adjusted on-the-fly using the
        the new --log-level option in openvpn3 session-manage.
        Changes using this approach are instant.
    
      - The default log level can also be changed by editing
        /usr/share/dbus-1/system-services/net.openvpn.v3.backends.service.
        Add the '--client-log-level 6' to the program in the Exec= line to
        restore the previous default log level.
    
    * Enhancement: Full support for --static-challenge
    
      Both the OpenVPN 3 client implementation and Python interface
      has gained full support for the --static-challenge option
    
    * Enhancement: systemd user credential passing
    
      When starting a VPN session via the openvpn3-session@.service unit
      file, the systemd-ask-password mechanism will be used to retrieve the
      requested user credentials.
    
    * Enhancement: VPN session ownership transfer
    
      For configuration profiles shared with more users, it is the
      the session owner is the user which started the VPN session.
    
      With this release, the configuration owner can set the
      --transfer-owner-session flag via openvpn3 config-acl.  This
      will make the configuration profile owner the session owner
      as well, regardless of which user starting the session.  The
      user starting the session will automatically be granted ACL
      entries to manage the session and access the VPN log events.
    
      This is useful for VPN profiles being started automatically during
      boot via the systemd openvpn3-session@.service unit file.  These
      sessions are typically started as root, but the session owner
      can end up being a different user on the system.  But the user
      need to grant access to the profile for the root user for this
      to work.
    
    * Extend openvpn3-as with an --insecure-certs option
    
      In v16_beta, the openvpn3-as utility was extended to validate the
      https server certificate of the OpenVPN Access Server.  For servers
      using self-signed certificates or signed by a unknown CA, this tool
      would no longer work.  By using this option, the user instructs this
      tool to ignore such issues.
    
    * Bugfix: Persistent configuration profiles with multiple --remote
    
      Configuration files containing multiple --remote lines would not
      be preserved correctly in the saved configuration profile; only the
      last entry would be stored.  This has been improved and all entries
      will now be preserved at import time.
    
      Beware: Configuration profiles will need to be re-imported to
      restore all the --remote entries.
    
    * Bugfix: Fix --tls-crypt-v2 in the Python parser
    
      In prior releases, configurations started via the Python interface
      would fail with an error if --tls-crypt-v2 was used.  This is now
      fixed.
    
    * Bugfix: Fix Python file loading of files with spaces in file names
    
      In prior releases, the configuration parser incorrectly parsed
      file names containing spaces.  This has been improved.
    
    * Bugfix: Non-functional shell completion for config files
    
      The prior release regressed on shell completion for OpenVPN
      configuration files via the openvpn3 config-import and session-start
      commands.  This has been resolved in this release.
    
    * Distro: Builds on distributions using musl instead of glibc
    
      Building OpenVPN 3 Linux on Alpine did not work too well as there
      were several aspects not compatible with the development stack on
      this distribution.  Both the OpenVPN 3 Core library and the Linux
      client has been modified to be able to build successfully.
    
    * Distro: Python 3.6 or newer is now required
    
      As of this release, any Linux distribution with Python older
      than version 3.6 is no longer supported.  This removes the
      support for Debian 9.
    
    The complete list of changes:
    
    David Sommerseth (61):
          cli/session-start: Add --background support
          log: Improve LogEvent formatting
          log: Use the LogEvent GVariant generator in LogSender
          log: Extend the LogSender::Log() with duplicate check
          client: Simplify BackendSignals::Log()
          client: Remove some not needed log duplication
          client: Don't switch to Reconnecting state on initial connect
          python: Remove aenum workaround for Python 3.5 or older
          python: Remove spurious import line from openvpn2
          python: Ignore --mute-replay-warnings option
          python: Add --insecure-certs option to openvpn3-as
          git: Switch to https for submodules
          python: Extend ConfigParser to understand --tls-crypt-v2
          python: Fix a few errors in ConfigParser
          sessionmgr: Fix incorrect LogEvent proxy format
          core-ext: Properly parse options which may be used more times
          common: Extend MachineID to support systemd API for machine-id
          python: Fix incorrect parsing of filenames with spaces
          client: Add support for static-challenge configurations
          common: Extend command line parser with alias command support
          ovpn3cli: Depreacte config-show in favour of config-dump
          core: Update to latest OpenVPN 3 Core library
          build: Avoid GNUism in Makefile.am
          configmgr/client: Remove support for forcing AES-CBC cipher
          configmgr: Extend with session ownership transfer flag
          ovpn3cli: Extend config-acl to support --transfer-owner-session
          sessionmgr: Respect the configuration profile transfer-ownership flag
          client: Parse the --verb option to set log-level
          client: Add support for 'log-level' override
          sessionmgr: Retrieve the client log-level for the session log-level
          sessionmgr: Proxy log-level settings in session to backend
          tests: Extend config-export-json-test to process files too
          core-ext: Fix incorrect handling of --static-challenge in JSON export
          systemd: Fix incorrect access to mainloop object in status handler
          systemd: Fix incorrect sd_notify() behaviour
          systemd: Add support for profiles needing user credentials
          common/shell: Fix bash-completion for options with optional arguments
          common: Don't throw an exception in ParsedArgs::GetValueLen()
          ovn3cli/session: Extend session-manage to set session log-level
          core: Update to latest OpenVPN 3 Core library
          dbus: Change the proxy call timeout to 5 seconds
          log: Don't throw exception on invalid LogGroup/LogCategory
          client: Use the proper index value to retrieve the --verb value
          client: Change default log-level to 3
          systemd: Do not change the log level at startup by default
          client: Extend StatusEvent with stringstream formatting control
          cli/session: Extend the session module with session-auth
          cli/session: Extend session-auth to also list URL based auth
          cli/session: Implement completing on-going auth in session-auth
          cli/session: Add shell-completion support for session-auth
          cli/session: Remove "Auth URL" from sessions-list
          man: Add missing --log-level entry in openvpn3-config-manage
          client: Set proper status when needing user credentials
          ovpn-dco: Update to latest git master
          client: Configuration file --verb must not override profile log-level
          sessionmgr: Always change the SessionObject log level
          dbus/creds: Use creds specific exception for user lookup issues
          sessionmgr: Add more debug details of credentials check fails
          core: Update to latest OpenVPN 3 Core library
          client/cli: Add --enable-legacy-algorithms override
          shell: Fix bash completion for file/directory names
    
    Samuli Seppänen (2):
          docs: Remove redundant package from Fedora build deps command-line
          docs: Fix setup instructions for CentOS 8
    
  • v16_beta protected
    OpenVPN 3 Linux v16 (beta)
    
    This release is mostly a bug-fix release with several known issues resolved
    and a few minor feature additions.
    
    * Bug: Incompatible OCC strings sent to server
    
      v15_beta updated the OpenVPN 3 Core library, leading to an
      incompatibility.  This issues have now been resolved in a
      later update of the Core library.
    
      - OCC strings sent over the wire to the server is now always
        prefixed with TCPv4 or UDPv4.
        <https://github.com/OpenVPN/openvpn3/commit/dee1b625c3>
    
    * Bug: DNS caching issues for long-running VPN client sessions
    
      Before v16_beta, the client would do a DNS lookup before
      connecting and preserve those lookups if --persist-tun was
      used.  This works fine until the configured servers changes
      IP address and no longer is reachable.  Then the client will
      go into a reconnect loop trying to connect, but no other DNS
      lookups would be done.  The Core library has implemented an
      improved approach which will trigger a new DNS lookup in cases
      where it can no longer get a connection established.
    
        Important related changes:
        <https://github.com/OpenVPN/openvpn3/commit/e365c44b08658>
        <https://github.com/OpenVPN/openvpn3/commit/2e3774c059705>
    
        NOTE: This is not a perfect solution.  Clients on networks
              utilizing NAT64 is expected to fail when connecting
              to server on an IPv4 address where it changes during
              the runtime of the client.  The best way to resolve
              this is to make the server available via IPv6 as well.
    
    * Bug: Pushed DNS search domains didn't work well
    
      Several reports indicated that pushing DOMAIN or
      DOMAIN-SEARCH didn't enable them as search domains properly
      when using system-resolved.  This has been fixed by not
      tagging each domain as routing domains.  This may for some
      users change the lookup behaviour so all DNS queries are sent
      to multiple DNS servers instead of just the VPN provided DNS
      server.  We will investigate further how to reduce these
      side-effects when utilizing systemd-resolved.
    
    * Improvement: Do not use connection timeout by default
    
      Both the 'openvpn3 session-start' and 'openvpn3-autoload'
      had a timeout behaviour where it would stop running if it
      didn't get a connection established within approx. 30 seconds.
      If the server is unavailable or the client is no a network
      with temporarily connection issues, this is a drawback.
    
      The solution is to remove the current timeout behaviour.  The
      'openvpn3 session-start' command has been extended with a
      --timeout argument which can be used to restore the previous
      behaviour.
    
    * Improvement: openvpn3-as now requires properly signed https server
      certificates.
    
      Prior versions of openvpn3-as didn't verify the https server
      certificate.  This has now been fixed.
    
    * Improvement: Add better systemd integration for sessions
    
      This release introduces a Python based systemd integration,
      which will start a pre-imported (openvpn3 config-import)
      configuration profile using the openvpn3-sessions@.service
      unit file.  This can also be used to start connections
      automatically during boot.
    
      The advantage this has over openvpn3-autoload is that it
      manages VPN sessions on-by-one, while openvpn3-autoload just
      loaded and started everything configured without any real
      session management.  Using the openvpn3-sessions@.service,
      the session status is now also available via 'systemctl' and
      log events are easily found via 'journalctl'.  If a session
      is stopped via 'openvpn3 session-manage', this is also
      reflected in 'systemctl'.
    
      See the openvpn3-systemd(8) man page for details:
      <https://github.com/OpenVPN/openvpn3-linux/blob/master/docs/man/openvpn3-systemd.8.rst>
    
      This support is not complete yet, and will be extended
      in coming releases.
    
    * Improvement: Support for the newer WEB_AUTH pending authentication method
    
    * Improvement: Extend openvpn3-admin with a sessionmgr-service command.
    
      This new command currently only supports listing
      all running VPN sessions on the host and list the owner of
      each session as well as the tun/DCO interface in use.
    
      See the openvpn3-admin-sessionmgr-service(8) man page for
      details.
      <https://github.com/OpenVPN/openvpn3-linux/blob/master/docs/man/openvpn3-admin-sessionmgr-service.8.rst>
    
    * Improvement: Python based configuration parser updates
    
      The configuration parser used by openvpn2, openvpn3-autoload
      and the new openvpn3-systemd integration now ignores
      --ncp-ciphers, --data-ciphers and --data-ciphers-fallback
    
      These options was added in OpenVPN 2.4 and 2.5 as part to
      help migration from prior default ciphers to better ones.
      Connecting to some servers could need a more specific cipher
      to be set.  This is believed not to be needed in OpenVPN 3,
      so instead we just ignore these options if found.
    
    Complete list of changes:
    
    Arne Schwabe (1):
          Implement WEB_AUTH auth pending method
    
    David Sommerseth (39):
          vendor: Upgrade to googletest 1.11
          python: Harden openvpn3-as HTTPS connect
          ovpn3cli: Add --timeout support to session connect operations
          python: Remove connection attempt counting in openvpn3-autoload
          python: Add SessionManagerEventType constants
          python: Add SessionManagerEvent callback
          systemd: Add support for VPN session management via systemd
          sessionmgr: Grammar fix in an error message
          sessionmgr: Split out pure manager functions from OpenVPN3SessionProxy
          python: Use std namespace explicitly
          dbus: Add DBusProxy::Introspect() method
          tests: Make netcfg-proxy-unit test aware of other devices
          dbus/creds: Add new DBusCredentials::CheckACL_allowRoot() method
          sessionmgr: Grant root user access to read all session properties
          ovpn3cli/admin: Add sessionmgr-service command
          common: Fix duplicated imports of config.h
          sessionmgr: Simplify the ACL check for properties
          cli/sessionmgr: Simplify property extraction
          core: Update OpenVPN 3 Core library (DNS cache fix)
          common: Improve the OptionValueType::Present implementation
          common: Extend Configuration::File with an UnsetOption() method
          common: Configuration::File - Add backwards compat parsing for present opts
          cli/admin: Call instead Config::File::UnsetOption() on --config-unset
          common: Add private ParsedArgs::remove_arg() method
          common: Simplify ParsedArgs::ImportConfigFile()
          common: Don't throw on missing key in ParsedArgs::GetAllValues()
          cli/openvpn3: Fix missing space in config-remove warning
          cli/config: Fix incorrect spelling
          python: Handle CTRL-C in openvpn3-as gracefully
          python/openvpn3-as: Improve profile download error handling
          python/openvpn3-as: Fix incorrect exception type
          ovpn3cli: Fix session-start with dynamic challenge auth
          python: Fix dyn-challenge auth in openvpn2
          cli/session: Not all connection failures are timeout related
          cli/session: Fix never ending session with failed 2FA
          lookup: Add error checking to sysconf() lookups
          common: Fix typo with MachineID::SourceType::NONE
          netcfg/resolved: Don't configure --dhcp-option DOMAIN as routing domains
          python: Add --data-ciphers and related options to the ignore list.
    
    Frank Lichtenheld (3):
          build: make gen-openvpn2-completion.py output reproducible on old Python
          build: Use timestamp of the constant.py source file
          build: Avoid generating broken bash-completion file
    
    Heiko Hund (1):
          netcfg: Move check for DCO availability to NetCfg
    
  • v15_beta protected
    OpenVPN 3 Linux v15 (beta)
    
    The highlights of this release includes:
    
    * Bugfix: 2FA authentication with dynamic challenge protocol
    
      Servers (most commonly OpenVPN Access Server) deployed with 2FA
      based authentication would fail when the dynamic challenge protocol
      was utilized.  The result would be a client disconnecting with a
      timeout error and in some cases the 'openvpn3 sessions-list' would
      enlist "ghost" sessions not responding.  This command would also
      wait for a long time before reporting the complete list of sessions
      when such ghost sessions are present.
    
      Reported: <https://github.com/OpenVPN/openvpn3-linux/issues/55>
    
    * Bugfix: Fix misbehaviours with --tls-crypt-v2
    
      This feature has been a known issue for a long time, but newer
      OpenVPN Access Servers now pushes tls-crypt-v2 profiles resulting
      in connections failing with NETWORK_EOF_ERROR errors in the log.
    
      Reported: <https://github.com/OpenVPN/openvpn3-linux/issues/55>
    
    * Feature: Added openvpn3-admin variables command
    
      This "openvpn3-admin variables" command will provide runtime
      information used by openvpn3-linux.  First variable accessible
      is the value reported in the IV_HWADDR field sent to the VPN
      server.  This can be seen using:
    
         # openvpn3-admin variables --machine-id
    
    David Sommerseth (5):
          docs: Update README.md with new DCO and SELinux info
          common: Extend MachineID to provide source information
          ovpn3cli/admin: Add a new 'variables' admin command
          Revert "client/core: Improve fatal exception handling in event()"
          core-ext: Add support for inline --tls-crypt-v2
    
  • v14_beta protected
    OpenVPN 3 Linux v14 (beta)
    
    The highlights of this release includes:
    
    * Security: [CVE-2021-3547] --verify-x509-name overrides certificate checks
    
      The OpenVPN 3 Core library got support for --verify-x509-name in
      commit 583986920236f7e (committed 2019-11-08).  This implementation
      would reset prior certificate checks. If a prior certificate check
      failed and the --verify-x509-name check passed, the connection would
      be accepted as valid.  This has been fixed in the Core library as
      of OpenVPN 3 Core library commit febf01ef68b84f.
    
    * systemd-resolved - support for DNS zones
    
      This is the first step towards a better split-DNS support.  It
      implements the needed configuration settings to properly set up the
      global or tunnel DNS resolver scopes in systemd-resolved.  For the
      resolv-conf based mode, this setting will be ignored (and logged as a
      warning) as resolv-conf only supports a single DNS resolver.
    
      Currently, the tunnel scope is very simplistic and will only result in
      systemd-resolved not querying anything than pushed DOMAIN/DOMAIN-SEARCH
      domains via the DNS servers for the VPN session.  It is more a reverse
      filter, than an explicit filter.  All other "global" scopes will also be
      queried.  Domains *not* matching the DOMAIN/DOMAIN-SEARCH settings
      will be *not* queried via this VPN link.
    
      This behaviour is more how systemd-resolved is designed and this
      behaviour will hopefully be further improved later on.
    
    * Improved SELinux policies
    
      OpenVPN 3 Linux is now able to be run on CentOS, Fedora and Red Hat
      Enterprise Linux with DCO enabled on VPN profiles and with SELinux
      policies being enforced.  The openvpn3-service-netcfg and
      openvpn3-service-client processes will now run in their own confined
      environment with further restricted access.
    
    * The OpenVPN 3 client will report IV_HWADDR
    
      When connecting, the client will report back some peer information to
      the server.  Until now, the IV_HWADDR has not been provided.  This
      value is supposed to be a fixed value per connecting host.  The
      reported information is a SHA256 hash of /etc/machine-id and some
      more OpenVPN 3 Linux specific values.  If this machine-id file is not
      readable, it will generate its own value and store it under
      /var/lib/openvpn3 for a persistent value.
    
    * Support for querying the user for HTTP proxy credentials during
      connection
    
    * Support for inline --http-user-pass values in configuration files
    
    * Support for inline --auth-user-pass values in configuration files
    
    * DCO support can now be activated with openvpn3 session-start and
      openvpn2 command line front-ends
    
    * DCO device names will now carry the name of --dev in the configuration
    
    In addition to several bug fixes and other improvements.
    
    Antonio Quartulli (1):
          ovpn-dco: adapt interfaces to new API format
    
    Arne Schwabe (1):
          Add Coverity to jenkins build
    
    David Sommerseth (67):
          build: Fix out-of-tree builds from git checkouts
          dbus/signals: Kick out the poor char */std::string "converters"
          netcfg: Fix incorrect return string in DNS::ResolverSettings::AddNameServers()
          log: Fix incorrect unsigned int logic
          log: Clean-up a switch statement
          client: Add exception safe-guard in BackendClientDBus d'tor
          netcfg: Fix incorrect IPv6 default gw setup
          submodules: Update OpenVPN 3 Core and ovpn-dco
          glib: Improve error message when GLibUtils::checkParams() fails
          configmgr: Prepare for --dns-scope in configuration profiles
          netcfg: Implement DNS resolver scope support
          client: Propagate VPN profile dns-scope setting to netcfg
          python: Add support for dns-scope setting via openvpn3-autoload
          client: Delay the forced shutdown on LogFATAL()
          client: Add ClientException to start improving client error handling
          cli: Be more friendly with ERR_PROFILE_SERVER_LOCKED_UNSUPPORTED
          tests/signal_listener: Add support for Log() with session tokens
          client: Enable DCO configuration override via D-Bus property
          sessionmgr: Provide access to the DCO flag in a VPN session
          docs/sessions: Update net.openvpn.v3.sessions D-Bus documentation
          docs/client: Update net.openvpn.v3.backends.be* D-Bus documentation
          ovpn3cli: Add --dco support to session-start
          python: Extend SessionManager.Session with DCO capabilities
          python: Extend ConfigParser with DCO support
          python/openvpn2: Add support for enabling/disabling DCO
          python/openvpn2: Fix stray verb debug print()
          ovpn3cli/session: Display an indicator on DCO enabled sessions
          Revert "configmgr: Add DCO device naming hack"
          ovpn3cli/session-start: Fix incorrect console input truncation
          dco: Update to latest ovpn-dco
          vendor: Update to ASIO 1.18.1
          core-ext: Fix improper processing of potential inline options
          selinux: Add policies for netcfg and client processes
          selinux: Rework the policy build Makefile
          build: Make netcfg DNS resolver configurable
          build: Detect Linux distro to configure DNS resolver
          build: Fix missing distribution of SELinux policy files
          python: Fix incorrect JSON parsing error message (filename)
          netcfg: Add method to extract only error message in NetCfgProxyException
          netcfg/proxy: Try to ensure net.openvpn.v3.netcfg is available
          cli: Properly catch if net.openvpn.v3.netcfg is unavailable
          configfile: Add "true" as a valid "present" value
          build: Save the OpenVPN 3 statedir into config.h
          common: Implement MachineID for uniquely identifying a host
          client: Implement passing IV_HWADDR
          vendor: Update to ASIO 1.18.2
          dco: Update to latest ovpn-dco
          core: Update to latest OpenVPN 3 Core library
          common: Add missing sstream include in machineid.cpp
          common,core: Fix compat issues with older OpenSSL
          common: Use proper OpenSSL EVP SHA256 APIs in MachineID related code
          netcfg: Only LogCritical when DNS resolver changes failed
          client: Properly handle device disabling exceptions
          selinux: Add missing file context transition for resolv.conf
          client: Improve error handling when interacting with the NetCfg service
          netcfg: Disable DNS::ResolverSettings for failing resolved updates
          netcfg/resolved: Catch more error situations
          client/core: Fix incorrect bool logic for TUN_SETUP/TUN_IFACE events
          client/core: Improve fatal exception handling in event()
          netcfg: Use the proper capng_select_t when dropping capabilities
          dbus: Extend DBusProxy with GetNameOwner() method
          dbus: Extend DBusProxy with StartServiceByName() method
          netcfg/resolved: Check if org.freedesktop.PolicyKit1 is available
          docs: Update README with polkit/policykit dependency requirement
          netcfg: Catch exceptions related to SystemdResolved init issues
          netcfg: Catch more exceptions when establishing a virtual interface
          selinux: Fix proper privileges for netcfg netlink_generic_socket
    
    Heiko Hund (4):
          update .gitignore
          core-extension: Add support for inline auth-user-pass
          core-extension: Add support for inline http-proxy-user-pass
          client: Allow querying HTTP proxy credentials dynamically
    
    Romain Loutrel (1):
          python: Add --mute, --route-delay and --route-method to ignored options
    
  • v13_beta protected
    OpenVPN 3 Linux v13 (beta)
    
    The highlights of this release includes:
    
    * Feature: IPv6 and TCP protocol support in OpenVPN Data Channel Off-load (DCO)
    
      The DCO feature is currently a tech-preview feature.  It is not
      targeted for production usage in its current shape.  As this is
      still under heavy development, we currently only support the latest
      Fedora releases (Fedora 32 and newer) and Ubuntu 20.04.  This
      currently requires Linux kernel 5.4 and newer.
    
      This release includes an updated ovpn-dco implementation which adds both
      TCP and IPv6 protocols to be used for the transport between client and server.
    
      If you are testing the DCO feature, also be sure you use the updated
      kmod-ovpn-dco package, or build the ovpn-dco module based on git
      commit 8f04ed862539f0.
    
    * Bugfix: Misleading argument count when options are missing arguments
      If an option requring a certain minimum amount of arguments was missing one
      or more arguments, for example using just --keepalive 30, the error would be:
    
         ERR_PROFILE_OPTION: option_error: option 'keepalive' must have at least 3 arguments
    
      This is incorrect.  The correct number should be "2 arguments".  This has
      been fixed in the OpenVPN 3 Core library which generated this error string.
    
    * Bugfix: Multi-factor authentication broke with v12_beta
      With the v12_beta release, web based authentication was added.  This also
      added signalling support for the CR_TEXT authentication method which was not
      intended to be added.  This resulted in many multi-factor authentication
      configurations to fail, in particular those connecting to OpenVPN Access
      Server.  This has been corrected and openvpn3-linux does no longer signal
      CR_TEXT authentication method support.
    
    David Sommerseth (1):
          client: Don't signal support for crtext authentication
    
    Lev Stipakov (5):
          ovpn-dco: support for various transport protocols
          core: Update to Core library with ovpn-dco transport improvements
          ovpn-dco: Update to latest git master
          ovpn-dco: truncate nonce_tail length
          ovpn-dco: remove cbc-hmac support
    
  • v12_beta protected
    OpenVPN 3 Linux v12 (beta)
    
    The highlights of this release includes:
    
    * Feature: Web-based authentication
      For servers allowing web based authentication, OpenVPN 3 Linux
      will now pick up this authentication type request and handle
      it.  If the openvpn2 or openvpn3 user-front-end applications
      are able to open a browser window with the given URL, it will
      do so.  If not, it will present the URL needed for the further
      authentication process.  In addition, any VPN sessions awaiting
      web based authentication is also presented via the
      `openvpn3 sessions-list` command together with the authentication
      URL.
    
    * Bugfix: OpenVPN 3 Linux configuration manager could crash
      If the openvpn3-service-configmgr program was started with the
      --state-dir argument pointing at an unreadable or non-existing
      directory, it would crash.  This has been fixed to provide a
      better error message and exit gracefully.
    
    * Bugfix: Properly handle restart of paused sessions
      VPN sessions being paused (like via
      `openvpn3 session-manage --pause`) would not recover properly if
      it was recovered by using the `restart` method instead of `resume`.
      When trying to pause the session again, it would not do so as the
      session was considered paused already.  Resuming a VPN session
      via both the `resume` and the `restart` method are considered
      appropriate and is now handled correctly.
    
    * Bugfix: openvpn2 running in the foreground could exit with an error
      If the openvpn2 front-end was used to start a VPN session and it
      was running in the foreground (no use of --daemon), it would present
      and error message when closing the session *if* the VPN session
      was closed via another channel (such as `openvpn3 session-manage`).
      This has been fixed and it will now exit properly if this situation
      appears, without any additional error messages.
    
    * Bugfix: openvpn2 would misinterpret --keepalive
      The OpenVPN option parser in the Python 3 openvpn module would not
      properly parse a few arguments which used multiple arguments - such
      as --keepalive.  This has been fixed.
    
    * Enhancements: openvpn2 now understands --tls-version-{min,max}
      In prior releases, the Python 3 openvpn module did not understand
      the --tls-version-min and --tls-version-max options.  This has been
      resolved and these options are forwarded properly to the
      configuration manager.
    
    David Sommerseth (11):
          client: Properly reset the paused flag on session restart
          python: Improve parsing of options with multiple arguments
          python: Extend argument parser with support for --tls-version-min/max
          dbus: Add web-auth constant to ClientAttentionGroup
          client: Enable web-auth support and URL extraction
          python: Add support for handling web-auth in openvpn2
          python: Resolve error in openvpn2 on disconnect with pre-closed sessions
          common: Implement function for opening up URIs on the host
          ovpn3cli: Add support web auth via openvpn3
          ovpn3cli: Improve 'sessions-list' for sessions awaiting web auth
          configmgr: Abort properly if --state-dir processing fails
    
  • v11_beta protected
    OpenVPN 3 Linux v11 (beta)
    
    The highlights of this release includes:
    
    * Feature: OpenVPN Data Channel Off-load (DCO)
    
      This features is currently a tech-preview feature.  It is not
      targeted for production usage in its current shape.  As this is
      still under heavy development, we currently only support the latest
      Fedora releases (Fedora 32 and newer) and Ubuntu 20.04.  This
      currently requires Linux kernel 5.4 and newer.
    
      This facilitates a brand new kernel module, ovpn-dco, where all the
      crypto operations related to the OpenVPN data channel happens directly
      inside the kernel.  The data channel operations are related to the
      tunnelled network traffic.  This has the advantage of being able to
      reduce the network packet processing overhead compared to the
      traditional tun devices.
    
      When using the tun interfaces with OpenVPN, the remote side sends
      encrypted network traffic to a UDP or TCP socket.  The Linux kernel
      forwards these packets from kernel space to the OpenVPN user space
      process, which decrypts the packet and extracts the unencrypted
      network traffic.  This unencrypted data is then passed to a tun
      interface, which sends the traffic back to the kernel space for
      further processing.
    
      The ovpn-dco module changes this packet route.  When the remote
      side sends data channel packets, the ovpn-dco kernel module will
      receive the packet and will have the encryption keys needed to
      decrypt the packet directly in the kernel space and then pass it
      directly to the virtual interface ovpn-dco manages.  If the OpenVPN
      packet from the remote side is a control channel packet, the ovpn-dco
      kernel module will pass this traffic up to the OpenVPN user space
      process.  Control channel packets are used to pass authentication
      credentials, configuration setup, data channel key exchanges, etc.
    
      To make use of this feature, the kmod-ovpn-dco kernel module must be
      installed on the system.  The OpenVPN 3 Linux project provides
      kmod-ovpn-dco packages for Fedora 32, 33 and Rawhide in addition
      to Ubuntu 20.04.
    
      On Fedora, with the openvpn3 Copr repository enabled:
    
          # yum install kmod-ovpn-dco
    
      On Ubuntu, with the openvpn3 apt repository configured:
    
          # apt install kmod-ovpn-dco
    
      With the kernel module installed, the configuration file must be
      be imported:
    
          $ openvpn3 config-import --config CONFIG_FILENAME --name CFGNAME
    
      Then the imported configuration profile must get the DCO feature
      enabled:
    
          $ openvpn3 config-manage --show --name CFGNAME --dco true
    
      To preserve this setting through reboots, consider adding --persistent
      when importing the configuration file via 'openvpn3 config-import'.
    
      Now everything is ready and a VPN session can be started:
    
          $ openvpn3 session-start --config CFGNAME
    
      The ovpn-dco kernel module from the openvpn3 repositories has some
      limitations:
    
      - No TCP support
        ovpn-dco will require a UDP connection to the server.
    
      - No IPv6 support
        ovpn-dco does only support IPv4 for the connection
        to the remote server.
    
      - Limited data channel cipher support
        ovpn-dco only supports the AES-GCM ciphers.  Support for
        more ciphers will arrive later.
    
      - No interface statistics available
        The ovpn-dco module has not yet implemented traffic statistics.
    
      All of these limitations will be resolved in future releases.  A more
      comprehensive list of what ovpn-dco is working on and will support can
      be found in the ovpn-dco project.
    
      WARNING:
          The ovpn-dco kernel module is under heavy development.
          This means that the API used between the kernel space
          and OpenVPN user space processes may change.  Therefore
          the kernel module version must be the same which
          OpenVPN 3 Linux has been compiled against.  Once
          the API is has become stable, this restriction will no
          longer be needed.
    
    * Bugfix: OpenVPN 3 Linux configuration manager could crash
      If the an imported persistent configuration file would contain syntax
      errors, the openvpn3-service-configmgr process could crash (SEGV).
      This has been improved and the configuration manager will now ignore
      incorrect or corrupted persistent configuration files.
    
    * Bugfix: openvpn3 and openvpn3-admin could sometimes crash
      Occasionally on certain hosts, the 'openvpn3' and 'openvpn3-admin'
      tools could crash unexpectedly.  This was an error related to the
      argument alias processing and has been fixed to avoid this issue.
    
    * Enhancements: The openvpn2 bash-completion support is extended
      In prior versions, the openvpn2 command did not provide any shell
      completion help to the --config option.  This has been resolved.
    
    * OpenVPN Access Server configuration import improvements
      The 'openvpn3-as' utility now signals to the Access Server the
      downloaded configuration profile is intended to be imported into
      a local storage.
    
    Arne Schwabe (1):
          Indicate that the openvpn-as imports a config
    
    David Sommerseth (13):
          configmgr: Better handling of incorrect configuration profiles
          docs: Fix incorrect attribute header - user-auth:password
          core: Update client and aws service to use new Core process init
          common/cmdargparser: Fix lacking alias initialization
          netcfg: Rename the tun device properly on non-DCO builds
          configmgr: Add DCO device naming hack
          Update to latest OpenVPN 3 Core library
          dco: Update ovpn-dco submodule to get the latest header files
          docs: Update README with related to the new DCO feature
          docs/man: Add missing options in openvpn3-config-manage man page
          build: Fix out-of-tree builds when --enable-bash-completion is enabled
          shell: Improve openvpn2 --config bash completion
          core/ovpn-dco: Sync up DCO API changes
    
    Lev Stipakov (16):
          openvpn3-service-client: add debug option to specify client path
          build: Define OPENVPN_USE_SITNL in configure.ac
          core: Update to latest openvpn3 Core library
          common: adapt to Core library changes in core JSON extensions
          tests: add missing include in netcfg cli
          Add ovpn-dco submodule
          build: Add ovpn-dco build options
          configmgr: Add support for "dco" config property
          client/netcfg: Initial support for ovpn-dco
          netcfg: Implement crypto key passing for ovpn-dco
          netcfg: Implement ovpn-dco tun establish()
          client/netcfg: Handle ovpn-dco device creation error
          netcfg: Implement ovpn-dco crypto key swapping
          netcfg: Implement setting peer properties for ovpn-dco
          Jenkinsfile: add ovpn-dco support
          ovpn-dco: explicitly subscribe for genl packets
    
  • v10_beta protected
    ff27a9f8 · docs: Update README.md ·
    OpenVPN Linux v10 (beta)
    
    The highlights of this release are:
    
    * Feature: systemd-resolved integration
    
      By default, OpenVPN 3 Linux will modify the /etc/resolv.conf file
      with DNS configurations pushed by the VPN server.  This release
      adds systemd-resolved as an alternative to this approach, where
      the systemd-resolved service will be in charge of querying the
      proper DNS resolvers and there will no longer be any fight over
      configuration files such as /etc/resolv.conf.
    
      In this release, pushed DNS configurations will be handled quite
      similar to how DNS queries has been handled before.  The DNS settings
      pushed by the VPN server will typically take precedence, but
      systemd-resolved may query other servers on other interfaces as well.
      That said, if the VPN server pushes "dhcp-options DOMAIN ....", hosts
      under that domain will in this case only be queried via the VPN tunnel
      alone.  You may call this a partial DNS-split.
    
      In coming releases, we will evaluate further possibilities to configure
      how DNS requests would be handled by systemd-resolved.  This could
      include modes such as full split (only query for pushed DOMAIN via the
      DNS server provided by the VPN) or exclusive VPN (DNS queries should
      only go via the VPN tunnel).
    
      This systemd-resolved integration requires at least CentOS 8,
      Fedora 31, 32 or Rawhide, Red Hat Enterprise 8 or Ubuntu 20.04.  Other
      distributions may work as long as it uses systemd v243 or newer.
    
      To enable systemd-resolved, fully ensure that systemd-resolved is
      properly configured and activated on your system.  Currently only
      Ubuntu 20.04 does that somewhat out-of-the-box (there might be some
      additional changes to nsswitch.conf is required for optimal
      performance).  Please read the available systemd-resolved
      documentation for your Linux distribution.
    
      Once systemd-resolved is enabled and activated, run this command
      as root before starting any VPN tunnels:
    
         # openvpn3-admin netcfg-service --config-set systemd-resolved 1
    
      and wait until the openvpn3-service-netcfg has restarted.  With
      the log-level set to 5 or higher in netcfg-service, the log file will
      include this log line:
    
          Network Configuration VERB2: systemd-resolved DNS configuration backend
    
    * Feature: openvpn3 log with --config will now wait for a not-started session
    
      When starting the end-user session logging, prior versions required the
      VPN session to already be running before a log client could be attached.
    
      With this release, if the session has not already been started, the
      openvpn3 log command will wait until it sees the appropriate VPN session
      has started and will attach to it instantly.  This allows to grab the
      first log lines of a starting VPN sessions for an end-user without
      other ways of accessing OpenVPN logs.
    
    * Improvement: openvpn3 log sanitizes new line characters better
    
      The log output of openvpn3 log could contain a lot of additional blank
      lines.  These has been removed and indenting has been added for multi-
      line log events to make the log output more readable.
    
    * Improvement: openvpn3-as indicates tls-crypt-v2 support to AS
    
      When downloading a VPN configuration profile from an OpenVPN Access
      Server, the openvpn3-as script will now signal to the server it is
      capable of handling configurations with --tls-crypt-v2.
    
    * Bugfix: Improper session clean-up on server triggered disconnect
    
      If the VPN server forcefully disconnected an already established
      session, the Session Manager would not properly track this which lead
      to lacking session details with openvpn3 sessions-list.
    
      This has now been resolved by properly catching a server triggered
      disconnect and properly shutting down the openvpn3-service-client
      process responsible for the session, which will properly update
      the session manager about the disconnected session.
    
    * Bugfix: AWS integration failed to propagate routes in some AWS regions
    
      The openvpn3-service-aws process could in some AWS regions fail to push
      routes to the AWS-VPC, leading to a process crash.  Both the crash and
      the AWS service has been extended with more region CA certificates used
      for the request validations.  In addition it will now pick up more of
      system CA certificate file locations than before.
    
    * Bugfix: openvpn3 command could throw unfriendly error messages
    
      If a user was not granted access to a running VPN session, attempting
      to access this session via openvpn3 session-manage would lead to a
      openvpn:BusProxyAccessDeniedException exception error.
    
      This has been improved and will now instead show "Access Denied" in
      a more user-friendly way to the user.
    
    * Bugfix: openvpn3-service-netcfg would crash without --resolve-conf
    
      If the openvpn3-service-netcfg would be started without the
      --resolv-conf configuration, it would crash if the VPN server pushed a
      DNS configuration.  This has been properly resolved and it is now
      possible to start the service completely without any DNS configuration
      support.
    
    * Bugfix: openvpn3-service-client crash on some hosts with log redirection
    
      If the openvpn3-service-backendstart was given the
      ' --client-log-file stdout:', this would tell it to start the
      openvpn3-service-client process with '--log-file stdout:'.  This would
      on some hosts cause a program crash instead.  This has been resolved.
    
    * Bugfix: openvpn3-service-sessionmgr would crash on illegal log-levels
    
      If a user attempted to change the log-level in the D-Bus session object
      the user is granted access to with an invalid value, it would lead to a
      crash of the openvpn3-service-sessionmgr process.  This would make it
      impossible to further manage already running VPN sessions without root
      privileges.
    
      This has been resolved to properly rejecting invalid values as an error
      back to the calling user instead of treating it as a fatal failure.
    
    The complete overview of all changes:
    
    Arne Schwabe (5):
          Announce tls-crypt-v2 support on AS configuration import
          Compile fix for ILP32 platforms like Raspberry Pi
          contrib/cmake: Remove extra ${OPENVPN3_LINUX_ROOT} from source files
          contrib/cmake: Make CMakeLists.txt work with config.h from configure
          contrib: Improve Jenkinsfile with stage and archiving test-suite.log
    
    David Sommerseth (81):
          vendor: Update ASIO to 1.16.0
          core: Update to latest core git master
          cli/session: Fix incorrect command reference in throws
          sessionmgr/proxy: Add TunInterfaceException
          cli/session: Properly catch DBusException
          log: Remove trailing newlines in LogEvents
          ovpn3cli/log: Indent multiline log lines
          ovpn3cli/log: Add --interface option
          sessionmgr: Fix crash with incorrect log level
          sessionmgr: Add SessionManager::Event class
          sessionmgr: Implement sending SessionManagerEvent signals
          ovpn3cli/log: Improve the complete session log setup logic
          client: Fix failing --log-file feature
          docs: Add missing dependency in Debian/Ubuntu instructions
          netcfg: Avoid segfault when configured without --resolv-conf
          client: New debug option in openvpn3-service-backendstart
          common/build: Rework version information handling
          build: Clean up after version metadata rework
          build: Fix 'make install'
          dbus: Clarify a few StatusMinor states in the comment
          client: Process CLIENT_HALT event
          build: Fix 'make uninstall' for the SELinux policy
          client: Fix incorrect environment array handling
          netcfg: Fix a typo in the AddNameServers exceptions
          netcfgmgr/dns: Add indication when to apply DNS settings
          netcfgmgr/dns: Extend ResolverSettings object store tun device name
          netcfgmgr/dns: Apply resolver settings according to the backend
          dbus/glib: Extend checkParams() to optionally ignore children count
          dbus/proxy: Migrate to better value extraction in GetProperty() and CheckServiceAvail()
          policy: Added polkit policy for systemd-resolved interaction
          netcfg: Add proxy code for systemd-resolved
          netcfg: Add ResolverBackendInterface implementation for systemd-resolved
          netcfg: Complete the systemd-resolved support
          netcfg: systemd-resolved - Make all global queries also go via VPN
          policy: Add support for legacy polkit PKLA files
          man: Minor cleanups and improvements
          common/cmdargparser: Refactor ParsedArgs passing to be a smart pointer
          common/ParsedArgs: New methods to retrieve the last set option values
          common: Extend ParsedArgs with CheckExclusiveOptions() method
          common: Extend command parser with ParsedArgsConfig class
          man: Make template out of a few of the man pages
          netcfg: Extend service with --state-dir
          common: Extend ParsedArgs::Present() with a std::vector variant
          common: Move command line parsing related exception
          common: Implement a simple and generic JSON config parser
          common: Extend ParsedArgs with a simpler config file parser approach
          netcfg: Implement the new config file parser
          common: Remove the no longer used ParsedArgsConfig implementation
          netcfg: Extend manager object with a config_file property
          cli/netcfg-service: Extend with --config-show, --config-set and --config-unset
          netcfg: Fix incorrect default log-level
          cli/netcfg: Add --config-file-override to netcfg-service
          cli/netcfg: Make netcfg-service command more robust
          common: Extend Configuration::File parser with option groups
          cli/netcfg: Extend netcfg-service with CheckExclusiveOptions() check
          common: Extend Configuration::File with GetRelatedExclusiveOptions()
          common: Extend ParsedArgs::ImportConfigFile() with exclusive check
          netcfg: Allow configuration file to override command line arguments
          python: Add support for --tls-cipher
          cli/log: Extend shell auto-completion with --config
          cli/log: Fix typ0 in AttachByConfig() method name
          deps: Update ASIO to 1.17.0
          deps: Update OpenVPN 3 Core library to latest git master
          Update .gitignore - it was missing openvpn3.pp.bz2
          dbus: Add a couple of missing header files
          cli: Handle DBusProxyAccessDeniedException events better
          netcfg/resolved: Better exception handling when communicating with systemd-resolved
          python/shell: Add bash-completion for openvpn2
          build: Enable installing bash-completion scripts
          docs: Update README.md with missing googletest mention
          common: Fix Configuration::File::Save() not writing empty files
          build/aws: Simplify the autotools setup for addons/aws
          build: Fix missing uninstall of bash-completion scripts
          build/aws: Fix failing out-of-tree builds
          build/aws: Fix incorrect distribution of D-Bus policy and systemd unit files
          contrib/CI: Enable the AWS addon in Jenkins builds
          common: Configuration::File::Load() should accept empty files
          netcfg/resolved: Revert tun interface DNS settings on removal
          core: Update to latest OpenVPN 3 Core library
          cli/admin: netcfg-service could exit with an empty error
          docs: Update README.md
    
    Lev Stipakov (5):
          client: properly handle client termination
          contrib: Add missing files in CMakelists.txt
          addons/aws: Improve error handling
          addons/aws: AWS certificates to verify instance identity
          addons/aws: provide AWS certs directory to core library