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