[pve-devel] [PATCH v2 firewall] check multiport limit in port ranges

Wolfgang Bumiller w.bumiller at proxmox.com
Thu Mar 8 12:06:21 CET 2018


Signed-off-by: Wolfgang Bumiller <w.bumiller at proxmox.com>
---
Changes:
  We don't actually use the returned $count for anything other than
  checking whether it's >1 to know whether to use `--match multiport`.
  This still works when counting ranges as 2.

 src/PVE/Firewall.pm | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/PVE/Firewall.pm b/src/PVE/Firewall.pm
index 2feac54..bc3d9fe 100644
--- a/src/PVE/Firewall.pm
+++ b/src/PVE/Firewall.pm
@@ -1035,12 +1035,13 @@ sub parse_port_name_number_or_range {
     my @elements = split(/,/, $str);
     die "extraneous commas in list\n" if $str ne join(',', @elements);
     foreach my $item (@elements) {
-	$count++;
 	if ($item =~ m/^(\d+):(\d+)$/) {
+	    $count += 2;
 	    my ($port1, $port2) = ($1, $2);
 	    die "invalid port '$port1'\n" if $port1 > 65535;
 	    die "invalid port '$port2'\n" if $port2 > 65535;
 	} elsif ($item =~ m/^(\d+)$/) {
+	    $count += 1;
 	    my $port = $1;
 	    die "invalid port '$port'\n" if $port > 65535;
 	} else {
@@ -1054,7 +1055,13 @@ sub parse_port_name_number_or_range {
 	}
     }
 
-    die "ICPM ports not allowed in port range\n" if $icmp_port && $count > 1;
+    die "ICPM ports not allowed in port range\n" if $icmp_port && $count > 0;
+
+    # I really don't like to use the word number here, but it's the only thing
+    # that makes sense in a literal way. The range 1:100 counts as 2, not as
+    # one and not as 100...
+    die "too many entries in port list (> 15 numbers)\n"
+	if $count > 15;
 
     return $count;
 }
-- 
2.11.0





More information about the pve-devel mailing list