fix CT rule generation with ipfilter set
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Tue, 28 May 2019 06:06:39 +0000 (08:06 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Tue, 28 May 2019 06:15:43 +0000 (08:15 +0200)
commit 255698f65192e736708f123d380bbed2aa8c3eac tried to prevent an
error from happening but wasn't to well thought out, perl's operator
precedence was overlooked.
The commit resulted effectively in:
if (my $ip = ($net->{ip} && $vmfw_conf->{options}->{ipfilter})) ...

But intended was:
if (defined(my $ip = $net->{ip}) && $vmfw_conf->{options}->{ipfilter}) ...

First one makes $ip always boolean true (1 in perl) if the if branch
is hit, and the seconds really has then the $ip value in it..

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
src/PVE/Firewall.pm

index abcc1e8..b08cea5 100644 (file)
@@ -3782,7 +3782,7 @@ sub compile_ebtables_filter {
                        push(@$arpfilter, $ip);
                    }
                }
-               if (my $ip = $net->{ip} && $vmfw_conf->{options}->{ipfilter}) {
+               if (defined(my $ip = $net->{ip}) && $vmfw_conf->{options}->{ipfilter}) {
                    # ebtables changes this to a .0/MASK network but we just
                    # want the address here, no network - see #2193
                    $ip =~ s|/(\d+)$||;