chiark / gitweb /
Bugfixes.
[chiark-utils.git] / scripts / named-conf
index f6c518b4f7d3161f632a67cef5996783ccb63419..047e9ea2da5c1e3982e149aa2ce675418f4aaa01 100755 (executable)
@@ -177,6 +177,8 @@ sub read_config ($) {
            zone_conf($2,'stealth','u',$1,'',split /\s+/, $3);
        } elsif (m/^slave\-dir\s+(\S+)(?:(?:\s+(\S+))\s+(\S+))?$/) {
            ($slave_dir, $slave_prefix, $slave_suffix) = (qualify($1),$2,$3);
+           $slave_prefix='' if !defined $slave_prefix;
+           $slave_suffix='' if !defined $slave_suffix;
        } elsif (m/^output\s+bind8\+(\S+)$/) {
            cfg_fail("default output may not apply to only some zones")
                if @zone_cfg_list && length $default_output;
@@ -270,7 +272,8 @@ sub process_zones (@) {
            };
            zone_warning("checks failed: $@") if length $@;
        }
-       zone_output() if $install;
+       $output_contents{$$cfg{'output'}} .= zone_output()
+           if $install;
     }
     print STDERR "$quis: $warnings warnings\n" or die $!
        if $warnings;
@@ -521,16 +524,20 @@ sub zone_server_simple ($$$) {
 #-------------------- outputting
 
 sub zone_output () {
-    $output_contents{$$cfg{'output'}}.=
-       sprintf(<<'END',
-zone "%s" {
-    type %s;
-    file "%s";
-};
-END
-               $zone,
-               $$cfg{'s'} =~ m/p/ ? 'master' : 'slave',
-               $$cfg{'file'});
+    my ($o,$m);
+
+    $o= "zone \"$zone\" {\n";
+    if ($$cfg{'s'} =~ m/p/) {
+       $o.= "    type master;\n";
+    } else {
+       $o.= "    type slave;\n".
+            "    masters {\n";
+       foreach $m (@{ $$cfg{'servers'} }) { $o.= "        $m;\n"; }
+       $o.= "    };\n";
+    }
+    $o.= "    file \"$$cfg{'file'}\";\n";
+    $o.= "};\n";
+    return $o;
 }
 
 sub output_files () {