]> git.proxmox.com Git - pve-firewall.git/blobdiff - src/PVE/Firewall.pm
implement delete parameter for rule update API
[pve-firewall.git] / src / PVE / Firewall.pm
index 83a9921774fc2354030bf0203ea4b8682022cbae..6d4127e8585917c51c841497959d902a8a8620cd 100644 (file)
@@ -767,12 +767,28 @@ sub add_rule_properties {
     my ($properties) = @_;
 
     foreach my $k (keys %$rule_properties) {
-       $properties->{$k} = $rule_properties->{$k};
+       my $h = $rule_properties->{$k};
+       # copy data, so that we can modify later without side effects
+       foreach my $opt (keys %$h) { $properties->{$k}->{$opt} = $h->{$opt}; }
     }
 
     return $properties;
 }
 
+sub delete_rule_properties {
+    my ($rule, $delete_str) = @_;
+    
+    foreach my $opt (PVE::Tools::split_list($delete_str)) {
+       raise_param_exc({ 'delete' => "no such property ('$opt')"})
+           if !defined($rule_properties->{$opt});
+       raise_param_exc({ 'delete' => "unable to delete required property '$opt'"})
+           if $opt eq 'type' || $opt eq 'action';
+       delete $rule->{$opt};
+    }
+
+    return $rule;
+}
+
 sub copy_rule_data {
     my ($rule, $param) = @_;
 
@@ -952,7 +968,7 @@ sub ruleset_generate_cmdstr {
            die "no such ipset $2" if !$cluster_conf->{ipset}->{$2};
            push @cmd, "-m set --match-set PVEFW-$2 src";
 
-        } elsif ($source =~ m/^(\d+)\.(\d+).(\d+).(\d+)\-(\d+)\.(\d+).(\d+).(\d+)$/){
+        } elsif ($source =~ m/\-/){
            push @cmd, "-m iprange --src-range $source";
 
        } else {