$slave_prefix= '';
$slave_suffix= '';
-use vars qw(@self_ns @self_soa @self_addr @forbid_addr);
-@self_ns= @self_soa= @self_addr= @forbid_addr= ();
+use vars qw(@self_ns @self_soa @self_addr @forbid_addr @conv_glueless);
+@self_ns= @self_soa= @self_addr= @forbid_addr= @conv_glueless= ();
use vars qw(%zone_cfg @zone_cfg_list);
%zone_cfg= ();
@self= split /\s+/, $2;
@self_ns= @self if $1 ne '-soa';
@self_soa= @self if $1 ne '-ns';
+ } elsif (m/^serverless\-glueless\s+(\S.*\S)/) {
+ @conv_glueless= split /\s+/, $1;
} elsif (m/^self\-addr\s+([0-9. \t]+)/) {
@self_addr= split /\s+/, $1;
} elsif (m/^forbid\-addr(?:\s+([0-9. \t]+))?/) {
if (!@glue) {
zone_warning("glueless NS $s,".($needglue<=1 ? " (eg)" : ""),
$ww)
- unless $glueless_ok || !$needglue;
+ unless $glueless_ok || !$needglue ||
+ grep { has_suffix_of($s,".$_"); } @conv_glueless;
next;
}
$glue= join ' ', sort @glue;
my ($addr,$name,$ww,$wwq,$is_soa) = @_;
$addr_is_ok{$addr}= "$name ($wwq)"
if $is_soa || $cfg->{'s'} =~ m/u/;
+ foreach $cg (@conv_glueless) {
+ next unless has_suffix_of(".$s",".$cg");
+ zone_warning("nameserver [$addr] $name in serverless-glueless".
+ " namespace area $cg",
+ $ww);
+ }
zone_warning("configured as stealth but we [$addr] $name are published",
$ww)
if $cfg->{'s'} =~ m/u/ && grep { $_ eq $addr } @self_addr;
print "D $_[0]\n";
}
+sub has_suffix_of ($$) {
+ my ($whole,$suffix);
+ return 0 if length $while < length $suffix;
+ return 0 if substr($whole, length($whole) - length($suffix)) ne $suffix;
+ return 1;
+}
+
sub lookup ($$$) {
my ($domain,$type,$okrcodes) = @_;
my ($c,$h,@result);