ruleset_generate_rule: update all or nothing
authorDietmar Maurer <dietmar@proxmox.com>
Tue, 22 Apr 2014 06:53:48 +0000 (08:53 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Tue, 22 Apr 2014 06:53:48 +0000 (08:53 +0200)
And use 'warn' instead of 'die' if alias does not exists.

src/PVE/Firewall.pm

index dcd6639..8c8db82 100644 (file)
@@ -1309,11 +1309,18 @@ sub ruleset_generate_rule {
        $rules = [ $rule ];
     }
 
+    # update all or nothing
+
+    my @cmds = ();
     foreach my $tmp (@$rules) {
        if (my $cmdstr = ruleset_generate_cmdstr($ruleset, $chain, $tmp, $actions, $goto, $cluster_conf)) {
-           ruleset_addrule($ruleset, $chain, $cmdstr);
+           push @cmds, $cmdstr;
        }
     }
+
+    foreach my $cmdstr (@cmds) {
+       ruleset_addrule($ruleset, $chain, $cmdstr);
+    }
 }
 
 sub ruleset_generate_rule_insert {
@@ -2415,9 +2422,12 @@ sub generate_ipset {
     my $nethash = {};
     foreach my $entry (@$options) {
        my $cidr = $entry->{cidr};
-       if ($cidr =~ m/^${ip_alias_pattern}$/){
-           die "no such alias $cidr" if !$aliases->{$cidr};
-           $entry->{cidr} = $aliases->{$cidr};
+       if ($cidr =~ m/^${ip_alias_pattern}$/) {
+           if ($aliases->{$cidr}) {
+               $entry->{cidr} = $aliases->{$cidr};
+           } else {
+               warn "no such alias '$cidr'\n" if !$aliases->{$cidr};
+           }
        }
        $nethash->{$entry->{cidr}} = $entry;
     }