xref: /minix3/external/bsd/bind/dist/bin/tests/system/dnssec/tests.sh (revision 00b67f09dd46474d133c95011a48590a8e8f94c7)
1*00b67f09SDavid van Moolenbroek#!/bin/sh
2*00b67f09SDavid van Moolenbroek#
3*00b67f09SDavid van Moolenbroek# Copyright (C) 2004-2015  Internet Systems Consortium, Inc. ("ISC")
4*00b67f09SDavid van Moolenbroek# Copyright (C) 2000-2002  Internet Software Consortium.
5*00b67f09SDavid van Moolenbroek#
6*00b67f09SDavid van Moolenbroek# Permission to use, copy, modify, and/or distribute this software for any
7*00b67f09SDavid van Moolenbroek# purpose with or without fee is hereby granted, provided that the above
8*00b67f09SDavid van Moolenbroek# copyright notice and this permission notice appear in all copies.
9*00b67f09SDavid van Moolenbroek#
10*00b67f09SDavid van Moolenbroek# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
11*00b67f09SDavid van Moolenbroek# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
12*00b67f09SDavid van Moolenbroek# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
13*00b67f09SDavid van Moolenbroek# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
14*00b67f09SDavid van Moolenbroek# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
15*00b67f09SDavid van Moolenbroek# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16*00b67f09SDavid van Moolenbroek# PERFORMANCE OF THIS SOFTWARE.
17*00b67f09SDavid van Moolenbroek
18*00b67f09SDavid van MoolenbroekSYSTEMTESTTOP=..
19*00b67f09SDavid van Moolenbroek. $SYSTEMTESTTOP/conf.sh
20*00b67f09SDavid van Moolenbroek
21*00b67f09SDavid van Moolenbroekstatus=0
22*00b67f09SDavid van Moolenbroekn=1
23*00b67f09SDavid van Moolenbroek
24*00b67f09SDavid van Moolenbroekrm -f dig.out.*
25*00b67f09SDavid van Moolenbroek
26*00b67f09SDavid van MoolenbroekDIGOPTS="+tcp +noadd +nosea +nostat +nocmd +dnssec -p 5300"
27*00b67f09SDavid van MoolenbroekDELVOPTS="-a ns1/trusted.conf -p 5300"
28*00b67f09SDavid van Moolenbroek
29*00b67f09SDavid van Moolenbroek# convert private-type records to readable form
30*00b67f09SDavid van Moolenbroekshowprivate () {
31*00b67f09SDavid van Moolenbroek    echo "-- $@ --"
32*00b67f09SDavid van Moolenbroek    $DIG $DIGOPTS +nodnssec +short @$2 -t type65534 $1 | cut -f3 -d' ' |
33*00b67f09SDavid van Moolenbroek        while read record; do
34*00b67f09SDavid van Moolenbroek            $PERL -e 'my $rdata = pack("H*", @ARGV[0]);
35*00b67f09SDavid van Moolenbroek                die "invalid record" unless length($rdata) == 5;
36*00b67f09SDavid van Moolenbroek                my ($alg, $key, $remove, $complete) = unpack("CnCC", $rdata);
37*00b67f09SDavid van Moolenbroek                my $action = "signing";
38*00b67f09SDavid van Moolenbroek                $action = "removing" if $remove;
39*00b67f09SDavid van Moolenbroek                my $state = " (incomplete)";
40*00b67f09SDavid van Moolenbroek                $state = " (complete)" if $complete;
41*00b67f09SDavid van Moolenbroek                print ("$action: alg: $alg, key: $key$state\n");' $record
42*00b67f09SDavid van Moolenbroek        done
43*00b67f09SDavid van Moolenbroek}
44*00b67f09SDavid van Moolenbroek
45*00b67f09SDavid van Moolenbroek# check that signing records are marked as complete
46*00b67f09SDavid van Moolenbroekcheckprivate () {
47*00b67f09SDavid van Moolenbroek    ret=0
48*00b67f09SDavid van Moolenbroek    x=`showprivate "$@"`
49*00b67f09SDavid van Moolenbroek    echo $x | grep incomplete >&- 2>&- && ret=1
50*00b67f09SDavid van Moolenbroek    [ $ret = 1 ] && {
51*00b67f09SDavid van Moolenbroek        echo "$x"
52*00b67f09SDavid van Moolenbroek        echo "I:failed"
53*00b67f09SDavid van Moolenbroek    }
54*00b67f09SDavid van Moolenbroek    return $ret
55*00b67f09SDavid van Moolenbroek}
56*00b67f09SDavid van Moolenbroek
57*00b67f09SDavid van Moolenbroek# check that a zone file is raw format, version 0
58*00b67f09SDavid van Moolenbroekisraw0 () {
59*00b67f09SDavid van Moolenbroek    cat $1 | $PERL -e 'binmode STDIN;
60*00b67f09SDavid van Moolenbroek		      read(STDIN, $input, 8);
61*00b67f09SDavid van Moolenbroek                      ($style, $version) = unpack("NN", $input);
62*00b67f09SDavid van Moolenbroek                      exit 1 if ($style != 2 || $version != 0);'
63*00b67f09SDavid van Moolenbroek    return $?
64*00b67f09SDavid van Moolenbroek}
65*00b67f09SDavid van Moolenbroek
66*00b67f09SDavid van Moolenbroek# check that a zone file is raw format, version 1
67*00b67f09SDavid van Moolenbroekisraw1 () {
68*00b67f09SDavid van Moolenbroek    cat $1 | $PERL -e 'binmode STDIN;
69*00b67f09SDavid van Moolenbroek		      read(STDIN, $input, 8);
70*00b67f09SDavid van Moolenbroek                      ($style, $version) = unpack("NN", $input);
71*00b67f09SDavid van Moolenbroek                      exit 1 if ($style != 2 || $version != 1);'
72*00b67f09SDavid van Moolenbroek    return $?
73*00b67f09SDavid van Moolenbroek}
74*00b67f09SDavid van Moolenbroek
75*00b67f09SDavid van Moolenbroek# strip NS and RRSIG NS from input
76*00b67f09SDavid van Moolenbroekstripns () {
77*00b67f09SDavid van Moolenbroek    awk '($4 == "NS") || ($4 == "RRSIG" && $5 == "NS") { next} { print }' $1
78*00b67f09SDavid van Moolenbroek}
79*00b67f09SDavid van Moolenbroek
80*00b67f09SDavid van Moolenbroek# Check the example. domain
81*00b67f09SDavid van Moolenbroek
82*00b67f09SDavid van Moolenbroekecho "I:checking that zone transfer worked ($n)"
83*00b67f09SDavid van Moolenbroekfor i in 1 2 3 4 5 6 7 8 9
84*00b67f09SDavid van Moolenbroekdo
85*00b67f09SDavid van Moolenbroek	ret=0
86*00b67f09SDavid van Moolenbroek	$DIG $DIGOPTS a.example. @10.53.0.2 a > dig.out.ns2.test$n || ret=1
87*00b67f09SDavid van Moolenbroek	$DIG $DIGOPTS a.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1
88*00b67f09SDavid van Moolenbroek	$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns3.test$n > /dev/null || ret=1
89*00b67f09SDavid van Moolenbroek	[ $ret = 0 ] && break
90*00b67f09SDavid van Moolenbroek	sleep 1
91*00b67f09SDavid van Moolenbroekdone
92*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns3.test$n > /dev/null || ret=1
93*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
94*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
95*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
96*00b67f09SDavid van Moolenbroek
97*00b67f09SDavid van Moolenbroek# test AD bit:
98*00b67f09SDavid van Moolenbroek#  - dig +adflag asks for authentication (ad in response)
99*00b67f09SDavid van Moolenbroekecho "I:checking AD bit asking for validation ($n)"
100*00b67f09SDavid van Moolenbroekret=0
101*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth +noadd +nodnssec +adflag a.example. @10.53.0.2 a > dig.out.ns2.test$n || ret=1
102*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth +noadd +nodnssec +adflag a.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1
103*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1
104*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
105*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
106*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
107*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
108*00b67f09SDavid van Moolenbroek
109*00b67f09SDavid van Moolenbroek# test AD bit:
110*00b67f09SDavid van Moolenbroek#  - dig +noadflag
111*00b67f09SDavid van Moolenbroekecho "I:checking that AD is not set without +adflag or +dnssec ($n)"
112*00b67f09SDavid van Moolenbroekret=0
113*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth +noadd +nodnssec +noadflag a.example. @10.53.0.2 a > dig.out.ns2.test$n || ret=1
114*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth +noadd +nodnssec +noadflag a.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1
115*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1
116*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
117*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
118*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
119*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
120*00b67f09SDavid van Moolenbroekecho "I:checking for AD in authoritative answer ($n)"
121*00b67f09SDavid van Moolenbroekret=0
122*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS a.example. @10.53.0.2 a > dig.out.ns2.test$n || ret=1
123*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns2.test$n > /dev/null && ret=1
124*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
125*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
126*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
127*00b67f09SDavid van Moolenbroek
128*00b67f09SDavid van Moolenbroekecho "I:checking positive validation NSEC ($n)"
129*00b67f09SDavid van Moolenbroekret=0
130*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.example. @10.53.0.2 a > dig.out.ns2.test$n || ret=1
131*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1
132*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1
133*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
134*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
135*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
136*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
137*00b67f09SDavid van Moolenbroek
138*00b67f09SDavid van Moolenbroekif [ -x ${DELV} ] ; then
139*00b67f09SDavid van Moolenbroek   ret=0
140*00b67f09SDavid van Moolenbroek   echo "I:checking postive validation NSEC using dns_client ($n)"
141*00b67f09SDavid van Moolenbroek   $DELV $DELVOPTS @10.53.0.4 a a.example > delv.out$n || ret=1
142*00b67f09SDavid van Moolenbroek   grep "a.example..*10.0.0.1" delv.out$n > /dev/null || ret=1
143*00b67f09SDavid van Moolenbroek   grep "a.example..*.RRSIG.A 3 2 300 .*" delv.out$n > /dev/null || ret=1
144*00b67f09SDavid van Moolenbroek   n=`expr $n + 1`
145*00b67f09SDavid van Moolenbroek   if [ $ret != 0 ]; then echo "I:failed"; fi
146*00b67f09SDavid van Moolenbroek   status=`expr $status + $ret`
147*00b67f09SDavid van Moolenbroekfi
148*00b67f09SDavid van Moolenbroek
149*00b67f09SDavid van Moolenbroekecho "I:checking positive validation NSEC3 ($n)"
150*00b67f09SDavid van Moolenbroekret=0
151*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.nsec3.example. \
152*00b67f09SDavid van Moolenbroek	@10.53.0.3 a > dig.out.ns3.test$n || ret=1
153*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.nsec3.example. \
154*00b67f09SDavid van Moolenbroek	@10.53.0.4 a > dig.out.ns4.test$n || ret=1
155*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
156*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
157*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
158*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
159*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
160*00b67f09SDavid van Moolenbroek
161*00b67f09SDavid van Moolenbroekif [ -x ${DELV} ] ; then
162*00b67f09SDavid van Moolenbroek   ret=0
163*00b67f09SDavid van Moolenbroek   echo "I:checking positive validation NSEC3 using dns_client ($n)"
164*00b67f09SDavid van Moolenbroek   $DELV $DELVOPTS @10.53.0.4 a a.nsec3.example > delv.out$n || ret=1
165*00b67f09SDavid van Moolenbroek   grep "a.nsec3.example..*10.0.0.1" delv.out$n > /dev/null || ret=1
166*00b67f09SDavid van Moolenbroek   grep "a.nsec3.example..*RRSIG.A 7 3 300.*" delv.out$n > /dev/null || ret=1
167*00b67f09SDavid van Moolenbroek   n=`expr $n + 1`
168*00b67f09SDavid van Moolenbroek   if [ $ret != 0 ]; then echo "I:failed"; fi
169*00b67f09SDavid van Moolenbroek   status=`expr $status + $ret`
170*00b67f09SDavid van Moolenbroekfi
171*00b67f09SDavid van Moolenbroek
172*00b67f09SDavid van Moolenbroekecho "I:checking positive validation OPTOUT ($n)"
173*00b67f09SDavid van Moolenbroekret=0
174*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.optout.example. \
175*00b67f09SDavid van Moolenbroek	@10.53.0.3 a > dig.out.ns3.test$n || ret=1
176*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.optout.example. \
177*00b67f09SDavid van Moolenbroek	@10.53.0.4 a > dig.out.ns4.test$n || ret=1
178*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
179*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
180*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
181*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
182*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
183*00b67f09SDavid van Moolenbroek
184*00b67f09SDavid van Moolenbroekif [ -x ${DELV} ] ; then
185*00b67f09SDavid van Moolenbroek   ret=0
186*00b67f09SDavid van Moolenbroek   echo "I:checking positive validation OPTOUT using dns_client ($n)"
187*00b67f09SDavid van Moolenbroek   $DELV $DELVOPTS @10.53.0.4 a a.optout.example > delv.out$n || ret=1
188*00b67f09SDavid van Moolenbroek   grep "a.optout.example..*10.0.0.1" delv.out$n > /dev/null || ret=1
189*00b67f09SDavid van Moolenbroek   grep "a.optout.example..*RRSIG.A 7 3 300.*" delv.out$n > /dev/null || ret=1
190*00b67f09SDavid van Moolenbroek   n=`expr $n + 1`
191*00b67f09SDavid van Moolenbroek   if [ $ret != 0 ]; then echo "I:failed"; fi
192*00b67f09SDavid van Moolenbroek   status=`expr $status + $ret`
193*00b67f09SDavid van Moolenbroekfi
194*00b67f09SDavid van Moolenbroek
195*00b67f09SDavid van Moolenbroekecho "I:checking positive wildcard validation NSEC ($n)"
196*00b67f09SDavid van Moolenbroekret=0
197*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS a.wild.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1
198*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS a.wild.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1
199*00b67f09SDavid van Moolenbroekstripns dig.out.ns3.test$n > dig.out.ns3.stripped.test$n
200*00b67f09SDavid van Moolenbroekstripns dig.out.ns4.test$n > dig.out.ns4.stripped.test$n
201*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.stripped.test$n dig.out.ns4.stripped.test$n || ret=1
202*00b67f09SDavid van Moolenbroekgrep "\*\.wild\.example\..*RRSIG	NSEC" dig.out.ns4.test$n > /dev/null || ret=1
203*00b67f09SDavid van Moolenbroekgrep "\*\.wild\.example\..*NSEC	z\.example" dig.out.ns4.test$n > /dev/null || ret=1
204*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
205*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
206*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
207*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
208*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
209*00b67f09SDavid van Moolenbroek
210*00b67f09SDavid van Moolenbroekif [ -x ${DELV} ] ; then
211*00b67f09SDavid van Moolenbroek   ret=0
212*00b67f09SDavid van Moolenbroek   echo "I:checking positive wildcard validation NSEC using dns_client ($n)"
213*00b67f09SDavid van Moolenbroek   $DELV $DELVOPTS @10.53.0.4 a a.wild.example > delv.out$n || ret=1
214*00b67f09SDavid van Moolenbroek   grep "a.wild.example..*10.0.0.27" delv.out$n > /dev/null || ret=1
215*00b67f09SDavid van Moolenbroek   grep "a.wild.example..*RRSIG.A 3 2 300.*" delv.out$n > /dev/null || ret=1
216*00b67f09SDavid van Moolenbroek   n=`expr $n + 1`
217*00b67f09SDavid van Moolenbroek   if [ $ret != 0 ]; then echo "I:failed"; fi
218*00b67f09SDavid van Moolenbroek   status=`expr $status + $ret`
219*00b67f09SDavid van Moolenbroekfi
220*00b67f09SDavid van Moolenbroek
221*00b67f09SDavid van Moolenbroekecho "I:checking positive wildcard answer NSEC3 ($n)"
222*00b67f09SDavid van Moolenbroekret=0
223*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS a.wild.nsec3.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1
224*00b67f09SDavid van Moolenbroekgrep "AUTHORITY: 4," dig.out.ns3.test$n > /dev/null || ret=1
225*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns3.test$n > /dev/null || ret=1
226*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
227*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
228*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
229*00b67f09SDavid van Moolenbroek
230*00b67f09SDavid van Moolenbroekecho "I:checking positive wildcard answer NSEC3 ($n)"
231*00b67f09SDavid van Moolenbroekret=0
232*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS a.wild.nsec3.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1
233*00b67f09SDavid van Moolenbroekgrep "AUTHORITY: 4," dig.out.ns4.test$n > /dev/null || ret=1
234*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
235*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
236*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
237*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
238*00b67f09SDavid van Moolenbroek
239*00b67f09SDavid van Moolenbroekecho "I:checking positive wildcard validation NSEC3 ($n)"
240*00b67f09SDavid van Moolenbroekret=0
241*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS a.wild.nsec3.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1
242*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS a.wild.nsec3.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1
243*00b67f09SDavid van Moolenbroekstripns dig.out.ns3.test$n > dig.out.ns3.stripped.test$n
244*00b67f09SDavid van Moolenbroekstripns dig.out.ns4.test$n > dig.out.ns4.stripped.test$n
245*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.stripped.test$n dig.out.ns4.stripped.test$n || ret=1
246*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
247*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
248*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
249*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
250*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
251*00b67f09SDavid van Moolenbroek
252*00b67f09SDavid van Moolenbroekif [ -x ${DELV} ] ; then
253*00b67f09SDavid van Moolenbroek   ret=0
254*00b67f09SDavid van Moolenbroek   echo "I:checking positive wildcard validation NSEC3 using dns_client ($n)"
255*00b67f09SDavid van Moolenbroek   $DELV $DELVOPTS @10.53.0.4 a a.wild.nsec3.example > delv.out$n || ret=1
256*00b67f09SDavid van Moolenbroek   grep "a.wild.nsec3.example..*10.0.0.6" delv.out$n > /dev/null || ret=1
257*00b67f09SDavid van Moolenbroek   grep "a.wild.nsec3.example..*RRSIG.A 7 3 300.*" delv.out$n > /dev/null || ret=1
258*00b67f09SDavid van Moolenbroek   n=`expr $n + 1`
259*00b67f09SDavid van Moolenbroek   if [ $ret != 0 ]; then echo "I:failed"; fi
260*00b67f09SDavid van Moolenbroek   status=`expr $status + $ret`
261*00b67f09SDavid van Moolenbroekfi
262*00b67f09SDavid van Moolenbroek
263*00b67f09SDavid van Moolenbroekecho "I:checking positive wildcard validation OPTOUT ($n)"
264*00b67f09SDavid van Moolenbroekret=0
265*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS a.wild.optout.example. \
266*00b67f09SDavid van Moolenbroek	@10.53.0.3 a > dig.out.ns3.test$n || ret=1
267*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS a.wild.optout.example. \
268*00b67f09SDavid van Moolenbroek	@10.53.0.4 a > dig.out.ns4.test$n || ret=1
269*00b67f09SDavid van Moolenbroekstripns dig.out.ns3.test$n > dig.out.ns3.stripped.test$n
270*00b67f09SDavid van Moolenbroekstripns dig.out.ns4.test$n > dig.out.ns4.stripped.test$n
271*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.stripped.test$n dig.out.ns4.stripped.test$n || ret=1
272*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
273*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
274*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
275*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
276*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
277*00b67f09SDavid van Moolenbroek
278*00b67f09SDavid van Moolenbroekif [ -x ${DELV} ] ; then
279*00b67f09SDavid van Moolenbroek   ret=0
280*00b67f09SDavid van Moolenbroek   echo "I:checking positive wildcard validation OPTOUT using dns_client ($n)"
281*00b67f09SDavid van Moolenbroek   $DELV $DELVOPTS @10.53.0.4 a a.wild.optout.example > delv.out$n || ret=1
282*00b67f09SDavid van Moolenbroek   grep "a.wild.optout.example..*10.0.0.6" delv.out$n > /dev/null || ret=1
283*00b67f09SDavid van Moolenbroek   grep "a.wild.optout.example..*RRSIG.A 7 3 300.*" delv.out$n > /dev/null || ret=1
284*00b67f09SDavid van Moolenbroek   n=`expr $n + 1`
285*00b67f09SDavid van Moolenbroek   if [ $ret != 0 ]; then echo "I:failed"; fi
286*00b67f09SDavid van Moolenbroek   status=`expr $status + $ret`
287*00b67f09SDavid van Moolenbroekfi
288*00b67f09SDavid van Moolenbroek
289*00b67f09SDavid van Moolenbroekecho "I:checking negative validation NXDOMAIN NSEC ($n)"
290*00b67f09SDavid van Moolenbroekret=0
291*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.example. @10.53.0.2 a > dig.out.ns2.test$n || ret=1
292*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1
293*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1
294*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
295*00b67f09SDavid van Moolenbroekgrep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1
296*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
297*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
298*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
299*00b67f09SDavid van Moolenbroek
300*00b67f09SDavid van Moolenbroekif [ -x ${DELV} ] ; then
301*00b67f09SDavid van Moolenbroek   ret=0
302*00b67f09SDavid van Moolenbroek   echo "I:checking negative validation NXDOMAIN NSEC using dns_client ($n)"
303*00b67f09SDavid van Moolenbroek   $DELV $DELVOPTS @10.53.0.4 a q.example > delv.out$n 2>&1 || ret=1
304*00b67f09SDavid van Moolenbroek   grep "resolution failed: ncache nxdomain" delv.out$n > /dev/null || ret=1
305*00b67f09SDavid van Moolenbroek   n=`expr $n + 1`
306*00b67f09SDavid van Moolenbroek   if [ $ret != 0 ]; then echo "I:failed"; fi
307*00b67f09SDavid van Moolenbroek   status=`expr $status + $ret`
308*00b67f09SDavid van Moolenbroekfi
309*00b67f09SDavid van Moolenbroek
310*00b67f09SDavid van Moolenbroekecho "I:checking negative validation NXDOMAIN NSEC3 ($n)"
311*00b67f09SDavid van Moolenbroekret=0
312*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.nsec3.example. \
313*00b67f09SDavid van Moolenbroek	@10.53.0.3 a > dig.out.ns3.test$n || ret=1
314*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.nsec3.example. \
315*00b67f09SDavid van Moolenbroek	@10.53.0.4 a > dig.out.ns4.test$n || ret=1
316*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
317*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
318*00b67f09SDavid van Moolenbroekgrep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1
319*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
320*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
321*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
322*00b67f09SDavid van Moolenbroek
323*00b67f09SDavid van Moolenbroekif [ -x ${DELV} ] ; then
324*00b67f09SDavid van Moolenbroek   ret=0
325*00b67f09SDavid van Moolenbroek   echo "I:checking negative validation NXDOMAIN NSEC3 using dns_client ($n)"
326*00b67f09SDavid van Moolenbroek   $DELV $DELVOPTS @10.53.0.4 a q.nsec3.example > delv.out$n 2>&1 || ret=1
327*00b67f09SDavid van Moolenbroek   grep "resolution failed: ncache nxdomain" delv.out$n > /dev/null || ret=1
328*00b67f09SDavid van Moolenbroek   n=`expr $n + 1`
329*00b67f09SDavid van Moolenbroek   if [ $ret != 0 ]; then echo "I:failed"; fi
330*00b67f09SDavid van Moolenbroek   status=`expr $status + $ret`
331*00b67f09SDavid van Moolenbroekfi
332*00b67f09SDavid van Moolenbroek
333*00b67f09SDavid van Moolenbroekecho "I:checking negative validation NXDOMAIN OPTOUT ($n)"
334*00b67f09SDavid van Moolenbroekret=0
335*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.optout.example. \
336*00b67f09SDavid van Moolenbroek	@10.53.0.3 a > dig.out.ns3.test$n || ret=1
337*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.optout.example. \
338*00b67f09SDavid van Moolenbroek	@10.53.0.4 a > dig.out.ns4.test$n || ret=1
339*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
340*00b67f09SDavid van Moolenbroekgrep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1
341*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the &&
342*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
343*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
344*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
345*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
346*00b67f09SDavid van Moolenbroek
347*00b67f09SDavid van Moolenbroekif [ -x ${DELV} ] ; then
348*00b67f09SDavid van Moolenbroek   ret=0
349*00b67f09SDavid van Moolenbroek   echo "I:checking negative validation NXDOMAIN OPTOUT using dns_client ($n)"
350*00b67f09SDavid van Moolenbroek   $DELV $DELVOPTS @10.53.0.4 a q.optout.example > delv.out$n 2>&1 || ret=1
351*00b67f09SDavid van Moolenbroek   grep "resolution failed: ncache nxdomain" delv.out$n > /dev/null || ret=1
352*00b67f09SDavid van Moolenbroek   n=`expr $n + 1`
353*00b67f09SDavid van Moolenbroek   if [ $ret != 0 ]; then echo "I:failed"; fi
354*00b67f09SDavid van Moolenbroek   status=`expr $status + $ret`
355*00b67f09SDavid van Moolenbroekfi
356*00b67f09SDavid van Moolenbroek
357*00b67f09SDavid van Moolenbroekecho "I:checking negative validation NODATA NSEC ($n)"
358*00b67f09SDavid van Moolenbroekret=0
359*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.example. @10.53.0.2 txt > dig.out.ns2.test$n || ret=1
360*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.example. @10.53.0.4 txt > dig.out.ns4.test$n || ret=1
361*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1
362*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
363*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
364*00b67f09SDavid van Moolenbroekgrep "ANSWER: 0" dig.out.ns4.test$n > /dev/null || ret=1
365*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
366*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
367*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
368*00b67f09SDavid van Moolenbroek
369*00b67f09SDavid van Moolenbroekif [ -x ${DELV} ] ; then
370*00b67f09SDavid van Moolenbroek   ret=0
371*00b67f09SDavid van Moolenbroek   echo "I:checking negative validation NODATA OPTOUT using dns_client ($n)"
372*00b67f09SDavid van Moolenbroek   $DELV $DELVOPTS @10.53.0.4 txt a.example > delv.out$n 2>&1 || ret=1
373*00b67f09SDavid van Moolenbroek   grep "resolution failed: ncache nxrrset" delv.out$n > /dev/null || ret=1
374*00b67f09SDavid van Moolenbroek   n=`expr $n + 1`
375*00b67f09SDavid van Moolenbroek   if [ $ret != 0 ]; then echo "I:failed"; fi
376*00b67f09SDavid van Moolenbroek   status=`expr $status + $ret`
377*00b67f09SDavid van Moolenbroekfi
378*00b67f09SDavid van Moolenbroek
379*00b67f09SDavid van Moolenbroekecho "I:checking negative validation NODATA NSEC3 ($n)"
380*00b67f09SDavid van Moolenbroekret=0
381*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.nsec3.example. \
382*00b67f09SDavid van Moolenbroek	@10.53.0.3 txt > dig.out.ns3.test$n || ret=1
383*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.nsec3.example. \
384*00b67f09SDavid van Moolenbroek	@10.53.0.4 txt > dig.out.ns4.test$n || ret=1
385*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
386*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
387*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
388*00b67f09SDavid van Moolenbroekgrep "ANSWER: 0" dig.out.ns4.test$n > /dev/null || ret=1
389*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
390*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
391*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
392*00b67f09SDavid van Moolenbroek
393*00b67f09SDavid van Moolenbroekif [ -x ${DELV} ] ; then
394*00b67f09SDavid van Moolenbroek   ret=0
395*00b67f09SDavid van Moolenbroek   echo "I:checking negative validation NODATA NSEC3 using dns_client ($n)"
396*00b67f09SDavid van Moolenbroek   $DELV $DELVOPTS @10.53.0.4 txt a.nsec3.example > delv.out$n 2>&1 || ret=1
397*00b67f09SDavid van Moolenbroek   grep "resolution failed: ncache nxrrset" delv.out$n > /dev/null || ret=1
398*00b67f09SDavid van Moolenbroek   n=`expr $n + 1`
399*00b67f09SDavid van Moolenbroek   if [ $ret != 0 ]; then echo "I:failed"; fi
400*00b67f09SDavid van Moolenbroek   status=`expr $status + $ret`
401*00b67f09SDavid van Moolenbroekfi
402*00b67f09SDavid van Moolenbroek
403*00b67f09SDavid van Moolenbroekecho "I:checking negative validation NODATA OPTOUT ($n)"
404*00b67f09SDavid van Moolenbroekret=0
405*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.optout.example. \
406*00b67f09SDavid van Moolenbroek	@10.53.0.3 txt > dig.out.ns3.test$n || ret=1
407*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.optout.example. \
408*00b67f09SDavid van Moolenbroek	@10.53.0.4 txt > dig.out.ns4.test$n || ret=1
409*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
410*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
411*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
412*00b67f09SDavid van Moolenbroekgrep "ANSWER: 0" dig.out.ns4.test$n > /dev/null || ret=1
413*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
414*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
415*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
416*00b67f09SDavid van Moolenbroek
417*00b67f09SDavid van Moolenbroekif [ -x ${DELV} ] ; then
418*00b67f09SDavid van Moolenbroek   ret=0
419*00b67f09SDavid van Moolenbroek   echo "I:checking negative validation NODATA OPTOUT using dns_client ($n)"
420*00b67f09SDavid van Moolenbroek   $DELV $DELVOPTS @10.53.0.4 txt a.optout.example > delv.out$n 2>&1 || ret=1
421*00b67f09SDavid van Moolenbroek   grep "resolution failed: ncache nxrrset" delv.out$n > /dev/null || ret=1
422*00b67f09SDavid van Moolenbroek   n=`expr $n + 1`
423*00b67f09SDavid van Moolenbroek   if [ $ret != 0 ]; then echo "I:failed"; fi
424*00b67f09SDavid van Moolenbroek   status=`expr $status + $ret`
425*00b67f09SDavid van Moolenbroekfi
426*00b67f09SDavid van Moolenbroek
427*00b67f09SDavid van Moolenbroekecho "I:checking negative wildcard validation NSEC ($n)"
428*00b67f09SDavid van Moolenbroekret=0
429*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS b.wild.example. @10.53.0.2 txt > dig.out.ns2.test$n || ret=1
430*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS b.wild.example. @10.53.0.4 txt > dig.out.ns4.test$n || ret=1
431*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1
432*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
433*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
434*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
435*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
436*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
437*00b67f09SDavid van Moolenbroek
438*00b67f09SDavid van Moolenbroekif [ -x ${DELV} ] ; then
439*00b67f09SDavid van Moolenbroek   ret=0
440*00b67f09SDavid van Moolenbroek   echo "I:checking negative wildcard validation NSEC using dns_client ($n)"
441*00b67f09SDavid van Moolenbroek   $DELV $DELVOPTS @10.53.0.4 txt b.wild.example > delv.out$n 2>&1 || ret=1
442*00b67f09SDavid van Moolenbroek   grep "resolution failed: ncache nxrrset" delv.out$n > /dev/null || ret=1
443*00b67f09SDavid van Moolenbroek   n=`expr $n + 1`
444*00b67f09SDavid van Moolenbroek   if [ $ret != 0 ]; then echo "I:failed"; fi
445*00b67f09SDavid van Moolenbroek   status=`expr $status + $ret`
446*00b67f09SDavid van Moolenbroekfi
447*00b67f09SDavid van Moolenbroek
448*00b67f09SDavid van Moolenbroekecho "I:checking negative wildcard validation NSEC3 ($n)"
449*00b67f09SDavid van Moolenbroekret=0
450*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS b.wild.nsec3.example. @10.53.0.3 txt > dig.out.ns3.test$n || ret=1
451*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS b.wild.nsec3.example. @10.53.0.4 txt > dig.out.ns4.test$n || ret=1
452*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
453*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
454*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
455*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
456*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
457*00b67f09SDavid van Moolenbroek
458*00b67f09SDavid van Moolenbroekif [ -x ${DELV} ] ; then
459*00b67f09SDavid van Moolenbroek   ret=0
460*00b67f09SDavid van Moolenbroek   echo "I:checking negative wildcard validation NSEC3 using dns_client ($n)"
461*00b67f09SDavid van Moolenbroek   $DELV $DELVOPTS @10.53.0.4 txt b.wild.nsec3.example > delv.out$n 2>&1 || ret=1
462*00b67f09SDavid van Moolenbroek   grep "resolution failed: ncache nxrrset" delv.out$n > /dev/null || ret=1
463*00b67f09SDavid van Moolenbroek   n=`expr $n + 1`
464*00b67f09SDavid van Moolenbroek   if [ $ret != 0 ]; then echo "I:failed"; fi
465*00b67f09SDavid van Moolenbroek   status=`expr $status + $ret`
466*00b67f09SDavid van Moolenbroekfi
467*00b67f09SDavid van Moolenbroek
468*00b67f09SDavid van Moolenbroekecho "I:checking negative wildcard validation OPTOUT ($n)"
469*00b67f09SDavid van Moolenbroekret=0
470*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS b.wild.optout.example. \
471*00b67f09SDavid van Moolenbroek	@10.53.0.3 txt > dig.out.ns3.test$n || ret=1
472*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS b.wild.optout.example. \
473*00b67f09SDavid van Moolenbroek	@10.53.0.4 txt > dig.out.ns4.test$n || ret=1
474*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
475*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
476*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the &&
477*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
478*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
479*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
480*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
481*00b67f09SDavid van Moolenbroek
482*00b67f09SDavid van Moolenbroekif [ -x ${DELV} ] ; then
483*00b67f09SDavid van Moolenbroek   ret=0
484*00b67f09SDavid van Moolenbroek   echo "I:checking negative wildcard validation OPTOUT using dns_client ($n)"
485*00b67f09SDavid van Moolenbroek   $DELV $DELVOPTS @10.53.0.4 txt b.optout.nsec3.example > delv.out$n 2>&1 || ret=1
486*00b67f09SDavid van Moolenbroek   grep "resolution failed: ncache nxrrset" delv.out$n > /dev/null || ret=1
487*00b67f09SDavid van Moolenbroek   n=`expr $n + 1`
488*00b67f09SDavid van Moolenbroek   if [ $ret != 0 ]; then echo "I:failed"; fi
489*00b67f09SDavid van Moolenbroek   status=`expr $status + $ret`
490*00b67f09SDavid van Moolenbroekfi
491*00b67f09SDavid van Moolenbroek
492*00b67f09SDavid van Moolenbroek# Check the insecure.example domain
493*00b67f09SDavid van Moolenbroek
494*00b67f09SDavid van Moolenbroekecho "I:checking 1-server insecurity proof NSEC ($n)"
495*00b67f09SDavid van Moolenbroekret=0
496*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.insecure.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1
497*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.insecure.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1
498*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
499*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
500*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the &&
501*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
502*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
503*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
504*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
505*00b67f09SDavid van Moolenbroek
506*00b67f09SDavid van Moolenbroekif [ -x ${DELV} ] ; then
507*00b67f09SDavid van Moolenbroek   ret=0
508*00b67f09SDavid van Moolenbroek   echo "I:checking 1-server insecurity proof NSEC using dns_client ($n)"
509*00b67f09SDavid van Moolenbroek   $DELV $DELVOPTS @10.53.0.4 a a.insecure.example > delv.out$n || ret=1
510*00b67f09SDavid van Moolenbroek   grep "a.insecure.example..*10.0.0.1" delv.out$n > /dev/null || ret=1
511*00b67f09SDavid van Moolenbroek   n=`expr $n + 1`
512*00b67f09SDavid van Moolenbroek   if [ $ret != 0 ]; then echo "I:failed"; fi
513*00b67f09SDavid van Moolenbroek   status=`expr $status + $ret`
514*00b67f09SDavid van Moolenbroekfi
515*00b67f09SDavid van Moolenbroek
516*00b67f09SDavid van Moolenbroekecho "I:checking 1-server insecurity proof NSEC3 ($n)"
517*00b67f09SDavid van Moolenbroekret=0
518*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.insecure.nsec3.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1
519*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.insecure.nsec3.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1
520*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
521*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
522*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the &&
523*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
524*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
525*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
526*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
527*00b67f09SDavid van Moolenbroek
528*00b67f09SDavid van Moolenbroekif [ -x ${DELV} ] ; then
529*00b67f09SDavid van Moolenbroek   ret=0
530*00b67f09SDavid van Moolenbroek   echo "I:checking 1-server insecurity proof NSEC3 using dns_client ($n)"
531*00b67f09SDavid van Moolenbroek   $DELV $DELVOPTS @10.53.0.4 a a.insecure.nsec3.example > delv.out$n || ret=1
532*00b67f09SDavid van Moolenbroek   grep "a.insecure.nsec3.example..*10.0.0.1" delv.out$n > /dev/null || ret=1
533*00b67f09SDavid van Moolenbroek   n=`expr $n + 1`
534*00b67f09SDavid van Moolenbroek   if [ $ret != 0 ]; then echo "I:failed"; fi
535*00b67f09SDavid van Moolenbroek   status=`expr $status + $ret`
536*00b67f09SDavid van Moolenbroekfi
537*00b67f09SDavid van Moolenbroek
538*00b67f09SDavid van Moolenbroekecho "I:checking 1-server insecurity proof OPTOUT ($n)"
539*00b67f09SDavid van Moolenbroekret=0
540*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.insecure.optout.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1
541*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.insecure.optout.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1
542*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
543*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
544*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the &&
545*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
546*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
547*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
548*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
549*00b67f09SDavid van Moolenbroek
550*00b67f09SDavid van Moolenbroekif [ -x ${DELV} ] ; then
551*00b67f09SDavid van Moolenbroek   ret=0
552*00b67f09SDavid van Moolenbroek   echo "I:checking 1-server insecurity proof OPTOUT using dns_client ($n)"
553*00b67f09SDavid van Moolenbroek   $DELV $DELVOPTS @10.53.0.4 a a.insecure.optout.example > delv.out$n || ret=1
554*00b67f09SDavid van Moolenbroek   grep "a.insecure.optout.example..*10.0.0.1" delv.out$n > /dev/null || ret=1
555*00b67f09SDavid van Moolenbroek   n=`expr $n + 1`
556*00b67f09SDavid van Moolenbroek   if [ $ret != 0 ]; then echo "I:failed"; fi
557*00b67f09SDavid van Moolenbroek   status=`expr $status + $ret`
558*00b67f09SDavid van Moolenbroekfi
559*00b67f09SDavid van Moolenbroek
560*00b67f09SDavid van Moolenbroekecho "I:checking 1-server negative insecurity proof NSEC ($n)"
561*00b67f09SDavid van Moolenbroekret=0
562*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS q.insecure.example. a @10.53.0.3 \
563*00b67f09SDavid van Moolenbroek	> dig.out.ns3.test$n || ret=1
564*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS q.insecure.example. a @10.53.0.4 \
565*00b67f09SDavid van Moolenbroek	> dig.out.ns4.test$n || ret=1
566*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
567*00b67f09SDavid van Moolenbroekgrep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1
568*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the &&
569*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
570*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
571*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
572*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
573*00b67f09SDavid van Moolenbroek
574*00b67f09SDavid van Moolenbroekif [ -x ${DELV} ] ; then
575*00b67f09SDavid van Moolenbroek   ret=0
576*00b67f09SDavid van Moolenbroek   echo "I:checking 1-server negative insecurity proof NSEC using dns_client ($n)"
577*00b67f09SDavid van Moolenbroek   $DELV $DELVOPTS @10.53.0.4 a q.insecure.example > delv.out$n 2>&1 || ret=1
578*00b67f09SDavid van Moolenbroek   grep "resolution failed: ncache nxdomain" delv.out$n > /dev/null || ret=1
579*00b67f09SDavid van Moolenbroek   n=`expr $n + 1`
580*00b67f09SDavid van Moolenbroek   if [ $ret != 0 ]; then echo "I:failed"; fi
581*00b67f09SDavid van Moolenbroek   status=`expr $status + $ret`
582*00b67f09SDavid van Moolenbroekfi
583*00b67f09SDavid van Moolenbroek
584*00b67f09SDavid van Moolenbroekecho "I:checking 1-server negative insecurity proof NSEC3 ($n)"
585*00b67f09SDavid van Moolenbroekret=0
586*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS q.insecure.nsec3.example. a @10.53.0.3 \
587*00b67f09SDavid van Moolenbroek	> dig.out.ns3.test$n || ret=1
588*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS q.insecure.nsec3.example. a @10.53.0.4 \
589*00b67f09SDavid van Moolenbroek	> dig.out.ns4.test$n || ret=1
590*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
591*00b67f09SDavid van Moolenbroekgrep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1
592*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the &&
593*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
594*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
595*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
596*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
597*00b67f09SDavid van Moolenbroek
598*00b67f09SDavid van Moolenbroekif [ -x ${DELV} ] ; then
599*00b67f09SDavid van Moolenbroek   ret=0
600*00b67f09SDavid van Moolenbroek   echo "I:checking 1-server negative insecurity proof NSEC3 using dns_client ($n)"
601*00b67f09SDavid van Moolenbroek   $DELV $DELVOPTS @10.53.0.4 a q.insecure.nsec3.example > delv.out$n 2>&1 || ret=1
602*00b67f09SDavid van Moolenbroek   grep "resolution failed: ncache nxdomain" delv.out$n > /dev/null || ret=1
603*00b67f09SDavid van Moolenbroek   n=`expr $n + 1`
604*00b67f09SDavid van Moolenbroek   if [ $ret != 0 ]; then echo "I:failed"; fi
605*00b67f09SDavid van Moolenbroek   status=`expr $status + $ret`
606*00b67f09SDavid van Moolenbroekfi
607*00b67f09SDavid van Moolenbroek
608*00b67f09SDavid van Moolenbroekecho "I:checking 1-server negative insecurity proof OPTOUT ($n)"
609*00b67f09SDavid van Moolenbroekret=0
610*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS q.insecure.optout.example. a @10.53.0.3 \
611*00b67f09SDavid van Moolenbroek	> dig.out.ns3.test$n || ret=1
612*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS q.insecure.optout.example. a @10.53.0.4 \
613*00b67f09SDavid van Moolenbroek	> dig.out.ns4.test$n || ret=1
614*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
615*00b67f09SDavid van Moolenbroekgrep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1
616*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the &&
617*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
618*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
619*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
620*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
621*00b67f09SDavid van Moolenbroek
622*00b67f09SDavid van Moolenbroekif [ -x ${DELV} ] ; then
623*00b67f09SDavid van Moolenbroek   ret=0
624*00b67f09SDavid van Moolenbroek   echo "I:checking 1-server negative insecurity proof OPTOUT using dns_client ($n)"
625*00b67f09SDavid van Moolenbroek   $DELV $DELVOPTS @10.53.0.4 a q.insecure.optout.example > delv.out$n 2>&1 || ret=1
626*00b67f09SDavid van Moolenbroek   grep "resolution failed: ncache nxdomain" delv.out$n > /dev/null || ret=1
627*00b67f09SDavid van Moolenbroek   n=`expr $n + 1`
628*00b67f09SDavid van Moolenbroek   if [ $ret != 0 ]; then echo "I:failed"; fi
629*00b67f09SDavid van Moolenbroek   status=`expr $status + $ret`
630*00b67f09SDavid van Moolenbroekfi
631*00b67f09SDavid van Moolenbroek
632*00b67f09SDavid van Moolenbroekecho "I:checking 1-server negative insecurity proof with SOA hack NSEC ($n)"
633*00b67f09SDavid van Moolenbroekret=0
634*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS r.insecure.example. soa @10.53.0.3 \
635*00b67f09SDavid van Moolenbroek	> dig.out.ns3.test$n || ret=1
636*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS r.insecure.example. soa @10.53.0.4 \
637*00b67f09SDavid van Moolenbroek	> dig.out.ns4.test$n || ret=1
638*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
639*00b67f09SDavid van Moolenbroekgrep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1
640*00b67f09SDavid van Moolenbroekgrep "0	IN	SOA" dig.out.ns4.test$n > /dev/null || ret=1
641*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the &&
642*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
643*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
644*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
645*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
646*00b67f09SDavid van Moolenbroek
647*00b67f09SDavid van Moolenbroekecho "I:checking 1-server negative insecurity proof with SOA hack NSEC3 ($n)"
648*00b67f09SDavid van Moolenbroekret=0
649*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS r.insecure.nsec3.example. soa @10.53.0.3 \
650*00b67f09SDavid van Moolenbroek	> dig.out.ns3.test$n || ret=1
651*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS r.insecure.nsec3.example. soa @10.53.0.4 \
652*00b67f09SDavid van Moolenbroek	> dig.out.ns4.test$n || ret=1
653*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
654*00b67f09SDavid van Moolenbroekgrep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1
655*00b67f09SDavid van Moolenbroekgrep "0	IN	SOA" dig.out.ns4.test$n > /dev/null || ret=1
656*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the &&
657*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
658*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
659*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
660*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
661*00b67f09SDavid van Moolenbroek
662*00b67f09SDavid van Moolenbroekecho "I:checking 1-server negative insecurity proof with SOA hack OPTOUT ($n)"
663*00b67f09SDavid van Moolenbroekret=0
664*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS r.insecure.optout.example. soa @10.53.0.3 \
665*00b67f09SDavid van Moolenbroek	> dig.out.ns3.test$n || ret=1
666*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS r.insecure.optout.example. soa @10.53.0.4 \
667*00b67f09SDavid van Moolenbroek	> dig.out.ns4.test$n || ret=1
668*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
669*00b67f09SDavid van Moolenbroekgrep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1
670*00b67f09SDavid van Moolenbroekgrep "0	IN	SOA" dig.out.ns4.test$n > /dev/null || ret=1
671*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the &&
672*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
673*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
674*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
675*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
676*00b67f09SDavid van Moolenbroek
677*00b67f09SDavid van Moolenbroek# Check the secure.example domain
678*00b67f09SDavid van Moolenbroek
679*00b67f09SDavid van Moolenbroekecho "I:checking multi-stage positive validation NSEC/NSEC ($n)"
680*00b67f09SDavid van Moolenbroekret=0
681*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.secure.example. \
682*00b67f09SDavid van Moolenbroek	@10.53.0.3 a > dig.out.ns3.test$n || ret=1
683*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.secure.example. \
684*00b67f09SDavid van Moolenbroek	@10.53.0.4 a > dig.out.ns4.test$n || ret=1
685*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
686*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
687*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
688*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
689*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
690*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
691*00b67f09SDavid van Moolenbroek
692*00b67f09SDavid van Moolenbroekecho "I:checking multi-stage positive validation NSEC/NSEC3 ($n)"
693*00b67f09SDavid van Moolenbroekret=0
694*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.nsec3.example. \
695*00b67f09SDavid van Moolenbroek	@10.53.0.3 a > dig.out.ns3.test$n || ret=1
696*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.nsec3.example. \
697*00b67f09SDavid van Moolenbroek	@10.53.0.4 a > dig.out.ns4.test$n || ret=1
698*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
699*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
700*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
701*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
702*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
703*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
704*00b67f09SDavid van Moolenbroek
705*00b67f09SDavid van Moolenbroekecho "I:checking multi-stage positive validation NSEC/OPTOUT ($n)"
706*00b67f09SDavid van Moolenbroekret=0
707*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.optout.example. \
708*00b67f09SDavid van Moolenbroek	@10.53.0.3 a > dig.out.ns3.test$n || ret=1
709*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.optout.example. \
710*00b67f09SDavid van Moolenbroek	@10.53.0.4 a > dig.out.ns4.test$n || ret=1
711*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
712*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
713*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
714*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
715*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
716*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
717*00b67f09SDavid van Moolenbroek
718*00b67f09SDavid van Moolenbroekecho "I:checking multi-stage positive validation NSEC3/NSEC ($n)"
719*00b67f09SDavid van Moolenbroekret=0
720*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.secure.nsec3.example. \
721*00b67f09SDavid van Moolenbroek	@10.53.0.3 a > dig.out.ns3.test$n || ret=1
722*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.secure.nsec3.example. \
723*00b67f09SDavid van Moolenbroek	@10.53.0.4 a > dig.out.ns4.test$n || ret=1
724*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
725*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
726*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
727*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
728*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
729*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
730*00b67f09SDavid van Moolenbroek
731*00b67f09SDavid van Moolenbroekecho "I:checking multi-stage positive validation NSEC3/NSEC3 ($n)"
732*00b67f09SDavid van Moolenbroekret=0
733*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.nsec3.nsec3.example. \
734*00b67f09SDavid van Moolenbroek	@10.53.0.3 a > dig.out.ns3.test$n || ret=1
735*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.nsec3.nsec3.example. \
736*00b67f09SDavid van Moolenbroek	@10.53.0.4 a > dig.out.ns4.test$n || ret=1
737*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
738*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
739*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
740*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
741*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
742*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
743*00b67f09SDavid van Moolenbroek
744*00b67f09SDavid van Moolenbroekecho "I:checking multi-stage positive validation NSEC3/OPTOUT ($n)"
745*00b67f09SDavid van Moolenbroekret=0
746*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.optout.nsec3.example. \
747*00b67f09SDavid van Moolenbroek	@10.53.0.3 a > dig.out.ns3.test$n || ret=1
748*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.optout.nsec3.example. \
749*00b67f09SDavid van Moolenbroek	@10.53.0.4 a > dig.out.ns4.test$n || ret=1
750*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
751*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
752*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
753*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
754*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
755*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
756*00b67f09SDavid van Moolenbroek
757*00b67f09SDavid van Moolenbroekecho "I:checking multi-stage positive validation OPTOUT/NSEC ($n)"
758*00b67f09SDavid van Moolenbroekret=0
759*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.secure.optout.example. \
760*00b67f09SDavid van Moolenbroek	@10.53.0.3 a > dig.out.ns3.test$n || ret=1
761*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.secure.optout.example. \
762*00b67f09SDavid van Moolenbroek	@10.53.0.4 a > dig.out.ns4.test$n || ret=1
763*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
764*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
765*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
766*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
767*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
768*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
769*00b67f09SDavid van Moolenbroek
770*00b67f09SDavid van Moolenbroekecho "I:checking multi-stage positive validation OPTOUT/NSEC3 ($n)"
771*00b67f09SDavid van Moolenbroekret=0
772*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.nsec3.optout.example. \
773*00b67f09SDavid van Moolenbroek	@10.53.0.3 a > dig.out.ns3.test$n || ret=1
774*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.nsec3.optout.example. \
775*00b67f09SDavid van Moolenbroek	@10.53.0.4 a > dig.out.ns4.test$n || ret=1
776*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
777*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
778*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
779*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
780*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
781*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
782*00b67f09SDavid van Moolenbroek
783*00b67f09SDavid van Moolenbroekecho "I:checking multi-stage positive validation OPTOUT/OPTOUT ($n)"
784*00b67f09SDavid van Moolenbroekret=0
785*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.optout.optout.example. \
786*00b67f09SDavid van Moolenbroek	@10.53.0.3 a > dig.out.ns3.test$n || ret=1
787*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.optout.optout.example. \
788*00b67f09SDavid van Moolenbroek	@10.53.0.4 a > dig.out.ns4.test$n || ret=1
789*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
790*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
791*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
792*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
793*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
794*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
795*00b67f09SDavid van Moolenbroek
796*00b67f09SDavid van Moolenbroekecho "I:checking empty NODATA OPTOUT ($n)"
797*00b67f09SDavid van Moolenbroekret=0
798*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth empty.optout.example. \
799*00b67f09SDavid van Moolenbroek	@10.53.0.3 a > dig.out.ns3.test$n || ret=1
800*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth empty.optout.example. \
801*00b67f09SDavid van Moolenbroek	@10.53.0.4 a > dig.out.ns4.test$n || ret=1
802*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
803*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
804*00b67f09SDavid van Moolenbroek#grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
805*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
806*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
807*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
808*00b67f09SDavid van Moolenbroek
809*00b67f09SDavid van Moolenbroek# Check the bogus domain
810*00b67f09SDavid van Moolenbroek
811*00b67f09SDavid van Moolenbroekecho "I:checking failed validation ($n)"
812*00b67f09SDavid van Moolenbroekret=0
813*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS a.bogus.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1
814*00b67f09SDavid van Moolenbroekgrep "SERVFAIL" dig.out.ns4.test$n > /dev/null || ret=1
815*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
816*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
817*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
818*00b67f09SDavid van Moolenbroek
819*00b67f09SDavid van Moolenbroekif [ -x ${DELV} ] ; then
820*00b67f09SDavid van Moolenbroek   ret=0
821*00b67f09SDavid van Moolenbroek   echo "I:checking failed validation using dns_client ($n)"
822*00b67f09SDavid van Moolenbroek   $DELV $DELVOPTS +cd @10.53.0.4 a a.bogus.example > delv.out$n 2>&1 || ret=1
823*00b67f09SDavid van Moolenbroek   grep "resolution failed: RRSIG failed to verify" delv.out$n > /dev/null || ret=1
824*00b67f09SDavid van Moolenbroek   n=`expr $n + 1`
825*00b67f09SDavid van Moolenbroek   if [ $ret != 0 ]; then echo "I:failed"; fi
826*00b67f09SDavid van Moolenbroek   status=`expr $status + $ret`
827*00b67f09SDavid van Moolenbroekfi
828*00b67f09SDavid van Moolenbroek
829*00b67f09SDavid van Moolenbroek# Try validating with a bad trusted key.
830*00b67f09SDavid van Moolenbroek# This should fail.
831*00b67f09SDavid van Moolenbroek
832*00b67f09SDavid van Moolenbroekecho "I:checking that validation fails with a misconfigured trusted key ($n)"
833*00b67f09SDavid van Moolenbroekret=0
834*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS example. soa @10.53.0.5 > dig.out.ns5.test$n || ret=1
835*00b67f09SDavid van Moolenbroekgrep "SERVFAIL" dig.out.ns5.test$n > /dev/null || ret=1
836*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
837*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
838*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
839*00b67f09SDavid van Moolenbroek
840*00b67f09SDavid van Moolenbroekecho "I:checking that negative validation fails with a misconfigured trusted key ($n)"
841*00b67f09SDavid van Moolenbroekret=0
842*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS example. ptr @10.53.0.5 > dig.out.ns5.test$n || ret=1
843*00b67f09SDavid van Moolenbroekgrep "SERVFAIL" dig.out.ns5.test$n > /dev/null || ret=1
844*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
845*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
846*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
847*00b67f09SDavid van Moolenbroek
848*00b67f09SDavid van Moolenbroekecho "I:checking that insecurity proofs fail with a misconfigured trusted key ($n)"
849*00b67f09SDavid van Moolenbroekret=0
850*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS a.insecure.example. a @10.53.0.5 > dig.out.ns5.test$n || ret=1
851*00b67f09SDavid van Moolenbroekgrep "SERVFAIL" dig.out.ns5.test$n > /dev/null || ret=1
852*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
853*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
854*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
855*00b67f09SDavid van Moolenbroek
856*00b67f09SDavid van Moolenbroekecho "I:checking that validation fails when key record is missing ($n)"
857*00b67f09SDavid van Moolenbroekret=0
858*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS a.b.keyless.example. a @10.53.0.4 > dig.out.ns4.test$n || ret=1
859*00b67f09SDavid van Moolenbroekgrep "SERVFAIL" dig.out.ns4.test$n > /dev/null || ret=1
860*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
861*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
862*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
863*00b67f09SDavid van Moolenbroek
864*00b67f09SDavid van Moolenbroekif [ -x ${DELV} ] ; then
865*00b67f09SDavid van Moolenbroek   ret=0
866*00b67f09SDavid van Moolenbroek   echo "I:checking that validation fails when key record is missing using dns_client ($n)"
867*00b67f09SDavid van Moolenbroek   $DELV $DELVOPTS +cd @10.53.0.4 a a.b.keyless.example > delv.out$n 2>&1 || ret=1
868*00b67f09SDavid van Moolenbroek   grep "resolution failed: broken trust chain" delv.out$n > /dev/null || ret=1
869*00b67f09SDavid van Moolenbroek   n=`expr $n + 1`
870*00b67f09SDavid van Moolenbroek   if [ $ret != 0 ]; then echo "I:failed"; fi
871*00b67f09SDavid van Moolenbroek   status=`expr $status + $ret`
872*00b67f09SDavid van Moolenbroekfi
873*00b67f09SDavid van Moolenbroek
874*00b67f09SDavid van Moolenbroekecho "I:Checking that a bad CNAME signature is caught after a +CD query ($n)"
875*00b67f09SDavid van Moolenbroekret=0
876*00b67f09SDavid van Moolenbroek#prime
877*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +cd bad-cname.example. @10.53.0.4 > dig.out.ns4.prime$n || ret=1
878*00b67f09SDavid van Moolenbroek#check: requery with +CD.  pending data should be returned even if it's bogus
879*00b67f09SDavid van Moolenbroekexpect="a.example.
880*00b67f09SDavid van Moolenbroek10.0.0.1"
881*00b67f09SDavid van Moolenbroekans=`$DIG $DIGOPTS +cd +nodnssec +short bad-cname.example. @10.53.0.4` || ret=1
882*00b67f09SDavid van Moolenbroektest "$ans" = "$expect" || ret=1
883*00b67f09SDavid van Moolenbroektest $ret = 0 || echo I:failed, got "'""$ans""'", expected "'""$expect""'"
884*00b67f09SDavid van Moolenbroek#check: requery without +CD.  bogus cached data should be rejected.
885*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +nodnssec bad-cname.example. @10.53.0.4 > dig.out.ns4.test$n || ret=1
886*00b67f09SDavid van Moolenbroekgrep "SERVFAIL" dig.out.ns4.test$n > /dev/null || ret=1
887*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
888*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
889*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
890*00b67f09SDavid van Moolenbroek
891*00b67f09SDavid van Moolenbroekecho "I:Checking that a bad DNAME signature is caught after a +CD query ($n)"
892*00b67f09SDavid van Moolenbroekret=0
893*00b67f09SDavid van Moolenbroek#prime
894*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +cd a.bad-dname.example. @10.53.0.4 > dig.out.ns4.prime$n || ret=1
895*00b67f09SDavid van Moolenbroek#check: requery with +CD.  pending data should be returned even if it's bogus
896*00b67f09SDavid van Moolenbroekexpect="example.
897*00b67f09SDavid van Moolenbroeka.example.
898*00b67f09SDavid van Moolenbroek10.0.0.1"
899*00b67f09SDavid van Moolenbroekans=`$DIG $DIGOPTS +cd +nodnssec +short a.bad-dname.example. @10.53.0.4` || ret=1
900*00b67f09SDavid van Moolenbroektest "$ans" = "$expect" || ret=1
901*00b67f09SDavid van Moolenbroektest $ret = 0 || echo I:failed, got "'""$ans""'", expected "'""$expect""'"
902*00b67f09SDavid van Moolenbroek#check: requery without +CD.  bogus cached data should be rejected.
903*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +nodnssec a.bad-dname.example. @10.53.0.4 > dig.out.ns4.test$n || ret=1
904*00b67f09SDavid van Moolenbroekgrep "SERVFAIL" dig.out.ns4.test$n > /dev/null || ret=1
905*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
906*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
907*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
908*00b67f09SDavid van Moolenbroek
909*00b67f09SDavid van Moolenbroek# Check the insecure.secure.example domain (insecurity proof)
910*00b67f09SDavid van Moolenbroek
911*00b67f09SDavid van Moolenbroekecho "I:checking 2-server insecurity proof ($n)"
912*00b67f09SDavid van Moolenbroekret=0
913*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.insecure.secure.example. @10.53.0.2 a \
914*00b67f09SDavid van Moolenbroek	> dig.out.ns2.test$n || ret=1
915*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.insecure.secure.example. @10.53.0.4 a \
916*00b67f09SDavid van Moolenbroek	> dig.out.ns4.test$n || ret=1
917*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1
918*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
919*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the &&
920*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
921*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
922*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
923*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
924*00b67f09SDavid van Moolenbroek
925*00b67f09SDavid van Moolenbroek# Check a negative response in insecure.secure.example
926*00b67f09SDavid van Moolenbroek
927*00b67f09SDavid van Moolenbroekecho "I:checking 2-server insecurity proof with a negative answer ($n)"
928*00b67f09SDavid van Moolenbroekret=0
929*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS q.insecure.secure.example. @10.53.0.2 a > dig.out.ns2.test$n \
930*00b67f09SDavid van Moolenbroek	|| ret=1
931*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS q.insecure.secure.example. @10.53.0.4 a > dig.out.ns4.test$n \
932*00b67f09SDavid van Moolenbroek	|| ret=1
933*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1
934*00b67f09SDavid van Moolenbroekgrep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1
935*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the &&
936*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
937*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
938*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
939*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
940*00b67f09SDavid van Moolenbroek
941*00b67f09SDavid van Moolenbroekecho "I:checking 2-server insecurity proof with a negative answer and SOA hack ($n)"
942*00b67f09SDavid van Moolenbroekret=0
943*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS r.insecure.secure.example. @10.53.0.2 soa > dig.out.ns2.test$n \
944*00b67f09SDavid van Moolenbroek	|| ret=1
945*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS r.insecure.secure.example. @10.53.0.4 soa > dig.out.ns4.test$n \
946*00b67f09SDavid van Moolenbroek	|| ret=1
947*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1
948*00b67f09SDavid van Moolenbroekgrep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1
949*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the &&
950*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
951*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
952*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
953*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
954*00b67f09SDavid van Moolenbroek
955*00b67f09SDavid van Moolenbroek# Check that the query for a security root is successful and has ad set
956*00b67f09SDavid van Moolenbroek
957*00b67f09SDavid van Moolenbroekecho "I:checking security root query ($n)"
958*00b67f09SDavid van Moolenbroekret=0
959*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS . @10.53.0.4 key > dig.out.ns4.test$n || ret=1
960*00b67f09SDavid van Moolenbroekgrep "NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
961*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
962*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
963*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
964*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
965*00b67f09SDavid van Moolenbroek
966*00b67f09SDavid van Moolenbroek# Check that the setting the cd bit works
967*00b67f09SDavid van Moolenbroek
968*00b67f09SDavid van Moolenbroekecho "I:checking cd bit on a positive answer ($n)"
969*00b67f09SDavid van Moolenbroekret=0
970*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth example. soa @10.53.0.4 \
971*00b67f09SDavid van Moolenbroek	> dig.out.ns4.test$n || ret=1
972*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth +cdflag example. soa @10.53.0.5 \
973*00b67f09SDavid van Moolenbroek	> dig.out.ns5.test$n || ret=1
974*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns4.test$n dig.out.ns5.test$n || ret=1
975*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
976*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the &&
977*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns5.test$n > /dev/null && ret=1
978*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
979*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
980*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
981*00b67f09SDavid van Moolenbroek
982*00b67f09SDavid van Moolenbroekecho "I:checking cd bit on a negative answer ($n)"
983*00b67f09SDavid van Moolenbroekret=0
984*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS q.example. soa @10.53.0.4 > dig.out.ns4.test$n || ret=1
985*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +cdflag q.example. soa @10.53.0.5 > dig.out.ns5.test$n || ret=1
986*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns4.test$n dig.out.ns5.test$n || ret=1
987*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
988*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the &&
989*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns5.test$n > /dev/null && ret=1
990*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
991*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
992*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
993*00b67f09SDavid van Moolenbroek
994*00b67f09SDavid van Moolenbroekecho "I:checking positive validation RSASHA256 NSEC ($n)"
995*00b67f09SDavid van Moolenbroekret=0
996*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.rsasha256.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1
997*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.rsasha256.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1
998*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
999*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
1000*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1001*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1002*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1003*00b67f09SDavid van Moolenbroek
1004*00b67f09SDavid van Moolenbroekecho "I:checking positive validation RSASHA512 NSEC ($n)"
1005*00b67f09SDavid van Moolenbroekret=0
1006*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.rsasha512.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1
1007*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.rsasha512.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1
1008*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
1009*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
1010*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1011*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1012*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1013*00b67f09SDavid van Moolenbroek
1014*00b67f09SDavid van Moolenbroekecho "I:checking positive validation with KSK-only DNSKEY signature ($n)"
1015*00b67f09SDavid van Moolenbroekret=0
1016*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.kskonly.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1
1017*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.kskonly.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1
1018*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
1019*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
1020*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1021*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1022*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1023*00b67f09SDavid van Moolenbroek
1024*00b67f09SDavid van Moolenbroekecho "I:checking cd bit on a query that should fail ($n)"
1025*00b67f09SDavid van Moolenbroekret=0
1026*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS a.bogus.example. soa @10.53.0.4 \
1027*00b67f09SDavid van Moolenbroek	> dig.out.ns4.test$n || ret=1
1028*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +cdflag a.bogus.example. soa @10.53.0.5 \
1029*00b67f09SDavid van Moolenbroek	> dig.out.ns5.test$n || ret=1
1030*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns4.test$n dig.out.ns5.test$n || ret=1
1031*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
1032*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the &&
1033*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns5.test$n > /dev/null && ret=1
1034*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1035*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1036*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1037*00b67f09SDavid van Moolenbroek
1038*00b67f09SDavid van Moolenbroekecho "I:checking cd bit on an insecurity proof ($n)"
1039*00b67f09SDavid van Moolenbroekret=0
1040*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.insecure.example. soa @10.53.0.4 \
1041*00b67f09SDavid van Moolenbroek	> dig.out.ns4.test$n || ret=1
1042*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth +cdflag a.insecure.example. soa @10.53.0.5 \
1043*00b67f09SDavid van Moolenbroek	> dig.out.ns5.test$n || ret=1
1044*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns4.test$n dig.out.ns5.test$n || ret=1
1045*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
1046*00b67f09SDavid van Moolenbroek# Note - these are looking for failure, hence the &&
1047*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
1048*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns5.test$n > /dev/null && ret=1
1049*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1050*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1051*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1052*00b67f09SDavid van Moolenbroek
1053*00b67f09SDavid van Moolenbroekecho "I:checking cd bit on a negative insecurity proof ($n)"
1054*00b67f09SDavid van Moolenbroekret=0
1055*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS q.insecure.example. a @10.53.0.4 \
1056*00b67f09SDavid van Moolenbroek	> dig.out.ns4.test$n || ret=1
1057*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +cdflag q.insecure.example. a @10.53.0.5 \
1058*00b67f09SDavid van Moolenbroek	> dig.out.ns5.test$n || ret=1
1059*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns4.test$n dig.out.ns5.test$n || ret=1
1060*00b67f09SDavid van Moolenbroekgrep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1
1061*00b67f09SDavid van Moolenbroek# Note - these are looking for failure, hence the &&
1062*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
1063*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns5.test$n > /dev/null && ret=1
1064*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1065*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1066*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1067*00b67f09SDavid van Moolenbroek
1068*00b67f09SDavid van Moolenbroekecho "I:checking that validation of an ANY query works ($n)"
1069*00b67f09SDavid van Moolenbroekret=0
1070*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth foo.example. any @10.53.0.2 > dig.out.ns2.test$n || ret=1
1071*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth foo.example. any @10.53.0.4 > dig.out.ns4.test$n || ret=1
1072*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1
1073*00b67f09SDavid van Moolenbroekgrep "NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
1074*00b67f09SDavid van Moolenbroek# 2 records in the zone, 1 NXT, 3 SIGs
1075*00b67f09SDavid van Moolenbroekgrep "ANSWER: 6" dig.out.ns4.test$n > /dev/null || ret=1
1076*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1077*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1078*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1079*00b67f09SDavid van Moolenbroek
1080*00b67f09SDavid van Moolenbroekecho "I:checking that validation of a query returning a CNAME works ($n)"
1081*00b67f09SDavid van Moolenbroekret=0
1082*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth cname1.example. txt @10.53.0.2 \
1083*00b67f09SDavid van Moolenbroek	> dig.out.ns2.test$n || ret=1
1084*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth cname1.example. txt @10.53.0.4 \
1085*00b67f09SDavid van Moolenbroek	> dig.out.ns4.test$n || ret=1
1086*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1
1087*00b67f09SDavid van Moolenbroekgrep "NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
1088*00b67f09SDavid van Moolenbroek# the CNAME & its sig, the TXT and its SIG
1089*00b67f09SDavid van Moolenbroekgrep "ANSWER: 4" dig.out.ns4.test$n > /dev/null || ret=1
1090*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1091*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1092*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1093*00b67f09SDavid van Moolenbroek
1094*00b67f09SDavid van Moolenbroekecho "I:checking that validation of a query returning a DNAME works ($n)"
1095*00b67f09SDavid van Moolenbroekret=0
1096*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth foo.dname1.example. txt @10.53.0.2 \
1097*00b67f09SDavid van Moolenbroek	> dig.out.ns2.test$n || ret=1
1098*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth foo.dname1.example. txt @10.53.0.4 \
1099*00b67f09SDavid van Moolenbroek	> dig.out.ns4.test$n || ret=1
1100*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1
1101*00b67f09SDavid van Moolenbroekgrep "NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
1102*00b67f09SDavid van Moolenbroek# The DNAME & its sig, the TXT and its SIG, and the synthesized CNAME.
1103*00b67f09SDavid van Moolenbroek# It would be nice to test that the CNAME is being synthesized by the
1104*00b67f09SDavid van Moolenbroek# recursive server and not cached, but I don't know how.
1105*00b67f09SDavid van Moolenbroekgrep "ANSWER: 5" dig.out.ns4.test$n > /dev/null || ret=1
1106*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1107*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1108*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1109*00b67f09SDavid van Moolenbroek
1110*00b67f09SDavid van Moolenbroekecho "I:checking that validation of an ANY query returning a CNAME works ($n)"
1111*00b67f09SDavid van Moolenbroekret=0
1112*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth cname2.example. any @10.53.0.2 \
1113*00b67f09SDavid van Moolenbroek	> dig.out.ns2.test$n || ret=1
1114*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth cname2.example. any @10.53.0.4 \
1115*00b67f09SDavid van Moolenbroek	> dig.out.ns4.test$n || ret=1
1116*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1
1117*00b67f09SDavid van Moolenbroekgrep "NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
1118*00b67f09SDavid van Moolenbroek# The CNAME, NXT, and their SIGs
1119*00b67f09SDavid van Moolenbroekgrep "ANSWER: 4" dig.out.ns4.test$n > /dev/null || ret=1
1120*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1121*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1122*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1123*00b67f09SDavid van Moolenbroek
1124*00b67f09SDavid van Moolenbroekecho "I:checking that validation of an ANY query returning a DNAME works ($n)"
1125*00b67f09SDavid van Moolenbroekret=0
1126*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth foo.dname2.example. any @10.53.0.2 \
1127*00b67f09SDavid van Moolenbroek	> dig.out.ns2.test$n || ret=1
1128*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth foo.dname2.example. any @10.53.0.4 \
1129*00b67f09SDavid van Moolenbroek	> dig.out.ns4.test$n || ret=1
1130*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1
1131*00b67f09SDavid van Moolenbroekgrep "NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
1132*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1133*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1134*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1135*00b67f09SDavid van Moolenbroek
1136*00b67f09SDavid van Moolenbroekecho "I:checking that positive validation in a privately secure zone works ($n)"
1137*00b67f09SDavid van Moolenbroekret=0
1138*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.private.secure.example. a @10.53.0.2 \
1139*00b67f09SDavid van Moolenbroek	> dig.out.ns2.test$n || ret=1
1140*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.private.secure.example. a @10.53.0.4 \
1141*00b67f09SDavid van Moolenbroek	> dig.out.ns4.test$n || ret=1
1142*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1
1143*00b67f09SDavid van Moolenbroekgrep "NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
1144*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the &&
1145*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
1146*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1147*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1148*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1149*00b67f09SDavid van Moolenbroek
1150*00b67f09SDavid van Moolenbroekecho "I:checking that negative validation in a privately secure zone works ($n)"
1151*00b67f09SDavid van Moolenbroekret=0
1152*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.private.secure.example. a @10.53.0.2 \
1153*00b67f09SDavid van Moolenbroek	> dig.out.ns2.test$n || ret=1
1154*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.private.secure.example. a @10.53.0.4 \
1155*00b67f09SDavid van Moolenbroek	> dig.out.ns4.test$n || ret=1
1156*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1
1157*00b67f09SDavid van Moolenbroekgrep "NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1
1158*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the &&
1159*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
1160*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1161*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1162*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1163*00b67f09SDavid van Moolenbroek
1164*00b67f09SDavid van Moolenbroekecho "I:checking that lookups succeed after disabling a algorithm works ($n)"
1165*00b67f09SDavid van Moolenbroekret=0
1166*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth example. SOA @10.53.0.2 \
1167*00b67f09SDavid van Moolenbroek	> dig.out.ns2.test$n || ret=1
1168*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth example. SOA @10.53.0.6 \
1169*00b67f09SDavid van Moolenbroek	> dig.out.ns6.test$n || ret=1
1170*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns6.test$n || ret=1
1171*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the &&
1172*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns6.test$n > /dev/null && ret=1
1173*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1174*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1175*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1176*00b67f09SDavid van Moolenbroek
1177*00b67f09SDavid van Moolenbroekecho "I:checking privately secure to nxdomain works ($n)"
1178*00b67f09SDavid van Moolenbroekret=0
1179*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth private2secure-nxdomain.private.secure.example. SOA @10.53.0.2 \
1180*00b67f09SDavid van Moolenbroek	> dig.out.ns2.test$n || ret=1
1181*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth private2secure-nxdomain.private.secure.example. SOA @10.53.0.4 \
1182*00b67f09SDavid van Moolenbroek	> dig.out.ns4.test$n || ret=1
1183*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1
1184*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the &&
1185*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
1186*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1187*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1188*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1189*00b67f09SDavid van Moolenbroek
1190*00b67f09SDavid van Moolenbroekecho "I:checking privately secure wildcard to nxdomain works ($n)"
1191*00b67f09SDavid van Moolenbroekret=0
1192*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.wild.private.secure.example. SOA @10.53.0.2 \
1193*00b67f09SDavid van Moolenbroek	> dig.out.ns2.test$n || ret=1
1194*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.wild.private.secure.example. SOA @10.53.0.4 \
1195*00b67f09SDavid van Moolenbroek	> dig.out.ns4.test$n || ret=1
1196*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1
1197*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the &&
1198*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
1199*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1200*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1201*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1202*00b67f09SDavid van Moolenbroek
1203*00b67f09SDavid van Moolenbroekecho "I:checking a non-cachable NODATA works ($n)"
1204*00b67f09SDavid van Moolenbroekret=0
1205*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.nosoa.secure.example. txt @10.53.0.7 \
1206*00b67f09SDavid van Moolenbroek	> dig.out.ns7.test$n || ret=1
1207*00b67f09SDavid van Moolenbroekgrep "AUTHORITY: 0" dig.out.ns7.test$n > /dev/null || ret=1
1208*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.nosoa.secure.example. txt @10.53.0.4 \
1209*00b67f09SDavid van Moolenbroek	> dig.out.ns4.test$n || ret=1
1210*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
1211*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1212*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1213*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1214*00b67f09SDavid van Moolenbroek
1215*00b67f09SDavid van Moolenbroekecho "I:checking a non-cachable NXDOMAIN works ($n)"
1216*00b67f09SDavid van Moolenbroekret=0
1217*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth b.nosoa.secure.example. txt @10.53.0.7 \
1218*00b67f09SDavid van Moolenbroek	> dig.out.ns7.test$n || ret=1
1219*00b67f09SDavid van Moolenbroekgrep "AUTHORITY: 0" dig.out.ns7.test$n > /dev/null || ret=1
1220*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth b.nosoa.secure.example. txt @10.53.0.4 \
1221*00b67f09SDavid van Moolenbroek	> dig.out.ns4.test$n || ret=1
1222*00b67f09SDavid van Moolenbroekgrep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1
1223*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1224*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1225*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1226*00b67f09SDavid van Moolenbroek
1227*00b67f09SDavid van Moolenbroek#
1228*00b67f09SDavid van Moolenbroek# private.secure.example is served by the same server as its
1229*00b67f09SDavid van Moolenbroek# grand parent and there is not a secure delegation from secure.example
1230*00b67f09SDavid van Moolenbroek# to private.secure.example.  In addition secure.example is using a
1231*00b67f09SDavid van Moolenbroek# algorithm which the validation does not support.
1232*00b67f09SDavid van Moolenbroek#
1233*00b67f09SDavid van Moolenbroekecho "I:checking dnssec-lookaside-validation works ($n)"
1234*00b67f09SDavid van Moolenbroekret=0
1235*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS private.secure.example. SOA @10.53.0.6 \
1236*00b67f09SDavid van Moolenbroek	> dig.out.ns6.test$n || ret=1
1237*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns6.test$n > /dev/null || ret=1
1238*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1239*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1240*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1241*00b67f09SDavid van Moolenbroek
1242*00b67f09SDavid van Moolenbroekecho "I:checking that we can load a rfc2535 signed zone ($n)"
1243*00b67f09SDavid van Moolenbroekret=0
1244*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS rfc2535.example. SOA @10.53.0.2 \
1245*00b67f09SDavid van Moolenbroek	> dig.out.ns2.test$n || ret=1
1246*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns2.test$n > /dev/null || ret=1
1247*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1248*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1249*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1250*00b67f09SDavid van Moolenbroek
1251*00b67f09SDavid van Moolenbroekecho "I:checking that we can transfer a rfc2535 signed zone ($n)"
1252*00b67f09SDavid van Moolenbroekret=0
1253*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS rfc2535.example. SOA @10.53.0.3 \
1254*00b67f09SDavid van Moolenbroek	> dig.out.ns3.test$n || ret=1
1255*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns3.test$n > /dev/null || ret=1
1256*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1257*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1258*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1259*00b67f09SDavid van Moolenbroek
1260*00b67f09SDavid van Moolenbroekecho "I:checking that we can sign a zone with out-of-zone records ($n)"
1261*00b67f09SDavid van Moolenbroekret=0
1262*00b67f09SDavid van Moolenbroekzone=example
1263*00b67f09SDavid van Moolenbroekkey1=`$KEYGEN -K signer -q -r $RANDFILE -a NSEC3RSASHA1 -b 1024 -n zone $zone`
1264*00b67f09SDavid van Moolenbroekkey2=`$KEYGEN -K signer -q -r $RANDFILE -f KSK -a NSEC3RSASHA1 -b 1024 -n zone $zone`
1265*00b67f09SDavid van Moolenbroek(
1266*00b67f09SDavid van Moolenbroekcd signer
1267*00b67f09SDavid van Moolenbroekcat example.db.in $key1.key $key2.key > example.db
1268*00b67f09SDavid van Moolenbroek$SIGNER -o example -f example.db example.db > /dev/null 2>&1
1269*00b67f09SDavid van Moolenbroek) || ret=1
1270*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1271*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1272*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1273*00b67f09SDavid van Moolenbroek
1274*00b67f09SDavid van Moolenbroekecho "I:checking that we can sign a zone (NSEC3) with out-of-zone records ($n)"
1275*00b67f09SDavid van Moolenbroekret=0
1276*00b67f09SDavid van Moolenbroekzone=example
1277*00b67f09SDavid van Moolenbroekkey1=`$KEYGEN -K signer -q -r $RANDFILE -a NSEC3RSASHA1 -b 1024 -n zone $zone`
1278*00b67f09SDavid van Moolenbroekkey2=`$KEYGEN -K signer -q -r $RANDFILE -f KSK -a NSEC3RSASHA1 -b 1024 -n zone $zone`
1279*00b67f09SDavid van Moolenbroek(
1280*00b67f09SDavid van Moolenbroekcd signer
1281*00b67f09SDavid van Moolenbroekcat example.db.in $key1.key $key2.key > example.db
1282*00b67f09SDavid van Moolenbroek$SIGNER -3 - -H 10 -o example -f example.db example.db > /dev/null 2>&1
1283*00b67f09SDavid van Moolenbroekawk '/^IQF9LQTLK/ {
1284*00b67f09SDavid van Moolenbroek		printf("%s", $0);
1285*00b67f09SDavid van Moolenbroek		while (!index($0, ")")) {
1286*00b67f09SDavid van Moolenbroek			if (getline <= 0)
1287*00b67f09SDavid van Moolenbroek				break;
1288*00b67f09SDavid van Moolenbroek			printf (" %s", $0);
1289*00b67f09SDavid van Moolenbroek		}
1290*00b67f09SDavid van Moolenbroek		printf("\n");
1291*00b67f09SDavid van Moolenbroek	}' example.db | sed 's/[ 	][ 	]*/ /g' > nsec3param.out
1292*00b67f09SDavid van Moolenbroek
1293*00b67f09SDavid van Moolenbroekgrep "IQF9LQTLKKNFK0KVIFELRAK4IC4QLTMG.example. 0 IN NSEC3 1 0 10 - ( IQF9LQTLKKNFK0KVIFELRAK4IC4QLTMG A NS SOA RRSIG DNSKEY NSEC3PARAM )" nsec3param.out > /dev/null
1294*00b67f09SDavid van Moolenbroek) || ret=1
1295*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1296*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1297*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1298*00b67f09SDavid van Moolenbroek
1299*00b67f09SDavid van Moolenbroekecho "I:checking NSEC3 signing with empty nonterminals above a delegation ($n)"
1300*00b67f09SDavid van Moolenbroekret=0
1301*00b67f09SDavid van Moolenbroekzone=example
1302*00b67f09SDavid van Moolenbroekkey1=`$KEYGEN -K signer -q -r $RANDFILE -a NSEC3RSASHA1 -b 1024 -n zone $zone`
1303*00b67f09SDavid van Moolenbroekkey2=`$KEYGEN -K signer -q -r $RANDFILE -f KSK -a NSEC3RSASHA1 -b 1024 -n zone $zone`
1304*00b67f09SDavid van Moolenbroek(
1305*00b67f09SDavid van Moolenbroekcd signer
1306*00b67f09SDavid van Moolenbroekcat example.db.in $key1.key $key2.key > example3.db
1307*00b67f09SDavid van Moolenbroekecho "some.empty.nonterminal.nodes.example 60 IN NS ns.example.tld" >> example3.db
1308*00b67f09SDavid van Moolenbroek$SIGNER -3 - -A -H 10 -o example -f example3.db example3.db > /dev/null 2>&1
1309*00b67f09SDavid van Moolenbroekawk '/^IQF9LQTLK/ {
1310*00b67f09SDavid van Moolenbroek		printf("%s", $0);
1311*00b67f09SDavid van Moolenbroek		while (!index($0, ")")) {
1312*00b67f09SDavid van Moolenbroek			if (getline <= 0)
1313*00b67f09SDavid van Moolenbroek				break;
1314*00b67f09SDavid van Moolenbroek			printf (" %s", $0);
1315*00b67f09SDavid van Moolenbroek		}
1316*00b67f09SDavid van Moolenbroek		printf("\n");
1317*00b67f09SDavid van Moolenbroek	}' example.db | sed 's/[ 	][ 	]*/ /g' > nsec3param.out
1318*00b67f09SDavid van Moolenbroek
1319*00b67f09SDavid van Moolenbroekgrep "IQF9LQTLKKNFK0KVIFELRAK4IC4QLTMG.example. 0 IN NSEC3 1 0 10 - ( IQF9LQTLKKNFK0KVIFELRAK4IC4QLTMG A NS SOA RRSIG DNSKEY NSEC3PARAM )" nsec3param.out > /dev/null
1320*00b67f09SDavid van Moolenbroek) || ret=1
1321*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1322*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1323*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1324*00b67f09SDavid van Moolenbroek
1325*00b67f09SDavid van Moolenbroekecho "I:checking that dnsssec-signzone updates originalttl on ttl changes ($n)"
1326*00b67f09SDavid van Moolenbroekret=0
1327*00b67f09SDavid van Moolenbroekzone=example
1328*00b67f09SDavid van Moolenbroekkey1=`$KEYGEN -K signer -q -r $RANDFILE -a RSASHA1 -b 1024 -n zone $zone`
1329*00b67f09SDavid van Moolenbroekkey2=`$KEYGEN -K signer -q -r $RANDFILE -f KSK -a RSASHA1 -b 1024 -n zone $zone`
1330*00b67f09SDavid van Moolenbroek(
1331*00b67f09SDavid van Moolenbroekcd signer
1332*00b67f09SDavid van Moolenbroekcat example.db.in $key1.key $key2.key > example.db
1333*00b67f09SDavid van Moolenbroek$SIGNER -o example -f example.db.before example.db > /dev/null 2>&1
1334*00b67f09SDavid van Moolenbroeksed 's/60.IN.SOA./50 IN SOA /' example.db.before > example.db.changed
1335*00b67f09SDavid van Moolenbroek$SIGNER -o example -f example.db.after example.db.changed > /dev/null 2>&1
1336*00b67f09SDavid van Moolenbroek)
1337*00b67f09SDavid van Moolenbroekgrep "SOA 5 1 50" signer/example.db.after > /dev/null || ret=1
1338*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1339*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1340*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1341*00b67f09SDavid van Moolenbroek
1342*00b67f09SDavid van Moolenbroekecho "I:checking dnssec-signzone keeps valid signatures from removed keys ($n)"
1343*00b67f09SDavid van Moolenbroekret=0
1344*00b67f09SDavid van Moolenbroekzone=example
1345*00b67f09SDavid van Moolenbroekkey1=`$KEYGEN -K signer -q -r $RANDFILE -f KSK -a RSASHA1 -b 1024 -n zone $zone`
1346*00b67f09SDavid van Moolenbroekkey2=`$KEYGEN -K signer -q -r $RANDFILE -a RSASHA1 -b 1024 -n zone $zone`
1347*00b67f09SDavid van Moolenbroekkeyid2=`echo $key2 | sed 's/^Kexample.+005+0*\([0-9]\)/\1/'`
1348*00b67f09SDavid van Moolenbroekkey3=`$KEYGEN -K signer -q -r $RANDFILE -a RSASHA1 -b 1024 -n zone $zone`
1349*00b67f09SDavid van Moolenbroekkeyid3=`echo $key3 | sed 's/^Kexample.+005+0*\([0-9]\)/\1/'`
1350*00b67f09SDavid van Moolenbroek(
1351*00b67f09SDavid van Moolenbroekcd signer
1352*00b67f09SDavid van Moolenbroekcat example.db.in $key1.key $key2.key > example.db
1353*00b67f09SDavid van Moolenbroek$SIGNER -D -o example example.db > /dev/null 2>&1
1354*00b67f09SDavid van Moolenbroek
1355*00b67f09SDavid van Moolenbroek# now switch out key2 for key3 and resign the zone
1356*00b67f09SDavid van Moolenbroekcat example.db.in $key1.key $key3.key > example.db
1357*00b67f09SDavid van Moolenbroekecho '$INCLUDE "example.db.signed"' >> example.db
1358*00b67f09SDavid van Moolenbroek$SIGNER -D -o example example.db > /dev/null 2>&1
1359*00b67f09SDavid van Moolenbroek) || ret=1
1360*00b67f09SDavid van Moolenbroekgrep " $keyid2 " signer/example.db.signed > /dev/null 2>&1 || ret=1
1361*00b67f09SDavid van Moolenbroekgrep " $keyid3 " signer/example.db.signed > /dev/null 2>&1 || ret=1
1362*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1363*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1364*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1365*00b67f09SDavid van Moolenbroek
1366*00b67f09SDavid van Moolenbroekecho "I:checking dnssec-signzone -R purges signatures from removed keys ($n)"
1367*00b67f09SDavid van Moolenbroekret=0
1368*00b67f09SDavid van Moolenbroek(
1369*00b67f09SDavid van Moolenbroekcd signer
1370*00b67f09SDavid van Moolenbroek$SIGNER -RD -o example example.db > /dev/null 2>&1
1371*00b67f09SDavid van Moolenbroek) || ret=1
1372*00b67f09SDavid van Moolenbroekgrep " $keyid2 " signer/example.db.signed > /dev/null 2>&1 && ret=1
1373*00b67f09SDavid van Moolenbroekgrep " $keyid3 " signer/example.db.signed > /dev/null 2>&1 || ret=1
1374*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1375*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1376*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1377*00b67f09SDavid van Moolenbroek
1378*00b67f09SDavid van Moolenbroekecho "I:checking dnssec-signzone keeps valid signatures from inactive keys ($n)"
1379*00b67f09SDavid van Moolenbroekret=0
1380*00b67f09SDavid van Moolenbroekzone=example
1381*00b67f09SDavid van Moolenbroek(
1382*00b67f09SDavid van Moolenbroekcd signer
1383*00b67f09SDavid van Moolenbroekcp -f example.db.in example.db
1384*00b67f09SDavid van Moolenbroek$SIGNER -SD -o example example.db > /dev/null 2>&1
1385*00b67f09SDavid van Moolenbroekecho '$INCLUDE "example.db.signed"' >> example.db
1386*00b67f09SDavid van Moolenbroek# now retire key2 and resign the zone
1387*00b67f09SDavid van Moolenbroek$SETTIME -I now $key2 > /dev/null 2>&1
1388*00b67f09SDavid van Moolenbroek$SIGNER -SD -o example example.db > /dev/null 2>&1
1389*00b67f09SDavid van Moolenbroek) || ret=1
1390*00b67f09SDavid van Moolenbroekgrep " $keyid2 " signer/example.db.signed > /dev/null 2>&1 || ret=1
1391*00b67f09SDavid van Moolenbroekgrep " $keyid3 " signer/example.db.signed > /dev/null 2>&1 || ret=1
1392*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1393*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1394*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1395*00b67f09SDavid van Moolenbroek
1396*00b67f09SDavid van Moolenbroekecho "I:checking dnssec-signzone -Q purges signatures from inactive keys ($n)"
1397*00b67f09SDavid van Moolenbroekret=0
1398*00b67f09SDavid van Moolenbroek(
1399*00b67f09SDavid van Moolenbroekcd signer
1400*00b67f09SDavid van Moolenbroek$SIGNER -SDQ -o example example.db > /dev/null 2>&1
1401*00b67f09SDavid van Moolenbroek) || ret=1
1402*00b67f09SDavid van Moolenbroekgrep " $keyid2 " signer/example.db.signed > /dev/null 2>&1 && ret=1
1403*00b67f09SDavid van Moolenbroekgrep " $keyid3 " signer/example.db.signed > /dev/null 2>&1 || ret=1
1404*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1405*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1406*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1407*00b67f09SDavid van Moolenbroek
1408*00b67f09SDavid van Moolenbroekecho "I:checking dnssec-signzone retains unexpired signatures ($n)"
1409*00b67f09SDavid van Moolenbroekret=0
1410*00b67f09SDavid van Moolenbroek(
1411*00b67f09SDavid van Moolenbroekcd signer
1412*00b67f09SDavid van Moolenbroek$SIGNER -Sxt -o example example.db > signer.out.1 2>&1
1413*00b67f09SDavid van Moolenbroek$SIGNER -Sxt -o example -f example.db.signed example.db.signed > signer.out.2 2>&1
1414*00b67f09SDavid van Moolenbroek) || ret=1
1415*00b67f09SDavid van Moolenbroekgen1=`awk '/generated/ {print $3}' signer/signer.out.1`
1416*00b67f09SDavid van Moolenbroekretain1=`awk '/retained/ {print $3}' signer/signer.out.1`
1417*00b67f09SDavid van Moolenbroekdrop1=`awk '/dropped/ {print $3}' signer/signer.out.1`
1418*00b67f09SDavid van Moolenbroekgen2=`awk '/generated/ {print $3}' signer/signer.out.2`
1419*00b67f09SDavid van Moolenbroekretain2=`awk '/retained/ {print $3}' signer/signer.out.2`
1420*00b67f09SDavid van Moolenbroekdrop2=`awk '/dropped/ {print $3}' signer/signer.out.2`
1421*00b67f09SDavid van Moolenbroek[ "$retain2" -eq `expr "$gen1" + "$retain1"` ] || ret=1
1422*00b67f09SDavid van Moolenbroek[ "$gen2" -eq 0 ] || ret=1
1423*00b67f09SDavid van Moolenbroek[ "$drop2" -eq 0 ] || ret=1
1424*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1425*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1426*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1427*00b67f09SDavid van Moolenbroek
1428*00b67f09SDavid van Moolenbroekecho "I:checking dnssec-signzone purges RRSIGs from formerly-owned glue (nsec) ($n)"
1429*00b67f09SDavid van Moolenbroekret=0
1430*00b67f09SDavid van Moolenbroek(
1431*00b67f09SDavid van Moolenbroekcd signer
1432*00b67f09SDavid van Moolenbroek# remove NSEC-only keys
1433*00b67f09SDavid van Moolenbroekrm -f Kexample.+005*
1434*00b67f09SDavid van Moolenbroekcp -f example.db.in example2.db
1435*00b67f09SDavid van Moolenbroekcat << EOF >> example2.db
1436*00b67f09SDavid van Moolenbroeksub1.example. IN A 10.53.0.1
1437*00b67f09SDavid van Moolenbroekns.sub2.example. IN A 10.53.0.2
1438*00b67f09SDavid van MoolenbroekEOF
1439*00b67f09SDavid van Moolenbroekecho '$INCLUDE "example2.db.signed"' >> example2.db
1440*00b67f09SDavid van Moolenbroektouch example2.db.signed
1441*00b67f09SDavid van Moolenbroek$SIGNER -DS -O full -f example2.db.signed -o example example2.db > /dev/null 2>&1
1442*00b67f09SDavid van Moolenbroek) || ret=1
1443*00b67f09SDavid van Moolenbroekgrep "^sub1\.example\..*RRSIG[ 	]A[ 	]" signer/example2.db.signed > /dev/null 2>&1 || ret=1
1444*00b67f09SDavid van Moolenbroekgrep "^ns\.sub2\.example\..*RRSIG[ 	]A[ 	]" signer/example2.db.signed > /dev/null 2>&1 || ret=1
1445*00b67f09SDavid van Moolenbroek(
1446*00b67f09SDavid van Moolenbroekcd signer
1447*00b67f09SDavid van Moolenbroekcp -f example.db.in example2.db
1448*00b67f09SDavid van Moolenbroekcat << EOF >> example2.db
1449*00b67f09SDavid van Moolenbroeksub1.example. IN NS sub1.example.
1450*00b67f09SDavid van Moolenbroeksub1.example. IN A 10.53.0.1
1451*00b67f09SDavid van Moolenbroeksub2.example. IN NS ns.sub2.example.
1452*00b67f09SDavid van Moolenbroekns.sub2.example. IN A 10.53.0.2
1453*00b67f09SDavid van MoolenbroekEOF
1454*00b67f09SDavid van Moolenbroekecho '$INCLUDE "example2.db.signed"' >> example2.db
1455*00b67f09SDavid van Moolenbroek$SIGNER -DS -O full -f example2.db.signed -o example example2.db > /dev/null 2>&1
1456*00b67f09SDavid van Moolenbroek) || ret=1
1457*00b67f09SDavid van Moolenbroekgrep "^sub1\.example\..*RRSIG[ 	]A[ 	]" signer/example2.db.signed > /dev/null 2>&1 && ret=1
1458*00b67f09SDavid van Moolenbroekgrep "^ns\.sub2\.example\..*RRSIG[ 	]A[ 	]" signer/example2.db.signed > /dev/null 2>&1 && ret=1
1459*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1460*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1461*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1462*00b67f09SDavid van Moolenbroek
1463*00b67f09SDavid van Moolenbroekecho "I:checking dnssec-signzone purges RRSIGs from formerly-owned glue (nsec3) ($n)"
1464*00b67f09SDavid van Moolenbroekret=0
1465*00b67f09SDavid van Moolenbroek(
1466*00b67f09SDavid van Moolenbroekcd signer
1467*00b67f09SDavid van Moolenbroekrm -f example2.db.signed
1468*00b67f09SDavid van Moolenbroekcp -f example.db.in example2.db
1469*00b67f09SDavid van Moolenbroekcat << EOF >> example2.db
1470*00b67f09SDavid van Moolenbroeksub1.example. IN A 10.53.0.1
1471*00b67f09SDavid van Moolenbroekns.sub2.example. IN A 10.53.0.2
1472*00b67f09SDavid van MoolenbroekEOF
1473*00b67f09SDavid van Moolenbroekecho '$INCLUDE "example2.db.signed"' >> example2.db
1474*00b67f09SDavid van Moolenbroektouch example2.db.signed
1475*00b67f09SDavid van Moolenbroek$SIGNER -DS -3 feedabee -O full -f example2.db.signed -o example example2.db > /dev/null 2>&1
1476*00b67f09SDavid van Moolenbroek) || ret=1
1477*00b67f09SDavid van Moolenbroekgrep "^sub1\.example\..*RRSIG[ 	]A[ 	]" signer/example2.db.signed > /dev/null 2>&1 || ret=1
1478*00b67f09SDavid van Moolenbroekgrep "^ns\.sub2\.example\..*RRSIG[ 	]A[ 	]" signer/example2.db.signed > /dev/null 2>&1 || ret=1
1479*00b67f09SDavid van Moolenbroek(
1480*00b67f09SDavid van Moolenbroekcd signer
1481*00b67f09SDavid van Moolenbroekcp -f example.db.in example2.db
1482*00b67f09SDavid van Moolenbroekcat << EOF >> example2.db
1483*00b67f09SDavid van Moolenbroeksub1.example. IN NS sub1.example.
1484*00b67f09SDavid van Moolenbroeksub1.example. IN A 10.53.0.1
1485*00b67f09SDavid van Moolenbroeksub2.example. IN NS ns.sub2.example.
1486*00b67f09SDavid van Moolenbroekns.sub2.example. IN A 10.53.0.2
1487*00b67f09SDavid van MoolenbroekEOF
1488*00b67f09SDavid van Moolenbroekecho '$INCLUDE "example2.db.signed"' >> example2.db
1489*00b67f09SDavid van Moolenbroek$SIGNER -DS -3 feedabee -O full -f example2.db.signed -o example example2.db > /dev/null 2>&1
1490*00b67f09SDavid van Moolenbroek) || ret=1
1491*00b67f09SDavid van Moolenbroekgrep "^sub1\.example\..*RRSIG[ 	]A[ 	]" signer/example2.db.signed > /dev/null 2>&1 && ret=1
1492*00b67f09SDavid van Moolenbroekgrep "^ns\.sub2\.example\..*RRSIG[ 	]A[ 	]" signer/example2.db.signed > /dev/null 2>&1 && ret=1
1493*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1494*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1495*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1496*00b67f09SDavid van Moolenbroek
1497*00b67f09SDavid van Moolenbroekecho "I:checking dnssec-signzone output format ($n)"
1498*00b67f09SDavid van Moolenbroekret=0
1499*00b67f09SDavid van Moolenbroek(
1500*00b67f09SDavid van Moolenbroekcd signer
1501*00b67f09SDavid van Moolenbroek$SIGNER -O full -f - -Sxt -o example example.db > signer.out.3 2> /dev/null
1502*00b67f09SDavid van Moolenbroek$SIGNER -O text -f - -Sxt -o example example.db > signer.out.4 2> /dev/null
1503*00b67f09SDavid van Moolenbroek$SIGNER -O raw -f signer.out.5 -Sxt -o example example.db > /dev/null 2>&1
1504*00b67f09SDavid van Moolenbroek$SIGNER -O raw=0 -f signer.out.6 -Sxt -o example example.db > /dev/null 2>&1
1505*00b67f09SDavid van Moolenbroek$SIGNER -O raw -f - -Sxt -o example example.db > signer.out.7 2> /dev/null
1506*00b67f09SDavid van Moolenbroek) || ret=1
1507*00b67f09SDavid van Moolenbroekawk '/IN *SOA/ {if (NF != 11) exit(1)}' signer/signer.out.3 || ret=1
1508*00b67f09SDavid van Moolenbroekawk '/IN *SOA/ {if (NF != 7) exit(1)}' signer/signer.out.4 || ret=1
1509*00b67f09SDavid van Moolenbroekisraw1 signer/signer.out.5 || ret=1
1510*00b67f09SDavid van Moolenbroekisraw0 signer/signer.out.6 || ret=1
1511*00b67f09SDavid van Moolenbroekisraw1 signer/signer.out.7 || ret=1
1512*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1513*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1514*00b67f09SDavid van Moolenbroek
1515*00b67f09SDavid van Moolenbroekecho "I:checking dnssec-signzone output format ($n)"
1516*00b67f09SDavid van Moolenbroekret=0
1517*00b67f09SDavid van Moolenbroek(
1518*00b67f09SDavid van Moolenbroekcd signer
1519*00b67f09SDavid van Moolenbroek$SIGNER -O full -f - -Sxt -o example example.db > signer.out.3 2>&1
1520*00b67f09SDavid van Moolenbroek$SIGNER -O text -f - -Sxt -o example example.db > signer.out.4 2>&1
1521*00b67f09SDavid van Moolenbroek) || ret=1
1522*00b67f09SDavid van Moolenbroekawk '/IN *SOA/ {if (NF != 11) exit(1)}' signer/signer.out.3 || ret=1
1523*00b67f09SDavid van Moolenbroekawk '/IN *SOA/ {if (NF != 7) exit(1)}' signer/signer.out.4 || ret=1
1524*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1525*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1526*00b67f09SDavid van Moolenbroek
1527*00b67f09SDavid van Moolenbroekecho "I:checking TTLs are capped by dnssec-signzone -M ($n)"
1528*00b67f09SDavid van Moolenbroekret=0
1529*00b67f09SDavid van Moolenbroek(
1530*00b67f09SDavid van Moolenbroekcd signer
1531*00b67f09SDavid van Moolenbroek$SIGNER -O full -f signer.out.8 -S -M 30 -o example example.db > /dev/null 2>&1
1532*00b67f09SDavid van Moolenbroek) || ret=1
1533*00b67f09SDavid van Moolenbroekawk '/^;/ { next; } $2 > 30 { exit 1; }' signer/signer.out.8 || ret=1
1534*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1535*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1536*00b67f09SDavid van Moolenbroek
1537*00b67f09SDavid van Moolenbroekecho "I:checking validated data are not cached longer than originalttl ($n)"
1538*00b67f09SDavid van Moolenbroekret=0
1539*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +ttl +noauth a.ttlpatch.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1
1540*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +ttl +noauth a.ttlpatch.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1
1541*00b67f09SDavid van Moolenbroekgrep "3600.IN" dig.out.ns3.test$n > /dev/null || ret=1
1542*00b67f09SDavid van Moolenbroekgrep "300.IN" dig.out.ns3.test$n > /dev/null && ret=1
1543*00b67f09SDavid van Moolenbroekgrep "300.IN" dig.out.ns4.test$n > /dev/null || ret=1
1544*00b67f09SDavid van Moolenbroekgrep "3600.IN" dig.out.ns4.test$n > /dev/null && ret=1
1545*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1546*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1547*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1548*00b67f09SDavid van Moolenbroek
1549*00b67f09SDavid van Moolenbroek# Test that "rndc secroots" is able to dump trusted keys
1550*00b67f09SDavid van Moolenbroekecho "I:checking rndc secroots ($n)"
1551*00b67f09SDavid van Moolenbroekret=0
1552*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.4 -p 9953 secroots 2>&1 | sed 's/^/I:ns1 /'
1553*00b67f09SDavid van Moolenbroekkeyid=`cat ns1/managed.key.id`
1554*00b67f09SDavid van Moolenbroekcp ns4/named.secroots named.secroots.test$n
1555*00b67f09SDavid van Moolenbroeklinecount=`grep "./RSAMD5/$keyid ; trusted" named.secroots.test$n | wc -l`
1556*00b67f09SDavid van Moolenbroek[ "$linecount" -eq 1 ] || ret=1
1557*00b67f09SDavid van Moolenbroeklinecount=`cat named.secroots.test$n | wc -l`
1558*00b67f09SDavid van Moolenbroek[ "$linecount" -eq 5 ] || ret=1
1559*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1560*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1561*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1562*00b67f09SDavid van Moolenbroek
1563*00b67f09SDavid van Moolenbroek# Check direct query for RRSIG.  If we first ask for normal (non RRSIG)
1564*00b67f09SDavid van Moolenbroek# record, the corresponding RRSIG should be cached and subsequent query
1565*00b67f09SDavid van Moolenbroek# for RRSIG will be returned with the cached record.
1566*00b67f09SDavid van Moolenbroekecho "I:checking RRSIG query from cache ($n)"
1567*00b67f09SDavid van Moolenbroekret=0
1568*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS normalthenrrsig.secure.example. @10.53.0.4 a > /dev/null || ret=1
1569*00b67f09SDavid van Moolenbroekans=`$DIG $DIGOPTS +short normalthenrrsig.secure.example. @10.53.0.4 rrsig` || ret=1
1570*00b67f09SDavid van Moolenbroekexpect=`$DIG $DIGOPTS +short normalthenrrsig.secure.example. @10.53.0.3 rrsig | grep '^A' ` || ret=1
1571*00b67f09SDavid van Moolenbroektest "$ans" = "$expect" || ret=1
1572*00b67f09SDavid van Moolenbroek# also check that RA is set
1573*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS normalthenrrsig.secure.example. @10.53.0.4 rrsig > dig.out.ns4.test$n || ret=1
1574*00b67f09SDavid van Moolenbroekgrep "flags:.*ra.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
1575*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1576*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1577*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1578*00b67f09SDavid van Moolenbroek
1579*00b67f09SDavid van Moolenbroek# Check direct query for RRSIG: If it's not cached with other records,
1580*00b67f09SDavid van Moolenbroek# it should result in an empty response.
1581*00b67f09SDavid van Moolenbroekecho "I:checking RRSIG query not in cache ($n)"
1582*00b67f09SDavid van Moolenbroekret=0
1583*00b67f09SDavid van Moolenbroekans=`$DIG $DIGOPTS +short rrsigonly.secure.example. @10.53.0.4 rrsig` || ret=1
1584*00b67f09SDavid van Moolenbroektest -z "$ans" || ret=1
1585*00b67f09SDavid van Moolenbroek# also check that RA is cleared
1586*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS rrsigonly.secure.example. @10.53.0.4 rrsig > dig.out.ns4.test$n || ret=1
1587*00b67f09SDavid van Moolenbroekgrep "flags:.*ra.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
1588*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1589*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1590*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1591*00b67f09SDavid van Moolenbroek
1592*00b67f09SDavid van Moolenbroek#
1593*00b67f09SDavid van Moolenbroek# RT21868 regression test.
1594*00b67f09SDavid van Moolenbroek#
1595*00b67f09SDavid van Moolenbroekecho "I:checking NSEC3 zone with mismatched NSEC3PARAM / NSEC parameters ($n)"
1596*00b67f09SDavid van Moolenbroekret=0
1597*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS non-exist.badparam. @10.53.0.2 a > dig.out.ns2.test$n || ret=1
1598*00b67f09SDavid van Moolenbroekgrep "status: NXDOMAIN" dig.out.ns2.test$n > /dev/null || ret=1
1599*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1600*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1601*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1602*00b67f09SDavid van Moolenbroek
1603*00b67f09SDavid van Moolenbroek#
1604*00b67f09SDavid van Moolenbroek# RT22007 regression test.
1605*00b67f09SDavid van Moolenbroek#
1606*00b67f09SDavid van Moolenbroekecho "I:checking optout NSEC3 referral with only insecure delegations ($n)"
1607*00b67f09SDavid van Moolenbroekret=0
1608*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +norec delegation.single-nsec3. @10.53.0.2 a > dig.out.ns2.test$n || ret=1
1609*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns2.test$n > /dev/null || ret=1
1610*00b67f09SDavid van Moolenbroekgrep "3KL3NK1HKQ4IUEEHBEF12VGFKUETNBAN.*NSEC3 1 1 1 - 3KL3NK1HKQ4IUEEHBEF12VGFKUETNBAN" dig.out.ns2.test$n > /dev/null || ret=1
1611*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1612*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1613*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1614*00b67f09SDavid van Moolenbroek
1615*00b67f09SDavid van Moolenbroekecho "I:checking optout NSEC3 NXDOMAIN with only insecure delegations ($n)"
1616*00b67f09SDavid van Moolenbroekret=0
1617*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +norec nonexist.single-nsec3. @10.53.0.2 a > dig.out.ns2.test$n || ret=1
1618*00b67f09SDavid van Moolenbroekgrep "status: NXDOMAIN" dig.out.ns2.test$n > /dev/null || ret=1
1619*00b67f09SDavid van Moolenbroekgrep "3KL3NK1HKQ4IUEEHBEF12VGFKUETNBAN.*NSEC3 1 1 1 - 3KL3NK1HKQ4IUEEHBEF12VGFKUETNBAN" dig.out.ns2.test$n > /dev/null || ret=1
1620*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1621*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1622*00b67f09SDavid van Moolenbroek
1623*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1624*00b67f09SDavid van Moolenbroekecho "I:checking optout NSEC3 nodata with only insecure delegations ($n)"
1625*00b67f09SDavid van Moolenbroekret=0
1626*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +norec single-nsec3. @10.53.0.2 a > dig.out.ns2.test$n || ret=1
1627*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns2.test$n > /dev/null || ret=1
1628*00b67f09SDavid van Moolenbroekgrep "3KL3NK1HKQ4IUEEHBEF12VGFKUETNBAN.*NSEC3 1 1 1 - 3KL3NK1HKQ4IUEEHBEF12VGFKUETNBAN" dig.out.ns2.test$n > /dev/null || ret=1
1629*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1630*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1631*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1632*00b67f09SDavid van Moolenbroek
1633*00b67f09SDavid van Moolenbroekecho "I:checking that a zone finishing the transition from RSASHA1 to RSASHA256 validates secure ($n)"
1634*00b67f09SDavid van Moolenbroekret=0
1635*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS ns algroll. @10.53.0.4 > dig.out.ns4.test$n || ret=1
1636*00b67f09SDavid van Moolenbroekgrep "NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
1637*00b67f09SDavid van Moolenbroekgrep "flags:[^;]* ad[^;]*;" dig.out.ns4.test$n > /dev/null || ret=1
1638*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1639*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1640*00b67f09SDavid van Moolenbroek
1641*00b67f09SDavid van Moolenbroek# Run a minimal update test if possible.  This is really just
1642*00b67f09SDavid van Moolenbroek# a regression test for RT #2399; more tests should be added.
1643*00b67f09SDavid van Moolenbroek
1644*00b67f09SDavid van Moolenbroekif $PERL -e 'use Net::DNS;' 2>/dev/null
1645*00b67f09SDavid van Moolenbroekthen
1646*00b67f09SDavid van Moolenbroek    echo "I:running DNSSEC update test"
1647*00b67f09SDavid van Moolenbroek    $PERL dnssec_update_test.pl -s 10.53.0.3 -p 5300 dynamic.example. || status=1
1648*00b67f09SDavid van Moolenbroekelse
1649*00b67f09SDavid van Moolenbroek    echo "I:The DNSSEC update test requires the Net::DNS library." >&2
1650*00b67f09SDavid van Moolenbroekfi
1651*00b67f09SDavid van Moolenbroek
1652*00b67f09SDavid van Moolenbroekecho "I:checking managed key maintenance has not started yet ($n)"
1653*00b67f09SDavid van Moolenbroekret=0
1654*00b67f09SDavid van Moolenbroek[ -f "ns4/managed-keys.bind.jnl" ] && ret=1
1655*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1656*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1657*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1658*00b67f09SDavid van Moolenbroek
1659*00b67f09SDavid van Moolenbroek# Reconfigure caching server to use "dnssec-validation auto", and repeat
1660*00b67f09SDavid van Moolenbroek# some of the DNSSEC validation tests to ensure that it works correctly.
1661*00b67f09SDavid van Moolenbroekecho "I:switching to automatic root key configuration"
1662*00b67f09SDavid van Moolenbroekcp ns4/named2.conf ns4/named.conf
1663*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.4 -p 9953 reconfig 2>&1 | sed 's/^/I:ns4 /'
1664*00b67f09SDavid van Moolenbroeksleep 5
1665*00b67f09SDavid van Moolenbroek
1666*00b67f09SDavid van Moolenbroekecho "I:checking managed key maintenance timer has now started ($n)"
1667*00b67f09SDavid van Moolenbroekret=0
1668*00b67f09SDavid van Moolenbroek[ -f "ns4/managed-keys.bind.jnl" ] || ret=1
1669*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1670*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1671*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1672*00b67f09SDavid van Moolenbroek
1673*00b67f09SDavid van Moolenbroekecho "I:checking positive validation NSEC ($n)"
1674*00b67f09SDavid van Moolenbroekret=0
1675*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.example. @10.53.0.2 a > dig.out.ns2.test$n || ret=1
1676*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1
1677*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1
1678*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
1679*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1680*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1681*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1682*00b67f09SDavid van Moolenbroek
1683*00b67f09SDavid van Moolenbroekecho "I:checking positive validation NSEC3 ($n)"
1684*00b67f09SDavid van Moolenbroekret=0
1685*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.nsec3.example. \
1686*00b67f09SDavid van Moolenbroek	@10.53.0.3 a > dig.out.ns3.test$n || ret=1
1687*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.nsec3.example. \
1688*00b67f09SDavid van Moolenbroek	@10.53.0.4 a > dig.out.ns4.test$n || ret=1
1689*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
1690*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
1691*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1692*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1693*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1694*00b67f09SDavid van Moolenbroek
1695*00b67f09SDavid van Moolenbroekecho "I:checking positive validation OPTOUT ($n)"
1696*00b67f09SDavid van Moolenbroekret=0
1697*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.optout.example. \
1698*00b67f09SDavid van Moolenbroek	@10.53.0.3 a > dig.out.ns3.test$n || ret=1
1699*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.optout.example. \
1700*00b67f09SDavid van Moolenbroek	@10.53.0.4 a > dig.out.ns4.test$n || ret=1
1701*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
1702*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
1703*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1704*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1705*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1706*00b67f09SDavid van Moolenbroek
1707*00b67f09SDavid van Moolenbroekecho "I:checking negative validation ($n)"
1708*00b67f09SDavid van Moolenbroekret=0
1709*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.example. @10.53.0.2 a > dig.out.ns2.test$n || ret=1
1710*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1
1711*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1
1712*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
1713*00b67f09SDavid van Moolenbroekgrep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1
1714*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1715*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1716*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1717*00b67f09SDavid van Moolenbroek
1718*00b67f09SDavid van Moolenbroekecho "I:checking that root DS queries validate ($n)"
1719*00b67f09SDavid van Moolenbroekret=0
1720*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth . @10.53.0.1 ds > dig.out.ns1.test$n || ret=1
1721*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth . @10.53.0.4 ds > dig.out.ns4.test$n || ret=1
1722*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns1.test$n dig.out.ns4.test$n || ret=1
1723*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
1724*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
1725*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1726*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1727*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1728*00b67f09SDavid van Moolenbroek
1729*00b67f09SDavid van Moolenbroekecho "I:checking that DS at a RFC 1918 empty zone lookup succeeds ($n)"
1730*00b67f09SDavid van Moolenbroekret=0
1731*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth 10.in-addr.arpa ds @10.53.0.2 >dig.out.ns2.test$n || ret=1
1732*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth 10.in-addr.arpa ds @10.53.0.6 >dig.out.ns6.test$n || ret=1
1733*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns6.test$n || ret=1
1734*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns6.test$n > /dev/null || ret=1
1735*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1736*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1737*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1738*00b67f09SDavid van Moolenbroek
1739*00b67f09SDavid van Moolenbroekecho "I:checking expired signatures remain with "'"allow-update { none; };"'" and no keys available ($n)"
1740*00b67f09SDavid van Moolenbroekret=0
1741*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth expired.example. +dnssec @10.53.0.3 soa > dig.out.ns3.test$n || ret=1
1742*00b67f09SDavid van Moolenbroekgrep "RRSIG.SOA" dig.out.ns3.test$n > /dev/null || ret=1
1743*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1744*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1745*00b67f09SDavid van Moolenbroek
1746*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1747*00b67f09SDavid van Moolenbroekecho "I:checking expired signatures do not validate ($n)"
1748*00b67f09SDavid van Moolenbroekret=0
1749*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth expired.example. +dnssec @10.53.0.4 soa > dig.out.ns4.test$n || ret=1
1750*00b67f09SDavid van Moolenbroekgrep "SERVFAIL" dig.out.ns4.test$n > /dev/null || ret=1
1751*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
1752*00b67f09SDavid van Moolenbroekgrep "expired.example/.*: RRSIG has expired" ns4/named.run > /dev/null || ret=1
1753*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1754*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1755*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1756*00b67f09SDavid van Moolenbroek
1757*00b67f09SDavid van Moolenbroekecho "I:checking that the NSEC3 record for the apex is properly signed when a DNSKEY is added via UPDATE ($n)"
1758*00b67f09SDavid van Moolenbroekret=0
1759*00b67f09SDavid van Moolenbroek(
1760*00b67f09SDavid van Moolenbroekcd ns3
1761*00b67f09SDavid van Moolenbroekkskname=`$KEYGEN -q -3 -r $RANDFILE -fk update-nsec3.example`
1762*00b67f09SDavid van Moolenbroek(
1763*00b67f09SDavid van Moolenbroekecho zone update-nsec3.example
1764*00b67f09SDavid van Moolenbroekecho server 10.53.0.3 5300
1765*00b67f09SDavid van Moolenbroekgrep DNSKEY ${kskname}.key | sed -e 's/^/update add /' -e 's/IN/300 IN/'
1766*00b67f09SDavid van Moolenbroekecho send
1767*00b67f09SDavid van Moolenbroek) | $NSUPDATE
1768*00b67f09SDavid van Moolenbroek)
1769*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +dnssec a update-nsec3.example. @10.53.0.4 > dig.out.ns4.test$n || ret=1
1770*00b67f09SDavid van Moolenbroekgrep "NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
1771*00b67f09SDavid van Moolenbroekgrep "flags:.* ad[ ;]" dig.out.ns4.test$n > /dev/null || ret=1
1772*00b67f09SDavid van Moolenbroekgrep "NSEC3 .* TYPE65534" dig.out.ns4.test$n > /dev/null || ret=1
1773*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1774*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1775*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1776*00b67f09SDavid van Moolenbroek
1777*00b67f09SDavid van Moolenbroekecho "I:checking that the NSEC record is properly generated when DNSKEY are added via auto-dnssec ($n)"
1778*00b67f09SDavid van Moolenbroekret=0
1779*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +dnssec a auto-nsec.example. @10.53.0.4 > dig.out.ns4.test$n || ret=1
1780*00b67f09SDavid van Moolenbroekgrep "NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
1781*00b67f09SDavid van Moolenbroekgrep "flags:.* ad[ ;]" dig.out.ns4.test$n > /dev/null || ret=1
1782*00b67f09SDavid van Moolenbroekgrep "IN.NSEC[^3].* DNSKEY" dig.out.ns4.test$n > /dev/null || ret=1
1783*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1784*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1785*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1786*00b67f09SDavid van Moolenbroek
1787*00b67f09SDavid van Moolenbroekecho "I:checking that the NSEC3 record is properly generated when DNSKEY are added via auto-dnssec ($n)"
1788*00b67f09SDavid van Moolenbroekret=0
1789*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +dnssec a auto-nsec3.example. @10.53.0.4 > dig.out.ns4.test$n || ret=1
1790*00b67f09SDavid van Moolenbroekgrep "NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
1791*00b67f09SDavid van Moolenbroekgrep "flags:.* ad[ ;]" dig.out.ns4.test$n > /dev/null || ret=1
1792*00b67f09SDavid van Moolenbroekgrep "IN.NSEC3 .* DNSKEY" dig.out.ns4.test$n > /dev/null || ret=1
1793*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1794*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1795*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1796*00b67f09SDavid van Moolenbroek
1797*00b67f09SDavid van Moolenbroekecho "I:checking that signing records have been marked as complete ($n)"
1798*00b67f09SDavid van Moolenbroekret=0
1799*00b67f09SDavid van Moolenbroekcheckprivate dynamic.example 10.53.0.3 || ret=1
1800*00b67f09SDavid van Moolenbroekcheckprivate update-nsec3.example 10.53.0.3 || ret=1
1801*00b67f09SDavid van Moolenbroekcheckprivate auto-nsec3.example 10.53.0.3 || ret=1
1802*00b67f09SDavid van Moolenbroekcheckprivate expiring.example 10.53.0.3 || ret=1
1803*00b67f09SDavid van Moolenbroekcheckprivate auto-nsec.example 10.53.0.3 || ret=1
1804*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1805*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1806*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1807*00b67f09SDavid van Moolenbroek
1808*00b67f09SDavid van Moolenbroekecho "I:check that 'rndc signing' without arguments is handled ($n)"
1809*00b67f09SDavid van Moolenbroekret=0
1810*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 signing > /dev/null 2>&1 && ret=1
1811*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 status > /dev/null || ret=1
1812*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1813*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1814*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1815*00b67f09SDavid van Moolenbroek
1816*00b67f09SDavid van Moolenbroekecho "I:check that 'rndc signing -list' without zone is handled ($n)"
1817*00b67f09SDavid van Moolenbroekret=0
1818*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 signing -list > /dev/null 2>&1 && ret=1
1819*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 status > /dev/null || ret=1
1820*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1821*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1822*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1823*00b67f09SDavid van Moolenbroek
1824*00b67f09SDavid van Moolenbroekecho "I:check that 'rndc signing -clear' without additional arguments is handled ($n)"
1825*00b67f09SDavid van Moolenbroekret=0
1826*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 signing -clear > /dev/null 2>&1 && ret=1
1827*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 status > /dev/null || ret=1
1828*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1829*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1830*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1831*00b67f09SDavid van Moolenbroek
1832*00b67f09SDavid van Moolenbroekecho "I:check that 'rndc signing -clear all' without zone is handled ($n)"
1833*00b67f09SDavid van Moolenbroekret=0
1834*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 signing -clear all > /dev/null 2>&1 && ret=1
1835*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 status > /dev/null || ret=1
1836*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1837*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1838*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1839*00b67f09SDavid van Moolenbroek
1840*00b67f09SDavid van Moolenbroekecho "I:check that 'rndc signing -nsec3param' without additional arguments is handled ($n)"
1841*00b67f09SDavid van Moolenbroekret=0
1842*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 signing -nsec3param > /dev/null 2>&1 && ret=1
1843*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 status > /dev/null || ret=1
1844*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1845*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1846*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1847*00b67f09SDavid van Moolenbroek
1848*00b67f09SDavid van Moolenbroekecho "I:check that 'rndc signing -nsec3param none' without zone is handled ($n)"
1849*00b67f09SDavid van Moolenbroekret=0
1850*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 signing -nsec3param none > /dev/null 2>&1 && ret=1
1851*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 status > /dev/null || ret=1
1852*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1853*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1854*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1855*00b67f09SDavid van Moolenbroek
1856*00b67f09SDavid van Moolenbroekecho "I:check that 'rndc signing -nsec3param 1' without additional arguments is handled ($n)"
1857*00b67f09SDavid van Moolenbroekret=0
1858*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 signing -nsec3param 1 > /dev/null 2>&1 && ret=1
1859*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 status > /dev/null || ret=1
1860*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1861*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1862*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1863*00b67f09SDavid van Moolenbroek
1864*00b67f09SDavid van Moolenbroekecho "I:check that 'rndc signing -nsec3param 1 0' without additional arguments is handled ($n)"
1865*00b67f09SDavid van Moolenbroekret=0
1866*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 signing -nsec3param 1 0 > /dev/null 2>&1 && ret=1
1867*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 status > /dev/null || ret=1
1868*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1869*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1870*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1871*00b67f09SDavid van Moolenbroek
1872*00b67f09SDavid van Moolenbroekecho "I:check that 'rndc signing -nsec3param 1 0 0' without additional arguments is handled ($n)"
1873*00b67f09SDavid van Moolenbroekret=0
1874*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 signing -nsec3param 1 0 0 > /dev/null 2>&1 && ret=1
1875*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 status > /dev/null || ret=1
1876*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1877*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1878*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1879*00b67f09SDavid van Moolenbroek
1880*00b67f09SDavid van Moolenbroekecho "I:check that 'rndc signing -nsec3param 1 0 0 -' without zone is handled ($n)"
1881*00b67f09SDavid van Moolenbroekret=0
1882*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 signing -nsec3param 1 0 0 - > /dev/null 2>&1 && ret=1
1883*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 status > /dev/null || ret=1
1884*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1885*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1886*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1887*00b67f09SDavid van Moolenbroek
1888*00b67f09SDavid van Moolenbroekecho "I:check that 'rndc signing -nsec3param' works with salt ($n)"
1889*00b67f09SDavid van Moolenbroekret=0
1890*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 signing -nsec3param 1 0 0 ffff inline.example > /dev/null 2>&1 || ret=1
1891*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 status > /dev/null || ret=1
1892*00b67f09SDavid van Moolenbroekfor i in 1 2 3 4 5 6 7 8 9 10 ; do
1893*00b67f09SDavid van Moolenbroek        salt=`$DIG $DIGOPTS +nodnssec +short nsec3param inline.example. @10.53.0.3 | awk '{print $4}'`
1894*00b67f09SDavid van Moolenbroek	if [ "$salt" = "FFFF" ]; then
1895*00b67f09SDavid van Moolenbroek		break;
1896*00b67f09SDavid van Moolenbroek	fi
1897*00b67f09SDavid van Moolenbroek	echo "I:sleeping ...."
1898*00b67f09SDavid van Moolenbroek	sleep 1
1899*00b67f09SDavid van Moolenbroekdone;
1900*00b67f09SDavid van Moolenbroek[ "$salt" = "FFFF" ] || ret=1
1901*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1902*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1903*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1904*00b67f09SDavid van Moolenbroek
1905*00b67f09SDavid van Moolenbroekecho "I:check that 'rndc signing -nsec3param' works without salt ($n)"
1906*00b67f09SDavid van Moolenbroekret=0
1907*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 signing -nsec3param 1 0 0 - inline.example > /dev/null 2>&1 || ret=1
1908*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 status > /dev/null || ret=1
1909*00b67f09SDavid van Moolenbroekfor i in 1 2 3 4 5 6 7 8 9 10 ; do
1910*00b67f09SDavid van Moolenbroek	salt=`$DIG $DIGOPTS +nodnssec +short nsec3param inline.example. @10.53.0.3 | awk '{print $4}'`
1911*00b67f09SDavid van Moolenbroek	if [ "$salt" = "-" ]; then
1912*00b67f09SDavid van Moolenbroek		break;
1913*00b67f09SDavid van Moolenbroek	fi
1914*00b67f09SDavid van Moolenbroek	echo "I:sleeping ...."
1915*00b67f09SDavid van Moolenbroek	sleep 1
1916*00b67f09SDavid van Moolenbroekdone;
1917*00b67f09SDavid van Moolenbroek[ "$salt" = "-" ] || ret=1
1918*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1919*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1920*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1921*00b67f09SDavid van Moolenbroek
1922*00b67f09SDavid van Moolenbroekecho "I:check that 'rndc signing -nsec3param' works with 'auto' as salt ($n)"
1923*00b67f09SDavid van Moolenbroekret=0
1924*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 signing -nsec3param 1 0 0 auto inline.example > /dev/null 2>&1 || ret=1
1925*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 status > /dev/null || ret=1
1926*00b67f09SDavid van Moolenbroekfor i in 1 2 3 4 5 6 7 8 9 10 ; do
1927*00b67f09SDavid van Moolenbroek	salt=`$DIG $DIGOPTS +nodnssec +short nsec3param inline.example. @10.53.0.3 | awk '{print $4}'`
1928*00b67f09SDavid van Moolenbroek	[ -n "$salt" -a "$salt" != "-" ] && break
1929*00b67f09SDavid van Moolenbroek	echo "I:sleeping ...."
1930*00b67f09SDavid van Moolenbroek	sleep 1
1931*00b67f09SDavid van Moolenbroekdone;
1932*00b67f09SDavid van Moolenbroek[ "$salt" != "-" ] || ret=1
1933*00b67f09SDavid van Moolenbroek[ `expr "${salt}" : ".*"` -eq 16 ] || ret=1
1934*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1935*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1936*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1937*00b67f09SDavid van Moolenbroek
1938*00b67f09SDavid van Moolenbroekecho "I:check that 'rndc signing -nsec3param' with 'auto' as salt again generates a different salt ($n)"
1939*00b67f09SDavid van Moolenbroekret=0
1940*00b67f09SDavid van Moolenbroekoldsalt=$salt
1941*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 signing -nsec3param 1 0 0 auto inline.example > /dev/null 2>&1 || ret=1
1942*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 status > /dev/null || ret=1
1943*00b67f09SDavid van Moolenbroekfor i in 1 2 3 4 5 6 7 8 9 10 ; do
1944*00b67f09SDavid van Moolenbroek	salt=`$DIG $DIGOPTS +nodnssec +short nsec3param inline.example. @10.53.0.3 | awk '{print $4}'`
1945*00b67f09SDavid van Moolenbroek	[ -n "$salt" -a "$salt" != "$oldsalt" ] && break
1946*00b67f09SDavid van Moolenbroek	echo "I:sleeping ...."
1947*00b67f09SDavid van Moolenbroek	sleep 1
1948*00b67f09SDavid van Moolenbroekdone;
1949*00b67f09SDavid van Moolenbroek[ "$salt" != "$oldsalt" ] || ret=1
1950*00b67f09SDavid van Moolenbroek[ `expr "$salt" : ".*"` -eq 16 ] || ret=1
1951*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1952*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1953*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1954*00b67f09SDavid van Moolenbroek
1955*00b67f09SDavid van Moolenbroekecho "I:check rndc signing -list output ($n)"
1956*00b67f09SDavid van Moolenbroekret=0
1957*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 signing -list dynamic.example 2>&1 > signing.out
1958*00b67f09SDavid van Moolenbroekgrep "No signing records found" signing.out > /dev/null 2>&1 || {
1959*00b67f09SDavid van Moolenbroek        ret=1
1960*00b67f09SDavid van Moolenbroek        sed 's/^/I:ns3 /' signing.out
1961*00b67f09SDavid van Moolenbroek}
1962*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 signing -list update-nsec3.example 2>&1 > signing.out
1963*00b67f09SDavid van Moolenbroekgrep "Done signing with key .*/NSEC3RSASHA1" signing.out > /dev/null 2>&1 || {
1964*00b67f09SDavid van Moolenbroek        ret=1
1965*00b67f09SDavid van Moolenbroek        sed 's/^/I:ns3 /' signing.out
1966*00b67f09SDavid van Moolenbroek}
1967*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1968*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1969*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1970*00b67f09SDavid van Moolenbroek
1971*00b67f09SDavid van Moolenbroekecho "I:clear signing records ($n)"
1972*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 signing -clear all update-nsec3.example > /dev/null || ret=1
1973*00b67f09SDavid van Moolenbroeksleep 1
1974*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 signing -list update-nsec3.example 2>&1 > signing.out
1975*00b67f09SDavid van Moolenbroekgrep "No signing records found" signing.out > /dev/null 2>&1 || {
1976*00b67f09SDavid van Moolenbroek        ret=1
1977*00b67f09SDavid van Moolenbroek        sed 's/^/I:ns3 /' signing.out
1978*00b67f09SDavid van Moolenbroek}
1979*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1980*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1981*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1982*00b67f09SDavid van Moolenbroek
1983*00b67f09SDavid van Moolenbroekecho "I:checking that a insecure zone beneath a cname resolves ($n)"
1984*00b67f09SDavid van Moolenbroekret=0
1985*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS soa insecure.below-cname.example. @10.53.0.4 > dig.out.ns4.test$n || ret=1
1986*00b67f09SDavid van Moolenbroekgrep "NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
1987*00b67f09SDavid van Moolenbroekgrep "ANSWER: 1," dig.out.ns4.test$n > /dev/null || ret=1
1988*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1989*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
1990*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
1991*00b67f09SDavid van Moolenbroek
1992*00b67f09SDavid van Moolenbroekecho "I:checking that a secure zone beneath a cname resolves ($n)"
1993*00b67f09SDavid van Moolenbroekret=0
1994*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS soa secure.below-cname.example. @10.53.0.4 > dig.out.ns4.test$n || ret=1
1995*00b67f09SDavid van Moolenbroekgrep "NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
1996*00b67f09SDavid van Moolenbroekgrep "ANSWER: 2," dig.out.ns4.test$n > /dev/null || ret=1
1997*00b67f09SDavid van Moolenbroekgrep "flags:.* ad[ ;]" dig.out.ns4.test$n > /dev/null || ret=1
1998*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
1999*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2000*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2001*00b67f09SDavid van Moolenbroek
2002*00b67f09SDavid van Moolenbroekecho "I:checking dnskey query with no data still gets put in cache ($n)"
2003*00b67f09SDavid van Moolenbroekret=0
2004*00b67f09SDavid van MoolenbroekmyDIGOPTS="+noadd +nosea +nostat +noquest +nocomm +nocmd -p 5300 @10.53.0.4"
2005*00b67f09SDavid van MoolenbroekfirstVal=`$DIG $myDIGOPTS insecure.example. dnskey| awk '$1 != ";;" { print $2 }'`
2006*00b67f09SDavid van Moolenbroeksleep 1
2007*00b67f09SDavid van MoolenbroeksecondVal=`$DIG $myDIGOPTS insecure.example. dnskey| awk '$1 != ";;" { print $2 }'`
2008*00b67f09SDavid van Moolenbroekif [ ${firstVal:-0} -eq ${secondVal:-0} ]
2009*00b67f09SDavid van Moolenbroekthen
2010*00b67f09SDavid van Moolenbroek	sleep 1
2011*00b67f09SDavid van Moolenbroek	thirdVal=`$DIG $myDIGOPTS insecure.example. dnskey|awk '$1 != ";;" { print $2 }'`
2012*00b67f09SDavid van Moolenbroek	if [ ${firstVal:-0} -eq ${thirdVal:-0} ]
2013*00b67f09SDavid van Moolenbroek	then
2014*00b67f09SDavid van Moolenbroek		echo "I: cannot confirm query answer still in cache"
2015*00b67f09SDavid van Moolenbroek		ret=1
2016*00b67f09SDavid van Moolenbroek	fi
2017*00b67f09SDavid van Moolenbroekfi
2018*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2019*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2020*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2021*00b67f09SDavid van Moolenbroek
2022*00b67f09SDavid van Moolenbroekecho "I:check that a split dnssec dnssec-signzone work ($n)"
2023*00b67f09SDavid van Moolenbroekret=0
2024*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS soa split-dnssec.example. @10.53.0.4 > dig.out.ns4.test$n || ret=1
2025*00b67f09SDavid van Moolenbroekgrep "NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
2026*00b67f09SDavid van Moolenbroekgrep "ANSWER: 2," dig.out.ns4.test$n > /dev/null || ret=1
2027*00b67f09SDavid van Moolenbroekgrep "flags:.* ad[ ;]" dig.out.ns4.test$n > /dev/null || ret=1
2028*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2029*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2030*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2031*00b67f09SDavid van Moolenbroek
2032*00b67f09SDavid van Moolenbroekecho "I:check that a smart split dnssec dnssec-signzone work ($n)"
2033*00b67f09SDavid van Moolenbroekret=0
2034*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS soa split-smart.example. @10.53.0.4 > dig.out.ns4.test$n || ret=1
2035*00b67f09SDavid van Moolenbroekgrep "NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
2036*00b67f09SDavid van Moolenbroekgrep "ANSWER: 2," dig.out.ns4.test$n > /dev/null || ret=1
2037*00b67f09SDavid van Moolenbroekgrep "flags:.* ad[ ;]" dig.out.ns4.test$n > /dev/null || ret=1
2038*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2039*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2040*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2041*00b67f09SDavid van Moolenbroek
2042*00b67f09SDavid van Moolenbroekecho "I:check that NOTIFY is sent at the end of NSEC3 chain generation ($n)"
2043*00b67f09SDavid van Moolenbroekret=0
2044*00b67f09SDavid van Moolenbroek(
2045*00b67f09SDavid van Moolenbroekecho zone nsec3chain-test
2046*00b67f09SDavid van Moolenbroekecho server 10.53.0.2 5300
2047*00b67f09SDavid van Moolenbroekecho update add nsec3chain-test. 0 nsec3param 1 0 1 123456
2048*00b67f09SDavid van Moolenbroekecho send
2049*00b67f09SDavid van Moolenbroek) | $NSUPDATE
2050*00b67f09SDavid van Moolenbroekfor i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
2051*00b67f09SDavid van Moolenbroekdo
2052*00b67f09SDavid van Moolenbroek	$DIG $DIGOPTS nsec3param nsec3chain-test @10.53.0.2 > dig.out.ns2.test$n || ret=1
2053*00b67f09SDavid van Moolenbroek	if grep "ANSWER: 3," dig.out.ns2.test$n >/dev/null
2054*00b67f09SDavid van Moolenbroek	then
2055*00b67f09SDavid van Moolenbroek		break;
2056*00b67f09SDavid van Moolenbroek	fi
2057*00b67f09SDavid van Moolenbroek	echo "I:sleeping ...."
2058*00b67f09SDavid van Moolenbroek	sleep 3
2059*00b67f09SDavid van Moolenbroekdone;
2060*00b67f09SDavid van Moolenbroekgrep "ANSWER: 3," dig.out.ns2.test$n > /dev/null || ret=1
2061*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:nsec3 chain generation not complete"; fi
2062*00b67f09SDavid van Moolenbroeksleep 3
2063*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth +nodnssec soa nsec3chain-test @10.53.0.2 > dig.out.ns2.test$n || ret=1
2064*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth +nodnssec soa nsec3chain-test @10.53.0.3 > dig.out.ns3.test$n || ret=1
2065*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns3.test$n || ret=1
2066*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2067*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2068*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2069*00b67f09SDavid van Moolenbroek
2070*00b67f09SDavid van Moolenbroekecho "I:check dnssec-dsfromkey from stdin ($n)"
2071*00b67f09SDavid van Moolenbroekret=0
2072*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS dnskey algroll. @10.53.0.2 | \
2073*00b67f09SDavid van Moolenbroek        $DSFROMKEY -f - algroll. > dig.out.ns2.test$n || ret=1
2074*00b67f09SDavid van MoolenbroekNF=`awk '{print NF}' dig.out.ns2.test$n | sort -u`
2075*00b67f09SDavid van Moolenbroek[ "${NF}" = 7 ] || ret=1
2076*00b67f09SDavid van Moolenbroek# make canonical
2077*00b67f09SDavid van Moolenbroekawk '{
2078*00b67f09SDavid van Moolenbroek	for (i=1;i<7;i++) printf("%s ", $i);
2079*00b67f09SDavid van Moolenbroek	for (i=7;i<=NF;i++) printf("%s", $i);
2080*00b67f09SDavid van Moolenbroek	printf("\n");
2081*00b67f09SDavid van Moolenbroek}' < dig.out.ns2.test$n > canonical1.$n || ret=1
2082*00b67f09SDavid van Moolenbroekawk '{
2083*00b67f09SDavid van Moolenbroek	for (i=1;i<7;i++) printf("%s ", $i);
2084*00b67f09SDavid van Moolenbroek	for (i=7;i<=NF;i++) printf("%s", $i);
2085*00b67f09SDavid van Moolenbroek	printf("\n");
2086*00b67f09SDavid van Moolenbroek}' < ns1/dsset-algroll. > canonical2.$n || ret=1
2087*00b67f09SDavid van Moolenbroekdiff -b canonical1.$n canonical2.$n > /dev/null 2>&1 || ret=1
2088*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2089*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2090*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2091*00b67f09SDavid van Moolenbroek
2092*00b67f09SDavid van Moolenbroekecho "I:testing soon-to-expire RRSIGs without a replacement private key ($n)"
2093*00b67f09SDavid van Moolenbroekret=0
2094*00b67f09SDavid van Moolenbroek$DIG +noall +answer +dnssec +nottl -p 5300 expiring.example ns @10.53.0.3 | grep RRSIG > dig.out.ns3.test$n 2>&1
2095*00b67f09SDavid van Moolenbroek# there must be a signature here
2096*00b67f09SDavid van Moolenbroek[ -s dig.out.ns3.test$n ] || ret=1
2097*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2098*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2099*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2100*00b67f09SDavid van Moolenbroek
2101*00b67f09SDavid van Moolenbroekecho "I:testing new records are signed with 'no-resign' ($n)"
2102*00b67f09SDavid van Moolenbroekret=0
2103*00b67f09SDavid van Moolenbroek(
2104*00b67f09SDavid van Moolenbroekecho zone nosign.example
2105*00b67f09SDavid van Moolenbroekecho server 10.53.0.3 5300
2106*00b67f09SDavid van Moolenbroekecho update add new.nosign.example 300 in txt "hi there"
2107*00b67f09SDavid van Moolenbroekecho send
2108*00b67f09SDavid van Moolenbroek) | $NSUPDATE
2109*00b67f09SDavid van Moolenbroeksleep 1
2110*00b67f09SDavid van Moolenbroek$DIG +noall +answer +dnssec -p 5300 txt new.nosign.example @10.53.0.3 \
2111*00b67f09SDavid van Moolenbroek        > dig.out.ns3.test$n 2>&1
2112*00b67f09SDavid van Moolenbroekgrep RRSIG dig.out.ns3.test$n > /dev/null 2>&1 || ret=1
2113*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2114*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2115*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2116*00b67f09SDavid van Moolenbroek
2117*00b67f09SDavid van Moolenbroekecho "I:testing expiring records aren't resigned with 'no-resign' ($n)"
2118*00b67f09SDavid van Moolenbroekret=0
2119*00b67f09SDavid van Moolenbroek$DIG +noall +answer +dnssec +nottl -p 5300 nosign.example ns @10.53.0.3 | \
2120*00b67f09SDavid van Moolenbroek        grep RRSIG | sed 's/[ 	][ 	]*/ /g' > dig.out.ns3.test$n 2>&1
2121*00b67f09SDavid van Moolenbroek# the NS RRSIG should not be changed
2122*00b67f09SDavid van Moolenbroekcmp -s nosign.before dig.out.ns3.test$n || ret=1
2123*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2124*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2125*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2126*00b67f09SDavid van Moolenbroek
2127*00b67f09SDavid van Moolenbroekecho "I:testing updates fail with no private key ($n)"
2128*00b67f09SDavid van Moolenbroekret=0
2129*00b67f09SDavid van Moolenbroekrm -f ns3/Knosign.example.*.private
2130*00b67f09SDavid van Moolenbroek(
2131*00b67f09SDavid van Moolenbroekecho zone nosign.example
2132*00b67f09SDavid van Moolenbroekecho server 10.53.0.3 5300
2133*00b67f09SDavid van Moolenbroekecho update add fail.nosign.example 300 in txt "reject me"
2134*00b67f09SDavid van Moolenbroekecho send
2135*00b67f09SDavid van Moolenbroek) | $NSUPDATE > /dev/null 2>&1 && ret=1
2136*00b67f09SDavid van Moolenbroek$DIG +tcp +noall +answer +dnssec -p 5300 fail.nosign.example txt @10.53.0.3 \
2137*00b67f09SDavid van Moolenbroek        > dig.out.ns3.test$n 2>&1
2138*00b67f09SDavid van Moolenbroek[ -s dig.out.ns3.test$n ] && ret=1
2139*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2140*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2141*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2142*00b67f09SDavid van Moolenbroek
2143*00b67f09SDavid van Moolenbroekecho "I:testing legacy upper case signer name validation ($n)"
2144*00b67f09SDavid van Moolenbroekret=0
2145*00b67f09SDavid van Moolenbroek$DIG +tcp +dnssec -p 5300 +noadd +noauth soa upper.example @10.53.0.4 \
2146*00b67f09SDavid van Moolenbroek        > dig.out.ns4.test$n 2>&1
2147*00b67f09SDavid van Moolenbroekgrep 'flags:.* ad;' dig.out.ns4.test$n > /dev/null || ret=1
2148*00b67f09SDavid van Moolenbroekgrep 'RRSIG.*SOA.* UPPER\.EXAMPLE\. ' dig.out.ns4.test$n > /dev/null || ret=1
2149*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2150*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2151*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2152*00b67f09SDavid van Moolenbroek
2153*00b67f09SDavid van Moolenbroekecho "I:testing that we lower case signer name ($n)"
2154*00b67f09SDavid van Moolenbroekret=0
2155*00b67f09SDavid van Moolenbroek$DIG +tcp +dnssec -p 5300 +noadd +noauth soa LOWER.EXAMPLE @10.53.0.4 \
2156*00b67f09SDavid van Moolenbroek        > dig.out.ns4.test$n 2>&1
2157*00b67f09SDavid van Moolenbroekgrep 'flags:.* ad;' dig.out.ns4.test$n > /dev/null || ret=1
2158*00b67f09SDavid van Moolenbroekgrep 'RRSIG.*SOA.* lower\.example\. ' dig.out.ns4.test$n > /dev/null || ret=1
2159*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2160*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2161*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2162*00b67f09SDavid van Moolenbroek
2163*00b67f09SDavid van Moolenbroekecho "I:testing TTL is capped at RRSIG expiry time ($n)"
2164*00b67f09SDavid van Moolenbroekret=0
2165*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 freeze expiring.example 2>&1 | sed 's/^/I:ns3 /'
2166*00b67f09SDavid van Moolenbroek(
2167*00b67f09SDavid van Moolenbroekcd ns3
2168*00b67f09SDavid van Moolenbroekfor file in K*.moved; do
2169*00b67f09SDavid van Moolenbroek  mv $file `basename $file .moved`
2170*00b67f09SDavid van Moolenbroekdone
2171*00b67f09SDavid van Moolenbroek$SIGNER -S -r $RANDFILE -N increment -e now+1mi -o expiring.example expiring.example.db > /dev/null 2>&1
2172*00b67f09SDavid van Moolenbroek) || ret=1
2173*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 reload expiring.example 2>&1 | sed 's/^/I:ns3 /'
2174*00b67f09SDavid van Moolenbroek
2175*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.4 -p 9953 flush
2176*00b67f09SDavid van Moolenbroek$DIG +noall +answer +dnssec +cd -p 5300 expiring.example soa @10.53.0.4 > dig.out.ns4.1.$n
2177*00b67f09SDavid van Moolenbroek$DIG +noall +answer +dnssec -p 5300 expiring.example soa @10.53.0.4 > dig.out.ns4.2.$n
2178*00b67f09SDavid van Moolenbroekttls=`awk '$1 != ";;" {print $2}' dig.out.ns4.1.$n`
2179*00b67f09SDavid van Moolenbroekttls2=`awk '$1 != ";;" {print $2}' dig.out.ns4.2.$n`
2180*00b67f09SDavid van Moolenbroekfor ttl in ${ttls:-0}; do
2181*00b67f09SDavid van Moolenbroek    [ ${ttl:-0} -eq 300 ] || ret=1
2182*00b67f09SDavid van Moolenbroekdone
2183*00b67f09SDavid van Moolenbroekfor ttl in ${ttls2:-0}; do
2184*00b67f09SDavid van Moolenbroek    [ ${ttl:-0} -le 60 ] || ret=1
2185*00b67f09SDavid van Moolenbroekdone
2186*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2187*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2188*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2189*00b67f09SDavid van Moolenbroek
2190*00b67f09SDavid van Moolenbroekecho "I:testing TTL is capped at RRSIG expiry time for records in the additional section ($n)"
2191*00b67f09SDavid van Moolenbroekret=0
2192*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.4 -p 9953 flush
2193*00b67f09SDavid van Moolenbroeksleep 1
2194*00b67f09SDavid van Moolenbroek$DIG +noall +additional +dnssec +cd -p 5300 expiring.example mx @10.53.0.4 > dig.out.ns4.1.$n
2195*00b67f09SDavid van Moolenbroek$DIG +noall +additional +dnssec -p 5300 expiring.example mx @10.53.0.4 > dig.out.ns4.2.$n
2196*00b67f09SDavid van Moolenbroekttls=`awk '$1 != ";;" {print $2}' dig.out.ns4.1.$n`
2197*00b67f09SDavid van Moolenbroekttls2=`awk '$1 != ";;" {print $2}' dig.out.ns4.2.$n`
2198*00b67f09SDavid van Moolenbroekfor ttl in ${ttls:-300}; do
2199*00b67f09SDavid van Moolenbroek    [ ${ttl:-0} -eq 300 ] || ret=1
2200*00b67f09SDavid van Moolenbroekdone
2201*00b67f09SDavid van Moolenbroekfor ttl in ${ttls2:-0}; do
2202*00b67f09SDavid van Moolenbroek    [ ${ttl:-0} -le 60 ] || ret=1
2203*00b67f09SDavid van Moolenbroekdone
2204*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2205*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2206*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2207*00b67f09SDavid van Moolenbroek
2208*00b67f09SDavid van Moolenbroekcp ns4/named3.conf ns4/named.conf
2209*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.4 -p 9953 reconfig 2>&1 | sed 's/^/I:ns4 /'
2210*00b67f09SDavid van Moolenbroeksleep 3
2211*00b67f09SDavid van Moolenbroek
2212*00b67f09SDavid van Moolenbroekecho "I:testing TTL of about to expire RRsets with dnssec-accept-expired yes; ($n)"
2213*00b67f09SDavid van Moolenbroekret=0
2214*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.4 -p 9953 flush
2215*00b67f09SDavid van Moolenbroek$DIG +noall +answer +dnssec +cd -p 5300 expiring.example soa @10.53.0.4 > dig.out.ns4.1.$n
2216*00b67f09SDavid van Moolenbroek$DIG +noall +answer +dnssec -p 5300 expiring.example soa @10.53.0.4 > dig.out.ns4.2.$n
2217*00b67f09SDavid van Moolenbroekttls=`awk '$1 != ";;" {print $2}' dig.out.ns4.1.$n`
2218*00b67f09SDavid van Moolenbroekttls2=`awk '$1 != ";;" {print $2}' dig.out.ns4.2.$n`
2219*00b67f09SDavid van Moolenbroekfor ttl in ${ttls:-0}; do
2220*00b67f09SDavid van Moolenbroek    [ $ttl -eq 300 ] || ret=1
2221*00b67f09SDavid van Moolenbroekdone
2222*00b67f09SDavid van Moolenbroekfor ttl in ${ttls2:-0}; do
2223*00b67f09SDavid van Moolenbroek    [ $ttl -le 120 -a $ttl -gt 60 ] || ret=1
2224*00b67f09SDavid van Moolenbroekdone
2225*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2226*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2227*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2228*00b67f09SDavid van Moolenbroek
2229*00b67f09SDavid van Moolenbroekecho "I:testing TTL of expired RRsets with dnssec-accept-expired yes; ($n)"
2230*00b67f09SDavid van Moolenbroekret=0
2231*00b67f09SDavid van Moolenbroek$DIG +noall +answer +dnssec +cd -p 5300 expired.example soa @10.53.0.4 > dig.out.ns4.1.$n
2232*00b67f09SDavid van Moolenbroek$DIG +noall +answer +dnssec -p 5300 expired.example soa @10.53.0.4 > dig.out.ns4.2.$n
2233*00b67f09SDavid van Moolenbroekttls=`awk '$1 != ";;" {print $2}' dig.out.ns4.1.$n`
2234*00b67f09SDavid van Moolenbroekttls2=`awk '$1 != ";;" {print $2}' dig.out.ns4.2.$n`
2235*00b67f09SDavid van Moolenbroekfor ttl in ${ttls:-0}; do
2236*00b67f09SDavid van Moolenbroek    [ $ttl -eq 300 ] || ret=1
2237*00b67f09SDavid van Moolenbroekdone
2238*00b67f09SDavid van Moolenbroekfor ttl in ${ttls2:-0}; do
2239*00b67f09SDavid van Moolenbroek    [ $ttl -le 120 -a $ttl -gt 60 ] || ret=1
2240*00b67f09SDavid van Moolenbroekdone
2241*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2242*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2243*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2244*00b67f09SDavid van Moolenbroek
2245*00b67f09SDavid van Moolenbroekecho "I:testing TTL is capped at RRSIG expiry time for records in the additional section with dnssec-accept-expired yes; ($n)"
2246*00b67f09SDavid van Moolenbroekret=0
2247*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.4 -p 9953 flush
2248*00b67f09SDavid van Moolenbroek$DIG +noall +additional +dnssec +cd -p 5300 expiring.example mx @10.53.0.4 > dig.out.ns4.1.$n
2249*00b67f09SDavid van Moolenbroek$DIG +noall +additional +dnssec -p 5300 expiring.example mx @10.53.0.4 > dig.out.ns4.2.$n
2250*00b67f09SDavid van Moolenbroekttls=`awk '$1 != ";;" {print $2}' dig.out.ns4.1.$n`
2251*00b67f09SDavid van Moolenbroekttls2=`awk '$1 != ";;" {print $2}' dig.out.ns4.2.$n`
2252*00b67f09SDavid van Moolenbroekfor ttl in ${ttls:-300}; do
2253*00b67f09SDavid van Moolenbroek    [ $ttl -eq 300 ] || ret=1
2254*00b67f09SDavid van Moolenbroekdone
2255*00b67f09SDavid van Moolenbroekfor ttl in ${ttls2:-0}; do
2256*00b67f09SDavid van Moolenbroek    [ $ttl -le 120  -a $ttl -gt 60 ] || ret=1
2257*00b67f09SDavid van Moolenbroekdone
2258*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2259*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2260*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2261*00b67f09SDavid van Moolenbroek
2262*00b67f09SDavid van Moolenbroekecho "I:testing DNSKEY lookup via CNAME ($n)"
2263*00b67f09SDavid van Moolenbroekret=0
2264*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth cnameandkey.secure.example. \
2265*00b67f09SDavid van Moolenbroek	@10.53.0.3 dnskey > dig.out.ns3.test$n || ret=1
2266*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth cnameandkey.secure.example. \
2267*00b67f09SDavid van Moolenbroek	@10.53.0.4 dnskey > dig.out.ns4.test$n || ret=1
2268*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
2269*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
2270*00b67f09SDavid van Moolenbroekgrep "CNAME" dig.out.ns4.test$n > /dev/null || ret=1
2271*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2272*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2273*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2274*00b67f09SDavid van Moolenbroek
2275*00b67f09SDavid van Moolenbroekecho "I:testing KEY lookup at CNAME (present) ($n)"
2276*00b67f09SDavid van Moolenbroekret=0
2277*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth cnameandkey.secure.example. \
2278*00b67f09SDavid van Moolenbroek	@10.53.0.3 key > dig.out.ns3.test$n || ret=1
2279*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth cnameandkey.secure.example. \
2280*00b67f09SDavid van Moolenbroek	@10.53.0.4 key > dig.out.ns4.test$n || ret=1
2281*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
2282*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
2283*00b67f09SDavid van Moolenbroekgrep "CNAME" dig.out.ns4.test$n > /dev/null && ret=1
2284*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2285*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2286*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2287*00b67f09SDavid van Moolenbroek
2288*00b67f09SDavid van Moolenbroekecho "I:testing KEY lookup at CNAME (not present) ($n)"
2289*00b67f09SDavid van Moolenbroekret=0
2290*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth cnamenokey.secure.example. \
2291*00b67f09SDavid van Moolenbroek	@10.53.0.3 key > dig.out.ns3.test$n || ret=1
2292*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth cnamenokey.secure.example. \
2293*00b67f09SDavid van Moolenbroek	@10.53.0.4 key > dig.out.ns4.test$n || ret=1
2294*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
2295*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
2296*00b67f09SDavid van Moolenbroekgrep "CNAME" dig.out.ns4.test$n > /dev/null && ret=1
2297*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2298*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2299*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2300*00b67f09SDavid van Moolenbroek
2301*00b67f09SDavid van Moolenbroekecho "I:testing DNSKEY lookup via DNAME ($n)"
2302*00b67f09SDavid van Moolenbroekret=0
2303*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS a.dnameandkey.secure.example. \
2304*00b67f09SDavid van Moolenbroek	@10.53.0.3 dnskey > dig.out.ns3.test$n || ret=1
2305*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS a.dnameandkey.secure.example. \
2306*00b67f09SDavid van Moolenbroek	@10.53.0.4 dnskey > dig.out.ns4.test$n || ret=1
2307*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
2308*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
2309*00b67f09SDavid van Moolenbroekgrep "CNAME" dig.out.ns4.test$n > /dev/null || ret=1
2310*00b67f09SDavid van Moolenbroekgrep "DNAME" dig.out.ns4.test$n > /dev/null || ret=1
2311*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2312*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2313*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2314*00b67f09SDavid van Moolenbroek
2315*00b67f09SDavid van Moolenbroekecho "I:testing KEY lookup via DNAME ($n)"
2316*00b67f09SDavid van Moolenbroekret=0
2317*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS b.dnameandkey.secure.example. \
2318*00b67f09SDavid van Moolenbroek	@10.53.0.3 key > dig.out.ns3.test$n || ret=1
2319*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS b.dnameandkey.secure.example. \
2320*00b67f09SDavid van Moolenbroek	@10.53.0.4 key > dig.out.ns4.test$n || ret=1
2321*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1
2322*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
2323*00b67f09SDavid van Moolenbroekgrep "DNAME" dig.out.ns4.test$n > /dev/null || ret=1
2324*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2325*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2326*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2327*00b67f09SDavid van Moolenbroek
2328*00b67f09SDavid van Moolenbroekecho "I:check that named doesn't loop when all private keys are not available ($n)"
2329*00b67f09SDavid van Moolenbroekret=0
2330*00b67f09SDavid van Moolenbroeklines=`grep "reading private key file expiring.example" ns3/named.run | wc -l`
2331*00b67f09SDavid van Moolenbroektest ${lines:-1000} -lt 15 || ret=1
2332*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2333*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2334*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2335*00b67f09SDavid van Moolenbroek
2336*00b67f09SDavid van Moolenbroekecho "I:check against against missing nearest provable proof ($n)"
2337*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +norec b.c.d.optout-tld. \
2338*00b67f09SDavid van Moolenbroek	@10.53.0.6 ds > dig.out.ds.ns6.test$n || ret=1
2339*00b67f09SDavid van Moolenbroeknsec3=`grep "IN.NSEC3" dig.out.ds.ns6.test$n | wc -l`
2340*00b67f09SDavid van Moolenbroek[ $nsec3 -eq 2 ] || ret=1
2341*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +norec b.c.d.optout-tld. \
2342*00b67f09SDavid van Moolenbroek	@10.53.0.6 A > dig.out.ns6.test$n || ret=1
2343*00b67f09SDavid van Moolenbroeknsec3=`grep "IN.NSEC3" dig.out.ns6.test$n | wc -l`
2344*00b67f09SDavid van Moolenbroek[ $nsec3 -eq 1 ] || ret=1
2345*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS optout-tld. \
2346*00b67f09SDavid van Moolenbroek	@10.53.0.4 SOA > dig.out.soa.ns4.test$n || ret=1
2347*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.soa.ns4.test$n > /dev/null || ret=1
2348*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS b.c.d.optout-tld. \
2349*00b67f09SDavid van Moolenbroek	@10.53.0.4 A > dig.out.ns4.test$n || ret=1
2350*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
2351*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
2352*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2353*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2354*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2355*00b67f09SDavid van Moolenbroek
2356*00b67f09SDavid van Moolenbroekecho "I:check that key id are logged when dumping the cache ($n)"
2357*00b67f09SDavid van Moolenbroekret=0
2358*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.4 -p 9953 dumpdb 2>&1 | sed 's/^/I:ns1 /'
2359*00b67f09SDavid van Moolenbroeksleep 1
2360*00b67f09SDavid van Moolenbroekgrep "; key id = " ns4/named_dump.db > /dev/null || ret=1
2361*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2362*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2363*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2364*00b67f09SDavid van Moolenbroek
2365*00b67f09SDavid van Moolenbroekecho "I:check KEYDATA records are printed in human readable form in key zone ($n)"
2366*00b67f09SDavid van Moolenbroek# force the managed-keys zone to be written out
2367*00b67f09SDavid van Moolenbroek$PERL $SYSTEMTESTTOP/stop.pl --use-rndc . ns4
2368*00b67f09SDavid van Moolenbroekret=0
2369*00b67f09SDavid van Moolenbroekgrep KEYDATA ns4/managed-keys.bind > /dev/null || ret=1
2370*00b67f09SDavid van Moolenbroekgrep "next refresh:" ns4/managed-keys.bind > /dev/null || ret=1
2371*00b67f09SDavid van Moolenbroek# restart the server
2372*00b67f09SDavid van Moolenbroek$PERL $SYSTEMTESTTOP/start.pl --noclean --restart . ns4
2373*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2374*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2375*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2376*00b67f09SDavid van Moolenbroek
2377*00b67f09SDavid van Moolenbroekecho "I:check dig's +nocrypto flag ($n)"
2378*00b67f09SDavid van Moolenbroekret=0
2379*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +norec +nocrypto DNSKEY . \
2380*00b67f09SDavid van Moolenbroek	@10.53.0.1 > dig.out.dnskey.ns1.test$n || ret=1
2381*00b67f09SDavid van Moolenbroekgrep '256 3 1 \[key id = [1-9][0-9]*]' dig.out.dnskey.ns1.test$n > /dev/null || ret=1
2382*00b67f09SDavid van Moolenbroekgrep 'RRSIG.* \[omitted]' dig.out.dnskey.ns1.test$n > /dev/null || ret=1
2383*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +norec +nocrypto DS example \
2384*00b67f09SDavid van Moolenbroek	@10.53.0.1 > dig.out.ds.ns1.test$n || ret=1
2385*00b67f09SDavid van Moolenbroekgrep 'DS.* 3 [12] \[omitted]' dig.out.ds.ns1.test$n > /dev/null || ret=1
2386*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2387*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2388*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2389*00b67f09SDavid van Moolenbroek
2390*00b67f09SDavid van Moolenbroekecho "I:check simultaneous inactivation and publishing of dnskeys removes inactive signature ($n)"
2391*00b67f09SDavid van Moolenbroekret=0
2392*00b67f09SDavid van Moolenbroekcnt=0
2393*00b67f09SDavid van Moolenbroekwhile :
2394*00b67f09SDavid van Moolenbroekdo
2395*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS publish-inactive.example @10.53.0.3 dnskey > dig.out.ns3.test$n
2396*00b67f09SDavid van Moolenbroekkeys=`awk '$5 == 257 { print; }' dig.out.ns3.test$n | wc -l`
2397*00b67f09SDavid van Moolenbroektest $keys -gt 2 && break
2398*00b67f09SDavid van Moolenbroekcnt=`expr $cnt + 1`
2399*00b67f09SDavid van Moolenbroektest $cnt -gt 120 && break
2400*00b67f09SDavid van Moolenbroeksleep 1
2401*00b67f09SDavid van Moolenbroekdone
2402*00b67f09SDavid van Moolenbroektest $keys -gt 2 || ret=1
2403*00b67f09SDavid van Moolenbroeksigs=`grep RRSIG dig.out.ns3.test$n | wc -l`
2404*00b67f09SDavid van Moolenbroeksigs=`expr $sigs + 0`
2405*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2406*00b67f09SDavid van Moolenbroektest $sigs -eq 2 || ret=1
2407*00b67f09SDavid van Moolenbroekif test $ret != 0 ; then echo "I:failed"; fi
2408*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2409*00b67f09SDavid van Moolenbroek
2410*00b67f09SDavid van Moolenbroekecho "I:check that increasing the sig-validity-interval resigning triggers re-signing"
2411*00b67f09SDavid van Moolenbroekret=0
2412*00b67f09SDavid van Moolenbroekbefore=`$DIG axfr siginterval.example -p 5300 @10.53.0.3 | grep RRSIG.SOA`
2413*00b67f09SDavid van Moolenbroekcp ns3/siginterval2.conf ns3/siginterval.conf
2414*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 reconfig 2>&1 | sed 's/^/I:ns3 /'
2415*00b67f09SDavid van Moolenbroekfor i in 1 2 3 4 5 6 7 8 9 0
2416*00b67f09SDavid van Moolenbroekdo
2417*00b67f09SDavid van Moolenbroekafter=`$DIG axfr siginterval.example -p 5300 @10.53.0.3 | grep RRSIG.SOA`
2418*00b67f09SDavid van Moolenbroektest "$before" != "$after" && break
2419*00b67f09SDavid van Moolenbroeksleep 1
2420*00b67f09SDavid van Moolenbroekdone
2421*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2422*00b67f09SDavid van Moolenbroekif test "$before" = "$after" ; then echo "I:failed"; ret=1; fi
2423*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2424*00b67f09SDavid van Moolenbroek
2425*00b67f09SDavid van Moolenbroekcp ns4/named4.conf ns4/named.conf
2426*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.4 -p 9953 reconfig 2>&1 | sed 's/^/I:ns4 /'
2427*00b67f09SDavid van Moolenbroeksleep 3
2428*00b67f09SDavid van Moolenbroek
2429*00b67f09SDavid van Moolenbroekecho "I:check insecure delegation between static-stub zones ($n)"
2430*00b67f09SDavid van Moolenbroekret=0
2431*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS ns insecure.secure.example \
2432*00b67f09SDavid van Moolenbroek	@10.53.0.4 > dig.out.ns4.1.test$n || ret=1
2433*00b67f09SDavid van Moolenbroekgrep "SERVFAIL" dig.out.ns4.1.test$n > /dev/null && ret=1
2434*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS ns secure.example \
2435*00b67f09SDavid van Moolenbroek	@10.53.0.4 > dig.out.ns4.2.test$n || ret=1
2436*00b67f09SDavid van Moolenbroekgrep "SERVFAIL" dig.out.ns4.2.test$n > /dev/null && ret=1
2437*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2438*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2439*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2440*00b67f09SDavid van Moolenbroek
2441*00b67f09SDavid van Moolenbroekecho "I:check the acceptance of seconds as inception and expiration times ($n)"
2442*00b67f09SDavid van Moolenbroekret=0
2443*00b67f09SDavid van Moolenbroekin="NSEC 8 0 86400 1390003200 1389394800 33655 . NYWjZYBV1b+h4j0yu/SmPOOylR8P4IXKDzHX3NwEmU1SUp27aJ91dP+i+UBcnPmBib0hck4DrFVvpflCEpCnVQd2DexcN0GX+3PM7XobxhtDlmnU X1L47zJlbdHNwTqHuPaMM6Xy9HGMXps7O5JVyfggVhTz2C+G5OVxBdb2rOo="
2444*00b67f09SDavid van Moolenbroek
2445*00b67f09SDavid van Moolenbroekexp="NSEC 8 0 86400 20140118000000 20140110230000 33655 . NYWjZYBV1b+h4j0yu/SmPOOylR8P4IXKDzHX3NwEmU1SUp27aJ91dP+i +UBcnPmBib0hck4DrFVvpflCEpCnVQd2DexcN0GX+3PM7XobxhtDlmnU X1L47zJlbdHNwTqHuPaMM6Xy9HGMXps7O5JVyfggVhTz2C+G5OVxBdb2 rOo="
2446*00b67f09SDavid van Moolenbroek
2447*00b67f09SDavid van Moolenbroekout=`echo "IN RRSIG $in" | $RRCHECKER -p | sed 's/^IN.RRSIG.//'`
2448*00b67f09SDavid van Moolenbroek[ "$out" = "$exp" ] || ret=1
2449*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2450*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2451*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2452*00b67f09SDavid van Moolenbroek
2453*00b67f09SDavid van Moolenbroekecho "I:check the correct resigning time is reported in zonestatus ($n)"
2454*00b67f09SDavid van Moolenbroekret=0
2455*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 \
2456*00b67f09SDavid van Moolenbroek		zonestatus secure.example > rndc.out.test$n
2457*00b67f09SDavid van Moolenbroek# next resign node: secure.example/DNSKEY
2458*00b67f09SDavid van Moolenbroekname=`awk '/next resign node:/ { print $4 }' rndc.out.test$n | sed 's;/; ;'`
2459*00b67f09SDavid van Moolenbroek# next resign time: Thu, 24 Apr 2014 10:38:16 GMT
2460*00b67f09SDavid van Moolenbroektime=`awk 'BEGIN { m["Jan"] = "01"; m["Feb"] = "02"; m["Mar"] = "03";
2461*00b67f09SDavid van Moolenbroek		   m["Apr"] = "04"; m["May"] = "05"; m["Jun"] = "06";
2462*00b67f09SDavid van Moolenbroek		   m["Jul"] = "07"; m["Aug"] = "08"; m["Sep"] = "09";
2463*00b67f09SDavid van Moolenbroek		   m["Oct"] = "10"; m["Nov"] = "11"; m["Dec"] = "12";}
2464*00b67f09SDavid van Moolenbroek	 /next resign time:/ { printf "%d%s%02d%s\n", $7, m[$6], $5, $8 }' rndc.out.test$n | sed 's/://g'`
2465*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noall +answer $name @10.53.0.3 -p 5300 > dig.out.test$n
2466*00b67f09SDavid van Moolenbroekexpire=`awk '$4 == "RRSIG" { print $9 }' dig.out.test$n`
2467*00b67f09SDavid van Moolenbroekinception=`awk '$4 == "RRSIG" { print $10 }' dig.out.test$n`
2468*00b67f09SDavid van Moolenbroek$PERL -e 'exit(0) if ("'"$time"'" lt "'"$expire"'" && "'"$time"'" gt "'"$inception"'"); exit(1);' || ret=1
2469*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2470*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2471*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2472*00b67f09SDavid van Moolenbroek
2473*00b67f09SDavid van Moolenbroekecho "I:check that split rrsigs are handled ($n)"
2474*00b67f09SDavid van Moolenbroekret=0
2475*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS split-rrsig soa @10.53.0.7 > dig.out.test$n || ret=1
2476*00b67f09SDavid van Moolenbroekawk 'BEGIN { ok=0; } $4 == "SOA" { if ($7 > 1) ok=1; } END { if (!ok) exit(1); }' dig.out.test$n || ret=1
2477*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2478*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2479*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2480*00b67f09SDavid van Moolenbroek
2481*00b67f09SDavid van Moolenbroekecho "I:check that 'dnssec-keygen -S' works for all supported algorithms ($n)"
2482*00b67f09SDavid van Moolenbroekret=0
2483*00b67f09SDavid van Moolenbroekalg=1
2484*00b67f09SDavid van Moolenbroekuntil test $alg = 256
2485*00b67f09SDavid van Moolenbroekdo
2486*00b67f09SDavid van Moolenbroek	size=
2487*00b67f09SDavid van Moolenbroek	case $alg in
2488*00b67f09SDavid van Moolenbroek	1) size="-b 512";;
2489*00b67f09SDavid van Moolenbroek	2) # Diffie Helman
2490*00b67f09SDavid van Moolenbroek	   alg=`expr $alg + 1`
2491*00b67f09SDavid van Moolenbroek	   continue;;
2492*00b67f09SDavid van Moolenbroek	3) size="-b 512";;
2493*00b67f09SDavid van Moolenbroek	5) size="-b 512";;
2494*00b67f09SDavid van Moolenbroek	6) size="-b 512";;
2495*00b67f09SDavid van Moolenbroek	7) size="-b 512";;
2496*00b67f09SDavid van Moolenbroek	8) size="-b 512";;
2497*00b67f09SDavid van Moolenbroek	10) size="-b 1024";;
2498*00b67f09SDavid van Moolenbroek	157|160|161|162|163|164|165) # private - non standard
2499*00b67f09SDavid van Moolenbroek	   alg=`expr $alg + 1`
2500*00b67f09SDavid van Moolenbroek	   continue;;
2501*00b67f09SDavid van Moolenbroek	esac
2502*00b67f09SDavid van Moolenbroek	key1=`$KEYGEN -a $alg $size -n zone -r $RANDFILE example 2> keygen.err`
2503*00b67f09SDavid van Moolenbroek	if grep "unsupported algorithm" keygen.err > /dev/null
2504*00b67f09SDavid van Moolenbroek	then
2505*00b67f09SDavid van Moolenbroek		alg=`expr $alg + 1`
2506*00b67f09SDavid van Moolenbroek		continue
2507*00b67f09SDavid van Moolenbroek	fi
2508*00b67f09SDavid van Moolenbroek	if test -z "$key1"
2509*00b67f09SDavid van Moolenbroek	then
2510*00b67f09SDavid van Moolenbroek		echo "I: '$KEYGEN -a $alg': failed"
2511*00b67f09SDavid van Moolenbroek		cat keygen.err
2512*00b67f09SDavid van Moolenbroek		ret=1
2513*00b67f09SDavid van Moolenbroek		alg=`expr $alg + 1`
2514*00b67f09SDavid van Moolenbroek		continue
2515*00b67f09SDavid van Moolenbroek	fi
2516*00b67f09SDavid van Moolenbroek	$SETTIME -I now+4d $key1.private > /dev/null
2517*00b67f09SDavid van Moolenbroek	key2=`$KEYGEN -v 10 -r $RANDFILE -i 3d -S $key1.private 2> /dev/null`
2518*00b67f09SDavid van Moolenbroek	test -f $key2.key -a -f $key2.private || {
2519*00b67f09SDavid van Moolenbroek		ret=1
2520*00b67f09SDavid van Moolenbroek		echo "I: 'dnssec-keygen -S' failed for algorithm: $alg"
2521*00b67f09SDavid van Moolenbroek	}
2522*00b67f09SDavid van Moolenbroek	alg=`expr $alg + 1`
2523*00b67f09SDavid van Moolenbroekdone
2524*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2525*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2526*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2527*00b67f09SDavid van Moolenbroek
2528*00b67f09SDavid van Moolenbroek#
2529*00b67f09SDavid van Moolenbroek# Test for +sigchase with a null set of trusted keys.
2530*00b67f09SDavid van Moolenbroek#
2531*00b67f09SDavid van Moolenbroek$DIG -p 5300 @10.53.0.3 +sigchase +trusted-key=/dev/null > dig.out.ns3.test$n 2>&1
2532*00b67f09SDavid van Moolenbroekif grep "Invalid option: +sigchase" dig.out.ns3.test$n > /dev/null
2533*00b67f09SDavid van Moolenbroekthen
2534*00b67f09SDavid van Moolenbroek	echo "I:Skipping 'dig +sigchase' tests"
2535*00b67f09SDavid van Moolenbroek	n=`expr $n + 1`
2536*00b67f09SDavid van Moolenbroekelse
2537*00b67f09SDavid van Moolenbroek	echo "I:checking that 'dig +sigchase' doesn't loop with future inception ($n)"
2538*00b67f09SDavid van Moolenbroek	ret=0
2539*00b67f09SDavid van Moolenbroek	$DIG -p 5300 @10.53.0.3 dnskey future.example +sigchase \
2540*00b67f09SDavid van Moolenbroek		 +trusted-key=ns3/trusted-future.key > dig.out.ns3.test$n &
2541*00b67f09SDavid van Moolenbroek	pid=$!
2542*00b67f09SDavid van Moolenbroek	sleep 1
2543*00b67f09SDavid van Moolenbroek	kill -9 $pid 2> /dev/null
2544*00b67f09SDavid van Moolenbroek	wait $pid
2545*00b67f09SDavid van Moolenbroek	grep ";; No DNSKEY is valid to check the RRSIG of the RRset: FAILED" dig.out.ns3.test$n > /dev/null || ret=1
2546*00b67f09SDavid van Moolenbroek	if [ $ret != 0 ]; then echo "I:failed"; fi
2547*00b67f09SDavid van Moolenbroek	status=`expr $status + $ret`
2548*00b67f09SDavid van Moolenbroek	n=`expr $n + 1`
2549*00b67f09SDavid van Moolenbroekfi
2550*00b67f09SDavid van Moolenbroek
2551*00b67f09SDavid van Moolenbroekecho "I:checking that positive unknown NSEC3 hash algorithm does validate ($n)"
2552*00b67f09SDavid van Moolenbroekret=0
2553*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth +noadd +nodnssec +adflag -p 5300 @10.53.0.3 nsec3-unknown.example SOA > dig.out.ns3.test$n
2554*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth +noadd +nodnssec +adflag -p 5300 @10.53.0.4 nsec3-unknown.example SOA > dig.out.ns4.test$n
2555*00b67f09SDavid van Moolenbroekgrep "status: NOERROR," dig.out.ns3.test$n > /dev/null || ret=1
2556*00b67f09SDavid van Moolenbroekgrep "status: NOERROR," dig.out.ns4.test$n > /dev/null || ret=1
2557*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
2558*00b67f09SDavid van Moolenbroekgrep "ANSWER: 1," dig.out.ns4.test$n > /dev/null || ret=1
2559*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2560*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2561*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2562*00b67f09SDavid van Moolenbroek
2563*00b67f09SDavid van Moolenbroekecho "I:checking that positive unknown NSEC3 hash algorithm with OPTOUT does validate ($n)"
2564*00b67f09SDavid van Moolenbroekret=0
2565*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth +noadd +nodnssec +adflag -p 5300 @10.53.0.3 optout-unknown.example SOA > dig.out.ns3.test$n
2566*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth +noadd +nodnssec +adflag -p 5300 @10.53.0.4 optout-unknown.example SOA > dig.out.ns4.test$n
2567*00b67f09SDavid van Moolenbroekgrep "status: NOERROR," dig.out.ns3.test$n > /dev/null || ret=1
2568*00b67f09SDavid van Moolenbroekgrep "status: NOERROR," dig.out.ns4.test$n > /dev/null || ret=1
2569*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
2570*00b67f09SDavid van Moolenbroekgrep "ANSWER: 1," dig.out.ns4.test$n > /dev/null || ret=1
2571*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2572*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2573*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2574*00b67f09SDavid van Moolenbroek
2575*00b67f09SDavid van Moolenbroekecho "I:checking that negative unknown NSEC3 hash algorithm does not validate ($n)"
2576*00b67f09SDavid van Moolenbroekret=0
2577*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth +noadd +nodnssec +adflag -p 5300 @10.53.0.3 nsec3-unknown.example A > dig.out.ns3.test$n
2578*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth +noadd +nodnssec +adflag -p 5300 @10.53.0.4 nsec3-unknown.example A > dig.out.ns4.test$n
2579*00b67f09SDavid van Moolenbroekgrep "status: NOERROR," dig.out.ns3.test$n > /dev/null || ret=1
2580*00b67f09SDavid van Moolenbroekgrep "status: SERVFAIL," dig.out.ns4.test$n > /dev/null || ret=1
2581*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2582*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2583*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2584*00b67f09SDavid van Moolenbroek
2585*00b67f09SDavid van Moolenbroekecho "I:checking that negative unknown NSEC3 hash algorithm with OPTOUT does not validate ($n)"
2586*00b67f09SDavid van Moolenbroekret=0
2587*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth +noadd +nodnssec +adflag -p 5300 @10.53.0.3 optout-unknown.example A > dig.out.ns3.test$n
2588*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth +noadd +nodnssec +adflag -p 5300 @10.53.0.4 optout-unknown.example A > dig.out.ns4.test$n
2589*00b67f09SDavid van Moolenbroekgrep "status: NOERROR," dig.out.ns3.test$n > /dev/null || ret=1
2590*00b67f09SDavid van Moolenbroekgrep "status: SERVFAIL," dig.out.ns4.test$n > /dev/null || ret=1
2591*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2592*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2593*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2594*00b67f09SDavid van Moolenbroek
2595*00b67f09SDavid van Moolenbroekecho "I:checking that unknown DNSKEY algorithm validates as insecure ($n)"
2596*00b67f09SDavid van Moolenbroekret=0
2597*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth +noadd +nodnssec +adflag -p 5300 @10.53.0.3 dnskey-unknown.example A > dig.out.ns3.test$n
2598*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth +noadd +nodnssec +adflag -p 5300 @10.53.0.4 dnskey-unknown.example A > dig.out.ns4.test$n
2599*00b67f09SDavid van Moolenbroekgrep "status: NOERROR," dig.out.ns3.test$n > /dev/null || ret=1
2600*00b67f09SDavid van Moolenbroekgrep "status: NOERROR," dig.out.ns4.test$n > /dev/null || ret=1
2601*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
2602*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2603*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2604*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2605*00b67f09SDavid van Moolenbroek
2606*00b67f09SDavid van Moolenbroekecho "I:checking that unknown DNSKEY algorithm + unknown NSEC3 has algorithm validates as insecure ($n)"
2607*00b67f09SDavid van Moolenbroekret=0
2608*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth +noadd +nodnssec +adflag -p 5300 @10.53.0.3 dnskey-nsec3-unknown.example A > dig.out.ns3.test$n
2609*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth +noadd +nodnssec +adflag -p 5300 @10.53.0.4 dnskey-nsec3-unknown.example A > dig.out.ns4.test$n
2610*00b67f09SDavid van Moolenbroekgrep "status: NOERROR," dig.out.ns3.test$n > /dev/null || ret=1
2611*00b67f09SDavid van Moolenbroekgrep "status: NOERROR," dig.out.ns4.test$n > /dev/null || ret=1
2612*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
2613*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2614*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2615*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2616*00b67f09SDavid van Moolenbroek
2617*00b67f09SDavid van Moolenbroekecho "I:checking initialization with a revoked managed key ($n)"
2618*00b67f09SDavid van Moolenbroekret=0
2619*00b67f09SDavid van Moolenbroekcp ns5/named2.conf ns5/named.conf
2620*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.5 -p 9953 reconfig 2>&1 | sed 's/^/I:ns5 /'
2621*00b67f09SDavid van Moolenbroeksleep 3
2622*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +dnssec -p 5300 @10.53.0.5 SOA . > dig.out.ns5.test$n
2623*00b67f09SDavid van Moolenbroekgrep "status: SERVFAIL" dig.out.ns5.test$n > /dev/null || ret=1
2624*00b67f09SDavid van Moolenbroekn=`expr $n + 1`
2625*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi
2626*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret`
2627*00b67f09SDavid van Moolenbroek
2628*00b67f09SDavid van Moolenbroekecho "I:exit status: $status"
2629*00b67f09SDavid van Moolenbroekexit $status
2630