Keep the count for internal checking only and just return
whether the multiport matcher is required.

Signed-off-by: Wolfgang Bumiller <w.bumil...@proxmox.com>
---
Changes: don't $count, we already have an array...

 src/PVE/Firewall.pm | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/PVE/Firewall.pm b/src/PVE/Firewall.pm
index 54ad48a..4878233 100644
--- a/src/PVE/Firewall.pm
+++ b/src/PVE/Firewall.pm
@@ -1063,7 +1063,7 @@ sub parse_port_name_number_or_range {
     die "too many entries in port list (> 15 numbers)\n"
        if $count > 15;
 
-    return $count;
+    return (scalar(@elements) > 1);
 }
 
 PVE::JSONSchema::register_format('pve-fw-sport-spec', 
\&pve_fw_verify_sport_spec);
@@ -1885,14 +1885,14 @@ sub ipt_rule_to_cmds {
        if (my $proto = $rule->{proto}) {
            push @match, "-p $proto";
 
-           my $nbdport = defined($rule->{dport}) ? 
parse_port_name_number_or_range($rule->{dport}, 1) : 0;
-           my $nbsport = defined($rule->{sport}) ? 
parse_port_name_number_or_range($rule->{sport}, 0) : 0;
+           my $multidport = defined($rule->{dport}) && 
parse_port_name_number_or_range($rule->{dport}, 1);
+           my $multisport = defined($rule->{sport}) && 
parse_port_name_number_or_range($rule->{sport}, 0);
 
            # 0 = no multiport
            # 1 = multiport with different src and dst port ranges
            # 2 = multiport with identical port ranges
-           my $multiport = ($nbdport > 1) || ($nbsport > 1);
-           $multiport++ if $multiport && ($rule->{dport} eq $rule->{sport});
+           my $multiport = ($multidport || $multisport) ? 1 : 0;
+           $multiport++ if $multidport && $multisport && $rule->{dport} eq 
$rule->{sport};
 
            if ($rule->{dport}) {
                if ($proto eq 'icmp') {
-- 
2.11.0


_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to