diff --git a/src/usr/local/www/firewall_rules_edit.php b/src/usr/local/www/firewall_rules_edit.php index 11c71ef8df..d2a1a3d1d0 100644 --- a/src/usr/local/www/firewall_rules_edit.php +++ b/src/usr/local/www/firewall_rules_edit.php @@ -819,7 +819,8 @@ if ($_POST['save']) { } } - if ($_POST['dscp'] && !in_array($_POST['dscp'], $firewall_rules_dscp_types)) { + if ($_POST['dscp'] && !in_array($_POST['dscp'], $firewall_rules_dscp_types) && + !preg_match('/^[0-9a-z]{1,16}$/i', $_POST['dscp'])) { $input_errors[] = gettext("Invalid DSCP value."); } if ($_POST['tag'] && !is_validaliasname($_POST['tag'])) { @@ -981,7 +982,9 @@ if ($_POST['save']) { unset($filterent['disabled']); } - if ($_POST['dscp']) { + if ($_POST['dscp-custom'] && preg_match('/^[0-9a-z]{1,16}$/i', $_POST['dscp-custom'])) { + $filterent['dscp'] = $_POST['dscp-custom']; + } elseif ($_POST['dscp']) { $filterent['dscp'] = $_POST['dscp']; } @@ -1563,12 +1566,21 @@ $section->addInput(new Form_Select( ['' => gettext('Any')] + array_combine($ostypes, $ostypes) ))->setHelp('Note: this only works for TCP rules. General OS choice matches all subtypes.'); -$section->addInput(new Form_Select( +$group = new Form_Group('Diffserv Code Point'); +$group->add(new Form_Select( 'dscp', - 'Diffserv Code Point', + null, $pconfig['dscp'], ["" => ''] + array_combine($firewall_rules_dscp_types, $firewall_rules_dscp_types) )); +$group->add(new Form_Input( + 'dscp-custom', + 'Enter a valid DSCP value', + 'text', + $pconfig['dscp'], + array('title' => 'Override selection with a custom DSCP') +)); +$section->add($group); $section->addInput(new Form_Checkbox( 'allowopts',