From: Dietmar Maurer Date: Thu, 27 Feb 2014 06:23:42 +0000 (+0100) Subject: correctly apply macros X-Git-Url: https://git.proxmox.com/?p=pve-firewall.git;a=commitdiff_plain;h=faf7be7e9f130d6fc1b01cafe926ed971203ceea correctly apply macros Allow to set additional parameters if they do not conflict with macros settings. --- diff --git a/PVE/Firewall.pm b/PVE/Firewall.pm index 1a74652..8cd8a1b 100644 --- a/PVE/Firewall.pm +++ b/PVE/Firewall.pm @@ -1079,19 +1079,33 @@ sub parse_fw_rule { if ($macro) { foreach my $templ (@$macro) { my $rule = {}; + my $param_used = {}; foreach my $k (keys %$templ) { my $v = $templ->{$k}; if ($v eq 'PARAM') { $v = $param->{$k}; + $param_used->{$k} = 1; } elsif ($v eq 'DEST') { $v = $param->{dest}; + $param_used->{dest} = 1; } elsif ($v eq 'SOURCE') { $v = $param->{source}; + $param_used->{source} = 1; } die "missing parameter '$k' in macro '$macro_name'\n" if !defined($v); $rule->{$k} = $v; } + foreach my $k (keys %$param) { + next if !defined($param->{$k}); + next if $param_used->{$k}; + if (defined($rule->{$k})) { + die "parameter '$k' already define in macro (value = '$rule->{$k}')\n" + if $rule->{$k} ne $param->{$k}; + } else { + $rule->{$k} = $param->{$k}; + } + } push @$rules, $rule; } } else {