]> git.proxmox.com Git - pve-firewall.git/blobdiff - src/PVE/Firewall.pm
new method iptables_chain_digest() to compute digest
[pve-firewall.git] / src / PVE / Firewall.pm
index 126717d8585fcb8dc0e3a599cb4fc59781358bd1..97b15b064db06fc2d52bb55ef5f74bfdfe9d5bb2 100644 (file)
@@ -869,6 +869,15 @@ sub iptables_get_chains {
     return wantarray ? ($res, $hooks) : $res;
 }
 
+sub iptables_chain_digest {
+    my ($rules) = @_;
+    my $digest = Digest::SHA->new('sha1');
+    foreach my $rule (@$rules) { # order is important
+       $digest->add($rule);
+    }
+    return $digest->b64digest;
+}
+
 sub ipset_chain_digest {
     my ($rules) = @_;
     my $digest = Digest::SHA->new('sha1');
@@ -2261,7 +2270,13 @@ sub get_ruleset_status {
     my $statushash = {};
 
     foreach my $chain (sort keys %$ruleset) {
-       my $sig = ipset_chain_digest($ruleset->{$chain});
+       my $sig;
+       if ($ipset) {
+           $sig = ipset_chain_digest($ruleset->{$chain});
+       } else {
+           $sig = iptables_chain_digest($ruleset->{$chain});
+       }
+
        $statushash->{$chain}->{sig} = $sig;
 
        my $oldsig = $active_chains->{$chain};
@@ -2299,7 +2314,7 @@ sub print_sig_rule {
     return "-A $chain -m comment --comment \"PVESIG:$sig\"\n";
 }
 
-sub get_rulset_cmdlist {
+sub get_ruleset_cmdlist {
     my ($ruleset, $verbose) = @_;
 
     my $cmdlist = "*filter\n"; # we pass this to iptables-restore;
@@ -2420,7 +2435,7 @@ sub apply_ruleset {
 
     my $ipsetcmdlist = get_ipset_cmdlist($ipset_ruleset, $verbose);
 
-    my $cmdlist = get_rulset_cmdlist($ruleset, $verbose);
+    my $cmdlist = get_ruleset_cmdlist($ruleset, $verbose);
 
     print $ipsetcmdlist if $verbose;