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