]> git.proxmox.com Git - pve-firewall.git/commitdiff
code cleanup - introcduce new method resolve_alias
authorDietmar Maurer <dietmar@proxmox.com>
Fri, 30 May 2014 10:24:40 +0000 (12:24 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Fri, 30 May 2014 10:24:40 +0000 (12:24 +0200)
src/PVE/API2/Firewall/IPSet.pm
src/PVE/Firewall.pm

index 6c7ab5e6c681fdf76aa34122e5e5bf4b40dd674f..24a45ae9a1a046429d7ae59a65712b371ad26270 100644 (file)
@@ -145,17 +145,6 @@ sub register_delete_ipset {
        }});
 }
 
-my $verify_alias_exists = sub {
-    my ($cluster_conf, $fw_conf, $cidr) = @_;
-
-    if ($cidr !~ m/^\d/) {
-       my $alias = lc($cidr);
-       die "no such alias '$cidr'\n"
-           if !(($cluster_conf && $cluster_conf->{aliases}->{$alias}) || 
-                ($fw_conf && $fw_conf->{aliases}->{$alias}));
-    }
-};
-
 sub register_create_ip {
     my ($class) = @_;
 
@@ -189,7 +178,8 @@ sub register_create_ip {
                    if $entry->{cidr} eq $cidr;
            }
 
-           &$verify_alias_exists($cluster_conf, $fw_conf, $cidr);
+           # make sure alias exists (if $cidr is an alias)
+           PVE::Firewall::resolve_alias($cluster_conf, $fw_conf, $cidr); 
 
            my $data = { cidr => $cidr };
 
index 6adf487b0c168a50f709fc971e008ed0064c3b84..66f4b91a25aaf2f2b733dccf0a4edd9c143efb9d 100644 (file)
@@ -2116,6 +2116,21 @@ sub parse_clusterfw_option {
     return ($opt, $value);
 }
 
+sub resolve_alias {
+    my ($clusterfw_conf, $fw_conf, $cidr) = @_;
+
+    if ($cidr !~ m/^\d/) {
+       my $alias = lc($cidr);
+       my $e = $fw_conf->{aliases}->{$alias} if $fw_conf;
+       $e = $clusterfw_conf->{aliases}->{$alias} if !$e && $clusterfw_conf;
+       return $e->{cidr} if $e;
+       
+       die "no such alias '$cidr'\n";
+    }
+
+    return $cidr;
+}
+
 sub parse_alias {
     my ($line) = @_;
 
@@ -2259,7 +2274,6 @@ sub generic_fw_config_parser {
 
            if($cidr !~ m/^${ip_alias_pattern}$/) {
                $cidr =~ s|/32$||;
-
                eval { pve_verify_ipv4_or_cidr($cidr); };
                if (my $err = $@) {
                    warn "$prefix: $cidr - $err";
@@ -2608,20 +2622,11 @@ sub generate_ipset {
     # remove duplicates
     my $nethash = {};
     foreach my $entry (@$options) {
-       my $cidr = $entry->{cidr};
-       if ($cidr =~ m/^${ip_alias_pattern}$/) {
-           my $alias = lc($cidr);
-           my $e = $fw_conf->{aliases}->{$alias} if $fw_conf;
-           $e = $clusterfw_conf->{aliases}->{$alias} if !$e && $clusterfw_conf;
-           if ($e) {
-               $entry->{cidr} = $e->{cidr};
-               $nethash->{$entry->{cidr}} = $entry;
-           } else {
-               warn "no such alias '$cidr'\n";
-           }
-       } else {
-           $nethash->{$entry->{cidr}} = $entry;
-       }
+       eval {
+           my $cidr = resolve_alias($clusterfw_conf, $fw_conf, $entry->{cidr});
+           $nethash->{$cidr} = { cidr => $cidr, nomatch => $entry->{nomatch} };
+       };
+       warn $@ if $@;
     }
 
     foreach my $cidr (sort keys %$nethash) {