close ()
end
- fun saveNamed (kind, soa : soa, masterIp) node =
+ fun saveNamed (kind, soa : soa, masterIp, slaveIps) node =
if dom = "localhost" then
()
else let
in
write "\nzone \"";
writeDom ();
- write "\" IN {\n\ttype ";
+ write "\" {\n\ttype ";
write kind;
write ";\n\tfile \"";
write Config.Bind.zonePath_real;
writeDom ();
write ".zone\";\n";
case kind of
- "master" => write "\tallow-update { none; };\n"
+ "master" => (write "\tallow-transfer {\n";
+ app (fn ip => (write "\t\t";
+ write ip;
+ write ";\n")) slaveIps;
+ write "\t};\n")
| _ => (write "\tmasters { ";
write masterIp;
write "; };\n");
let
val masterIp =
case #master dns of
- InternalMaster node => valOf (SM.find (nodeMap, node))
+ InternalMaster node => nodeIp node
| ExternalMaster ip => ip
+
+ val slaveIps = map nodeIp (#slaves dns)
in
app (saveSoa ("slave", #soa dns)) (#slaves dns);
- app (saveNamed ("slave", #soa dns, masterIp)) (#slaves dns);
+ app (saveNamed ("slave", #soa dns, masterIp, slaveIps)) (#slaves dns);
case #master dns of
InternalMaster node =>
(masterNode := SOME node;
saveSoa ("master", #soa dns) node;
- saveNamed ("master", #soa dns, masterIp) node)
+ saveNamed ("master", #soa dns, masterIp, slaveIps) node)
| _ => masterNode := NONE;
!befores dom
end