From f78302e8849550f04dc873cb3823a24f90a3ca5c Mon Sep 17 00:00:00 2001 From: Ermal Date: Fri, 30 Apr 2010 21:29:24 +0000 Subject: Add gateways validation code before deleteing. This prevents footshooting especially with Gateway Groups. --- usr/local/www/system_gateways.php | 47 ++++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 11 deletions(-) (limited to 'usr/local/www/system_gateways.php') diff --git a/usr/local/www/system_gateways.php b/usr/local/www/system_gateways.php index 38df88a..5e21014 100755 --- a/usr/local/www/system_gateways.php +++ b/usr/local/www/system_gateways.php @@ -46,9 +46,8 @@ require_once("shaper.inc"); $a_gateways = return_gateways_array(true); $a_gateways_arr = array(); -foreach($a_gateways as $gw) { +foreach ($a_gateways as $gw) $a_gateways_arr[] = $gw; -} $a_gateways = $a_gateways_arr; if (!is_array($config['gateways']['gateway_item'])) @@ -81,15 +80,40 @@ if ($_GET['act'] == "del") { if ($a_gateways[$_GET['id']]) { /* remove the real entry */ $realid = $a_gateways[$_GET['id']]['attribute']; - - if ($config['interfaces'][$a_gateways[$_GET['id']]['friendlyiface']]['gateway'] == $a_gateways[$_GET['id']]['name']) - unset($config['interfaces'][$a_gateways[$_GET['id']]['friendlyiface']]['gateway']); - $changedesc .= "removed gateway {$realid}"; - unset($a_gateway_item[$realid]); - write_config($changedesc); - mark_subsystem_dirty('staticroutes'); - header("Location: system_gateways.php"); - exit; + $remove = true; + if (is_array($config['gateways']['gateway_group'])) { + foreach ($config['gateways']['gateway_group'] as $group) { + foreach ($group['item'] as $item) { + $items = explode("|", $item); + if ($items[0] == $a_gateways[$_GET['id']]['name']) { + $input_errors[] = "Gateway cannot be deleted because it is in use on Gateway Group '{$group['name']}'"; + $remove = false; + break; + } + + } + } + } + if (is_array($config['staticroutes']['route'])) { + foreach ($config['staticroutes']['route'] as $route) { + if ($route['gateway'] == $a_gateways[$_GET['id']]['name']) { + $input_errors[] = "Gateway cannot be deleted because it is in use on Static Routes '{$route['network']}'"; + $remove = false; + break; + } + } + } + if ($remove == true) { + var_dump($config['interfaces']); + if ($config['interfaces'][$a_gateways[$_GET['id']]['friendlyiface']]['gateway'] == $a_gateways[$_GET['id']]['name']) + unset($config['interfaces'][$a_gateways[$_GET['id']]['friendlyiface']]['gateway']); + $changedesc .= "removed gateway {$realid}"; + unset($a_gateway_item[$realid]); + write_config($changedesc); + mark_subsystem_dirty('staticroutes'); + header("Location: system_gateways.php"); + exit; + } } } @@ -101,6 +125,7 @@ include("head.inc"); +
-- cgit v1.1 From cbdcd1881175f7d2c8f151cbe58aa397635197b4 Mon Sep 17 00:00:00 2001 From: Ermal Date: Fri, 30 Apr 2010 21:39:56 +0000 Subject: Remove debugging leftover. --- usr/local/www/system_gateways.php | 1 - 1 file changed, 1 deletion(-) (limited to 'usr/local/www/system_gateways.php') diff --git a/usr/local/www/system_gateways.php b/usr/local/www/system_gateways.php index 5e21014..c324569 100755 --- a/usr/local/www/system_gateways.php +++ b/usr/local/www/system_gateways.php @@ -104,7 +104,6 @@ if ($_GET['act'] == "del") { } } if ($remove == true) { - var_dump($config['interfaces']); if ($config['interfaces'][$a_gateways[$_GET['id']]['friendlyiface']]['gateway'] == $a_gateways[$_GET['id']]['name']) unset($config['interfaces'][$a_gateways[$_GET['id']]['friendlyiface']]['gateway']); $changedesc .= "removed gateway {$realid}"; -- cgit v1.1