summaryrefslogtreecommitdiffstats
path: root/usr/local/www/system_routes.php
diff options
context:
space:
mode:
authorPhil Davis <phil.davis@inf.org>2015-07-05 23:18:04 +0545
committerPhil Davis <phil.davis@inf.org>2015-07-05 23:18:04 +0545
commit028ff8f8a3d7c09ee5604d6f3eadcdaaef1610c7 (patch)
tree72779176aa19f00e7019e1fd84ce2e86e535f9b0 /usr/local/www/system_routes.php
parent5af646023e447cb386a2bcbeb2900985adce2321 (diff)
downloadpfsense-028ff8f8a3d7c09ee5604d6f3eadcdaaef1610c7.zip
pfsense-028ff8f8a3d7c09ee5604d6f3eadcdaaef1610c7.tar.gz
Fix #4813 validation of enable/disable of gateways and static routes
1) A disabled gateway can always be enabled - no extra validation needed. 2) When disabling an enabled gateway, check to see that the gateway is not used in any gateway group or enabled static route (similar tests to what is already checked before deleting a gateway). 3) A static route can always be disabled - no extra checks needed. 4) When enabling a static route, check that the selected gateway is enabled - you cannot have a static route enabled on a disabled gateway. 5) Do the address family cross-check between static route and gateway even when the static route is disabled - we do not want to save mismatched IP address families in any case. This covers all the cases I can see to ensure that the enable/disable status combinations of Gateways and Static Routes is always valid.
Diffstat (limited to 'usr/local/www/system_routes.php')
-rw-r--r--usr/local/www/system_routes.php23
1 files changed, 17 insertions, 6 deletions
diff --git a/usr/local/www/system_routes.php b/usr/local/www/system_routes.php
index 4d44557..9443d40 100644
--- a/usr/local/www/system_routes.php
+++ b/usr/local/www/system_routes.php
@@ -53,6 +53,7 @@ if (!is_array($config['staticroutes']['route'])) {
$a_routes = &$config['staticroutes']['route'];
$a_gateways = return_gateways_array(true, true, true);
$changedesc_prefix = gettext("Static Routes") . ": ";
+unset($input_errors);
if ($_POST) {
@@ -142,20 +143,29 @@ if (isset($_POST['del_x'])) {
} else if ($_GET['act'] == "toggle") {
if ($a_routes[$_GET['id']]) {
+ $do_update_config = true;
if (isset($a_routes[$_GET['id']]['disabled'])) {
- unset($a_routes[$_GET['id']]['disabled']);
- $changedesc = $changedesc_prefix . gettext("enabled route to") . " " . $a_routes[$_GET['id']]['network'];
+ // Do not enable a route whose gateway is disabled
+ if (isset($a_gateways[$a_routes[$_GET['id']]['gateway']]['disabled'])) {
+ $do_update_config = false;
+ $input_errors[] = $changedesc_prefix . gettext("gateway is disabled, cannot enable route to") . " " . $a_routes[$_GET['id']]['network'];
+ } else {
+ unset($a_routes[$_GET['id']]['disabled']);
+ $changedesc = $changedesc_prefix . gettext("enabled route to") . " " . $a_routes[$_GET['id']]['network'];
+ }
} else {
delete_static_route($_GET['id']);
$a_routes[$_GET['id']]['disabled'] = true;
$changedesc = $changedesc_prefix . gettext("disabled route to") . " " . $a_routes[$_GET['id']]['network'];
}
- if (write_config($changedesc)) {
- mark_subsystem_dirty('staticroutes');
+ if ($do_update_config) {
+ if (write_config($changedesc)) {
+ mark_subsystem_dirty('staticroutes');
+ }
+ header("Location: system_routes.php");
+ exit;
}
- header("Location: system_routes.php");
- exit;
}
} else {
/* yuck - IE won't send value attributes for image buttons, while Mozilla does - so we use .x/.y to find move button clicks instead... */
@@ -225,6 +235,7 @@ include("head.inc");
<?php if (is_subsystem_dirty('staticroutes')): ?><p>
<?php print_info_box_np(sprintf(gettext("The static route configuration has been changed.%sYou must apply the changes in order for them to take effect."), "<br />"));?><br /></p>
<?php endif; ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="system routes">
<tr>
OpenPOWER on IntegriCloud