From c8b816f71486a089933290816c15317b5d5db8cb Mon Sep 17 00:00:00 2001 From: ianmdlvl Date: Mon, 31 Dec 2001 15:16:56 +0000 Subject: [PATCH] Can suppress multiple glue warnings --- scripts/named-conf | 15 +++++++++------ scripts/named-conf.8 | 14 +++++++++----- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/scripts/named-conf b/scripts/named-conf index eefadcd..d863dfc 100755 --- a/scripts/named-conf +++ b/scripts/named-conf @@ -14,7 +14,7 @@ $mode= ''; $etcfile= "/etc/bind/chiark-conf-gen.zones"; $where= ''; $debug= 0; -$needglue= 1; +$needglue= 2; $localonly= 0; $verbosity= 1; @@ -26,7 +26,7 @@ while (@ARGV && $ARGV[0] =~ m/^\-/) { 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; } @@ -38,7 +38,7 @@ while (@ARGV && $ARGV[0] =~ m/^\-/) { 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; } @@ -50,6 +50,8 @@ while (@ARGV && $ARGV[0] =~ m/^\-/) { 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; @@ -252,7 +254,7 @@ 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(%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, ...) @@ -264,7 +266,7 @@ sub zone_check_full () { } sub zone_reset() { - %delgs= %auths= %glue= %soas= %addr_is_ok= (); + %delgs= %auths= %glue= %soas= %gluelesswarned= %addr_is_ok= (); @to_check= @to_check_soa= (); } @@ -335,7 +337,8 @@ sub zone_check_nsrrset ($$$$) { @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; diff --git a/scripts/named-conf.8 b/scripts/named-conf.8 index 864324e..89833a1 100644 --- a/scripts/named-conf.8 +++ b/scripts/named-conf.8 @@ -59,11 +59,15 @@ increase the debugging level. (Maximum is .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 -- 2.30.2