From 19bbaeaa29cc84ca6ee5a80b786fa472a74cc72f Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Tue, 26 Jun 2018 18:03:11 +0200 Subject: [PATCH] Firewall/Alias, phalcon's Callback() validator sends all received data and expects the callback to filter them, which forces us to include the fieldname in the validator to prevent feeding the wrong results. for https://github.com/opnsense/core/issues/1858 --- .../OPNsense/Firewall/FieldTypes/AliasContentField.php | 6 ++++-- .../models/OPNsense/Firewall/FieldTypes/AliasNameField.php | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/opnsense/mvc/app/models/OPNsense/Firewall/FieldTypes/AliasContentField.php b/src/opnsense/mvc/app/models/OPNsense/Firewall/FieldTypes/AliasContentField.php index 713e3ee8e..490785d42 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Firewall/FieldTypes/AliasContentField.php +++ b/src/opnsense/mvc/app/models/OPNsense/Firewall/FieldTypes/AliasContentField.php @@ -80,8 +80,10 @@ class AliasContentField extends BaseField private function getItems($data) { foreach ($data as $key => $value) { - foreach (explode($this->separatorchar, $value) as $value) { - yield $value; + if (substr( $key, strlen( $key ) - strlen( ".content" ) ) == ".content") { + foreach (explode($this->separatorchar, $value) as $value) { + yield $value; + } } } } diff --git a/src/opnsense/mvc/app/models/OPNsense/Firewall/FieldTypes/AliasNameField.php b/src/opnsense/mvc/app/models/OPNsense/Firewall/FieldTypes/AliasNameField.php index 528d52ae9..5606914fd 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Firewall/FieldTypes/AliasNameField.php +++ b/src/opnsense/mvc/app/models/OPNsense/Firewall/FieldTypes/AliasNameField.php @@ -77,9 +77,11 @@ class AliasNameField extends BaseField "message" => gettext('Reserved protocol or service names may not be used'), "callback" => function ($data) { foreach ($data as $key => $value) { - if (getservbyname($value, 'tcp') || + if (substr( $key, strlen( $key ) - strlen( ".name" ) ) == ".name") { + if (getservbyname($value, 'tcp') || getservbyname($value, 'udp') || getprotobyname($value)) { - return false; + return false; + } } } return true;