summaryrefslogtreecommitdiffstats
path: root/usr/local/www/system_gateways.php
diff options
context:
space:
mode:
authorRenato Botelho <garga@FreeBSD.org>2013-11-26 19:17:10 -0200
committerRenato Botelho <garga@FreeBSD.org>2013-11-26 19:17:10 -0200
commite97df865146ead328cca4c815daa58056f0725e3 (patch)
tree1d8a81817b50694af801b3b544d90b87000ae576 /usr/local/www/system_gateways.php
parent96ef7db0312e76540fffda7092df4be9d97dfe6e (diff)
downloadpfsense-e97df865146ead328cca4c815daa58056f0725e3.zip
pfsense-e97df865146ead328cca4c815daa58056f0725e3.tar.gz
Show all gateway entries, even if interface doesn't exist, to avoid adding duplicate items or edit config by hand to remove old entries. While I'm here, allow multiple delete, and toggle enable/disable
Diffstat (limited to 'usr/local/www/system_gateways.php')
-rwxr-xr-xusr/local/www/system_gateways.php231
1 files changed, 176 insertions, 55 deletions
diff --git a/usr/local/www/system_gateways.php b/usr/local/www/system_gateways.php
index 7523b7e..e0141a5 100755
--- a/usr/local/www/system_gateways.php
+++ b/usr/local/www/system_gateways.php
@@ -44,7 +44,7 @@ require_once("functions.inc");
require_once("filter.inc");
require_once("shaper.inc");
-$a_gateways = return_gateways_array(true);
+$a_gateways = return_gateways_array(true, false, true);
$a_gateways_arr = array();
foreach ($a_gateways as $gw)
$a_gateways_arr[] = $gw;
@@ -55,8 +55,6 @@ if (!is_array($config['gateways']['gateway_item']))
$a_gateway_item = &$config['gateways']['gateway_item'];
-$changedesc = "Gateways: ";
-
if ($_POST) {
$pconfig = $_POST;
@@ -76,55 +74,107 @@ if ($_POST) {
}
}
-if ($_GET['act'] == "del") {
- if ($a_gateways[$_GET['id']]) {
- /* remove the real entry */
- $realid = $a_gateways[$_GET['id']]['attribute'];
- $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;
- }
+function can_delete_gateway_item($id) {
+ global $config, $input_errors, $a_gateways;
+ if (!isset($a_gateways[$id]))
+ return false;
+
+ 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[$id]['name']) {
+ $input_errors[] = sprintf(gettext("Gateway '%s' cannot be deleted because it is in use on Gateway Group '%s'"), $a_gateways[$id]['name'], $group['name']);
+ 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 (is_array($config['staticroutes']['route'])) {
+ foreach ($config['staticroutes']['route'] as $route) {
+ if ($route['gateway'] == $a_gateways[$id]['name']) {
+ $input_errors[] = sprintf(gettext("Gateway '%s' cannot be deleted because it is in use on Static Route '%s'"), $a_gateways[$id]['name'], $route['network']);
+ break;
}
}
- if ($remove == true) {
- /* NOTE: Cleanup static routes for the monitor ip if any */
- if (!empty($a_gateways[$_GET['id']]['monitor']) && $a_gateways[$_GET['id']]['monitor'] != "dynamic" && is_ipaddr($a_gateways[$_GET['id']]['monitor']) &&
- $a_gateways[$_GET['id']]['monitor'] != $a_gateways[$_GET['id']]['monitor'] && $a_gateways[$_GET['id']]['gateway'] != $a_gateways[$_GET['id']]['monitor']) {
- if (is_ipaddrv4($a_gateways[$_GET['id']]['monitor']))
- mwexec("/sbin/route delete " . escapeshellarg($a_gateways[$_GET['id']]['monitor']));
- else
- mwexec("/sbin/route delete -inet6 " . escapeshellarg($a_gateways[$_GET['id']]['monitor']));
- }
+ }
+
+ if (isset($input_errors))
+ return false;
+
+ return true;
+}
+
+function delete_gateway_item($id) {
+ if (!isset($a_gateways[$id]))
+ return;
- 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');
+ /* NOTE: Cleanup static routes for the monitor ip if any */
+ if (!empty($a_gateways[$id]['monitor']) &&
+ $a_gateways[$id]['monitor'] != "dynamic" &&
+ is_ipaddr($a_gateways[$id]['monitor']) &&
+ $a_gateways[$id]['gateway'] != $a_gateways[$id]['monitor']) {
+ if (is_ipaddrv4($a_gateways[$id]['monitor']))
+ mwexec("/sbin/route delete " . escapeshellarg($a_gateways[$id]['monitor']));
+ else
+ mwexec("/sbin/route delete -inet6 " . escapeshellarg($a_gateways[$id]['monitor']));
+ }
+
+ if ($config['interfaces'][$a_gateways[$id]['friendlyiface']]['gateway'] == $a_gateways[$id]['name'])
+ unset($config['interfaces'][$a_gateways[$id]['friendlyiface']]['gateway']);
+ unset($config['gateways']['gateway_item'][$a_gateways[$id]['attribute']]);
+}
+
+unset($input_errors);
+if ($_GET['act'] == "del") {
+ if (can_delete_gateway_item($_GET['id'])) {
+ $realid = $a_gateways[$_GET['id']]['attribute'];
+ delete_gateway_item($_GET['id']);
+ write_config("Gateways: removed gateway {$realid}");
+ mark_subsystem_dirty('staticroutes');
+ header("Location: system_gateways.php");
+ exit;
+ }
+}
+
+if (isset($_POST['del_x'])) {
+ /* delete selected items */
+ if (is_array($_POST['rule']) && count($_POST['rule'])) {
+ foreach ($_POST['rule'] as $rulei)
+ if(!can_delete_gateway_item($rulei))
+ break;
+
+ if (!isset($input_errors)) {
+ $items_deleted = "";
+ foreach ($_POST['rule'] as $rulei) {
+ delete_gateway_item($rulei);
+ $items_deleted .= "{$rulei} ";
+ }
+ if (!empty($items_deleted)) {
+ write_config("Gateways: removed gateways {$items_deleted}");
+ mark_subsystem_dirty('staticroutes');
+ }
header("Location: system_gateways.php");
exit;
}
}
-}
+} else if ($_GET['act'] == "toggle" && $a_gateways[$_GET['id']]) {
+ $realid = $a_gateways[$_GET['id']]['attribute'];
+
+ if(isset($a_gateway_item[$realid]['disabled']))
+ unset($a_gateway_item[$realid]['disabled']);
+ else
+ $a_gateway_item[$realid]['disabled'] = true;
+
+ if (write_config("Gateways: enable/disable"))
+ mark_subsystem_dirty('staticroutes');
+
+ header("Location: system_gateways.php");
+ exit;
+}
$pgtitle = array(gettext("System"),gettext("Gateways"));
$shortcut_section = "gateways";
@@ -137,6 +187,7 @@ include("head.inc");
<?php include("fbegin.inc"); ?>
<?php if ($input_errors) print_input_errors($input_errors); ?>
<form action="system_gateways.php" method="post">
+<script type="text/javascript" language="javascript" src="/javascript/row_toggle.js"></script>
<?php if ($savemsg) print_info_box($savemsg); ?>
<?php if (is_subsystem_dirty('staticroutes')): ?><p>
<?php print_info_box_np(gettext("The gateway configuration has been changed.") . "<br/>" . gettext("You must apply the changes in order for them to take effect."));?><br/></p>
@@ -157,12 +208,14 @@ include("head.inc");
<td>
<div id="mainarea">
<table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" summary="main area">
- <tr>
+ <tr id="frheader">
+ <td width="2%" class="list">&nbsp;</td>
+ <td width="2%" class="list">&nbsp;</td>
<td width="15%" class="listhdrr"><?=gettext("Name"); ?></td>
- <td width="15%" class="listhdrr"><?=gettext("Interface"); ?></td>
- <td width="20%" class="listhdrr"><?=gettext("Gateway"); ?></td>
- <td width="20%" class="listhdrr"><?=gettext("Monitor IP"); ?></td>
- <td width="30%" class="listhdr"><?=gettext("Description"); ?></td>
+ <td width="10%" class="listhdrr"><?=gettext("Interface"); ?></td>
+ <td width="15%" class="listhdrr"><?=gettext("Gateway"); ?></td>
+ <td width="15%" class="listhdrr"><?=gettext("Monitor IP"); ?></td>
+ <td width="31%" class="listhdr"><?=gettext("Description"); ?></td>
<td width="10%" class="list">
<table border="0" cellspacing="0" cellpadding="1" summary="add">
<tr>
@@ -177,44 +230,97 @@ include("head.inc");
</td>
</tr>
<?php
+ $textse = "</span>";
$i = 0;
foreach ($a_gateways as $gateway):
+ if (isset($gateway['disabled']) || isset($gateway['inactive'])) {
+ $textss = "<span class=\"gray\">";
+ $iconfn = "pass_d";
+ } else {
+ $textss = "<span>";
+ $iconfn = "pass";
+ }
?>
- <tr>
- <td class="listlr" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';">
+ <tr valign="top" id="fr<?=$i;?>">
+ <td class="listt">
+<?php
+ if (is_numeric($gateway['attribute'])):
+?>
+ <input type="checkbox" id="frc<?=$i;?>" name="rule[]" value="<?=$i;?>" onclick="fr_bgcolor('<?=$i;?>')" style="margin: 0; padding: 0; width: 15px; height: 15px;" />
+<?php
+ else:
+?>
+ &nbsp;
+<?php
+ endif;
+?>
+ </td>
+ <td class="listt" align="center">
+<?php
+ if (isset($gateway['inactive'])):
+?>
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_reject_d.gif" width="11" height="11" border="0"
+ title="<?=gettext("This gateway is inactive because interface is missing");?>" alt="icon" />
+<?php
+ elseif (is_numeric($gateway['attribute'])):
+?>
+ <a href="?act=toggle&amp;id=<?=$i;?>">
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfn;?>.gif" width="11" height="11" border="0"
+ title="<?=gettext("click to toggle enabled/disabled status");?>" alt="icon" />
+ </a>
+<?php
+ else:
+?>
+ <img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$iconfn;?>.gif" width="11" height="11" border="0"
+ title="<?=gettext("click to toggle enabled/disabled status");?>" alt="icon" />
+<?php
+ endif;
+?>
+ </td>
+ <td class="listlr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';">
<?php
+ echo $textss;
echo $gateway['name'];
if(isset($gateway['defaultgw']))
echo " <strong>(default)</strong>";
+ echo $textse;
?>
</td>
- <td class="listr" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';">
+ <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';">
<?php
+ echo $textss;
echo htmlspecialchars(convert_friendly_interface_to_friendly_descr($gateway['friendlyiface']));
+ echo $textse;
?>
</td>
- <td class="listr" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';">
+ <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';">
<?php
+ echo $textss;
echo $gateway['gateway'] . " ";
+ echo $textse;
?>
</td>
- <td class="listr" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';">
+ <td class="listr" onclick="fr_toggle(<?=$i;?>)" id="frd<?=$i;?>" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';">
<?php
+ echo $textss;
echo htmlspecialchars($gateway['monitor']) . " ";
+ echo $textse;
?>
</td>
<?php
if (is_numeric($gateway['attribute'])):
?>
- <td class="listbg" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';">
+ <td class="listbg" onclick="fr_toggle(<?=$i;?>)" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';">
<?php
else:
?>
- <td class="listbgns" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';">
+ <td class="listbgns" onclick="fr_toggle(<?=$i;?>)" ondblclick="document.location='system_gateways_edit.php?id=<?=$i;?>';">
<?php
endif;
+ echo $textss;
+ echo htmlspecialchars($gateway['descr']) . "&nbsp;";
+ echo $textse;
?>
- <?=htmlspecialchars($gateway['descr']);?>&nbsp;
</td>
<td valign="middle" class="list nowrap">
<table border="0" cellspacing="0" cellpadding="1" summary="icons">
@@ -256,11 +362,26 @@ include("head.inc");
endforeach;
?>
<tr>
- <td class="list" colspan="5"></td>
+ <td class="list" colspan="7"></td>
<td class="list">
<table border="0" cellspacing="0" cellpadding="1" summary="edit">
<tr>
- <td width="17"></td>
+ <td>
+<?php
+ if ($i == 0):
+?>
+ <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x_d.gif" width="17" height="17"
+ title="<?=gettext("delete selected items");?>" border="0" alt="delete" />
+<?php
+ else:
+?>
+ <input name="del" type="image" src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif"
+ style="width:17;height:17" title="<?=gettext("delete selected items");?>"
+ onclick="return confirm('<?=gettext("Do you really want to delete the selected gateway items?");?>')" />
+<?php
+ endif;
+?>
+ </td>
<td>
<a href="system_gateways_edit.php">
<img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="edit" />
OpenPOWER on IntegriCloud