-sub domain_canon ($) {
- local ($_) = @_;
- s/(.)\.$/$1/;
- die "domain $_ ?" unless m/^[0-9a-z]/i;
- return lc $_;
-}
-
-__DATA__
-
-
-
-
-sub lookup1 ($$) {
- my ($type,$domain) = @_;
- my (@result)= lookup($type,$domain);
- @result==1 or die "$0: lookup -t$type $domain gave more than one RR\n";
- return $result[0];
-}
-
-sub check () {
- return unless $check;
- eval {
- $soa= lookup1('soa',$zone);
- $soa_origin=$soa; $soa_origin =~ s/ .*//;
- $soa_origin_addr= lookup1('a',$soa_origin);
-
- @zone_ns= lookup('ns-',$zone);
-
- @ok_sources= ($soa_origin_addr);
- $ok_sources_descr= "SOA ORIGIN $soa_origin [$soa_origin_addr]";
-
- if ($style eq 'unoff' || $style eq 'backup') {
- for $zone_ns (@zone_ns) {
- @zone_ns_addrs= lookup('a',$zone_ns);
- push @ok_sources, @zone_ns_addrs;
- $ok_sources_descr.= ", NS $zone_ns [@zone_ns_addrs]";
- }
- }
-
- for $server (@servers) {
- grep { $server eq $_ } @ok_sources
- or warn "secondarying from $server which is not ".
- "$ok_sources_desc\n";
- }
-
- if ($style eq 'secondary') {
- grep { $zone_ns=$_, grep { $myname eq $_ } @mynames } @zone_n
- or warn "supposedly published secondary but we ".
- "(@mynames) are not published ($@zone_ns)\n";
- }
- }
- check_after_eval();
-
-
-
-# $superzone= $zone; $superzone =~ s/^[^\.]+\.//;
-# @super_ns= lookup('ns-',$zone);
- }
-
- eval {
-
- for $super_ns (@super_ns) {
- @deleg_ns= ();
- open DIG, "dig @$super_ns. -t ns +norecurse $zone."
- or die "$0: fork for dig:\n $!\n";
- while (<DIG>) {
-
-
- split /\n/, lookup("
-
- case "$style" in
- secondary|backup)
- if [ $meadvert = 0 ]
- then
- warning "$myname unlisted NS $nsnames"
- fi
- ;;
- unoff)
- if $meadvert = 0
- then
- warning "$myname advertised NS $nsnames"
- fi
- ;;
- esac
-
- addrs=''
- for ns in $names
- do
- set -e; a="`host -t a \"$ns\".`"; set +e
- taddrs="`echo \" $a\" | expand | sed -n '
- 1s/^ //
- s/^[^ ][^ ]* *A *\([0-9][.0-9]*\)/\1/p
- '`"
- equlines "A $ns" "$a" "$taddrs"
- addrs="$addrs $taddrs"
- done
- fi
-
- cat <<END
-zone "$zone" {
- type slave;
- file "$file";
- masters {
-END
- for server in $servers
- do
- echo " $server;"
- if $check
- then
- notfound=1
- for addr in $addrs
- do
- if [ "x$addr" = "x$server" ]
- then
- notfound=0
- fi
- done
- if $notfound
- then
- warning "server $server? but $rectype $names" $addrs
- fi
- fi
- done
- cat <<END
- };
-};
-END
- hostfirstwarn=1
- if $hostdelg
- then
- checkhostout -C
- fi
- if $hostzone
- then
- checkhostout -val localhost
- fi
-done
-endfile
-
-
-chdir "$base/primary" or die "$0: chdir $base/primary:\n $!";
-beginfile('primary.zones');
-
-for $f (<*_db>) {
- $zone= $f; $zone =~ s/_db$//;
-
-
-for f in $zones
-do
- zone="`echo $f | sed -e 's/_db$//'`"
-END
-done
-endfile
-
-
-
-sub beginfile ($) {
- $currentfile= $_[0];
- $currentfile_opened= $install ? "$conf/$currentfile.new" : "/dev/null";
- open CFF, "> $toopen" or die "$0: begin $currentfile_opened:\n $!\n";
-}
-
-endfile () {
- close CFF or die "$0: close $currentfile_opened:\n $!\n";
- push @files, $currentfile;
-}
-
-sub installfiles () {
- return unless $install;
- chdir $conf or die "$0: chdir $conf:\n $!\n";
- for $f (@files) {
- rename "$f.new", $f or die "$0: install new $f:\n $!\n";
- }
-}
-
-warning () {
- echo >&2 "$zone $style: $*"
- warnings=$[$warnings+1]
-}
-
-equlines () {
- if [ "x`echo \" $2\" | wc -l`" != "x`echo \" $3\" | wc -l`" ]
- then
- warning "$1 >$2|$3<"
- fi
-}
-
-checkhostout () {
- set +e
- hostout="`host $1 \"$zone\" 2>&1 >/dev/null $2 | egrep -v \
-'^ \!\!\! .* SOA primary .* is not advertised via NS$'`"
- set -e
- if [ "x$hostout" = x ]; then return; fi
- if $hostfirstwarn
- then
- warning "warnings from host:"
- hostfirstwarn=0
- fi
- echo >&2 "$hostout"
-}
-
-progress () {
- if $progress
- then
- echo -n "$zone $style " >&2
- echo -ne '\r' >&2
- fi