new method iptables_chain_digest() to compute digest
authorDietmar Maurer <dietmar@proxmox.com>
Mon, 31 Mar 2014 09:52:57 +0000 (11:52 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Mon, 31 Mar 2014 09:52:57 +0000 (11:52 +0200)
Note: My previous commit introcuded a bug, using ipset_chain_digest()
for the iptables ruleset - this is a fix for that.

src/PVE/Firewall.pm

index 834acba..97b15b0 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};