diff --git a/LICENSE b/LICENSE index 5c3d5ae4b..5264977a0 100644 --- a/LICENSE +++ b/LICENSE @@ -7,14 +7,14 @@ Copyright (c) 2021 Andreas Stuerz Copyright (c) 2021 Axelrtgs Copyright (c) 2023 Bernhard Frenking Copyright (c) 2023 Cannon Matthews -Copyright (c) 2023-2024 Cedrik Pischem +Copyright (c) 2023-2025 Cedrik Pischem Copyright (c) 2019 Cloudfence - Julio Camargo (JCC) Copyright (c) 2005-2006 Colin Smith Copyright (c) 2021 Dan Lundqvist Copyright (c) 2021 David Berry Copyright (c) 2017-2018 David Harrigan Copyright (c) 2021 David Hughes -Copyright (c) 2014-2024 Deciso B.V. +Copyright (c) 2014-2025 Deciso B.V. Copyright (c) 2020 devNan0 Copyright (c) 2023 Dmitry Shinkaruk Copyright (c) 2024 DollarSign23 @@ -25,7 +25,7 @@ Copyright (c) 2017-2020 Fabian Franz Copyright (c) 2019 Felix Matouschek Copyright (c) 2024 Francisco Dimattia Copyright (c) 2014-2024 Franco Fichtner -Copyright (c) 2016-2024 Frank Wall +Copyright (c) 2016-2025 Frank Wall Copyright (c) 2021 Github-jjw Copyright (c) 2023 Greg Glockner Copyright (c) 2024 Hasan Ucak @@ -51,7 +51,7 @@ Copyright (c) 2022 Marvo2011 Copyright (c) 2017-2024 Michael Muenz Copyright (c) 2024 Michał Brzeziński Copyright (c) 2024 Mike Shuey -Copyright (c) 2023 Mikhail Kharisov +Copyright (c) 2023-2024 Mikhail Kharisov Copyright (c) 2023 mleinart Copyright (c) 2024 MVZ Labor Ludwigsburg GbR Copyright (c) 2021-2024 Nicola Pellegrini @@ -72,6 +72,7 @@ Copyright (c) 2020 Starkstromkonsument Copyright (c) 2023-2024 Thomas Cekal Copyright (c) 2020 Tobias Boehnert Copyright (c) 2024 txr13 +Copyright (c) 2024 W516 Copyright (c) 2022 Wouter Deurholt Copyright (c) 2015 YoungJoo.Kim All rights reserved. diff --git a/Mk/defaults.mk b/Mk/defaults.mk index f6a290862..9cf73ce3a 100644 --- a/Mk/defaults.mk +++ b/Mk/defaults.mk @@ -1,4 +1,4 @@ -# Copyright (c) 2016-2024 Franco Fichtner +# Copyright (c) 2016-2025 Franco Fichtner # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -45,7 +45,7 @@ VERSIONBIN= ${LOCALBASE}/sbin/opnsense-version _PLUGIN_ABI!= ${VERSIONBIN} -a PLUGIN_ABI?= ${_PLUGIN_ABI} .else -PLUGIN_ABI?= 24.7 +PLUGIN_ABI?= 25.1 .endif PLUGIN_MAINS= master main @@ -161,3 +161,8 @@ push: @git checkout ${PLUGIN_STABLE} @git push @git checkout ${PLUGIN_MAIN} + +reset: + @git checkout ${PLUGIN_STABLE} + @git reset --hard HEAD~1 + @git checkout ${PLUGIN_MAIN} diff --git a/dns/ddclient/Makefile b/dns/ddclient/Makefile index d61c41810..f52ee87b0 100644 --- a/dns/ddclient/Makefile +++ b/dns/ddclient/Makefile @@ -1,5 +1,6 @@ PLUGIN_NAME= ddclient PLUGIN_VERSION= 1.26 +PLUGIN_REVISION= 1 PLUGIN_DEPENDS= ddclient py${PLUGIN_PYTHON}-boto3 PLUGIN_COMMENT= Dynamic DNS client PLUGIN_MAINTAINER= ad@opnsense.org diff --git a/dns/ddclient/src/opnsense/mvc/app/controllers/OPNsense/DynDNS/forms/dialogAccount.xml b/dns/ddclient/src/opnsense/mvc/app/controllers/OPNsense/DynDNS/forms/dialogAccount.xml index b47b38dda..eb0fb768e 100644 --- a/dns/ddclient/src/opnsense/mvc/app/controllers/OPNsense/DynDNS/forms/dialogAccount.xml +++ b/dns/ddclient/src/opnsense/mvc/app/controllers/OPNsense/DynDNS/forms/dialogAccount.xml @@ -91,6 +91,13 @@ dropdown + + account.dynipv6host + + text + true + Swap the interface identifier of the ipv6 address with the given partial ipv6 address (the least significant 64 bits of the address) + account.checkip_timeout diff --git a/dns/ddclient/src/opnsense/mvc/app/models/OPNsense/DynDNS/DynDNS.xml b/dns/ddclient/src/opnsense/mvc/app/models/OPNsense/DynDNS/DynDNS.xml index 0888c87ac..600e17517 100644 --- a/dns/ddclient/src/opnsense/mvc/app/models/OPNsense/DynDNS/DynDNS.xml +++ b/dns/ddclient/src/opnsense/mvc/app/models/OPNsense/DynDNS/DynDNS.xml @@ -165,6 +165,11 @@ + + N + /^::(([0-9a-fA-F]{1,4}:){0,3}[0-9a-fA-F]{1,4})?$/u + Entry is not a valid partial ipv6 address definition (e.g. ::1000). + 10 Y diff --git a/dns/ddclient/src/opnsense/scripts/ddclient/lib/account/__init__.py b/dns/ddclient/src/opnsense/scripts/ddclient/lib/account/__init__.py index 4c3716b95..7b600eb57 100755 --- a/dns/ddclient/src/opnsense/scripts/ddclient/lib/account/__init__.py +++ b/dns/ddclient/src/opnsense/scripts/ddclient/lib/account/__init__.py @@ -118,7 +118,8 @@ class BaseAccount: service = self.settings.get('checkip'), proto = 'https' if self.settings.get('force_ssl', False) else 'http', timeout = str(self.settings.get('checkip_timeout', '10')), - interface = self.settings['interface'] if self.settings.get('interface' ,'').strip() != '' else None + interface = self.settings['interface'] if self.settings.get('interface' ,'').strip() != '' else None, + dynipv6host = self.settings['dynipv6host'] if self.settings.get('dynipv6host' ,'').strip() != '' else None ) if self._current_address == None: diff --git a/dns/ddclient/src/opnsense/scripts/ddclient/lib/address.py b/dns/ddclient/src/opnsense/scripts/ddclient/lib/address.py index 5618d9aeb..d1dc1c6ab 100755 --- a/dns/ddclient/src/opnsense/scripts/ddclient/lib/address.py +++ b/dns/ddclient/src/opnsense/scripts/ddclient/lib/address.py @@ -1,5 +1,5 @@ """ - Copyright (c) 2022-2023 Ad Schellevis + Copyright (c) 2022-2025 Ad Schellevis All rights reserved. Redistribution and use in source and binary forms, with or without @@ -67,11 +67,29 @@ def extract_address(host, txt): return "" -def checkip(service, proto='https', timeout='10', interface=None): +def transform_ip(ip, ipv6host=None): + """ Changes ipv6 addresses if interface identifier is given + :param ip: ip address + :param ipv6host: 64 bit interface identifier + :return ipaddress.IPv4Address|ipaddress.IPv6Address + :raises ValueError: If the input can not be converted to an IPaddress + """ + if ipv6host and ip.find(':') > 0: + # extract 64 bit long prefix and add ipv6host [64]bits + return ipaddress.ip_address( + ipaddress.ip_network("%s/64" % ip, strict=False).network_address.exploded[0:19] + + ipaddress.ip_address(ipv6host).exploded[19:] + ) + else: + return ipaddress.ip_address(ip) + + +def checkip(service, proto='https', timeout='10', interface=None, dynipv6host=None): """ find ip address using external services defined in checkip_service_list :param proto: protocol :param timeout: timeout in seconds :param interface: bind to interface + :param dynipv6host: optional partial ipv6 address :return: str """ if service.startswith('web_'): @@ -84,8 +102,13 @@ def checkip(service, proto='https', timeout='10', interface=None): params.append(interface) url = checkip_service_list[service] % proto params.append(url) - return extract_address(urlparse(url).hostname, + extracted_address = extract_address(urlparse(url).hostname, subprocess.run(params, capture_output=True, text=True).stdout) + try: + return str(transform_ip(extracted_address, dynipv6host)) + except ValueError: + # invalid address + return "" elif service in ['if', 'if6'] and interface is not None: # return first non private IPv[4|6] interface address ifcfg = subprocess.run(['/sbin/ifconfig', interface], capture_output=True, text=True).stdout @@ -94,7 +117,7 @@ def checkip(service, proto='https', timeout='10', interface=None): parts = line.split() if (parts[0] == 'inet' and service == 'if') or (parts[0] == 'inet6' and service == 'if6'): try: - address = ipaddress.ip_address(parts[1]) + address = transform_ip(parts[1], dynipv6host) if address.is_global: return str(address) except ValueError: diff --git a/dns/ddclient/src/opnsense/service/templates/OPNsense/ddclient/ddclient.json b/dns/ddclient/src/opnsense/service/templates/OPNsense/ddclient/ddclient.json index 79cf6fbbd..4a2cc7a85 100644 --- a/dns/ddclient/src/opnsense/service/templates/OPNsense/ddclient/ddclient.json +++ b/dns/ddclient/src/opnsense/service/templates/OPNsense/ddclient/ddclient.json @@ -22,6 +22,7 @@ "zone": "{{ account.zone }}", "checkip": "{{ account.checkip }}", "interface": "{% if account.interface %}{{physical_interface(account.interface)}}{% endif %}", + "dynipv6host": "{{ account.dynipv6host }}", "checkip_timeout": {{ account.checkip_timeout }}, "force_ssl": {{ "true" if account.force_ssl == '1' else "false"}}, "ttl": "{{ account.ttl }}", diff --git a/mail/rspamd/Makefile b/mail/rspamd/Makefile index 6d672f7ff..a1e2148ce 100644 --- a/mail/rspamd/Makefile +++ b/mail/rspamd/Makefile @@ -1,6 +1,6 @@ PLUGIN_NAME= rspamd PLUGIN_VERSION= 1.13 -PLUGIN_REVISION= 1 +PLUGIN_REVISION= 2 PLUGIN_COMMENT= Protect your network from spam PLUGIN_DEPENDS= rspamd PLUGIN_MAINTAINER= franz.fabian.94@gmail.com diff --git a/mail/rspamd/pkg-descr b/mail/rspamd/pkg-descr index c356fd21c..a1d6d33b6 100644 --- a/mail/rspamd/pkg-descr +++ b/mail/rspamd/pkg-descr @@ -8,6 +8,7 @@ Plugin Changelog 1.13 * Make local whitelist by e-mail address possible (contributed by itNGO) +* Fix typo in "whitelisted_ip" option (contributed by Alexander Riedel) * Add phishing exclusion (contributed by Makss39) 1.12 diff --git a/mail/rspamd/src/opnsense/service/templates/OPNsense/Rspamd/greylist.conf b/mail/rspamd/src/opnsense/service/templates/OPNsense/Rspamd/greylist.conf index 42e19b416..0d359054d 100644 --- a/mail/rspamd/src/opnsense/service/templates/OPNsense/Rspamd/greylist.conf +++ b/mail/rspamd/src/opnsense/service/templates/OPNsense/Rspamd/greylist.conf @@ -11,5 +11,5 @@ action = "soft reject"; # default greylisted action ipv4_mask = {{ OPNsense.Rspamd.graylist.ipv4mask|default('19') }}; ipv6_mask = {{ OPNsense.Rspamd.graylist.ipv6mask|default('64') }}; - whitelist_ip = "/usr/local/etc/rspamd/local.d/greylist_ip.wl"; + whitelisted_ip = "/usr/local/etc/rspamd/local.d/greylist_ip.wl"; {% endif %} diff --git a/misc/theme-rebellion/Makefile b/misc/theme-rebellion/Makefile index 4dbbe5585..c1628de98 100644 --- a/misc/theme-rebellion/Makefile +++ b/misc/theme-rebellion/Makefile @@ -1,5 +1,5 @@ PLUGIN_NAME= theme-rebellion -PLUGIN_VERSION= 1.9.1 +PLUGIN_VERSION= 1.9.2 PLUGIN_COMMENT= A suitably dark theme PLUGIN_MAINTAINER= martin@queens-park.com PLUGIN_NO_ABI= yes diff --git a/misc/theme-rebellion/src/opnsense/www/themes/rebellion/build/css/dashboard.css b/misc/theme-rebellion/src/opnsense/www/themes/rebellion/build/css/dashboard.css index 6f997d8a5..9ada40835 100644 --- a/misc/theme-rebellion/src/opnsense/www/themes/rebellion/build/css/dashboard.css +++ b/misc/theme-rebellion/src/opnsense/www/themes/rebellion/build/css/dashboard.css @@ -102,7 +102,7 @@ td { display: inline-block; height: 1px; width: 70%; - background: #121212; + background: #ea7105b8; color: #f0f0f0; margin: 5px; } diff --git a/misc/theme-rebellion/src/opnsense/www/themes/rebellion/build/css/main.css b/misc/theme-rebellion/src/opnsense/www/themes/rebellion/build/css/main.css index 90ee518d4..356ce50ac 100644 --- a/misc/theme-rebellion/src/opnsense/www/themes/rebellion/build/css/main.css +++ b/misc/theme-rebellion/src/opnsense/www/themes/rebellion/build/css/main.css @@ -1121,7 +1121,7 @@ a.text-primary:hover { color: #b85904; } .text-success { - color: #7Ba255; } + color: #5b8a35; } a.text-success:hover { color: #628143; } @@ -1152,7 +1152,7 @@ a.bg-primary:hover { background-color: #b85904; } .bg-success { - background-color: #7Ba255; } + background-color: #5b8a35; } a.bg-success:hover { background-color: #628143; } @@ -1851,7 +1851,7 @@ pre { table { background-color: transparent; - color: #ccc; } + color: #f1f1f1; } th { text-align: left; } @@ -1956,22 +1956,22 @@ table td[class*=col-], table th[class*=col-] { background-color: #3b3b3b; } .table > thead > tr > td.success, .table > thead > tr > th.success { - background-color: #7Ba255; } + background-color: #5b8a35; } .table > thead > tr.success > td, .table > thead > tr.success > th { - background-color: #7Ba255; } + background-color: #5b8a35; } .table > tbody > tr > td.success, .table > tbody > tr > th.success { - background-color: #7Ba255; } + background-color: #5b8a35; } .table > tbody > tr.success > td, .table > tbody > tr.success > th { - background-color: #7Ba255; } + background-color: #5b8a35; } .table > tfoot > tr > td.success, .table > tfoot > tr > th.success { - background-color: #7Ba255; } + background-color: #5b8a35; } .table > tfoot > tr.success > td, .table > tfoot > tr.success > th { - background-color: #7Ba255; } + background-color: #5b8a35; } .table-hover > tbody > tr > td.success:hover, .table-hover > tbody > tr > th.success:hover { background-color: #6e914c; } @@ -2701,10 +2701,10 @@ textarea.input-lg { line-height: 30px; } .has-success .help-block, .has-success .control-label, .has-success .radio, .has-success .checkbox, .has-success .radio-inline, .has-success .checkbox-inline { - color: #7Ba255; } + color: #5b8a35; } .has-success .form-control { - border-color: #7Ba255; + border-color: #5b8a35; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } .has-success .form-control:focus { @@ -2713,12 +2713,12 @@ textarea.input-lg { box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #aec895; } .has-success .input-group-addon { - color: #7Ba255; - border-color: #7Ba255; - background-color: #7Ba255; } + color: #5b8a35; + border-color: #5b8a35; + background-color: #5b8a35; } .has-success .form-control-feedback { - color: #7Ba255; } + color: #5b8a35; } .has-warning .help-block, .has-warning .control-label, .has-warning .radio, .has-warning .checkbox, .has-warning .radio-inline, .has-warning .checkbox-inline { color: #f0ad4e; } @@ -3023,7 +3023,7 @@ fieldset[disabled] .btn-primary { .btn-success { color: #eee; - background-color: #7Ba255; + background-color: #5b8a35; border-color: #6e914c; } .btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active { color: #eee; @@ -3042,28 +3042,28 @@ fieldset[disabled] .btn-primary { background-image: none; } .btn-success.disabled { - background-color: #7Ba255; + background-color: #5b8a35; border-color: #6e914c; } .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled:active, .btn-success.disabled.active { - background-color: #7Ba255; + background-color: #5b8a35; border-color: #6e914c; } .btn-success[disabled] { - background-color: #7Ba255; + background-color: #5b8a35; border-color: #6e914c; } .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled]:active, .btn-success[disabled].active { - background-color: #7Ba255; + background-color: #5b8a35; border-color: #6e914c; } fieldset[disabled] .btn-success { - background-color: #7Ba255; + background-color: #5b8a35; border-color: #6e914c; } fieldset[disabled] .btn-success:hover, fieldset[disabled] .btn-success:focus, fieldset[disabled] .btn-success:active, fieldset[disabled] .btn-success.active { - background-color: #7Ba255; + background-color: #5b8a35; border-color: #6e914c; } .btn-success .badge { - color: #7Ba255; + color: #5b8a35; background-color: #eee; } .btn-info { @@ -4444,7 +4444,7 @@ a.label:hover, a.label:focus { background-color: #b85904; } .label-success { - background-color: #7Ba255; } + background-color: #5b8a35; } .label-success[href]:hover, .label-success[href]:focus { background-color: #628143; } @@ -4583,8 +4583,8 @@ a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active { color: inherit; } .alert-success { - background-color: #7Ba255; - border-color: #7Ba255; + background-color: #5b8a35; + border-color: #5b8a35; color: #485f32; } .alert-success hr { border-top-color: #6e914c; } @@ -4683,7 +4683,7 @@ a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active { box-shadow: none; } .progress-bar-success { - background-color: #7Ba255; } + background-color: #5b8a35; } .progress-striped .progress-bar-success { background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); @@ -4823,24 +4823,24 @@ a.list-group-item { width: 3px; } .list-group-item-success { - color: #7Ba255; - background-color: #7Ba255; } + color: #5b8a35; + background-color: #5b8a35; } a.list-group-item-success { - color: #7Ba255; } + color: #5b8a35; } a.list-group-item-success .list-group-item-heading { color: inherit; } a.list-group-item-success:hover, a.list-group-item-success:focus { - color: #7Ba255; + color: #5b8a35; background-color: #6e914c; } a.list-group-item-success.active { color: #222; - background-color: #7Ba255; - border-color: #7Ba255; } + background-color: #5b8a35; + border-color: #5b8a35; } a.list-group-item-success.active:hover, a.list-group-item-success.active:focus { color: #222; - background-color: #7Ba255; - border-color: #7Ba255; } + background-color: #5b8a35; + border-color: #5b8a35; } .list-group-item-info { color: #ffffff; @@ -5143,18 +5143,18 @@ a.list-group-item-danger { border-bottom-color: #EA7105; } .panel-success { - border-color: #7Ba255; } + border-color: #5b8a35; } .panel-success > .panel-heading { - color: #7Ba255; - background-color: #7Ba255; - border-color: #7Ba255; } + color: #5b8a35; + background-color: #5b8a35; + border-color: #5b8a35; } .panel-success > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #7Ba255; } + border-top-color: #5b8a35; } .panel-success > .panel-heading .badge { - color: #7Ba255; - background-color: #7Ba255; } + color: #5b8a35; + background-color: #5b8a35; } .panel-success > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #7Ba255; } + border-bottom-color: #5b8a35; } .panel-info { border-color: #3b488e; } diff --git a/net-mgmt/collectd/src/opnsense/mvc/app/controllers/OPNsense/Collectd/Api/ServiceController.php b/net-mgmt/collectd/src/opnsense/mvc/app/controllers/OPNsense/Collectd/Api/ServiceController.php index 2d00ae311..822889941 100644 --- a/net-mgmt/collectd/src/opnsense/mvc/app/controllers/OPNsense/Collectd/Api/ServiceController.php +++ b/net-mgmt/collectd/src/opnsense/mvc/app/controllers/OPNsense/Collectd/Api/ServiceController.php @@ -46,8 +46,6 @@ class ServiceController extends ApiControllerBase public function startAction() { if ($this->request->isPost()) { - // close session for long running action - $this->sessionClose(); $backend = new Backend(); $response = $backend->configdRun("collectd start"); return array("response" => $response); @@ -63,8 +61,6 @@ class ServiceController extends ApiControllerBase public function stopAction() { if ($this->request->isPost()) { - // close session for long running action - $this->sessionClose(); $backend = new Backend(); $response = $backend->configdRun("collectd stop"); return array("response" => $response); @@ -80,8 +76,6 @@ class ServiceController extends ApiControllerBase public function restartAction() { if ($this->request->isPost()) { - // close session for long running action - $this->sessionClose(); $backend = new Backend(); $response = $backend->configdRun("collectd restart"); return array("response" => $response); @@ -124,9 +118,6 @@ class ServiceController extends ApiControllerBase public function reconfigureAction() { if ($this->request->isPost()) { - // close session for long running action - $this->sessionClose(); - $mdlGeneral = new General(); $backend = new Backend(); diff --git a/net-mgmt/telegraf/src/opnsense/mvc/app/controllers/OPNsense/Telegraf/Api/KeyController.php b/net-mgmt/telegraf/src/opnsense/mvc/app/controllers/OPNsense/Telegraf/Api/KeyController.php index 09acd8b41..64b5c0189 100644 --- a/net-mgmt/telegraf/src/opnsense/mvc/app/controllers/OPNsense/Telegraf/Api/KeyController.php +++ b/net-mgmt/telegraf/src/opnsense/mvc/app/controllers/OPNsense/Telegraf/Api/KeyController.php @@ -43,7 +43,6 @@ class KeyController extends ApiMutableModelControllerBase } public function getKeyAction($uuid = null) { - $this->sessionClose(); return $this->getBase('key', 'keys.key', $uuid); } public function addKeyAction() diff --git a/net-mgmt/telegraf/src/opnsense/mvc/app/controllers/OPNsense/Telegraf/Api/ServiceController.php b/net-mgmt/telegraf/src/opnsense/mvc/app/controllers/OPNsense/Telegraf/Api/ServiceController.php index 3f21c8b2a..b23981c3b 100644 --- a/net-mgmt/telegraf/src/opnsense/mvc/app/controllers/OPNsense/Telegraf/Api/ServiceController.php +++ b/net-mgmt/telegraf/src/opnsense/mvc/app/controllers/OPNsense/Telegraf/Api/ServiceController.php @@ -46,8 +46,6 @@ class ServiceController extends ApiControllerBase public function startAction() { if ($this->request->isPost()) { - // close session for long running action - $this->sessionClose(); $backend = new Backend(); $response = $backend->configdRun("telegraf start"); return array("response" => $response); @@ -63,8 +61,6 @@ class ServiceController extends ApiControllerBase public function stopAction() { if ($this->request->isPost()) { - // close session for long running action - $this->sessionClose(); $backend = new Backend(); $response = $backend->configdRun("telegraf stop"); return array("response" => $response); @@ -80,8 +76,6 @@ class ServiceController extends ApiControllerBase public function restartAction() { if ($this->request->isPost()) { - // close session for long running action - $this->sessionClose(); $backend = new Backend(); $response = $backend->configdRun("telegraf restart"); return array("response" => $response); @@ -124,9 +118,6 @@ class ServiceController extends ApiControllerBase public function reconfigureAction() { if ($this->request->isPost()) { - // close session for long running action - $this->sessionClose(); - $mdlGeneral = new General(); $backend = new Backend(); diff --git a/net/freeradius/Makefile b/net/freeradius/Makefile index d9db167fa..b40352f96 100644 --- a/net/freeradius/Makefile +++ b/net/freeradius/Makefile @@ -1,5 +1,5 @@ PLUGIN_NAME= freeradius -PLUGIN_VERSION= 1.9.26 +PLUGIN_VERSION= 1.9.27 PLUGIN_COMMENT= RADIUS Authentication, Authorization and Accounting Server PLUGIN_DEPENDS= freeradius3 PLUGIN_MAINTAINER= m.muenz@gmail.com diff --git a/net/freeradius/pkg-descr b/net/freeradius/pkg-descr index d8aef153f..66640e76e 100644 --- a/net/freeradius/pkg-descr +++ b/net/freeradius/pkg-descr @@ -11,13 +11,19 @@ security, particularly in the academic community, including eduroam. The server is fast, feature-rich, modular, and scalable. +WWW: https://www.freeradius.org + Plugin Changelog ================ +1.9.27 + +* Allow EAP-TLS with multiple CAs (contributed by RasAlGhul) + 1.9.26 -* Added support for `require_message_authenticator` in client configuration (contributed by Patrick M. Hausen) +* Added support for "require_message_authenticator" in client configuration (contributed by Patrick M. Hausen) 1.9.25 @@ -119,6 +125,3 @@ Plugin Changelog * Add DHCP support, serving only for DHCP relays * Allow usage of remote MySQL server * Rework service status UI - - -WWW: https://www.freeradius.org diff --git a/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/AvpairController.php b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/AvpairController.php index b22f665fc..e2500e13a 100644 --- a/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/AvpairController.php +++ b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/AvpairController.php @@ -42,7 +42,6 @@ class AvpairController extends ApiMutableModelControllerBase } public function getAvpairAction($uuid = null) { - $this->sessionClose(); return $this->getBase('avpair', 'avpairs.avpair', $uuid); } public function addAvpairAction() diff --git a/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/ClientController.php b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/ClientController.php index f00443fb1..3cd6cc46d 100644 --- a/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/ClientController.php +++ b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/ClientController.php @@ -76,7 +76,6 @@ class ClientController extends ApiMutableModelControllerBase public function searchClientAction() { - $this->sessionClose(); $mdlClient = $this->getModel(); $grid = new UIModelGrid($mdlClient->clients->client); return $grid->fetchBindRequest( diff --git a/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/DhcpController.php b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/DhcpController.php index fb1dd5ebd..84be1d862 100644 --- a/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/DhcpController.php +++ b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/DhcpController.php @@ -42,7 +42,6 @@ class DhcpController extends ApiMutableModelControllerBase } public function getDhcpAction($uuid = null) { - $this->sessionClose(); return $this->getBase('dhcp', 'dhcps.dhcp', $uuid); } public function addDhcpAction() diff --git a/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/LeaseController.php b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/LeaseController.php index 3cff21e0e..4d8960e72 100644 --- a/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/LeaseController.php +++ b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/LeaseController.php @@ -42,7 +42,6 @@ class LeaseController extends ApiMutableModelControllerBase } public function getLeaseAction($uuid = null) { - $this->sessionClose(); return $this->getBase('lease', 'leases.lease', $uuid); } public function addLeaseAction() diff --git a/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/ProxyController.php b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/ProxyController.php index d19ac612b..118ffea5c 100644 --- a/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/ProxyController.php +++ b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/ProxyController.php @@ -78,7 +78,6 @@ class ProxyController extends ApiMutableModelControllerBase public function searchRealmAction() { - $this->sessionClose(); $mdlRealm = $this->getModel(); $grid = new UIModelGrid($mdlRealm->realms->realm); return $grid->fetchBindRequest( @@ -204,7 +203,6 @@ class ProxyController extends ApiMutableModelControllerBase } public function searchHomeserverAction() { - $this->sessionClose(); $mdlHomeserver = $this->getModel(); $grid = new UIModelGrid($mdlHomeserver->homeservers->homeserver); return $grid->fetchBindRequest( @@ -306,7 +304,6 @@ class ProxyController extends ApiMutableModelControllerBase } public function searchHomeserverpoolAction() { - $this->sessionClose(); $mdlHomeserverpool = $this->getModel(); $grid = new UIModelGrid($mdlHomeserverpool->homeserverpools->homeserverpool); return $grid->fetchBindRequest( diff --git a/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/ServiceController.php b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/ServiceController.php index 777f14d5d..699c7c894 100644 --- a/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/ServiceController.php +++ b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/ServiceController.php @@ -119,9 +119,6 @@ class ServiceController extends ApiControllerBase public function reconfigureAction() { if ($this->request->isPost()) { - // close session for long running action - $this->sessionClose(); - $mdlGeneral = new General(); $backend = new Backend(); diff --git a/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/UserController.php b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/UserController.php index b6638e2c2..5a103278a 100644 --- a/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/UserController.php +++ b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/Api/UserController.php @@ -77,7 +77,6 @@ class UserController extends ApiMutableModelControllerBase public function searchUserAction() { - $this->sessionClose(); $mdlUser = $this->getModel(); $grid = new UIModelGrid($mdlUser->users->user); return $grid->fetchBindRequest( diff --git a/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/forms/eap.xml b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/forms/eap.xml index 843862089..cb032d2fc 100644 --- a/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/forms/eap.xml +++ b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/forms/eap.xml @@ -20,7 +20,7 @@ eap.ca - dropdown + select_multiple Choose the Root CA. This CA will be trusted to issue client certificates for authentication. diff --git a/net/freeradius/src/opnsense/mvc/app/models/OPNsense/Freeradius/Eap.xml b/net/freeradius/src/opnsense/mvc/app/models/OPNsense/Freeradius/Eap.xml index c44c58ed3..991e9bd52 100644 --- a/net/freeradius/src/opnsense/mvc/app/models/OPNsense/Freeradius/Eap.xml +++ b/net/freeradius/src/opnsense/mvc/app/models/OPNsense/Freeradius/Eap.xml @@ -31,6 +31,7 @@ ca N + Y cert diff --git a/net/freeradius/src/opnsense/scripts/Freeradius/generate_certs.php b/net/freeradius/src/opnsense/scripts/Freeradius/generate_certs.php index efb5eabd0..e68d95971 100755 --- a/net/freeradius/src/opnsense/scripts/Freeradius/generate_certs.php +++ b/net/freeradius/src/opnsense/scripts/Freeradius/generate_certs.php @@ -80,17 +80,21 @@ if (isset($configObj->OPNsense->freeradius)) { $cert_refid = (string)$find_cert->ca; // if eap has a ca-certificate attached, search for its contents if ($cert_refid != "") { - foreach ($configObj->ca as $ca) { - if ($cert_refid == (string)$ca->refid) { - // generate cert pem file - $pem_content = trim(str_replace("\n\n", "\n", str_replace( - "\r", - "", - base64_decode((string)$ca->crt) - ))); + // multiple comma-separated refid values are possible + $cert_refids = explode(',', $cert_refid); + foreach ($cert_refids as $current_refid) { + foreach ($configObj->ca as $ca) { + if ($current_refid == (string)$ca->refid) { + // generate cert pem file + $pem_content = trim(str_replace("\n\n", "\n", str_replace( + "\r", + "", + base64_decode((string)$ca->crt) + ))); - $pem_content .= "\n"; - $ca_pem_content .= $pem_content; + $pem_content .= "\n"; + $ca_pem_content .= $pem_content; + } } } } diff --git a/net/frr/Makefile b/net/frr/Makefile index 30b45d27b..a3813aca2 100644 --- a/net/frr/Makefile +++ b/net/frr/Makefile @@ -1,8 +1,9 @@ PLUGIN_NAME= frr PLUGIN_VERSION= 1.42 +PLUGIN_REVISION= 1 PLUGIN_COMMENT= The FRRouting Protocol Suite PLUGIN_DEPENDS= frr8 -PLUGIN_MAINTAINER= franz.fabian.94@gmail.com +PLUGIN_MAINTAINER= ad@opnsense.org PLUGIN_TIER= 2 .include "../../Mk/plugins.mk" diff --git a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/BfdController.php b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/BfdController.php index 4904f54c0..76fe62f70 100644 --- a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/BfdController.php +++ b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/BfdController.php @@ -1,7 +1,7 @@ * All rights reserved. @@ -39,17 +39,11 @@ class BfdController extends ApiMutableModelControllerBase public function searchNeighborAction() { - return $this->searchBase( - 'neighbors.neighbor', - array("enabled", - "description", - "address") - ); + return $this->searchBase('neighbors.neighbor'); } public function getNeighborAction($uuid = null) { - $this->sessionClose(); return $this->getBase('neighbor', 'neighbors.neighbor', $uuid); } diff --git a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/GeneralController.php b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/GeneralController.php index e27efec61..d8e615d6a 100644 --- a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/GeneralController.php +++ b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/GeneralController.php @@ -1,7 +1,7 @@ request->isGet()) { - $mdlGeneral = new General(); - $result['general'] = $mdlGeneral->getNodes(); - } - return $result; - } - public function setAction() - { - $result = array("result" => "failed"); - if ($this->request->isPost()) { - // load model and update with provided data - $mdlGeneral = new General(); - $mdlGeneral->setNodes($this->request->getPost("general")); - - // perform validation - $valMsgs = $mdlGeneral->performValidation(); - foreach ($valMsgs as $field => $msg) { - if (!array_key_exists("validations", $result)) { - $result["validations"] = array(); - } - $result["validations"]["general." . $msg->getField()] = $msg->getMessage(); - } - - // serialize model to config and save - if ($valMsgs->count() == 0) { - $mdlGeneral->serializeToConfig(); - Config::getInstance()->save(); - $result["result"] = "saved"; - } - } - return $result; - } + protected static $internalModelName = 'general'; + protected static $internalModelClass = '\OPNsense\Quagga\General'; } diff --git a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/OspfsettingsController.php b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/OspfsettingsController.php index ae4c6b128..cb495c1c2 100644 --- a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/OspfsettingsController.php +++ b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/OspfsettingsController.php @@ -1,6 +1,7 @@ * All rights reserved. @@ -38,38 +39,34 @@ class OspfsettingsController extends ApiMutableModelControllerBase public function searchNetworkAction() { - return $this->searchBase('networks.network', array("enabled", "ipaddr", "netmask", "area")); + return $this->searchBase('networks.network'); } public function searchInterfaceAction() { - return $this->searchBase('interfaces.interface', array("enabled", "interfacename", "networktype", "authtype", "area")); + return $this->searchBase('interfaces.interface'); } public function searchPrefixlistAction() { - return $this->searchBase('prefixlists.prefixlist', array("enabled", "name", "seqnumber", "action", "network" )); + return $this->searchBase('prefixlists.prefixlist'); } public function searchRoutemapAction() { - return $this->searchBase('routemaps.routemap', array("enabled", "name", "action", "id", "match2", "set")); + return $this->searchBase('routemaps.routemap'); } public function getNetworkAction($uuid = null) { - $this->sessionClose(); return $this->getBase('network', 'networks.network', $uuid); } public function getInterfaceAction($uuid = null) { - $this->sessionClose(); return $this->getBase('interface', 'interfaces.interface', $uuid); } public function getPrefixlistAction($uuid = null) { - $this->sessionClose(); return $this->getBase('prefixlist', 'prefixlists.prefixlist', $uuid); } public function getRoutemapAction($uuid = null) { - $this->sessionClose(); return $this->getBase('routemap', 'routemaps.routemap', $uuid); } public function addNetworkAction() diff --git a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/ServiceController.php b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/ServiceController.php index a9935cfb5..c62632492 100644 --- a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/ServiceController.php +++ b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/ServiceController.php @@ -1,7 +1,7 @@ request->isPost()) { - $backend = new Backend(); - $response = $backend->configdRun('quagga start'); - $backend->configdRun('filter reload'); - return array('response' => $response); - } else { - return array('response' => array()); - } - } - - /** - * stop quagga service - * @return array - */ - public function stopAction() - { - if ($this->request->isPost()) { - $backend = new Backend(); - $response = $backend->configdRun('quagga stop'); - return array('response' => $response); - } else { - return array('response' => array()); - } - } - - /** - * restart quagga service - * @return array - */ - public function restartAction() - { - if ($this->request->isPost()) { - $backend = new Backend(); - $response = $backend->configdRun('quagga restart'); - $backend->configdRun('filter reload'); - return array('response' => $response); - } else { - return array('response' => array()); - } - } - - /** - * retrieve status of quagga - * @return array - * @throws \Exception - */ - public function statusAction() - { - $backend = new Backend(); - $mdlGeneral = new General(); - $response = $backend->configdRun('quagga status'); - - if (strpos($response, 'not running') > 0) { - if ($mdlGeneral->enabled->__toString() == 1) { - $status = 'stopped'; - } else { - $status = 'disabled'; - } - } elseif (strpos($response, 'is running') > 0) { - $status = 'running'; - } elseif ($mdlGeneral->enabled->__toString() == 0) { - $status = 'disabled'; - } else { - $status = 'unknown'; - } - - - return array('status' => $status); - } - - /** - * reconfigure quagga, generate config and reload - */ - public function reconfigureAction() - { - if ($this->request->isPost()) { - // close session for long running action - $this->sessionClose(); - - $mdlGeneral = new General(); - $backend = new Backend(); - - $runStatus = $this->statusAction(); - - // stop quagga if it is running or not - $this->stopAction(); - - // generate template - $backend->configdRun('template reload OPNsense/Quagga'); - - // (res)start daemon - if ($mdlGeneral->enabled->__toString() == 1) { - $this->startAction(); - } - - return array('status' => 'ok'); - } else { - return array('status' => 'failed'); - } - } + protected static $internalServiceClass = '\OPNsense\Quagga\General'; + protected static $internalServiceTemplate = 'OPNsense/Quagga'; + protected static $internalServiceEnabled = 'enabled'; + protected static $internalServiceName = 'quagga'; } diff --git a/net/frr/src/opnsense/mvc/app/views/OPNsense/Quagga/bfd.volt b/net/frr/src/opnsense/mvc/app/views/OPNsense/Quagga/bfd.volt index 3c56ad63e..4510e23ce 100644 --- a/net/frr/src/opnsense/mvc/app/views/OPNsense/Quagga/bfd.volt +++ b/net/frr/src/opnsense/mvc/app/views/OPNsense/Quagga/bfd.volt @@ -1,6 +1,6 @@ {# -OPNsense® is Copyright © 2014 – 2017 by Deciso B.V. +OPNsense® is Copyright © 2014 – 2025 by Deciso B.V. Copyright (C) 2017 Fabian Franz Copyright (C) 2017 - 2021 Michael Muenz All rights reserved. @@ -27,20 +27,46 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #} + + + +
-
- {{ partial("layout_partials/base_form",['fields':bfdForm,'id':'frm_bfd_settings'])}} -
-
- -
-
+ {{ partial("layout_partials/base_form",['fields':bfdForm,'id':'frm_bfd_settings'])}}
@@ -57,10 +83,10 @@ POSSIBILITY OF SUCH DAMAGE. - - + @@ -68,51 +94,19 @@ POSSIBILITY OF SUCH DAMAGE. - +
+
+
+
+ +

+
+
+
{{ partial("layout_partials/base_dialog",['fields':formDialogEditBFDNeighbor,'id':'DialogEditBFDNeighbor','label':lang._('Edit Neighbor')])}} diff --git a/net/frr/src/opnsense/mvc/app/views/OPNsense/Quagga/bgp.volt b/net/frr/src/opnsense/mvc/app/views/OPNsense/Quagga/bgp.volt index 82e62cfe6..b8385d546 100644 --- a/net/frr/src/opnsense/mvc/app/views/OPNsense/Quagga/bgp.volt +++ b/net/frr/src/opnsense/mvc/app/views/OPNsense/Quagga/bgp.volt @@ -1,6 +1,6 @@ {# -OPNsense® is Copyright © 2014 – 2024 by Deciso B.V. +OPNsense® is Copyright © 2014 – 2025 by Deciso B.V. Copyright (C) 2017 Fabian Franz Copyright (C) 2017 - 2020 Michael Muenz All rights reserved. @@ -27,6 +27,77 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #} + + + - - + @@ -94,11 +160,10 @@ POSSIBILITY OF SUCH DAMAGE. - - + @@ -122,11 +187,10 @@ POSSIBILITY OF SUCH DAMAGE. - - + @@ -150,11 +214,10 @@ POSSIBILITY OF SUCH DAMAGE. - - + @@ -181,10 +244,10 @@ POSSIBILITY OF SUCH DAMAGE. - - + @@ -210,10 +273,10 @@ POSSIBILITY OF SUCH DAMAGE. - - + @@ -221,102 +284,20 @@ POSSIBILITY OF SUCH DAMAGE. - +
+
+
+
+ +

+
+
+
{{ partial("layout_partials/base_dialog",['fields':formDialogEditBGPNeighbor,'id':'DialogEditBGPNeighbor','label':lang._('Edit Neighbor')])}} {{ partial("layout_partials/base_dialog",['fields':formDialogEditBGPASPaths,'id':'DialogEditBGPASPaths','label':lang._('Edit AS Paths')])}} diff --git a/net/frr/src/opnsense/mvc/app/views/OPNsense/Quagga/general.volt b/net/frr/src/opnsense/mvc/app/views/OPNsense/Quagga/general.volt index 01e1746bd..aacb7d557 100644 --- a/net/frr/src/opnsense/mvc/app/views/OPNsense/Quagga/general.volt +++ b/net/frr/src/opnsense/mvc/app/views/OPNsense/Quagga/general.volt @@ -1,6 +1,6 @@ {# -OPNsense® is Copyright © 2014 – 2017 by Deciso B.V. +OPNsense® is Copyright © 2014 – 2025 by Deciso B.V. This file is Copyright © 2017 by Fabian Franz All rights reserved. @@ -26,32 +26,43 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #} -
- {{ partial("layout_partials/base_form",['fields':generalForm,'id':'frm_general_settings'])}} -
-
- -
-
+ +
+ {{ partial("layout_partials/base_form",['fields':generalForm,'id':'frm_general_settings'])}} +
+ +
+
+
+
+ +

+
+
+
diff --git a/net/frr/src/opnsense/mvc/app/views/OPNsense/Quagga/ospf.volt b/net/frr/src/opnsense/mvc/app/views/OPNsense/Quagga/ospf.volt index b68db50c8..9daaa0e14 100644 --- a/net/frr/src/opnsense/mvc/app/views/OPNsense/Quagga/ospf.volt +++ b/net/frr/src/opnsense/mvc/app/views/OPNsense/Quagga/ospf.volt @@ -1,6 +1,6 @@ {# -OPNsense® is Copyright © 2014 – 2017 by Deciso B.V. +OPNsense® is Copyright © 2014 – 2025 by Deciso B.V. This file is Copyright © 2017 by Fabian Franz All rights reserved. @@ -27,25 +27,78 @@ POSSIBILITY OF SUCH DAMAGE. #} - - -
-
-
- {{ partial("layout_partials/base_form",['fields':generalForm,'id':'frm_ospf_settings'])}} -
-
- -
-
-
+ + + + +
+ +
+ {{ partial("layout_partials/base_form",['fields':generalForm,'id':'frm_ospf_settings'])}} +
+ - +
+ - - +
- - - + + +
- - - + + +
- - - + + +
- - + + +
+ - +
@@ -63,17 +116,15 @@ POSSIBILITY OF SUCH DAMAGE. - +
- - - + +
-
@@ -85,22 +136,22 @@ POSSIBILITY OF SUCH DAMAGE. - + - +
{{ lang._('Authentication Type') }} {{ lang._('ID') }} {{ lang._('Commands') }}
- - +
+
@@ -118,16 +169,16 @@ POSSIBILITY OF SUCH DAMAGE. - +
- - +
+
@@ -146,95 +197,30 @@ POSSIBILITY OF SUCH DAMAGE. - +
- +
+
+ +
+
+
+ +
- - +
{{ partial("layout_partials/base_dialog",['fields':formDialogEditNetwork,'id':'DialogEditNetwork','label':lang._('Edit Network')])}} {{ partial("layout_partials/base_dialog",['fields':formDialogEditInterface,'id':'DialogEditInterface','label':lang._('Edit Interface')])}} diff --git a/net/frr/src/opnsense/mvc/app/views/OPNsense/Quagga/ospf6.volt b/net/frr/src/opnsense/mvc/app/views/OPNsense/Quagga/ospf6.volt index 3a4774436..d0749ac7c 100644 --- a/net/frr/src/opnsense/mvc/app/views/OPNsense/Quagga/ospf6.volt +++ b/net/frr/src/opnsense/mvc/app/views/OPNsense/Quagga/ospf6.volt @@ -1,5 +1,5 @@ {# - # Copyright (c) 2014-2024 Deciso B.V. + # Copyright (c) 2014-2025 Deciso B.V. # Copyright (c) 2017 Fabian Franz # Copyright (c) 2017 Michael Muenz # All rights reserved. @@ -32,18 +32,17 @@ mapDataToFormUI({'frm_ospf6_settings':"/api/quagga/ospf6settings/get"}).done(function(data){ formatTokenizersUI(); $('.selectpicker').selectpicker('refresh'); + updateServiceControlUI('quagga'); }); - updateServiceControlUI('quagga'); - - // link save button to API set action - $("#saveAct").SimpleActionButton({ + $("#reconfigureAct").SimpleActionButton({ onPreAction: function() { const dfObj = new $.Deferred(); - saveFormToEndpoint("/api/quagga/ospf6settings/set", 'frm_ospf6_settings', function(){ - dfObj.resolve(); - }); + saveFormToEndpoint("/api/quagga/ospf6settings/set", 'frm_ospf6_settings', function () { dfObj.resolve(); }, true, function () { dfObj.reject(); }); return dfObj; + }, + onAction: function(data, status) { + updateServiceControlUI('quagga'); } }); @@ -53,11 +52,7 @@ 'set':'/api/quagga/ospf6settings/setNetwork/', 'add':'/api/quagga/ospf6settings/addNetwork/', 'del':'/api/quagga/ospf6settings/delNetwork/', - 'toggle':'/api/quagga/ospf6settings/toggleNetwork/', - 'options':{ - selection:false, - multiSelect:false - } + 'toggle':'/api/quagga/ospf6settings/toggleNetwork/' }); $("#grid-interfaces").UIBootgrid({ 'search':'/api/quagga/ospf6settings/searchInterface', @@ -65,11 +60,7 @@ 'set':'/api/quagga/ospf6settings/setInterface/', 'add':'/api/quagga/ospf6settings/addInterface/', 'del':'/api/quagga/ospf6settings/delInterface/', - 'toggle':'/api/quagga/ospf6settings/toggleInterface/', - 'options':{ - selection:false, - multiSelect:false - } + 'toggle':'/api/quagga/ospf6settings/toggleInterface/' }); $("#grid-prefixlists").UIBootgrid({ 'search':'/api/quagga/ospf6settings/searchPrefixlist', @@ -77,11 +68,7 @@ 'set':'/api/quagga/ospf6settings/setPrefixlist/', 'add':'/api/quagga/ospf6settings/addPrefixlist/', 'del':'/api/quagga/ospf6settings/delPrefixlist/', - 'toggle':'/api/quagga/ospf6settings/togglePrefixlist/', - 'options':{ - selection:false, - multiSelect:false - } + 'toggle':'/api/quagga/ospf6settings/togglePrefixlist/' }); $("#grid-routemaps").UIBootgrid({ 'search':'/api/quagga/ospf6settings/searchRoutemap', @@ -89,11 +76,7 @@ 'set':'/api/quagga/ospf6settings/setRoutemap/', 'add':'/api/quagga/ospf6settings/addRoutemap/', 'del':'/api/quagga/ospf6settings/delRoutemap/', - 'toggle':'/api/quagga/ospf6settings/toggleRoutemap/', - 'options':{ - selection:false, - multiSelect:false - } + 'toggle':'/api/quagga/ospf6settings/toggleRoutemap/' }); // hook checkbox item with conditional options @@ -142,10 +125,11 @@ - - - - + + + + + @@ -168,9 +152,10 @@ - + + @@ -195,9 +180,10 @@ - + + @@ -223,9 +209,10 @@ - + + @@ -236,7 +223,7 @@
- -
- +
+
+
+
+ +

+
+
+
diff --git a/net/haproxy/Makefile b/net/haproxy/Makefile index 81ea69ec0..e629b6ca0 100644 --- a/net/haproxy/Makefile +++ b/net/haproxy/Makefile @@ -1,7 +1,7 @@ PLUGIN_NAME= haproxy -PLUGIN_VERSION= 4.4 +PLUGIN_VERSION= 4.5 PLUGIN_COMMENT= Reliable, high performance TCP/HTTP load balancer -PLUGIN_DEPENDS= haproxy28 py${PLUGIN_PYTHON}-haproxy-cli +PLUGIN_DEPENDS= haproxy py${PLUGIN_PYTHON}-haproxy-cli PLUGIN_MAINTAINER= opnsense@moov.de .include "../../Mk/plugins.mk" diff --git a/net/haproxy/pkg-descr b/net/haproxy/pkg-descr index d3e0b934f..daac185c3 100644 --- a/net/haproxy/pkg-descr +++ b/net/haproxy/pkg-descr @@ -6,6 +6,12 @@ very high loads while needing persistence or Layer7 processing. Plugin Changelog ================ +4.5 + +Changed: +* upgrade to HAProxy 3.0 release series (#4411) +* migrate cert export to Trust MVC + 4.4 Fixed: diff --git a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogAction.xml b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogAction.xml index 7945ded64..e0e5e345d 100644 --- a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogAction.xml +++ b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogAction.xml @@ -89,7 +89,7 @@ action.http_request_redirect text - HAProxy's documentation for further details and examples.]]> + HAProxy's documentation for further details and examples.]]> @@ -128,7 +128,7 @@ action.http_request_add_header_content text - HAProxy's documentation for further details and examples.]]> + HAProxy's documentation for further details and examples.]]> @@ -145,7 +145,7 @@ action.http_request_set_header_content text - HAProxy's documentation for further details and examples.]]> + HAProxy's documentation for further details and examples.]]> @@ -251,7 +251,7 @@ action.http_response_add_header_content text - HAProxy's documentation for further details and examples.]]> + HAProxy's documentation for further details and examples.]]> @@ -268,7 +268,7 @@ action.http_response_set_header_content text - HAProxy's documentation for further details and examples.]]> + HAProxy's documentation for further details and examples.]]> @@ -468,6 +468,6 @@ action.fcgi_set_param text - Custom Log format rules. With this directive, it is possible to overwrite the value of default FastCGI parameters.]]> + Custom Log format rules. With this directive, it is possible to overwrite the value of default FastCGI parameters.]]> diff --git a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogBackend.xml b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogBackend.xml index 8411a6ad9..014b959ae 100644 --- a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogBackend.xml +++ b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogBackend.xml @@ -28,7 +28,7 @@ backend.algorithm dropdown - HAProxy documentation for a full description.]]> + HAProxy documentation for a full description.]]> Choose a load balancing algorithm. @@ -42,7 +42,7 @@ backend.proxyProtocol dropdown - HAProxy documentation for a full description.]]> + HAProxy documentation for a full description.]]> true @@ -186,7 +186,7 @@ true true - HAProxy documentation for a full description.]]> + HAProxy documentation for a full description.]]> backend.forwardFor @@ -213,7 +213,7 @@ backend.persistence_cookiemode dropdown - HAProxy documentation for a full description.]]> + HAProxy documentation for a full description.]]> backend.persistence_cookiename @@ -235,14 +235,14 @@ backend.stickiness_pattern dropdown - HAProxy documentation for a full description.
NOTE: Consider not using this feature in multi-process mode, it can result in random behaviours.
]]>
+ HAProxy documentation for a full description.
NOTE: Consider not using this feature in multi-process mode, it can result in random behaviours.
]]>
Choose a persistence type.
backend.stickiness_dataTypes select_multiple - HAProxy documentation for a full description.]]> + HAProxy documentation for a full description.]]> backend.stickiness_expire diff --git a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogFcgi.xml b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogFcgi.xml index c02327bce..4ad9d1e94 100644 --- a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogFcgi.xml +++ b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogFcgi.xml @@ -33,7 +33,7 @@ fcgi.path_info text - HAProxy's documentation for further details and examples.]]> + HAProxy's documentation for further details and examples.]]> fcgi.log_stderr diff --git a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogFrontend.xml b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogFrontend.xml index 2268abe72..a826ecfa8 100644 --- a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogFrontend.xml +++ b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogFrontend.xml @@ -350,14 +350,14 @@ frontend.stickiness_pattern dropdown - HAProxy documentation for further information.]]> + HAProxy documentation for further information.]]> Choose a stick-table type. frontend.stickiness_dataTypes select_multiple - HAProxy documentation for a full description.]]> + HAProxy documentation for a full description.]]> frontend.stickiness_expire @@ -384,7 +384,7 @@ frontend.stickiness_counter_key text - HAProxy documentation for a full description.]]> + HAProxy documentation for a full description.]]> true diff --git a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogMapfile.xml b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogMapfile.xml index 4955c8519..554246fa4 100644 --- a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogMapfile.xml +++ b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogMapfile.xml @@ -15,6 +15,6 @@ mapfile.content textbox - HAProxy documentation for a full description.]]> + HAProxy documentation for a full description.]]> diff --git a/net/haproxy/src/opnsense/mvc/app/views/OPNsense/HAProxy/index.volt b/net/haproxy/src/opnsense/mvc/app/views/OPNsense/HAProxy/index.volt index 932c8814f..fd025cacc 100644 --- a/net/haproxy/src/opnsense/mvc/app/views/OPNsense/HAProxy/index.volt +++ b/net/haproxy/src/opnsense/mvc/app/views/OPNsense/HAProxy/index.volt @@ -717,7 +717,7 @@ POSSIBILITY OF SUCH DAMAGE.
  • {{ lang._('Lastly, enable HAProxy using the %sService%s settings page.') | format('', '') }}
  • {{ lang._('Please be aware that you need to %smanually%s add the required firewall rules for all configured services.') | format('', '') }}

    -

    {{ lang._('Further information is available in the %sofficial HAProxy documentation%s. Be sure to report bugs and request features on our %sGitHub issue page%s. Code contributions are also very welcome!') | format('', '', '', '') }}

    +

    {{ lang._('Further information is available in the %sofficial HAProxy documentation%s. Be sure to report bugs and request features on our %sGitHub issue page%s. Code contributions are also very welcome!') | format('', '', '', '') }}


    @@ -759,7 +759,7 @@ POSSIBILITY OF SUCH DAMAGE.
  • {{ lang._('%sConditions:%s HAProxy is capable of extracting data from requests, responses and other connection data and match it against predefined patterns. Use these powerful patterns to compose a condition that may be used in multiple Rules.') | format('', '') }}
  • {{ lang._('%sRules:%s Perform a large set of actions if one or more %sConditions%s match. These Rules may be used in %sBackend Pools%s as well as %sPublic Services%s.') | format('', '', '', '', '', '', '', '') }}
  • -

    {{ lang._("For more information on HAProxy's %sACL feature%s see the %sofficial documentation%s.") | format('', '', '', '') }}

    +

    {{ lang._("For more information on HAProxy's %sACL feature%s see the %sofficial documentation%s.") | format('', '', '', '') }}

    {{ lang._('Note that it is possible to directly add options to the HAProxy configuration by using the "option pass-through", a setting that is available for several configuration items. It allows you to implement configurations that are currently not officially supported by this plugin. It is strongly discouraged to rely on this feature. Please report missing features on our GitHub page!') | format('', '') }}


    @@ -774,7 +774,7 @@ POSSIBILITY OF SUCH DAMAGE.
  • {{ lang._('%sGroup:%s A optional list containing one or more users. Groups usually make it easier to manage permissions for a large number of users') | format('', '') }}
  • {{ lang._('Note that users and groups must be selected from the Backend Pool or Public Service configuration in order to be used for authentication. In addition to this users and groups may also be used in Rules/Conditions.') }}

    -

    {{ lang._("For more information on HAProxy's %suser/group management%s see the %sofficial documentation%s.") | format('', '', '', '') }}

    +

    {{ lang._("For more information on HAProxy's %suser/group management%s see the %sofficial documentation%s.") | format('', '', '', '') }}


    @@ -792,7 +792,7 @@ POSSIBILITY OF SUCH DAMAGE.
  • {{ lang._("%sCache:%s HAProxy's cache which was designed to perform cache on small objects (favicon, css, etc.). This is a minimalist low-maintenance cache which runs in RAM.") | format('', '', '', '') }}
  • {{ lang._("%sPeers:%s Configure a communication channel between two HAProxy instances. This will propagate entries of any data-types in stick-tables between these HAProxy instances over TCP connections in a multi-master fashion. Useful when aiming for a seamless failover in a HA setup.") | format('', '', '', '') }}
  • -

    {{ lang._("For more details visit HAProxy's official documentation regarding the %sStatistics%s, %sCache%s and %sPeers%s features.") | format('', '', '', '', '', '') }}

    +

    {{ lang._("For more details visit HAProxy's official documentation regarding the %sStatistics%s, %sCache%s and %sPeers%s features.") | format('', '', '', '', '', '') }}


    @@ -810,7 +810,7 @@ POSSIBILITY OF SUCH DAMAGE.
  • {{ lang._("%sResolvers:%s This feature allows in-depth configuration of how HAProxy handles name resolution and interacts with name resolvers (DNS). Each resolver configuration can be used in %sBackend Pools%s to apply individual name resolution configurations.") | format('', '', '', '') }}
  • {{ lang._("%sE-Mail Alerts:%s It is possible to send email alerts when the state of servers changes. Each configuration can be used in %sBackend Pools%s to send e-mail alerts to the configured recipient.") | format('', '', '', '') }}
  • -

    {{ lang._("For more details visit HAProxy's official documentation regarding the %sError Messages%s, %sLua Script%s and the %sMap Files%s features. More information on HAProxy's CPU Affinity is also available %shere%s, %shere%s and %shere%s. A detailed explanation of the resolvers feature can be found %shere%s.") | format('', '', '', '', '', '' ,'', '' ,'', '' ,'', '','', '') }}

    +

    {{ lang._("For more details visit HAProxy's official documentation regarding the %sError Messages%s, %sLua Script%s and the %sMap Files%s features. More information on HAProxy's CPU Affinity is also available %shere%s, %shere%s and %shere%s. A detailed explanation of the resolvers feature can be found %shere%s.") | format('', '', '', '', '', '' ,'', '' ,'', '' ,'', '','', '') }}


    diff --git a/net/haproxy/src/opnsense/scripts/OPNsense/HAProxy/exportCerts.php b/net/haproxy/src/opnsense/scripts/OPNsense/HAProxy/exportCerts.php index 20b72fd3d..cccff6408 100755 --- a/net/haproxy/src/opnsense/scripts/OPNsense/HAProxy/exportCerts.php +++ b/net/haproxy/src/opnsense/scripts/OPNsense/HAProxy/exportCerts.php @@ -2,7 +2,7 @@ $value) { $ocsp_conf = ''; // CRLs require special export if ($type == 'crl') { - $crl =& lookup_crl($cert_refid); - $pem_content = base64_decode($crl['text']); + if (isset($cert->text)) { + $pem_content = base64_decode($cert->text); + } } else { $pem_content = str_replace("\n\n", "\n", str_replace("\r", "", base64_decode((string)$cert->crt))); $pem_content .= "\n" . str_replace("\n\n", "\n", str_replace("\r", "", base64_decode((string)$cert->prv))); @@ -91,9 +91,8 @@ foreach ($configNodes as $key => $value) { $ocsp_conf = hasOcspInfo($pem_content) ? ' [ocsp-update on]' : ''; // check if a CA is linked if (!empty((string)$cert->caref)) { - $cert = (array)$cert; - $ca = ca_chain($cert); // append the CA to the certificate data + $ca = CertStore::getCaChain((string)$cert->caref); $pem_content .= "\n" . $ca; // additionally export CA to it's own file, // not required for HAProxy, but makes OCSP handling easier diff --git a/net/haproxy/src/opnsense/scripts/OPNsense/HAProxy/exportErrorFiles.php b/net/haproxy/src/opnsense/scripts/OPNsense/HAProxy/exportErrorFiles.php index 9ffaa95d9..f5417c754 100755 --- a/net/haproxy/src/opnsense/scripts/OPNsense/HAProxy/exportErrorFiles.php +++ b/net/haproxy/src/opnsense/scripts/OPNsense/HAProxy/exportErrorFiles.php @@ -30,8 +30,6 @@ // Use legacy code to export certificates to the filesystem. require_once("config.inc"); -require_once("certs.inc"); -require_once("legacy_bindings.inc"); use OPNsense\Core\Config; diff --git a/net/haproxy/src/opnsense/scripts/OPNsense/HAProxy/exportLuaScripts.php b/net/haproxy/src/opnsense/scripts/OPNsense/HAProxy/exportLuaScripts.php index 840657281..30e8bd3b3 100755 --- a/net/haproxy/src/opnsense/scripts/OPNsense/HAProxy/exportLuaScripts.php +++ b/net/haproxy/src/opnsense/scripts/OPNsense/HAProxy/exportLuaScripts.php @@ -30,8 +30,6 @@ // Use legacy code to export certificates to the filesystem. require_once("config.inc"); -require_once("certs.inc"); -require_once("legacy_bindings.inc"); use OPNsense\Core\Config; diff --git a/net/haproxy/src/opnsense/scripts/OPNsense/HAProxy/exportMapFiles.php b/net/haproxy/src/opnsense/scripts/OPNsense/HAProxy/exportMapFiles.php index ee502e478..fe2e682f7 100755 --- a/net/haproxy/src/opnsense/scripts/OPNsense/HAProxy/exportMapFiles.php +++ b/net/haproxy/src/opnsense/scripts/OPNsense/HAProxy/exportMapFiles.php @@ -30,8 +30,6 @@ // Use legacy code to export certificates to the filesystem. require_once("config.inc"); -require_once("certs.inc"); -require_once("legacy_bindings.inc"); use OPNsense\Core\Config; diff --git a/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf b/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf index 3e40f63c0..642a84e4a 100644 --- a/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf +++ b/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf @@ -990,10 +990,10 @@ global {# # check if OCSP is enabled #} {% if OPNsense.HAProxy.general.tuning.ocspUpdateEnabled|default('') == '1' %} {% if helpers.exists('OPNsense.HAProxy.general.tuning.ocspUpdateMinDelay') %} - tune.ssl.ocsp-update.mindelay {{OPNsense.HAProxy.general.tuning.ocspUpdateMinDelay}} + ocsp-update.mindelay {{OPNsense.HAProxy.general.tuning.ocspUpdateMinDelay}} {% endif %} {% if helpers.exists('OPNsense.HAProxy.general.tuning.ocspUpdateMaxDelay') %} - tune.ssl.ocsp-update.maxdelay {{OPNsense.HAProxy.general.tuning.ocspUpdateMaxDelay}} + ocsp-update.maxdelay {{OPNsense.HAProxy.general.tuning.ocspUpdateMaxDelay}} {% endif %} {% endif %} {% if helpers.exists('OPNsense.HAProxy.general.tuning.resolversPrefer') %} diff --git a/net/relayd/Makefile b/net/relayd/Makefile index bb65570d6..9abfcd222 100644 --- a/net/relayd/Makefile +++ b/net/relayd/Makefile @@ -1,5 +1,6 @@ PLUGIN_NAME= relayd PLUGIN_VERSION= 2.9 +PLUGIN_REVISION= 1 PLUGIN_DEPENDS= relayd PLUGIN_COMMENT= Relayd Load Balancer PLUGIN_MAINTAINER= frank.brendel@eurolog.com diff --git a/net/relayd/src/opnsense/mvc/app/controllers/OPNsense/Relayd/Api/ServiceController.php b/net/relayd/src/opnsense/mvc/app/controllers/OPNsense/Relayd/Api/ServiceController.php index 83eda0132..0bffec3e7 100644 --- a/net/relayd/src/opnsense/mvc/app/controllers/OPNsense/Relayd/Api/ServiceController.php +++ b/net/relayd/src/opnsense/mvc/app/controllers/OPNsense/Relayd/Api/ServiceController.php @@ -71,7 +71,6 @@ class ServiceController extends ApiMutableServiceControllerBase { if ($this->request->isPost()) { $result['status'] = 'ok'; - $this->sessionClose(); $backend = new Backend(); @@ -96,7 +95,6 @@ class ServiceController extends ApiMutableServiceControllerBase { if ($this->request->isPost()) { if ($this->lock()) { - $this->sessionClose(); $result['function'] = "reconfigure"; $result['status'] = 'failed'; $backend = new Backend(); diff --git a/net/relayd/src/opnsense/mvc/app/controllers/OPNsense/Relayd/Api/SettingsController.php b/net/relayd/src/opnsense/mvc/app/controllers/OPNsense/Relayd/Api/SettingsController.php index 3b8a11437..f8cac66f1 100644 --- a/net/relayd/src/opnsense/mvc/app/controllers/OPNsense/Relayd/Api/SettingsController.php +++ b/net/relayd/src/opnsense/mvc/app/controllers/OPNsense/Relayd/Api/SettingsController.php @@ -240,7 +240,6 @@ class SettingsController extends ApiMutableModelControllerBase */ public function searchAction($nodeType = null) { - $this->sessionClose(); if ($this->request->isPost() && $nodeType != null) { $this->validateNodeType($nodeType); $grid = new UIModelGrid($this->getModel()->$nodeType); diff --git a/net/relayd/src/opnsense/mvc/app/controllers/OPNsense/Relayd/Api/StatusController.php b/net/relayd/src/opnsense/mvc/app/controllers/OPNsense/Relayd/Api/StatusController.php index 879bd2211..d2a8b0d5d 100644 --- a/net/relayd/src/opnsense/mvc/app/controllers/OPNsense/Relayd/Api/StatusController.php +++ b/net/relayd/src/opnsense/mvc/app/controllers/OPNsense/Relayd/Api/StatusController.php @@ -202,7 +202,6 @@ class StatusController extends ApiControllerBase { $result = ["result" => "failed", "function" => "toggle"]; if ($this->request->isPost()) { - $this->sessionClose(); $backend = new Backend(); if (in_array($nodeType, ['redirect', 'table', 'host']) && in_array($action, ['enable', 'disable'])) { if ($id != null && $id > 0) { @@ -225,7 +224,9 @@ class StatusController extends ApiControllerBase $relaydMdl->serializeToConfig(); Config::getInstance()->save(); // invoke service controller - return (new ServiceController())->reconfigureAction(); + $srv = new ServiceController(); + $srv->request = $this->request; + return $srv->reconfigureAction(); } } return $result; diff --git a/net/relayd/src/opnsense/mvc/app/views/OPNsense/Relayd/index.volt b/net/relayd/src/opnsense/mvc/app/views/OPNsense/Relayd/index.volt index 8c96a0ec3..11a7e3e0c 100644 --- a/net/relayd/src/opnsense/mvc/app/views/OPNsense/Relayd/index.volt +++ b/net/relayd/src/opnsense/mvc/app/views/OPNsense/Relayd/index.volt @@ -1,31 +1,29 @@ {# - -Copyright © 2018 by EURO-LOG AG -Copyright (c) 2021 Deciso B.V. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, -OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - -#} + # Copyright (c) 2018 EURO-LOG AG + # Copyright (c) 2021 Deciso B.V. + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without modification, + # are permitted provided that the following conditions are met: + # + # 1. Redistributions of source code must retain the above copyright notice, + # this list of conditions and the following disclaimer. + # + # 2. Redistributions in binary form must reproduce the above copyright notice, + # this list of conditions and the following disclaimer in the documentation + # and/or other materials provided with the distribution. + # + # THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, + # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + # AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + # AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + # OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + # POSSIBILITY OF SUCH DAMAGE. + #}