diff --git a/net/firewall/Makefile b/net/firewall/Makefile index eec978a63..4b2543eaa 100644 --- a/net/firewall/Makefile +++ b/net/firewall/Makefile @@ -1,6 +1,5 @@ PLUGIN_NAME= firewall -PLUGIN_VERSION= 1.4 -PLUGIN_REVISION= 3 +PLUGIN_VERSION= 1.5 PLUGIN_COMMENT= Firewall API supplemental package PLUGIN_OBSOLETE= yes PLUGIN_MAINTAINER= ad@opnsense.org diff --git a/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/FilterController.php b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/FilterController.php index 461f990a5..e558fe813 100644 --- a/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/FilterController.php +++ b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/FilterController.php @@ -32,6 +32,7 @@ class FilterController extends \OPNsense\Base\IndexController public function indexAction() { $this->view->pick('OPNsense/Firewall/filter'); + $this->view->SavePointBtns = true; $this->view->ruleController = "filter"; $this->view->gridFields = [ [ diff --git a/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/NptController.php b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/NptController.php index 0e69ca4fe..d701a8003 100644 --- a/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/NptController.php +++ b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/NptController.php @@ -33,7 +33,6 @@ class NptController extends \OPNsense\Base\IndexController { $this->view->pick('OPNsense/Firewall/filter'); $this->view->ruleController = "npt"; - $this->view->hideSavePointBtns = true; $this->view->gridFields = [ [ 'id' => 'enabled', 'formatter' => 'rowtoggle' ,'width' => '6em', 'heading' => gettext('Enabled') diff --git a/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/SourceNatController.php b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/SourceNatController.php index 7bc2c632f..9e24cc700 100644 --- a/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/SourceNatController.php +++ b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/SourceNatController.php @@ -32,6 +32,7 @@ class SourceNatController extends \OPNsense\Base\IndexController public function indexAction() { $this->view->pick('OPNsense/Firewall/filter'); + $this->view->SavePointBtns = true; $this->view->ruleController = "source_nat"; $this->view->gridFields = [ [ diff --git a/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/ACL/ACL.xml b/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/ACL/ACL.xml index 070ce99e9..c8a66f358 100644 --- a/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/ACL/ACL.xml +++ b/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/ACL/ACL.xml @@ -1,16 +1,23 @@ - Firewall: Rules: API + Firewall: Automation: Filter ui/firewall/filter/* api/firewall/filter/* - Firewall: SourceNat: API + Firewall: Automation: Source NAT ui/firewall/source_nat/* api/firewall/source_nat/* + + Firewall: Automation: NPTv6 + + ui/firewall/npt/* + api/firewall/npt/* + + diff --git a/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/FieldTypes/FilterRuleField.php b/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/FieldTypes/FilterRuleField.php index 70996125e..a3c69c53c 100644 --- a/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/FieldTypes/FilterRuleField.php +++ b/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/FieldTypes/FilterRuleField.php @@ -1,31 +1,29 @@ object(); + // standard model validations $messages = parent::performValidation($validateFullModel); foreach ([$this->rules->rule, $this->snatrules->rule] as $rules) { @@ -95,18 +97,35 @@ class Filter extends BaseModel } } } + foreach ($this->npt->rule->iterateItems() as $rule) { if ($validateFullModel || $rule->isFieldChanged()) { - if (!empty((string)$rule->destination_net) && !empty((string)$rule->trackif)) { - $messages->appendMessage(new Message( - gettext("A track interface is only allowed without an extrenal prefix."), - $rule->trackif->__reference - )); + if (!empty((string)$rule->trackif)) { + if (!empty((string)$rule->destination_net)) { + $messages->appendMessage(new Message( + gettext('A track interface is only allowed without an external prefix.'), + $rule->trackif->__reference + )); + } + + if ( + (empty($config->interfaces->{$rule->interface}->ipaddrv6) || + $config->interfaces->{$rule->interface}->ipaddrv6 != 'dhcp6') || + empty($config->interfaces->{$rule->trackif}->{'track6-interface'}) || + $config->interfaces->{$rule->trackif}->{'track6-interface'} != (string)$rule->interface + ) { + $messages->appendMessage(new Message( + gettext('This interface is not tracking the current rule interface.'), + $rule->trackif->__reference + )); + } } + if (!empty((string)$rule->destination_net) && !empty((string)$rule->source_net)) { - $dparts = explode('/', (string)$rule->destination_net); - $sparts = explode('/', (string)$rule->source_net); - if (count($dparts) == 2 && count($sparts) == 2 && $dparts[1] != $sparts[1]) { + /* defaults to /128 */ + $dparts = explode('/', (string)$rule->destination_net . '/128'); + $sparts = explode('/', (string)$rule->source_net . '/128'); + if ($dparts[1] != $sparts[1]) { $messages->appendMessage(new Message( gettext("External subnet should match internal subnet."), $rule->destination_net->__reference diff --git a/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/Filter.xml b/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/Filter.xml index 3e93bded0..dc7399beb 100644 --- a/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/Filter.xml +++ b/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/Filter.xml @@ -33,7 +33,6 @@ Y - N Y Y @@ -67,7 +66,6 @@ Y - N Y Y Y @@ -83,14 +81,12 @@ Y - N Y Y Y Please specify a valid portnumber, name, alias or range - N interface gateways list /tmp/gateway_list.json 20 @@ -161,7 +157,6 @@ Y - N Y Y Y @@ -176,7 +171,6 @@ Y - N Y Y Y @@ -187,7 +181,6 @@ Y - N Y Y @@ -238,12 +231,12 @@ Y ipv6 - Y + N N ipv6 - Y + N N diff --git a/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/Menu/Menu.xml b/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/Menu/Menu.xml index 476e1f38b..455d06546 100644 --- a/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/Menu/Menu.xml +++ b/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/Menu/Menu.xml @@ -1,13 +1,13 @@ - + - + diff --git a/net/firewall/src/opnsense/mvc/app/views/OPNsense/Firewall/filter.volt b/net/firewall/src/opnsense/mvc/app/views/OPNsense/Firewall/filter.volt index 717453fe9..1b3abb397 100644 --- a/net/firewall/src/opnsense/mvc/app/views/OPNsense/Firewall/filter.volt +++ b/net/firewall/src/opnsense/mvc/app/views/OPNsense/Firewall/filter.volt @@ -213,7 +213,7 @@ data-error-title="{{ lang._('Filter load error') }}" type="button" > -{% if not hideSavePointBtns|default(false) %} +{% if SavePointBtns is defined %}