Fix parsing of multi-line rules

This commit is contained in:
Jamie Cameron
2018-04-24 22:22:10 -07:00
parent 946a11c080
commit 99bbc180eb

View File

@@ -39,20 +39,27 @@ if ($?) {
&error("Failed to list zones : $out");
}
my $default_zone = backquote_command(
"$config{'firewall_cmd'} --get-default-zone</dev/null 2>&1");
"$config{'firewall_cmd'} --get-default-zone </dev/null 2>&1");
chomp($default_zone);
my $zone;
my $lo;
foreach my $l (split(/\r?\n/, $out)) {
if ($l =~ /^(\S+)(\s+\(.*\))?/) {
# New zone
$zone = { 'name' => $1,
'default' => $default_zone eq $1 ? 1 : 0 };
$lo = undef;
push(@rv, $zone);
}
elsif ($l =~ /^\s+(\S+):\s*(.*)/ && $zone) {
elsif ($l =~ /^ (\S+):\s*(.*)/ && $zone) {
# Option in some zone
$lo = $1;
$zone->{$1} = [ split(/\s+/, $2) ];
}
elsif ($l =~ /^\t(\S.*)/ && $zone && $lo) {
# Continued option
push(@{$zone->{$lo}}, split(/\s+/, $1));
}
}
return @rv;
}