From 0de595b9761e31d9275129ea5ab7504d0681f5ab Mon Sep 17 00:00:00 2001 From: ianmdlvl Date: Sat, 5 Jan 2002 00:23:22 +0000 Subject: [PATCH] Bugfixes and diagnostic improvements --- scripts/named-conf | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/scripts/named-conf b/scripts/named-conf index 1bd4792..1f964ed 100755 --- a/scripts/named-conf +++ b/scripts/named-conf @@ -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; -- 2.30.2