chiark / gitweb /
Bugfixes and diagnostic improvements
authorianmdlvl <ianmdlvl>
Sat, 5 Jan 2002 00:23:22 +0000 (00:23 +0000)
committerianmdlvl <ianmdlvl>
Sat, 5 Jan 2002 00:23:22 +0000 (00:23 +0000)
scripts/named-conf

index 1bd4792..1f964ed 100755 (executable)
@@ -298,7 +298,7 @@ sub process_zones (@) {
 use vars qw(%delgs); # $delgs{$nameserver_list} = [ $whosaidandwhy ]
 use vars qw(%auths); # $auths{$nameserver_list} = [ $whosaidandwhy ]
 use vars qw(%glue);  # $glue{$name}{$addr_list} = [ $whosaidandwhy ]
-use vars qw(%soas);  # $soa{"$origin $serial"} = [ $whosaidandwhy ]
+use vars qw(%soas);  # $soa{"$serial $origin"} = [ $whosaidandwhy ]
 use vars qw(%addr_is_ok %warned);
 use vars qw($delg_to_us);
 use vars qw(@to_check); # ($addr,$whyask,$is_auth,$glueless_ok, ...)
@@ -344,12 +344,14 @@ sub zone_investigate() {
     for (;;) {
        debug_trace("zone $zone superzone $super_zone");
        $super_zone =~ s/^[^.]+\.// or die "no superzone ? ($super_zone)\n";
-       ($rcode,@super_nsnames)= lookup($super_zone,'ns-','06');
+       ($rcode,@super_nsnames)=
+           lookup($super_zone,'ns-','06',"superzone search");
        last if !$rcode;
     }
     for $super_ns (@super_nsnames) {
        $super_ns= lc $super_ns;
-       ($rcode,@super_ns_addrs)= lookup($super_ns,'a','0');
+       ($rcode,@super_ns_addrs)=
+           lookup($super_ns,'a','0',"published nameserver");
        foreach $addr (@super_ns_addrs) {
            push @to_check,
                 $addr,
@@ -469,7 +471,7 @@ sub zone_check_soa ($$$) {
        } elsif ($dig_type eq 'soa' && $dig_owner eq $zone && !$lame) {
            die "several SOAs ? $ww" if defined $origin;
            $got= $dig_rdata;
-           $got =~ m/^(\S+) \d+/ or die "$got ?";
+           $got =~ m/^\d+ (\S+)$/ or die "$got ?";
            $origin= $1;
        }
     },
@@ -477,7 +479,7 @@ sub zone_check_soa ($$$) {
     $lame= 'broken' if !$lame && !defined $origin;
     if ($lame) { zone_warning("$lame server [$uaddr]",$wa); return; }
     push @{ $soas{$got} }, $ww;
-    ($rcode,@soa_addrs)= lookup($origin,'a','0');
+    ($rcode,@soa_addrs)= lookup($origin,'a','0',"SOA ORIGIN");
     $wwn= "SOA ORIGIN from $ww";
     foreach $soa_addr (@soa_addrs) {
        zone_server_addr($soa_addr,$origin,$wwn,"SOA [$uaddr]",1);
@@ -493,7 +495,7 @@ sub zone_consistency() {
     foreach $h (keys %glue) {
        zone_consistency_set("glue for $h", $glue{$h});
     }
-    zone_consistency_set("SOA ORIGIN and SERIAL",\%soas);
+    zone_consistency_set("serial number and/or SOA ORIGIN",\%soas);
     $self_soa= $cfg->{'self_soa'};
 }
 
@@ -539,10 +541,10 @@ sub zone_check_local () {
 sub zone_servers_simplefind () {
     my ($rcode,@nsnames,$ns,@soas,$origin);
 
-    ($rcode,@nsnames)= lookup($zone,'ns-','0');
+    ($rcode,@nsnames)= lookup($zone,'ns-','0',"zone's servers");
     foreach $ns (@nsnames) { zone_server_simple($ns,'NS',0); }
 
-    ($rcode,@soas)= lookup($zone,'soa','0');
+    ($rcode,@soas)= lookup($zone,'soa','0',"SOA ORIGIN");
     die "multiple SOA RRs in set!  @soas ?" if @soas!=1;
     $soas[0] =~ m/^(\S+)\s/ or die "SOA ? $_";
     zone_server_simple(domain_canon($1,"lookup $zone SOA"),'SOA',1);
@@ -551,7 +553,8 @@ sub zone_servers_simplefind () {
 sub zone_server_simple ($$$) {
     my ($name,$ww,$is_soa) = @_;
     my ($rcode,@addrs,$addr);
-    ($rcode,@addrs)= lookup($name,'a','0');
+    ($rcode,@addrs)= lookup($name,'a','0', "server - ".
+                           ($is_soa ? "SOA ORIGIN" : "NS"));
     foreach $addr (@addrs) { zone_server_addr($addr,$name,$ww,$ww,$is_soa); }
 }
 
@@ -640,8 +643,8 @@ sub has_suffix_of ($$) {
     return 1;
 }
 
-sub lookup ($$$) {
-    my ($domain,$type,$okrcodes) = @_;
+sub lookup ($$$$) {
+    my ($domain,$type,$okrcodes,$w) = @_;
     my ($c,$h,@result);
     debug_trace("lookup ==> (->$okrcodes) $domain $type");
     $h= new IO::Handle;
@@ -656,7 +659,7 @@ sub lookup ($$$) {
     $h->error and die "$quis: read from adnshost:\n $!\n";
     chomp @result;
     $!=0; $h->close;
-    die "$quis: lookup -t$type $domain $okrcodes failed $? $! @result\n"
+    die "$quis: lookup -t$type $domain $okrcodes ($w) failed $? $! @result\n"
        if $! or $?&255 or $?>1536 or index($okrcodes,$?>>8)<0;
     debug_trace("lookup <== $? @result");
     return ($?,@result);
@@ -713,7 +716,7 @@ sub dig (&$$$) {
            } elsif ($dig_type eq 'soa') {
                $irdata =~ m/^([-.0-9a-z]+)\s+.*\s+(\d+)(?:\s+\d\w+){4}$/i
                    or die "bad SOA $irdata ?";
-               $dig_rdata= domain_canon($1,$digwhy).' '.$2;
+               $dig_rdata= $2.' '.domain_canon($1,$digwhy);
            } else {
                debug_trace("ignoring uknown RR type $dig_type");
                next;