From 8691618bddded3770e709918bf3321459caaeb07 Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Thu, 13 Feb 2020 10:18:11 +0100 Subject: [PATCH] filter: pass object in filter_core_get_port_alias to allow large sets of aliases --- src/etc/inc/filter.inc | 5 +++-- src/etc/inc/filter.lib.inc | 7 ++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/etc/inc/filter.inc b/src/etc/inc/filter.inc index e57dee006..491fe249c 100644 --- a/src/etc/inc/filter.inc +++ b/src/etc/inc/filter.inc @@ -617,7 +617,8 @@ function filter_generate_aliases() } $aliases .= "\n# User Aliases\n"; - foreach ((new \OPNsense\Firewall\Alias())->aliasIterator() as $aliased) { + $aliasObject = new \OPNsense\Firewall\Alias(); + foreach ($aliasObject->aliasIterator() as $aliased) { switch ($aliased['type']) { case "urltable_ports": case "url_ports": @@ -627,7 +628,7 @@ function filter_generate_aliases() file_notice(sprintf(gettext('URL port aliases types not supported [%s]'), $aliased['name'])); break; case "port": - $tmp_ports = implode(" ", filter_core_get_port_alias($aliased['name'])); + $tmp_ports = implode(" ", filter_core_get_port_alias($aliased['name'], array(), $aliasObject)); $aliases .= "{$aliased['name']} = \"{ {$tmp_ports} }\"\n"; break; default: diff --git a/src/etc/inc/filter.lib.inc b/src/etc/inc/filter.lib.inc index d31801834..7944a8faf 100644 --- a/src/etc/inc/filter.lib.inc +++ b/src/etc/inc/filter.lib.inc @@ -150,16 +150,17 @@ function filter_core_get_antilockout() * @return array containing ports * @throws \OPNsense\Base\ModelException */ -function filter_core_get_port_alias($aliasname, $aliases = array()) +function filter_core_get_port_alias($aliasname, $aliases = array(), $aliasObject=null) { $response = array(); $aliases[] = $aliasname; - foreach ((new \OPNsense\Firewall\Alias())->aliasIterator() as $aliased) { + $aliasObject = $aliasObject == null ? (new \OPNsense\Firewall\Alias()) : $aliasObject; + foreach ($aliasObject->aliasIterator() as $aliased) { if ($aliasname == $aliased['name'] && $aliased['type'] == 'port') { foreach (explode("\n", $aliased['content']) as $address) { if (is_alias($address)) { if (!in_array($address, $aliases)) { - foreach (filter_core_get_port_alias($address, $aliases) as $port) { + foreach (filter_core_get_port_alias($address, $aliases, $aliasObject) as $port) { if (!in_array($port, $response)) { $response[] = $port; }