From 253e8a2f9eda1eecad60902f598f1676324bfe07 Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Mon, 4 Jan 2016 12:54:56 +0100 Subject: [PATCH] (legacy) refactor interfaces_groups_edit.php --- src/www/interfaces_groups_edit.php | 520 +++++++++++------------------ 1 file changed, 186 insertions(+), 334 deletions(-) diff --git a/src/www/interfaces_groups_edit.php b/src/www/interfaces_groups_edit.php index f593a068f..f47a6b312 100644 --- a/src/www/interfaces_groups_edit.php +++ b/src/www/interfaces_groups_edit.php @@ -1,362 +1,214 @@ $gdescr) { + if ($gdescr == $pconfig['ifname'] || $gif == $pconfig['ifname']) { + $input_errors[] = gettext("The specified group name is already used by an interface. Please choose another name."); + } + } + + if (count($input_errors) == 0) { + $ifgroupentry = array(); + $ifgroupentry['members'] = implode(' ', $pconfig['members']); + $ifgroupentry['descr'] = $pconfig['descr']; + $ifgroupentry['ifname'] = $pconfig['ifname']; + + if (isset($id)) { + // rename interface group + if ($pconfig['ifname'] != $a_ifgroups[$id]['ifname']) { + if (!empty($config['filter']) && is_array($config['filter']['rule'])) { + foreach ($config['filter']['rule'] as &$rule) { + $rule_ifs = explode(",", $rule['interface']); + if (in_array($a_ifgroups[$id]['ifname'], $rule_ifs)) { + // replace interface + $rule_ifs[array_search($a_ifgroups[$id]['ifname'], $rule_ifs)] = $ifgroupentry['ifname']; + $rule['interface'] = implode(",", $rule_ifs); + } + } + } + if (!empty($config['nat']) && is_array($config['nat']['rule'])) { + foreach ($config['nat']['rule'] as &$rule) { + $rule_ifs = explode(",", $rule['interface']); + if (in_array($a_ifgroups[$id]['ifname'], $rule_ifs)) { + // replace interface + $rule_ifs[array_search($a_ifgroups[$id]['ifname'], $rule_ifs)] = $ifgroupentry['ifname']; + $rule['interface'] = implode(",", $rule_ifs); + } + } + } + } + // remove group members + foreach (explode(" ", $a_ifgroups[$id]['members']) as $old_member) { + if (!in_array($old_member, $pconfig['members'])) { + $realif = get_real_interface($old_member); + if (!empty($realif)) { + mwexec("/sbin/ifconfig {$realif} -group " . escapeshellarg($a_ifgroups[$id]['ifname'])); + } + } + } + // update item + $a_ifgroups[$id] = $ifgroupentry; + } else { + // add new item + $a_ifgroups[] = $ifgroupentry; + } + write_config(); + interface_group_setup($ifgroupentry); + header("Location: interfaces_groups.php"); + exit; + } } -$iflist = get_configured_interface_with_descr(); -$iflist_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[] = gettext("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++; - } - } - - if (!$input_errors) { - $ifgroupentry = array(); - $ifgroupentry['members'] = $members; - $ifgroupentry['descr'] = $_POST['descr']; - - 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; - } 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; - } 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"); - +legacy_html_escape_form_data($pconfig); ?> - - - -
-
-
- - 0) print_input_errors($input_errors); ?> -
- - -
- -
- -
-

-
- -
- -
- - - - - - - - - - - - - - - - - -
- -
- -
- -
- - - -
- - - - - - - "") { - $item = explode(" ", $members); - foreach($item as $ww) { - $members = $item[$counter]; - $tracker = $counter; - ?> - - - - - - -
- - - -
- - - - -

- - -
  - " /> - " /> - - - -
-
-
-
-
-
-
-
- - - - +
+
+
+ 0) print_input_errors($input_errors); ?> +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +   +
+ + +
+ + +
+ + +
  + " /> + " onclick="window.location.href=''" /> + + + +
+
+
+
+
+
+
+
+