diff options
Diffstat (limited to 'src/usr/local/www/firewall_nat_1to1.php')
-rw-r--r-- | src/usr/local/www/firewall_nat_1to1.php | 201 |
1 files changed, 95 insertions, 106 deletions
diff --git a/src/usr/local/www/firewall_nat_1to1.php b/src/usr/local/www/firewall_nat_1to1.php index 753d030..e59af92 100644 --- a/src/usr/local/www/firewall_nat_1to1.php +++ b/src/usr/local/www/firewall_nat_1to1.php @@ -4,55 +4,55 @@ firewall_nat_1to1.php */ /* ==================================================================== - * Copyright (c) 2004-2015 Electric Sheep Fencing, LLC. All rights reserved. - * Copyright (c) 2003-2004 Manuel Kasper <mk@neon1.net> + * Copyright (c) 2004-2015 Electric Sheep Fencing, LLC. All rights reserved. + * Copyright (c) 2003-2004 Manuel Kasper <mk@neon1.net> * part of m0n0wall (http://m0n0.ch/wall) * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. * - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgment: - * "This product includes software developed by the pfSense Project - * for use in the pfSense software distribution. (http://www.pfsense.org/). + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgment: + * "This product includes software developed by the pfSense Project + * for use in the pfSense software distribution. (http://www.pfsense.org/). * - * 4. The names "pfSense" and "pfSense Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * coreteam@pfsense.org. + * 4. The names "pfSense" and "pfSense Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * coreteam@pfsense.org. * - * 5. Products derived from this software may not be called "pfSense" - * nor may "pfSense" appear in their names without prior written - * permission of the Electric Sheep Fencing, LLC. + * 5. Products derived from this software may not be called "pfSense" + * nor may "pfSense" appear in their names without prior written + * permission of the Electric Sheep Fencing, LLC. * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: * - * "This product includes software developed by the pfSense Project - * for use in the pfSense software distribution (http://www.pfsense.org/). + * "This product includes software developed by the pfSense Project + * for use in the pfSense software distribution (http://www.pfsense.org/). * - * THIS SOFTWARE IS PROVIDED BY THE pfSense PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE pfSense PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. + * THIS SOFTWARE IS PROVIDED BY THE pfSense PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE pfSense PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. * - * ==================================================================== + * ==================================================================== * */ /* @@ -78,20 +78,22 @@ if (!is_array($config['nat']['onetoone'])) { $a_1to1 = &$config['nat']['onetoone']; /* update rule order, POST[rule] is an array of ordered IDs */ -if (is_array($_POST['rule']) && !empty($_POST['rule'])) { - $a_1to1_new = array(); - - // if a rule is not in POST[rule], it has been deleted by the user - foreach ($_POST['rule'] as $id) - $a_1to1_new[] = $a_1to1[$id]; - - $a_1to1 = $a_1to1_new; - - if (write_config()) - mark_subsystem_dirty('filter'); - - header("Location: firewall_nat_1to1.php"); - exit; +if($_POST['order-store']) { + if (is_array($_POST['rule']) && !empty($_POST['rule'])) { + $a_1to1_new = array(); + + // if a rule is not in POST[rule], it has been deleted by the user + foreach ($_POST['rule'] as $id) + $a_1to1_new[] = $a_1to1[$id]; + + $a_1to1 = $a_1to1_new; + + if (write_config()) + mark_subsystem_dirty('natconf'); + + header("Location: firewall_nat_1to1.php"); + exit; + } } if ($_POST) { @@ -115,6 +117,7 @@ if ($_GET['act'] == "del") { if (write_config()) { mark_subsystem_dirty('natconf'); } + header("Location: firewall_nat_1to1.php"); exit; } @@ -126,9 +129,11 @@ if (isset($_POST['del_x'])) { foreach ($_POST['rule'] as $rulei) { unset($a_1to1[$rulei]); } + if (write_config()) { mark_subsystem_dirty('natconf'); } + header("Location: firewall_nat_1to1.php"); exit; } @@ -146,57 +151,6 @@ if (isset($_POST['del_x'])) { header("Location: firewall_nat_1to1.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... */ - unset($movebtn); - foreach ($_POST as $pn => $pd) { - if (preg_match("/move_(\d+)_x/", $pn, $matches)) { - $movebtn = $matches[1]; - break; - } - } - /* move selected rules before this rule */ - if (isset($movebtn) && is_array($_POST['rule']) && count($_POST['rule'])) { - $a_1to1_new = array(); - - /* copy all rules < $movebtn and not selected */ - for ($i = 0; $i < $movebtn; $i++) { - if (!in_array($i, $_POST['rule'])) { - $a_1to1_new[] = $a_1to1[$i]; - } - } - - /* copy all selected rules */ - for ($i = 0; $i < count($a_1to1); $i++) { - if ($i == $movebtn) { - continue; - } - if (in_array($i, $_POST['rule'])) { - $a_1to1_new[] = $a_1to1[$i]; - } - } - - /* copy $movebtn rule */ - if ($movebtn < count($a_1to1)) { - $a_1to1_new[] = $a_1to1[$movebtn]; - } - - /* copy all rules > $movebtn and not selected */ - for ($i = $movebtn+1; $i < count($a_1to1); $i++) { - if (!in_array($i, $_POST['rule'])) { - $a_1to1_new[] = $a_1to1[$i]; - } - } - if (count($a_1to1_new) > 0) { - $a_1to1 = $a_1to1_new; - } - - if (write_config()) { - mark_subsystem_dirty('natconf'); - } - header("Location: firewall_nat_1to1.php"); - exit; - } } $pgtitle = array(gettext("Firewall"), gettext("NAT"), gettext("1:1")); @@ -223,6 +177,7 @@ display_top_tabs($tab_array); <table class="table table-striped table-hover table-condensed"> <thead> <tr> + <th><!-- checkbox --></th> <th><!-- icon --></th> <th><?=gettext("Interface"); ?></th> <th><?=gettext("External IP"); ?></th> @@ -245,7 +200,11 @@ display_top_tabs($tab_array); $iconfn = "pass"; } ?> - <tr id="fr<?=$i?>"> + <tr id="fr<?=$i;?>" onClick="fr_toggle(<?=$i;?>)" ondblclick="document.location='firewall_nat_1to1_edit.php?id=<?=$i;?>';"> + <td > + <input type="checkbox" id="frc<?=$i;?>" onClick="fr_toggle(<?=$i;?>)" name="rule[]" value="<?=$i;?>"/> + </td> + <td> <a href="?act=toggle&id=<?=$i?>"> <i class="<?= ($iconfn == "pass") ? "icon-ok":"icon-remove"?>" title="<?=gettext("click to toggle enabled/disabled status")?>"></i> @@ -263,7 +222,6 @@ display_top_tabs($tab_array); ?> </td> <td> - <input type="hidden" name="rule[]" value="<?=$i?>" /> <?php $source_net = pprint_address($natent['source']); $source_cidr = strstr($source_net, '/'); @@ -304,7 +262,8 @@ display_top_tabs($tab_array); <nav class="action-buttons"> <a href="firewall_nat_1to1_edit.php?after=-1" class="btn btn-sm btn-success" title="<?=gettext('Add new mapping')?>"><?=gettext('Add new mapping')?></a> - <input type="submit" id="order-store" class="btn btn-primary btn-sm" value="store changes" disabled="disabled" /> + <input name="del_x" type="submit" class="btn btn-danger btn-sm" value="<?=gettext("Delete selected rule"); ?>" /> + <input type="submit" id="order-store" name="order-store" class="btn btn-primary btn-sm" value="store changes" disabled="disabled" /> </nav> </form> @@ -321,6 +280,31 @@ print_info_box(gettext('Depending on the way your WAN connection is setup, you m </div> <script> +function fr_toggle(id, prefix) { + if (!prefix) + prefix = 'fr'; + + var checkbox = document.getElementById(prefix + 'c' + id); + checkbox.checked = !checkbox.checked; + fr_bgcolor(id, prefix); +} + +function fr_bgcolor(id, prefix) { + if (!prefix) + prefix = 'fr'; + + var row = document.getElementById(prefix + id); + var checkbox = document.getElementById(prefix + 'c' + id); + var cells = row.getElementsByTagName('td'); + var cellcnt = cells.length; + + for (i = 0; i < cellcnt-1; i++) { + cells[i].style.backgroundColor = checkbox.checked ? "#DDF4FF" : "#FFFFFF"; + } +} +</script> + +<script> events.push(function() { // Make rules draggable/sortable $('table tbody.user-entries').sortable({ @@ -329,6 +313,11 @@ events.push(function() { $('#order-store').removeAttr('disabled'); } }); + + // Check all of the rule checkboxes so that their values are posted + $('#order-store').click(function () { + $('[id^=frc]').prop('checked', true); + }); }); </script> <?php include("foot.inc"); ?>
\ No newline at end of file |