diff options
author | Renato Botelho <renato@netgate.com> | 2015-08-26 15:12:02 -0300 |
---|---|---|
committer | Renato Botelho <renato@netgate.com> | 2015-08-26 15:12:02 -0300 |
commit | 03b19a93f4d8d870507ee96121cee4acd748dd2a (patch) | |
tree | 71a34e9e7e73d13de21cb4ad831799fb10c30df4 /src/usr/local/www/interfaces_groups_edit.php | |
parent | 7f410a121522c5d0e2660256ae50c1fde1df3645 (diff) | |
parent | 30ce58ac1ea27b758d5112cb5a3b190c9760f010 (diff) | |
download | pfsense-03b19a93f4d8d870507ee96121cee4acd748dd2a.zip pfsense-03b19a93f4d8d870507ee96121cee4acd748dd2a.tar.gz |
Merge branch 'master' into bootstrap
Diffstat (limited to 'src/usr/local/www/interfaces_groups_edit.php')
-rw-r--r-- | src/usr/local/www/interfaces_groups_edit.php | 257 |
1 files changed, 257 insertions, 0 deletions
diff --git a/src/usr/local/www/interfaces_groups_edit.php b/src/usr/local/www/interfaces_groups_edit.php new file mode 100644 index 0000000..8e7b6da --- /dev/null +++ b/src/usr/local/www/interfaces_groups_edit.php @@ -0,0 +1,257 @@ +<?php +/* + interfaces_groups_edit.php + + Copyright (C) 2013-2015 Electric Sheep Fencing, LP + Copyright (C) 2009 Ermal Luçi + Copyright (C) 2004 Scott Ullrich + All rights reserved. + + 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. + + 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. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS 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 + AUTHOR 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. +*/ +/* + pfSense_BUILDER_BINARIES: /sbin/ifconfig + pfSense_MODULE: interfaces +*/ + +##|+PRIV +##|*IDENT=page-interfaces-groups-edit +##|*NAME=Interfaces: Groups: Edit page +##|*DESCR=Allow access to the 'Interfaces: Groups: Edit' page. +##|*MATCH=interfaces_groups_edit.php* +##|-PRIV + + +require("guiconfig.inc"); +require_once("functions.inc"); + +$pgtitle = array(gettext("Interfaces"), gettext("Groups"), gettext("Edit")); +$shortcut_section = "interfaces"; + +if (!is_array($config['ifgroups']['ifgroupentry'])) { + $config['ifgroups']['ifgroupentry'] = array(); +} + +$a_ifgroups = &$config['ifgroups']['ifgroupentry']; + +if (is_numericint($_GET['id'])) { + $id = $_GET['id']; +} +if (isset($_POST['id']) && is_numericint($_POST['id'])) { + $id = $_POST['id']; +} + +if (isset($id) && $a_ifgroups[$id]) { + $pconfig['ifname'] = $a_ifgroups[$id]['ifname']; + $pconfig['members'] = $a_ifgroups[$id]['members']; + $pconfig['descr'] = html_entity_decode($a_ifgroups[$id]['descr']); +} + +$interface_list = get_configured_interface_with_descr(); +$interface_list_disabled = get_configured_interface_with_descr(false, true); + +if ($_POST) { + unset($input_errors); + $pconfig = $_POST; + + if (!isset($id)) { + foreach ($a_ifgroups as $groupentry) { + if ($groupentry['ifname'] == $_POST['ifname']) { + $input_errors[] = gettext("Group name already exists!"); + } + } + } + if (preg_match("/([^a-zA-Z])+/", $_POST['ifname'], $match)) { + $input_errors[] = gettext("Only letters A-Z are allowed as the group name."); + } + + foreach ($iflist as $gif => $gdescr) { + if ($gdescr == $_POST['ifname'] || $gif == $_POST['ifname']) { + $input_errors[] = "The specified group name is already used by an interface. Please choose another name."; + } + } + $members = ""; + $isfirst = 0; + /* item is a normal ifgroupentry type */ + for ($x = 0; $x < 9999; $x++) { + if ($_POST["members{$x}"] <> "") { + if ($isfirst > 0) { + $members .= " "; + } + $members .= $_POST["members{$x}"]; + $isfirst++; + } + } + + $members = isset($_POST['members']) ? join(' ', $_POST['members']) : ""; + + if (!$input_errors) { + $ifgroupentry = array(); + $ifgroupentry['members'] = $members; + $ifgroupentry['descr'] = $_POST['descr']; + + // Edit group name + if (isset($id) && $a_ifgroups[$id] && $_POST['ifname'] != $a_ifgroups[$id]['ifname']) { + if (!empty($config['filter']) && is_array($config['filter']['rule'])) { + foreach ($config['filter']['rule'] as $ridx => $rule) { + if (isset($rule['floating'])) { + $rule_ifs = explode(",", $rule['interface']); + $rule_changed = false; + foreach ($rule_ifs as $rule_if_id => $rule_if) { + if ($rule_if == $a_ifgroups[$id]['ifname']) { + $rule_ifs[$rule_if_id] = $_POST['ifname']; + $rule_changed = true; + } + } + if ($rule_changed) { + $config['filter']['rule'][$ridx]['interface'] = implode(",", $rule_ifs); + } + } else { + if ($rule['interface'] == $a_ifgroups[$id]['ifname']) { + $config['filter']['rule'][$ridx]['interface'] = $_POST['ifname']; + } + } + } + } + if (!empty($config['nat']) && is_array($config['nat']['rule'])) { + foreach ($config['nat']['rule'] as $ridx => $rule) { + if ($rule['interface'] == $a_ifgroups[$id]['ifname']) { + $config['nat']['rule'][$ridx]['interface'] = $_POST['ifname']; + } + } + } + $omembers = explode(" ", $a_ifgroups[$id]['members']); + if (count($omembers) > 0) { + foreach ($omembers as $ifs) { + $realif = get_real_interface($ifs); + if ($realif) { + mwexec("/sbin/ifconfig {$realif} -group " . $a_ifgroups[$id]['ifname']); + } + } + } + $ifgroupentry['ifname'] = $_POST['ifname']; + $a_ifgroups[$id] = $ifgroupentry; + + // Edit old group + } else if (isset($id) && $a_ifgroups[$id]) { + $omembers = explode(" ", $a_ifgroups[$id]['members']); + $nmembers = explode(" ", $members); + $delmembers = array_diff($omembers, $nmembers); + if (count($delmembers) > 0) { + foreach ($delmembers as $ifs) { + $realif = get_real_interface($ifs); + if ($realif) { + mwexec("/sbin/ifconfig {$realif} -group " . $a_ifgroups[$id]['ifname']); + } + } + } + $ifgroupentry['ifname'] = $_POST['ifname']; + $a_ifgroups[$id] = $ifgroupentry; + + // Create new group + } else { + $ifgroupentry['ifname'] = $_POST['ifname']; + $a_ifgroups[] = $ifgroupentry; + } + + write_config(); + interface_group_setup($ifgroupentry); + + header("Location: interfaces_groups.php"); + exit; + } else { + $pconfig['descr'] = $_POST['descr']; + $pconfig['members'] = $members; + } +} + +include("head.inc"); + +if ($input_errors) { + print_input_errors($input_errors); +} + +?> +<div id="inputerrors"></div> +<?php +$tab_array = array(); +$tab_array[0] = array(gettext("Interface assignments"), false, "interfaces_assign.php"); +$tab_array[1] = array(gettext("Interface Groups"), true, "interfaces_groups.php"); +$tab_array[2] = array(gettext("Wireless"), false, "interfaces_wireless.php"); +$tab_array[3] = array(gettext("VLANs"), false, "interfaces_vlan.php"); +$tab_array[4] = array(gettext("QinQs"), false, "interfaces_qinq.php"); +$tab_array[5] = array(gettext("PPPs"), false, "interfaces_ppps.php"); +$tab_array[7] = array(gettext("GRE"), false, "interfaces_gre.php"); +$tab_array[8] = array(gettext("GIF"), false, "interfaces_gif.php"); +$tab_array[9] = array(gettext("Bridges"), false, "interfaces_bridge.php"); +$tab_array[10] = array(gettext("LAGG"), false, "interfaces_lagg.php"); +display_top_tabs($tab_array); + +require('classes/Form.class.php'); +$form = new Form; +$section = new Form_Section('Interface Group Edit'); + +$section->addInput(new Form_Input( + 'ifname', + 'Group Name', + 'text', + $pconfig['ifname'], + ['placeholder' => 'Group Name'] +))->setWidth(6)->setHelp('No numbers or spaces are allowed. '. + 'Only characters in a-zA-Z'); + +$section->addInput(new Form_Input( + 'descr', + 'Group Description', + 'text', + $pconfig['descr'], + ['placeholder' => 'Group Description'] +))->setWidth(6)->setHelp('You may enter a group decsription '. + 'here for your reference (not parsed)'); + +$section->addInput(new Form_Select( + 'members[]', + 'Group Members', + explode(' ', $pconfig['members']), + $interface_list, + true +))->setWidth(6)->setHelp('NOTE: Rules for WAN type '. + 'interfaces in groups do not contain the reply-to mechanism upon which '. + 'Multi-WAN typically relies. '. + '<a href="https://doc.pfsense.org/index.php/ifgroups">More Information</a>'); + +if (isset($id) && $a_ifgroups[$id]) { + $form->addGlobal(new Form_Input( + 'id', + 'id', + 'hidden', + $id + )); +} + +$form->add($section); +print $form; + +unset($interface_list); +unset($interface_list_disabled); +include("fend.inc"); +?> |