summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPhil Davis <phil.davis@inf.org>2017-01-24 09:34:11 +0545
committerRenato Botelho <renato@netgate.com>2017-01-24 15:04:51 -0200
commit077474cd949e35a4a2af0ee3d4e9a9fcf617182c (patch)
tree85debc062922a6e69c6217f3ee9c7314667b89f7 /src
parent2ae9fc677076117f167e62b048243f413ddd0cb5 (diff)
downloadpfsense-077474cd949e35a4a2af0ee3d4e9a9fcf617182c.zip
pfsense-077474cd949e35a4a2af0ee3d4e9a9fcf617182c.tar.gz
QinQ Tag Value Validation
Tags must be in the range 1 to 4094 Flag the various input errors and only report them once each. (cherry picked from commit e0b7a2e76bddd121bc7f92a6ecb20266c8485ed1)
Diffstat (limited to 'src')
-rw-r--r--src/usr/local/www/interfaces_qinq_edit.php34
1 files changed, 27 insertions, 7 deletions
diff --git a/src/usr/local/www/interfaces_qinq_edit.php b/src/usr/local/www/interfaces_qinq_edit.php
index 4e61e82..907abaa 100644
--- a/src/usr/local/www/interfaces_qinq_edit.php
+++ b/src/usr/local/www/interfaces_qinq_edit.php
@@ -135,6 +135,11 @@ if ($_POST) {
$qinqentry['autogroup'] = true;
}
+ $tag_min = 1;
+ $tag_max = 4094;
+ $tag_char_error = false;
+ $tag_value_error = false;
+ $tag_order_error = false;
$members = "";
// Read the POSTed member array into a space separated list translating any ranges
@@ -150,9 +155,11 @@ if ($_POST) {
if (count($member) > 1) {
if (($member[0] == "") || ($member[1] == "") ||
preg_match("/([^0-9])+/", $member[0], $match) || preg_match("/([^0-9])+/", $member[1], $match)) {
- $input_errors[] = gettext("Tags can contain only numbers or a range in format #-#.");
+ $tag_char_error = true;
+ } elseif (($member[0] < $tag_min) || ($member[0] > $tag_max) || ($member[1] < $tag_min) || ($member[1] > $tag_max)) {
+ $tag_value_error = true;
} else if ($member[0] > $member[1]) {
- $input_errors[] = gettext("Tag ranges must be entered with the lower number first.");
+ $tag_order_error = true;
} else {
for ($i = $member[0]; $i <= $member[1]; $i++) {
$valid_members[] = $i;
@@ -160,13 +167,14 @@ if ($_POST) {
}
} else { // Just a single number
if (preg_match("/([^0-9])+/", $member[0], $match)) {
- $input_errors[] = gettext("Tags can contain only numbers or a range in format #-#.");
- } else {
- // Ignore empty rows
- if ($member[0] != "") {
+ $tag_char_error = true;
+ } elseif ($member[0] != "") {
+ if (($member[0] < $tag_min) || ($member[0] > $tag_max)) {
+ $tag_value_error = true;
+ } else {
$valid_members[] = $member[0];
}
- }
+ } // else ignore empty rows
}
// Remember the POSTed values so they can be redisplayed if there were errors.
@@ -176,6 +184,18 @@ if ($_POST) {
$membername = "member{$membercounter}";
}
+ if ($tag_char_error) {
+ $input_errors[] = gettext("Tags can contain only numbers or a range in format #-#.");
+ }
+
+ if ($tag_value_error) {
+ $input_errors[] = sprintf(gettext('Tag values must be from %1$s to %2$s.'), $tag_min, $tag_max);
+ }
+
+ if ($tag_order_error) {
+ $input_errors[] = gettext("Tag ranges must be entered with the lower number first.");
+ }
+
// Just use the unique valid members. There could have been overlap in the ranges or repeat of numbers entered.
$members = implode(" ", array_unique($valid_members));
OpenPOWER on IntegriCloud