16) { $input_errors[] = gettext("Group name cannot have more than 16 characters."); } if (preg_match("/([^a-zA-Z0-9-_])+/", $_POST['ifname'])) { $input_errors[] = gettext("Only letters (A-Z), digits (0-9), '-' and '_' are allowed as the group name."); } if (preg_match("/[0-9]$/", $_POST['ifname'])) { $input_errors[] = gettext("Group name cannot end with digit."); } /* * Packages (e.g. tinc) creates interface groups, reserve this * namespace pkg- for them */ if (substr($_POST['ifname'], 0, 4) == 'pkg-') { $input_errors[] = gettext("Group name cannot start with pkg-"); } foreach ($interface_list_disabled 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."; } } /* Is the description already used as an alias name? */ if (is_array($config['aliases']['alias'])) { foreach ($config['aliases']['alias'] as $alias) { if ($alias['name'] == $_POST['ifname']) { $input_errors[] = gettext("An alias with this name already exists."); } } } if (isset($_POST['members'])) { $members = implode(" ", $_POST['members']); } else { $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); } ?>
addInput(new Form_Input( 'ifname', 'Group Name', 'text', $pconfig['ifname'], ['placeholder' => 'Group Name', 'maxlength' => "16"] ))->setWidth(6)->setHelp('No numbers or spaces are allowed. '. 'Only characters: a-zA-Z'); $section->addInput(new Form_Input( 'descr', 'Group Description', 'text', $pconfig['descr'], ['placeholder' => 'Group Description'] ))->setWidth(6)->setHelp('A group description may be entered '. 'here for administrative 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. '. 'More Information'); 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("foot.inc"); ?>