diff options
author | Scott Ullrich <sullrich@pfsense.org> | 2006-04-19 01:45:25 +0000 |
---|---|---|
committer | Scott Ullrich <sullrich@pfsense.org> | 2006-04-19 01:45:25 +0000 |
commit | 58c32a28e64077c78537a1a3ee952cfa9ca366fe (patch) | |
tree | 6401e535f7437063de6c61f3dc37593ddb04b68a /usr/local | |
parent | 9440aff3a04d9ed1f15961f3cafed41019a1594f (diff) | |
download | pfsense-58c32a28e64077c78537a1a3ee952cfa9ca366fe.zip pfsense-58c32a28e64077c78537a1a3ee952cfa9ca366fe.tar.gz |
Do not allow an alias to be deleted if its currently referenced ina rule.
Ticket #914
Diffstat (limited to 'usr/local')
-rwxr-xr-x | usr/local/www/firewall_aliases.php | 49 |
1 files changed, 44 insertions, 5 deletions
diff --git a/usr/local/www/firewall_aliases.php b/usr/local/www/firewall_aliases.php index fad5d32..1fee128 100755 --- a/usr/local/www/firewall_aliases.php +++ b/usr/local/www/firewall_aliases.php @@ -64,11 +64,50 @@ if ($_POST) { if ($_GET['act'] == "del") { if ($a_aliases[$_GET['id']]) { - unset($a_aliases[$_GET['id']]); - write_config(); - touch($d_aliasesdirty_path); - header("Location: firewall_aliases.php"); - exit; + /* make sure rule is not being referenced by any nat or filter rules */ + $is_alias_referenced = false; + $referenced_by = false; + $alias_name = $a_aliases[$_GET['id']]['name']; + foreach($config['nat']['rule'] as $rule) { + if($rule['localip'] == $alias_name) { + $is_alias_referenced = true; + $referenced_by = $rule['descr']; + break; + } + } + if($is_alias_referenced == false) { + foreach($config['filter']['rule'] as $rule) { + if($rule['source']['address'] == $alias_name) { + $is_alias_referenced = true; + $referenced_by = $rule['descr']; + break; + } + if($rule['source']['address'] == $alias_name) { + $is_alias_referenced = true; + $referenced_by = $rule['descr']; + break; + } + if($rule['source']['port'] == $alias_name) { + $is_alias_referenced = true; + $referenced_by = $rule['descr']; + break; + } + if($rule['destination']['port'] == $alias_name) { + $is_alias_referenced = true; + $referenced_by = $rule['descr']; + break; + } + } + } + if($is_alias_referenced == true) { + $savemsg = "Cannot delete rule. Currently in use by {$referenced_by}"; + } else { + unset($a_aliases[$_GET['id']]); + write_config(); + touch($d_aliasesdirty_path); + header("Location: firewall_aliases.php"); + exit; + } } } |