From: ianmdlvl Date: Fri, 4 Jan 2002 23:13:08 +0000 (+0000) Subject: rationalise wrong soa warnings X-Git-Tag: debian_version_2_2_0~20 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=chiark-utils.git;a=commitdiff_plain;h=d24e07695fa0cab730d0e7fa89fd502b3e784737 rationalise wrong soa warnings --- diff --git a/scripts/named-conf b/scripts/named-conf index a54db82..6117dcb 100755 --- a/scripts/named-conf +++ b/scripts/named-conf @@ -306,14 +306,12 @@ sub zone_warning ($$) { my ($w,$o) = @_; my ($wk); - $wk= $w; - $wk =~ s/,.*// if !$repeat; - return 0 if $warned{$w}{$wk}++; + return 0 if !$repeat && $warned{$w}++; $w =~ s/\n$//; $w =~ s,\n, // ,g; - print STDERR "$zone: warning: $w\n" or die $!; + print STDERR "$zone: warning: $w ($o)\n" or die $!; $warnings++; return 1; } @@ -378,8 +376,8 @@ sub zone_investigate() { sub zone_check_nsrrset ($$$$) { my ($uaddr,$wa, $is_auth, $glueless_ok) = @_; my (@s, $s, %s2g, @glue, $glue, $delgs_or_auths, $wwn, $ww); - verbose("checking delegation by $ww"); $ww= "[$uaddr] $wa"; + verbose("checking delegation by $ww"); dig(sub { if ($dig_type eq 'ns' && $dig_owner eq $zone) { $s2g{lc $dig_rdata} = [ ]; @@ -395,14 +393,14 @@ sub zone_check_nsrrset ($$$$) { zone_warning("unable to find NS RRset at [$uaddr]", $wa); return; } elsif (keys %s2g == 1) { - zone_warning("only one nameserver",$ww); + zone_warning("only one nameserver ". (join '', keys %s2g), + $ww); } @s= sort keys %s2g; foreach $s (@s) { @glue= @{ $s2g{$s} }; if (!@glue) { - zone_warning("glueless NS $s,".($needglue<=1 ? " (eg)" : ""), - $ww) + zone_warning("glueless NS $s", $ww) unless $glueless_ok || !$needglue || grep { has_suffix_of($s,".$_"); } @conv_glueless; next; @@ -438,13 +436,20 @@ sub zone_server_addr ($$$$$) { $addr_is_self= grep { $_ eq $addr } @{ $cfg->{'self_addr'} }; if ($name_is_self && !$addr_is_self) { - zone_warning("our name $name with wrong address [$addr]",$ww); - } elsif (!$name_is_self && $addr_is_self) { - zone_warning(($is_soa ? "SOA ORIGIN maps to" : "referral to"). - " us [$addr] with wrong name $name", + zone_warning("our $name supplied with wrong address [$addr]", $ww); + } + if (!$name_is_self && $addr_is_self) { + zone_warning("we [$addr] are named in ". + ($is_soa ? "SOA" : "NS"). + " by wrong name $name", $ww); } - $delg_to_us=1 if $name_is_self; + if (!$name_is_self && !$addr_is_self && + $is_soa && $cfg->{'s'} =~ m/p/) { + zone_warning("SOA ORIGIN $name is not us (". + (join ' ', @{ $cfg->{'self_soa'} }).")", $ww); + } + $delg_to_us=1 if $name_is_self || $addr_is_self; } sub zone_check_soa ($$$) { @@ -485,17 +490,6 @@ sub zone_consistency() { } zone_consistency_set("SOA ORIGIN and SERIAL",\%soas); $self_soa= $cfg->{'self_soa'}; - if ($cfg->{'s'} =~ m/p/) { - foreach $org_ser (keys %soas) { - $org_ser =~ m/^(\S+) \d+$/ or die "$org_ser ?"; - $origin= $1; - next if grep { $_ eq $origin } @$self_soa; - foreach $wa (@{ $soas{$org_ser} }) { - zone_warning("SOA ORIGIN $origin is not our name (@$self_soa)", - $wa); - } - } - } } sub zone_servers_ok () { @@ -633,7 +627,7 @@ sub debug_trace ($) { } sub has_suffix_of ($$) { - my ($whole,$suffix); + my ($whole,$suffix) = @_; return 0 if length $whole < length $suffix; return 0 if substr($whole, length($whole) - length($suffix)) ne $suffix; return 1;