]> git.proxmox.com Git - pve-firewall.git/blobdiff - src/PVE/Firewall.pm
bump version to 5.0.7
[pve-firewall.git] / src / PVE / Firewall.pm
index 0abfeccffc94cec940760e69a894e392dc33f151..09544ba71c090ed0d8f609b8115d7d116daf252e 100644 (file)
@@ -4692,13 +4692,34 @@ sub is_nftables {
     return $host_conf->{options}->{nftables};
 }
 
+my sub update_force_nftables_disable_flag {
+    my ($cluster_firewall_enabled, $is_nftables) = @_;
+
+    # This is checked in proxmox-firewall to avoid log-spam due to failing to parse the config
+    my $FORCE_NFT_DISABLE_FLAG_FILE = "/run/proxmox-nftables-firewall-force-disable";
+
+    if (!($cluster_firewall_enabled && $is_nftables)) {
+       if (! -e $FORCE_NFT_DISABLE_FLAG_FILE) {
+           open(my $_fh, '>', $FORCE_NFT_DISABLE_FLAG_FILE)
+               or warn "failed to create flag file '$FORCE_NFT_DISABLE_FLAG_FILE' – $!\n";
+       }
+    } else {
+       unlink($FORCE_NFT_DISABLE_FLAG_FILE)
+           or $!{ENOENT} or warn "failed to unlink flag file '$FORCE_NFT_DISABLE_FLAG_FILE' - $!\n";
+    }
+}
+
 sub is_enabled_and_not_nftables {
     my ($cluster_conf, $host_conf) = @_;
 
     $cluster_conf = load_clusterfw_conf() if !defined($cluster_conf);
     $host_conf = load_hostfw_conf($cluster_conf) if !defined($host_conf);
 
-    return $cluster_conf->{options}->{enable} && !is_nftables($cluster_conf, $host_conf);
+    my $is_nftables = is_nftables($cluster_conf, $host_conf);
+
+    update_force_nftables_disable_flag($cluster_conf->{options}->{enable}, $is_nftables);
+
+    return $cluster_conf->{options}->{enable} && !$is_nftables;
 }
 
 sub init {
@@ -4718,7 +4739,6 @@ sub update {
            return;
        }
 
-
        my ($ruleset, $ipset_ruleset, $rulesetv6, $ebtables_ruleset) = compile($cluster_conf, $hostfw_conf);
 
        apply_ruleset($ruleset, $hostfw_conf, $ipset_ruleset, $rulesetv6, $ebtables_ruleset);