OPNSense/core 08447desrc/opnsense/mvc/app/controllers/OPNsense/Firewall/forms dialogSNatRule.xml, src/opnsense/mvc/app/models/OPNsense/Firewall Filter.php Filter.xml

Firewall: NAT: Source NAT: Allow empty target which means interface address (#10441)

* Firewall: NAT: Source NAT: Empty target means interface address, allow it in the model and add hints, fix legacy outbound rules exporter as well

* Firewall: NAT: Source NAT: Target cannot be any, pf refuses to load that
DeltaFile
+2-5src/opnsense/scripts/filter/list_legacy_outbound_nat.php
+6-0src/opnsense/mvc/app/models/OPNsense/Firewall/Filter.php
+5-0src/opnsense/mvc/app/views/OPNsense/Firewall/nat_rule.volt
+1-4src/opnsense/mvc/app/models/OPNsense/Firewall/Filter.xml
+1-1src/opnsense/mvc/app/controllers/OPNsense/Firewall/forms/dialogSNatRule.xml
+15-105 files

OPNSense/core aca61bdsrc/opnsense/mvc/app/controllers/OPNsense/Base ApiControllerBase.php

src: sweep
DeltaFile
+1-1src/opnsense/mvc/app/controllers/OPNsense/Base/ApiControllerBase.php
+1-11 files

OPNSense/core 6a19c92src/etc/inc/plugins.inc.d ipsec.inc

ipsec: change name as well

It's not a group but still in GroupField.  ;)
DeltaFile
+1-1src/etc/inc/plugins.inc.d/ipsec.inc
+1-11 files

OPNSense/core d3fb0bbsrc/opnsense/mvc/app/models/OPNsense/Firewall Filter.php

Firewall: NAT: Source NAT: Target cannot be any, pf refuses to load that
DeltaFile
+6-0src/opnsense/mvc/app/models/OPNsense/Firewall/Filter.php
+6-01 files

OPNSense/core 3c56a63src/opnsense/mvc/app/controllers/OPNsense/Firewall/forms dialogSNatRule.xml, src/opnsense/mvc/app/models/OPNsense/Firewall Filter.xml

Firewall: NAT: Source NAT: Empty target means interface address, allow it in the model and add hints, fix legacy outbound rules exporter as well
DeltaFile
+2-5src/opnsense/scripts/filter/list_legacy_outbound_nat.php
+1-4src/opnsense/mvc/app/models/OPNsense/Firewall/Filter.xml
+5-0src/opnsense/mvc/app/views/OPNsense/Firewall/nat_rule.volt
+1-1src/opnsense/mvc/app/controllers/OPNsense/Firewall/forms/dialogSNatRule.xml
+9-104 files

OPNSense/core 553f7dfsrc/etc/inc/plugins.inc.d openvpn.inc, src/opnsense/mvc/app/models/OPNsense/Firewall/FieldTypes GroupField.php

firewall: unify group names

The defaults in GroupField are still a bit weird as we are showing them
even though their mandatory path is from *_interfaces() plugin registration.

If we need the value 10 we should make it the implicit default and also
add the default to the group interface registration (or not at all).

GroupField could read them correctly from config.xml...

PR: https://www.reddit.com/r/opnsense/comments/1ucvh2y/is_there_a_way_to_change_the_openvpn_group/
DeltaFile
+3-3src/opnsense/mvc/app/models/OPNsense/Firewall/FieldTypes/GroupField.php
+1-1src/etc/inc/plugins.inc.d/openvpn.inc
+4-42 files

OPNSense/core 578e025src/opnsense/mvc/app/controllers/OPNsense/Base ApiControllerBase.php ApiMutableModelControllerBase.php, src/opnsense/mvc/app/controllers/OPNsense/Monit/Api SettingsController.php

mvc: give throwReadOnly() a sibling named throwNotFullAdmin() which validates if a user has full access rights and can be treated as "provides safe input".

Although there aren't a lot of cases where user input can't be validated strictly enough, there are still one or two edge cases which offer some sort of "advanced" input which we currently wouldn't accept and are thus hard to change for historic reasons. The most prominent one is Monit, which allows local commands being executed.

throwNotFullAdmin simply raises an exception and bails before persisting changes to the configuration, which can be set on a per action or controller (internalSaveRequiresAdmin).
DeltaFile
+20-1src/opnsense/mvc/app/controllers/OPNsense/Base/ApiControllerBase.php
+8-0src/opnsense/mvc/app/controllers/OPNsense/Base/ApiMutableModelControllerBase.php
+1-0src/opnsense/mvc/app/controllers/OPNsense/Monit/Api/SettingsController.php
+29-13 files

OPNSense/core 311c3c0src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api FilterBaseController.php

firewall: re-add a simplified applyAction, for 17b84612 (#10440)
DeltaFile
+8-0src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/FilterBaseController.php
+8-01 files

OPNSense/core ea9d8c9src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api FilterBaseController.php

firewall: re-add a simplified applyAction, for 17b84612eb21373d1dc464b1dc75560d477953f5
DeltaFile
+8-0src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/FilterBaseController.php
+8-01 files

OPNSense/core 7ccf782src/opnsense/www/js/widgets KeaLeases.js

kea: style sweep on widget
DeltaFile
+176-177src/opnsense/www/js/widgets/KeaLeases.js
+176-1771 files

OPNSense/core e5762desrc/opnsense/www/js/widgets/Metadata Core.xml

dashboard: sync endpoints for Kea leases widget
DeltaFile
+2-2src/opnsense/www/js/widgets/Metadata/Core.xml
+2-21 files

OPNSense/core 8f29999. plist, src/opnsense/mvc/app/controllers/OPNsense/Kea/Api LeasesController.php

Kea: Add widget to show Kea DHCPv4 and DHCPv6 leases (#10380)
DeltaFile
+177-0src/opnsense/www/js/widgets/KeaLeases.js
+31-20src/opnsense/mvc/app/controllers/OPNsense/Kea/Api/LeasesController.php
+18-0src/opnsense/www/js/widgets/Metadata/Core.xml
+1-0plist
+1-0src/opnsense/mvc/app/views/OPNsense/Kea/leases4.volt
+1-0src/opnsense/mvc/app/views/OPNsense/Kea/leases6.volt
+229-206 files

OPNSense/core f47d966src/etc rc, src/sbin opnsense-importer

rc: work around zpool-imporit disappearing devices nodes briefly

Observed this on 15.1 with the importer step of the installer not
seeing /dev/ada0p3 and opening the wrong one /dev/ada0p1 instead.
The issue wasn't the scripting but the fact that ada0p3 was briefly
unavailable.  This was an full UFS system, no ZFS pools installed.
DeltaFile
+3-2src/sbin/opnsense-importer
+1-1src/etc/rc
+4-32 files

OPNSense/core be43690src/opnsense/mvc/app/library/OPNsense/Core SanitizeFilter.php, src/www authgui.inc

webui/authentication flow - add "local_uri" type in SanitizeFilter() and use it in the authgui.inc flow to ease reuse later.

The new filter is a bit more strict than it used to be, but for good reasons, we likely need the same cleansing in a couple of other areas like https://github.com/opnsense/core/issues/10433
DeltaFile
+25-1src/opnsense/mvc/app/library/OPNsense/Core/SanitizeFilter.php
+7-11src/www/authgui.inc
+32-122 files

OPNSense/core cde5f91src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes BaseField.php

mvc: guard BaseField::setNodes() against a list given for a scalar leaf (#10434)

setNodes() rejects a non-array given for a container node, but the leaf branch passed any value straight to setValue(). Posting a JSON array for a scalar/AsList field therefore reached field setters that assume a string, e.g. NetworkField::setValue() does strtolower() on it. producing a fatal "TypeError: strtolower(): array given" and an uncontrolled 500.

Mirror the container guard: throw an Exception so a mis-typed request yields a controlled error with a message for the log instead of a crash.
DeltaFile
+6-4src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/BaseField.php
+6-41 files

OPNSense/core 7237f89src/root/boot/lua logo-hourglass.lua.in

boot: realign the logo for 15.x
DeltaFile
+1-1src/root/boot/lua/logo-hourglass.lua.in
+1-11 files

OPNSense/core b1c28casrc/sbin opnsense-installer

installer: bigger hammer
DeltaFile
+7-1src/sbin/opnsense-installer
+7-11 files

OPNSense/core a8c62e2src/sbin opnsense-installer

installer: fix "stty size" returning "0 0"

This breaks the keymap selection (and possibly more), but the fix
seems easy.  Some sort of ordering change with shells and login
profiles makes this not work for us on 15.x anymore but it's easy
enough to enforce via the installer launcher.
DeltaFile
+2-0src/sbin/opnsense-installer
+2-01 files

OPNSense/core 17b8461. plist, src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api FilterBaseController.php

Firewall: Rules: Remove safepoint actions (#10411)

* Remove safepoint actions, no callers should be left
* Remove rollback_cancel.php and rollback_timer.php and their configd actions
DeltaFile
+0-69src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/FilterBaseController.php
+0-54src/opnsense/scripts/filter/rollback_timer.php
+0-40src/opnsense/scripts/filter/rollback_cancel.php
+0-25src/opnsense/mvc/app/models/OPNsense/Firewall/Filter.php
+0-12src/opnsense/service/conf/actions.d/actions_filter.conf
+0-2plist
+0-2026 files

OPNSense/core e15c4e1. plist, src/opnsense/scripts/filter rollback_timer.php rollback_cancel.php

firewall: Remove rollback_cancel.php and rollback_timer.php and their configd actions
DeltaFile
+0-54src/opnsense/scripts/filter/rollback_timer.php
+0-40src/opnsense/scripts/filter/rollback_cancel.php
+0-12src/opnsense/service/conf/actions.d/actions_filter.conf
+0-2plist
+0-1084 files

OPNSense/core 9d65dd6src/opnsense/mvc/app/controllers/OPNsense/Base ControllerBase.php

mvc: also do not translate empty labels in grids #10369
DeltaFile
+4-1src/opnsense/mvc/app/controllers/OPNsense/Base/ControllerBase.php
+4-11 files

OPNSense/core e272c8esrc/opnsense/www/js opnsense.js

ui: add generic escaping function
DeltaFile
+15-0src/opnsense/www/js/opnsense.js
+15-01 files

OPNSense/core 305741fcontrib/IXR IXR_Library.php, src/etc/inc XMLRPC_Client.inc

system: curl_close() is deprecated

This has been a no-op since 8.0.0, but deprecated since 8.5.0.
DeltaFile
+0-3src/etc/inc/XMLRPC_Client.inc
+0-1contrib/IXR/IXR_Library.php
+0-1src/etc/inc/plugins.inc.d/opendns.inc
+0-1src/opnsense/mvc/app/controllers/OPNsense/Core/Api/DashboardController.php
+0-1src/www/crash_reporter.php
+0-75 files

OPNSense/core bc1c93esrc/opnsense/www/js/widgets Services.js

system: tweak text color on previous
DeltaFile
+3-1src/opnsense/www/js/widgets/Services.js
+3-11 files

OPNSense/core df77158src/etc/inc/plugins.inc.d dpinger.inc core.inc, src/opnsense/www/js/widgets Services.js BaseWidget.js

system: change the services widget to a flat tile layout

Make the names of the services shown a bit shorter.  The colors
are debatable but they are matchin what alerts are using in
bootstrap.
DeltaFile
+11-36src/opnsense/www/js/widgets/Services.js
+2-3src/opnsense/www/js/widgets/Metadata/Core.xml
+2-2src/opnsense/www/js/widgets/BaseWidget.js
+2-2src/etc/inc/plugins.inc.d/dpinger.inc
+2-2src/etc/inc/plugins.inc.d/core.inc
+1-1src/etc/inc/plugins.inc.d/radvd.inc
+20-464 files not shown
+24-5010 files

OPNSense/core 4d9998csrc/etc/rc.subr.d recover, src/opnsense/service/templates/OPNsense/WebGui php.ini

system: deriving $_SERVER['argv'] from the query string is deprecated

Only used by Nginx plugin and probably able to simplify there.  It's
a bit strange in this case.  Allegedly the variable has no effect on
CLI applications.
DeltaFile
+1-1src/etc/rc.subr.d/recover
+1-1src/opnsense/service/templates/OPNsense/WebGui/php.ini
+2-22 files

OPNSense/core 8e2b3e7src/opnsense/mvc/app/controllers/OPNsense/Routing/Api SettingsController.php

routing: fix HTTP 500 when deleting a non-existent gateway (#10429)

delGatewayAction() dereferenced the result of getNodeByReference() without a null check, so an unknown uuid reached "(string)$gateway->name" on null and raised an error, which the API renders as HTTP 500 ("Unexpected error, check log for details").

Guard the lookup and return the already-initialised {"result":"failed"} instead, matching the inherited del* verbs and the adjacent toggleGatewayAction(), which already null-check getNodeByReference().
DeltaFile
+3-0src/opnsense/mvc/app/controllers/OPNsense/Routing/Api/SettingsController.php
+3-01 files

OPNSense/core 18b7cdbsrc/opnsense/scripts/interfaces traffic_stats.php

interfaces: missed in previous
DeltaFile
+1-1src/opnsense/scripts/interfaces/traffic_stats.php
+1-11 files

OPNSense/core 57940f5src/opnsense/mvc/app/library/OPNsense/Firewall Util.php

firewall: chr(): providing a value not in-between 0 and 255 is deprecated
DeltaFile
+1-1src/opnsense/mvc/app/library/OPNsense/Firewall/Util.php
+1-11 files

OPNSense/core b5c542csrc/opnsense/mvc/tests/app/library/OPNsense/Interface IdassocTest.php

tests: Method ReflectionMethod::setAccessible() is deprecated since 8.5
DeltaFile
+0-1src/opnsense/mvc/tests/app/library/OPNsense/Interface/IdassocTest.php
+0-11 files