diff options
author | Ermal Luçi <eri@pfsense.org> | 2009-07-23 21:44:05 +0000 |
---|---|---|
committer | Ermal Luçi <eri@pfsense.org> | 2009-07-23 21:44:05 +0000 |
commit | 5e34cdb24e183ab797b05c6217678fe78211fbac (patch) | |
tree | 38ba35f9dc90dd829596bc44bfa4b4155f8f3aa2 /etc | |
parent | 7581a05043051f2cce37749a99d8c3d2e65db6c5 (diff) | |
download | pfsense-5e34cdb24e183ab797b05c6217678fe78211fbac.zip pfsense-5e34cdb24e183ab797b05c6217678fe78211fbac.tar.gz |
* If editing an alias do not display itself on the autocompletion list
* Prevent that the user mixes wrong type of aliases, only host and network type mixing is allowed. Openvpn may be added later on too.
* Instead of checking for nested loops when unwinding aliases just prevent the loops. It is easier and allows some rare cases when nesting is needed.
Diffstat (limited to 'etc')
-rw-r--r-- | etc/inc/filter.inc | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/etc/inc/filter.inc b/etc/inc/filter.inc index d595560..df4a38b 100644 --- a/etc/inc/filter.inc +++ b/etc/inc/filter.inc @@ -356,16 +356,21 @@ function filter_generate_scrubing() return $scrubrules; } -function filter_generate_nested_alias($alias) { - global $aliastable; +function filter_generate_nested_alias($name, $alias) { + global $aliastable, $aliasnesting; $addresses = split(" ", $alias); $finallist = ""; + $aliasnesting[$name] = $name; foreach ($addresses as $address) { $linelength = strlen($finallist); - if (isset($aliastable[$address])) - $tmpline = filter_generate_nested_alias($aliastable[$address]); - else + if (isset($aliastable[$address])) { + if (!isset($aliasnesting[$address])) + /* We already expanded this alias so there + * is no neccessity to do it again. + */ + $tmpline = filter_generate_nested_alias($address, $aliastable[$address]); + } else $tmpline = " $address"; if ((strlen($tmpline)+ $linelength) > 4036) $finallist .= "\n"; @@ -375,7 +380,7 @@ function filter_generate_nested_alias($alias) { } function filter_generate_aliases() { - global $config, $FilterIflist, $aliastable; + global $config, $FilterIflist, $aliastable, $aliasnesting; if(isset($config['system']['developerspew'])) { $mt = microtime(); echo "filter_generate_aliases() being called $mt\n"; @@ -394,7 +399,8 @@ function filter_generate_aliases() { $extraalias = ""; $ip = find_interface_ip($aliased['address']); $extraalias = " " . link_ip_to_carp_interface($ip); - $addrlist = filter_generate_nested_alias($aliased['address']); + $aliasnesting = array(); + $addrlist = filter_generate_nested_alias($aliased['name'], $aliased['address']); if ($aliased['type'] == "host" || $aliased['type'] == "network") { $aliases .= "table <{$aliased['name']}> { {$addrlist}{$extralias} } \n"; $aliases .= "{$aliased['name']} = \"<{$aliased['name']}>\"\n"; |