$etcfile= "/etc/bind/chiark-conf-gen.zones";
$where= '<built-in>';
$debug= 0;
-$needglue= 1;
+$needglue= 2;
$localonly= 0;
$verbosity= 1;
last if m/^$/;
if (m/^(yes|no|force)$/) { m/^./; $mode= $&; }
elsif (m/^config$/) { $etcfile= loarg(); $where= '--config option'; }
- elsif (m/^glueless$/) { $needglue=0; }
+ elsif (m/^glueless$/) { $needglue--; }
elsif (m/^localonly$/) { $localonly=1; }
elsif (m/^quiet$/) { $verbosity=0; }
elsif (m/^verbose$/) { $verbosity=2; }
if (s/^[ynf]//) { $mode=$&; }
elsif (s/^C//) { $etcfile= soarg(); $where= '-C option'; }
elsif (s/^D//) { $debug++; }
- elsif (s/^g//) { $needglue=0; }
+ elsif (s/^g//) { $needglue--; }
elsif (s/^l//) { $localonly=1; }
elsif (s/^q//) { $verbosity=0; }
elsif (s/^v//) { $verbosity=2; }
sub loarg() { usageerr("missing option value") if !@ARGV; return shift @ARGV; }
sub soarg() { my ($rv); $rv=$_; $_=''; return length $rv ? $rv : loarg(); }
+usageerr("-g may be specified at most twice") if $needglue<0;
+usageerr("-D may be specified at most twice") if $debug>2;
usageerr("must specify either -f|-y|-n or zones (and not both)")
if !!$mode == !!@ARGV;
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(%addr_is_ok);
+use vars qw(%addr_is_ok %gluelesswarned);
use vars qw(@to_check); # ($addr,$whyask,$is_auth,$glueless_ok, ...)
use vars qw(@to_check_soa); # ($addr,$whyask, ...)
}
sub zone_reset() {
- %delgs= %auths= %glue= %soas= %addr_is_ok= ();
+ %delgs= %auths= %glue= %soas= %gluelesswarned= %addr_is_ok= ();
@to_check= @to_check_soa= ();
}
@glue= @{ $s2g{$s} };
if (!@glue) {
zone_warning("glueless NS $s, from $ww")
- unless $glueless_ok || !$needglue;
+ unless $glueless_ok || !$needglue ||
+ ($needglue<=1 && $gluelesswarned{$s}++);
next;
}
$glue= join ' ', sort @glue;
.BR -DD .)
.TP
.BR \-g | \-\-glueless
-Do not warn about glueless referrals. Not recommended. Note that
-glueless referrals usually cause extra delays looking up names, and
-can make lookups fail even if in theory they could succeed. There is
-no generally agreed convention or standard for avoiding circular
-glueless situations such as
+Warn only once about a glueless referral for each zone and server,
+rather than once for each parent which gave out a referral without
+glue.
+
+When repeated, do not warn about glueless referrals at all. Not
+recommended. Note that glueless referrals usually cause extra delays
+looking up names, and can make lookups fail even if in theory they
+could succeed. There is no generally agreed convention or standard
+for avoiding circular glueless situations such as
.br
.B example.com NS ns0.example.net.uk
.br