diff --git a/src/etc/inc/plugins.inc.d/pf.inc b/src/etc/inc/plugins.inc.d/pf.inc index 2ea0e067f..d17f61eb8 100644 --- a/src/etc/inc/plugins.inc.d/pf.inc +++ b/src/etc/inc/plugins.inc.d/pf.inc @@ -182,12 +182,7 @@ function pf_firewall($fw) } foreach ($mdlFilter->onetoone->rule->sortedBy(['sequence']) as $key => $rule) { - $rule_a = $rule->serialize(); - /* XXX the default value merge will fail if the empty default is kept */ - if (isset($rule_a['natreflection']) && $rule_a['natreflection'] == '') { - unset($rule_a['natreflection']); - } - $fw->registerDNatRule(500, $rule_a); + $fw->registerDNatRule(500, $rule->serialize()); } foreach ($mdlFilter->npt->rule->sortedBy(['sequence']) as $key => $rule) { diff --git a/src/opnsense/mvc/app/models/OPNsense/Firewall/FieldTypes/SourceNatRuleField.php b/src/opnsense/mvc/app/models/OPNsense/Firewall/FieldTypes/SourceNatRuleField.php index b26c5d602..cbac53b98 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Firewall/FieldTypes/SourceNatRuleField.php +++ b/src/opnsense/mvc/app/models/OPNsense/Firewall/FieldTypes/SourceNatRuleField.php @@ -65,7 +65,12 @@ class SourceNatRuleContainerField extends ContainerField if ((string)$node != 'any') { $result[$target_fieldname] = (string)$node; } - } else { + } elseif ((string)$node != '') { + /* + * XXX: Omit empty values to allow array_merge() to overlay default values in Plugin.php. + * In the long run its likely better to move default values inside serialize() action for + * clarity, but that only makes sense if legacy components are gone. + **/ $result[$target_fieldname] = (string)$node; } }