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;
}
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} = [ ];
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;
$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 ($$$) {
}
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 () {
}
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;