1*00b67f09SDavid van Moolenbroek#!/bin/sh 2*00b67f09SDavid van Moolenbroek# 3*00b67f09SDavid van Moolenbroek# Copyright (C) 2009-2014 Internet Systems Consortium, Inc. ("ISC") 4*00b67f09SDavid van Moolenbroek# 5*00b67f09SDavid van Moolenbroek# Permission to use, copy, modify, and/or distribute this software for any 6*00b67f09SDavid van Moolenbroek# purpose with or without fee is hereby granted, provided that the above 7*00b67f09SDavid van Moolenbroek# copyright notice and this permission notice appear in all copies. 8*00b67f09SDavid van Moolenbroek# 9*00b67f09SDavid van Moolenbroek# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 10*00b67f09SDavid van Moolenbroek# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 11*00b67f09SDavid van Moolenbroek# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 12*00b67f09SDavid van Moolenbroek# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 13*00b67f09SDavid van Moolenbroek# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 14*00b67f09SDavid van Moolenbroek# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 15*00b67f09SDavid van Moolenbroek# PERFORMANCE OF THIS SOFTWARE. 16*00b67f09SDavid van Moolenbroek 17*00b67f09SDavid van MoolenbroekSYSTEMTESTTOP=.. 18*00b67f09SDavid van Moolenbroek. $SYSTEMTESTTOP/conf.sh 19*00b67f09SDavid van Moolenbroek 20*00b67f09SDavid van Moolenbroekstatus=0 21*00b67f09SDavid van Moolenbroekn=0 22*00b67f09SDavid van Moolenbroek 23*00b67f09SDavid van MoolenbroekDIGOPTS="+tcp +noadd +nosea +nostat +nocmd +dnssec -p 5300" 24*00b67f09SDavid van Moolenbroek 25*00b67f09SDavid van Moolenbroek# convert private-type records to readable form 26*00b67f09SDavid van Moolenbroekshowprivate () { 27*00b67f09SDavid van Moolenbroek echo "-- $@ --" 28*00b67f09SDavid van Moolenbroek $DIG $DIGOPTS +nodnssec +short @$2 -t type65534 $1 | cut -f3 -d' ' | 29*00b67f09SDavid van Moolenbroek while read record; do 30*00b67f09SDavid van Moolenbroek $PERL -e 'my $rdata = pack("H*", @ARGV[0]); 31*00b67f09SDavid van Moolenbroek die "invalid record" unless length($rdata) == 5; 32*00b67f09SDavid van Moolenbroek my ($alg, $key, $remove, $complete) = unpack("CnCC", $rdata); 33*00b67f09SDavid van Moolenbroek my $action = "signing"; 34*00b67f09SDavid van Moolenbroek $action = "removing" if $remove; 35*00b67f09SDavid van Moolenbroek my $state = " (incomplete)"; 36*00b67f09SDavid van Moolenbroek $state = " (complete)" if $complete; 37*00b67f09SDavid van Moolenbroek print ("$action: alg: $alg, key: $key$state\n");' $record 38*00b67f09SDavid van Moolenbroek done 39*00b67f09SDavid van Moolenbroek} 40*00b67f09SDavid van Moolenbroek 41*00b67f09SDavid van Moolenbroek# check that signing records are marked as complete 42*00b67f09SDavid van Moolenbroekcheckprivate () { 43*00b67f09SDavid van Moolenbroek _ret=0 44*00b67f09SDavid van Moolenbroek expected="${3:-0}" 45*00b67f09SDavid van Moolenbroek x=`showprivate "$@"` 46*00b67f09SDavid van Moolenbroek echo $x | grep incomplete > /dev/null && _ret=1 47*00b67f09SDavid van Moolenbroek 48*00b67f09SDavid van Moolenbroek if [ $_ret = $expected ]; then 49*00b67f09SDavid van Moolenbroek return 0 50*00b67f09SDavid van Moolenbroek fi 51*00b67f09SDavid van Moolenbroek 52*00b67f09SDavid van Moolenbroek echo "$x" 53*00b67f09SDavid van Moolenbroek echo "I:failed" 54*00b67f09SDavid van Moolenbroek return 1 55*00b67f09SDavid van Moolenbroek} 56*00b67f09SDavid van Moolenbroek 57*00b67f09SDavid van Moolenbroek# 58*00b67f09SDavid van Moolenbroek# The NSEC record at the apex of the zone and its RRSIG records are 59*00b67f09SDavid van Moolenbroek# added as part of the last step in signing a zone. We wait for the 60*00b67f09SDavid van Moolenbroek# NSEC records to appear before proceeding with a counter to prevent 61*00b67f09SDavid van Moolenbroek# infinite loops if there is a error. 62*00b67f09SDavid van Moolenbroek# 63*00b67f09SDavid van Moolenbroekecho "I:waiting for autosign changes to take effect" 64*00b67f09SDavid van Moolenbroeki=0 65*00b67f09SDavid van Moolenbroekwhile [ $i -lt 30 ] 66*00b67f09SDavid van Moolenbroekdo 67*00b67f09SDavid van Moolenbroek ret=0 68*00b67f09SDavid van Moolenbroek # 69*00b67f09SDavid van Moolenbroek # Wait for the root DNSKEY RRset to be fully signed. 70*00b67f09SDavid van Moolenbroek # 71*00b67f09SDavid van Moolenbroek $DIG $DIGOPTS . @10.53.0.1 dnskey > dig.out.ns1.test$n || ret=1 72*00b67f09SDavid van Moolenbroek grep "ANSWER: 10," dig.out.ns1.test$n > /dev/null || ret=1 73*00b67f09SDavid van Moolenbroek for z in . 74*00b67f09SDavid van Moolenbroek do 75*00b67f09SDavid van Moolenbroek $DIG $DIGOPTS $z @10.53.0.1 nsec > dig.out.ns1.test$n || ret=1 76*00b67f09SDavid van Moolenbroek grep "NS SOA" dig.out.ns1.test$n > /dev/null || ret=1 77*00b67f09SDavid van Moolenbroek done 78*00b67f09SDavid van Moolenbroek for z in bar. example. private.secure.example. 79*00b67f09SDavid van Moolenbroek do 80*00b67f09SDavid van Moolenbroek $DIG $DIGOPTS $z @10.53.0.2 nsec > dig.out.ns2.test$n || ret=1 81*00b67f09SDavid van Moolenbroek grep "NS SOA" dig.out.ns2.test$n > /dev/null || ret=1 82*00b67f09SDavid van Moolenbroek done 83*00b67f09SDavid van Moolenbroek for z in bar. example. 84*00b67f09SDavid van Moolenbroek do 85*00b67f09SDavid van Moolenbroek $DIG $DIGOPTS $z @10.53.0.3 nsec > dig.out.ns3.test$n || ret=1 86*00b67f09SDavid van Moolenbroek grep "NS SOA" dig.out.ns3.test$n > /dev/null || ret=1 87*00b67f09SDavid van Moolenbroek done 88*00b67f09SDavid van Moolenbroek i=`expr $i + 1` 89*00b67f09SDavid van Moolenbroek if [ $ret = 0 ]; then break; fi 90*00b67f09SDavid van Moolenbroek echo "I:waiting ... ($i)" 91*00b67f09SDavid van Moolenbroek sleep 2 92*00b67f09SDavid van Moolenbroekdone 93*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 94*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; else echo "I:done"; fi 95*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 96*00b67f09SDavid van Moolenbroek 97*00b67f09SDavid van Moolenbroekecho "I:checking NSEC->NSEC3 conversion prerequisites ($n)" 98*00b67f09SDavid van Moolenbroekret=0 99*00b67f09SDavid van Moolenbroek# these commands should result in an empty file: 100*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noall +answer nsec3.example. nsec3param @10.53.0.3 > dig.out.ns3.1.test$n || ret=1 101*00b67f09SDavid van Moolenbroekgrep "NSEC3PARAM" dig.out.ns3.1.test$n > /dev/null && ret=1 102*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noall +answer autonsec3.example. nsec3param @10.53.0.3 > dig.out.ns3.2.test$n || ret=1 103*00b67f09SDavid van Moolenbroekgrep "NSEC3PARAM" dig.out.ns3.2.test$n > /dev/null && ret=1 104*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 105*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 106*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 107*00b67f09SDavid van Moolenbroek 108*00b67f09SDavid van Moolenbroekecho "I:checking NSEC3->NSEC conversion prerequisites ($n)" 109*00b67f09SDavid van Moolenbroekret=0 110*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noall +answer nsec3-to-nsec.example. nsec3param @10.53.0.3 > dig.out.ns3.test$n || ret=1 111*00b67f09SDavid van Moolenbroekgrep "NSEC3PARAM" dig.out.ns3.test$n > /dev/null || ret=1 112*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 113*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 114*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 115*00b67f09SDavid van Moolenbroek 116*00b67f09SDavid van Moolenbroekecho "I:converting zones from nsec to nsec3" 117*00b67f09SDavid van Moolenbroek$NSUPDATE > /dev/null 2>&1 <<END || status=1 118*00b67f09SDavid van Moolenbroekserver 10.53.0.3 5300 119*00b67f09SDavid van Moolenbroekzone nsec3.nsec3.example. 120*00b67f09SDavid van Moolenbroekupdate add nsec3.nsec3.example. 3600 NSEC3PARAM 1 0 10 BEEF 121*00b67f09SDavid van Moolenbroeksend 122*00b67f09SDavid van Moolenbroekzone optout.nsec3.example. 123*00b67f09SDavid van Moolenbroekupdate add optout.nsec3.example. 3600 NSEC3PARAM 1 1 10 BEEF 124*00b67f09SDavid van Moolenbroeksend 125*00b67f09SDavid van Moolenbroekzone nsec3.example. 126*00b67f09SDavid van Moolenbroekupdate add nsec3.example. 3600 NSEC3PARAM 1 0 10 BEEF 127*00b67f09SDavid van Moolenbroeksend 128*00b67f09SDavid van Moolenbroekzone autonsec3.example. 129*00b67f09SDavid van Moolenbroekupdate add autonsec3.example. 3600 NSEC3PARAM 1 0 20 DEAF 130*00b67f09SDavid van Moolenbroeksend 131*00b67f09SDavid van Moolenbroekzone nsec3.optout.example. 132*00b67f09SDavid van Moolenbroekupdate add nsec3.optout.example. 3600 NSEC3PARAM 1 0 10 BEEF 133*00b67f09SDavid van Moolenbroeksend 134*00b67f09SDavid van Moolenbroekzone optout.optout.example. 135*00b67f09SDavid van Moolenbroekupdate add optout.optout.example. 3600 NSEC3PARAM 1 1 10 BEEF 136*00b67f09SDavid van Moolenbroeksend 137*00b67f09SDavid van Moolenbroekzone optout.example. 138*00b67f09SDavid van Moolenbroekupdate add optout.example. 3600 NSEC3PARAM 1 1 10 BEEF 139*00b67f09SDavid van Moolenbroeksend 140*00b67f09SDavid van MoolenbroekEND 141*00b67f09SDavid van Moolenbroek 142*00b67f09SDavid van Moolenbroek# try to convert nsec.example; this should fail due to non-NSEC key 143*00b67f09SDavid van Moolenbroekecho "I:preset nsec3param in unsigned zone via nsupdate ($n)" 144*00b67f09SDavid van Moolenbroek$NSUPDATE > nsupdate.out 2>&1 <<END 145*00b67f09SDavid van Moolenbroekserver 10.53.0.3 5300 146*00b67f09SDavid van Moolenbroekzone nsec.example. 147*00b67f09SDavid van Moolenbroekupdate add nsec.example. 3600 NSEC3PARAM 1 0 10 BEEF 148*00b67f09SDavid van Moolenbroeksend 149*00b67f09SDavid van MoolenbroekEND 150*00b67f09SDavid van Moolenbroek 151*00b67f09SDavid van Moolenbroekecho "I:checking for nsec3param in unsigned zone ($n)" 152*00b67f09SDavid van Moolenbroekret=0 153*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noall +answer autonsec3.example. nsec3param @10.53.0.3 > dig.out.ns3.test$n || ret=1 154*00b67f09SDavid van Moolenbroekgrep "NSEC3PARAM" dig.out.ns3.test$n > /dev/null && ret=1 155*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 156*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 157*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 158*00b67f09SDavid van Moolenbroek 159*00b67f09SDavid van Moolenbroekecho "I:checking for nsec3param signing record ($n)" 160*00b67f09SDavid van Moolenbroekret=0 161*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 signing -list autonsec3.example. > signing.out.test$n 2>&1 162*00b67f09SDavid van Moolenbroekgrep "Pending NSEC3 chain 1 0 20 DEAF" signing.out.test$n > /dev/null || ret=1 163*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 164*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 165*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 166*00b67f09SDavid van Moolenbroek 167*00b67f09SDavid van Moolenbroekecho "I:resetting nsec3param via rndc signing ($n)" 168*00b67f09SDavid van Moolenbroekret=0 169*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 signing -clear all autonsec3.example. > /dev/null 2>&1 170*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 signing -nsec3param 1 1 10 beef autonsec3.example. > /dev/null 2>&1 171*00b67f09SDavid van Moolenbroekfor i in 0 1 2 3 4 5 6 7 8 9; do 172*00b67f09SDavid van Moolenbroek ret=0 173*00b67f09SDavid van Moolenbroek $RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 signing -list autonsec3.example. > signing.out.test$n 2>&1 174*00b67f09SDavid van Moolenbroek grep "Pending NSEC3 chain 1 1 10 BEEF" signing.out.test$n > /dev/null || ret=1 175*00b67f09SDavid van Moolenbroek num=`grep "Pending " signing.out.test$n | wc -l` 176*00b67f09SDavid van Moolenbroek [ $num -eq 1 ] || ret=1 177*00b67f09SDavid van Moolenbroek [ $ret -eq 0 ] && break 178*00b67f09SDavid van Moolenbroek echo "I:waiting ... ($i)" 179*00b67f09SDavid van Moolenbroek sleep 2 180*00b67f09SDavid van Moolenbroekdone 181*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 182*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 183*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 184*00b67f09SDavid van Moolenbroek 185*00b67f09SDavid van Moolenbroekecho "I:signing preset nsec3 zone" 186*00b67f09SDavid van Moolenbroekzsk=`cat autozsk.key` 187*00b67f09SDavid van Moolenbroekksk=`cat autoksk.key` 188*00b67f09SDavid van Moolenbroek$SETTIME -K ns3 -P now -A now $zsk > /dev/null 2>&1 189*00b67f09SDavid van Moolenbroek$SETTIME -K ns3 -P now -A now $ksk > /dev/null 2>&1 190*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 loadkeys autonsec3.example. 2>&1 | sed 's/^/I:ns3 /' 191*00b67f09SDavid van Moolenbroek 192*00b67f09SDavid van Moolenbroekecho "I:waiting for changes to take effect" 193*00b67f09SDavid van Moolenbroeksleep 3 194*00b67f09SDavid van Moolenbroek 195*00b67f09SDavid van Moolenbroekecho "I:converting zone from nsec3 to nsec" 196*00b67f09SDavid van Moolenbroek$NSUPDATE > /dev/null 2>&1 << END || status=1 197*00b67f09SDavid van Moolenbroekserver 10.53.0.3 5300 198*00b67f09SDavid van Moolenbroekzone nsec3-to-nsec.example. 199*00b67f09SDavid van Moolenbroekupdate delete nsec3-to-nsec.example. NSEC3PARAM 200*00b67f09SDavid van Moolenbroeksend 201*00b67f09SDavid van MoolenbroekEND 202*00b67f09SDavid van Moolenbroek 203*00b67f09SDavid van Moolenbroekecho "I:waiting for change to take effect" 204*00b67f09SDavid van Moolenbroeksleep 3 205*00b67f09SDavid van Moolenbroek 206*00b67f09SDavid van Moolenbroekecho "I:checking that expired RRSIGs from missing key are not deleted ($n)" 207*00b67f09SDavid van Moolenbroekret=0 208*00b67f09SDavid van Moolenbroekmissing=`sed 's/^K.*+007+0*\([0-9]\)/\1/' < missingzsk.key` 209*00b67f09SDavid van Moolenbroek$JOURNALPRINT ns3/nozsk.example.db.jnl | \ 210*00b67f09SDavid van Moolenbroek awk '{if ($1 == "del" && $5 == "RRSIG" && $12 == id) {exit 1}} END {exit 0}' id=$missing || ret=1 211*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 212*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 213*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 214*00b67f09SDavid van Moolenbroek 215*00b67f09SDavid van Moolenbroekecho "I:checking that expired RRSIGs from inactive key are not deleted ($n)" 216*00b67f09SDavid van Moolenbroekret=0 217*00b67f09SDavid van Moolenbroekinactive=`sed 's/^K.*+007+0*\([0-9]\)/\1/' < inactivezsk.key` 218*00b67f09SDavid van Moolenbroek$JOURNALPRINT ns3/inaczsk.example.db.jnl | \ 219*00b67f09SDavid van Moolenbroek awk '{if ($1 == "del" && $5 == "RRSIG" && $12 == id) {exit 1}} END {exit 0}' id=$inactive || ret=1 220*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 221*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 222*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 223*00b67f09SDavid van Moolenbroek 224*00b67f09SDavid van Moolenbroekecho "I:checking that non-replaceable RRSIGs are logged only once (missing private key) ($n)" 225*00b67f09SDavid van Moolenbroekret=0 226*00b67f09SDavid van Moolenbroekloglines=`grep "Key nozsk.example/NSEC3RSASHA1/$missing .* retaining signatures" ns3/named.run | wc -l` 227*00b67f09SDavid van Moolenbroek[ "$loglines" -eq 1 ] || ret=1 228*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 229*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 230*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 231*00b67f09SDavid van Moolenbroek 232*00b67f09SDavid van Moolenbroekecho "I:checking that non-replaceable RRSIGs are logged only once (inactive private key) ($n)" 233*00b67f09SDavid van Moolenbroekret=0 234*00b67f09SDavid van Moolenbroekloglines=`grep "Key inaczsk.example/NSEC3RSASHA1/$inactive .* retaining signatures" ns3/named.run | wc -l` 235*00b67f09SDavid van Moolenbroek[ "$loglines" -eq 1 ] || ret=1 236*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 237*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 238*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 239*00b67f09SDavid van Moolenbroek 240*00b67f09SDavid van Moolenbroek# Send rndc sync command to ns1, ns2 and ns3, to force the dynamically 241*00b67f09SDavid van Moolenbroek# signed zones to be dumped to their zone files 242*00b67f09SDavid van Moolenbroekecho "I:dumping zone files" 243*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.1 -p 9953 sync 2>&1 | sed 's/^/I:ns1 /' 244*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.2 -p 9953 sync 2>&1 | sed 's/^/I:ns2 /' 245*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 sync 2>&1 | sed 's/^/I:ns3 /' 246*00b67f09SDavid van Moolenbroek 247*00b67f09SDavid van Moolenbroekecho "I:checking expired signatures were updated ($n)" 248*00b67f09SDavid van Moolenbroekfor i in 1 2 3 4 5 6 7 8 9 249*00b67f09SDavid van Moolenbroekdo 250*00b67f09SDavid van Moolenbroek ret=0 251*00b67f09SDavid van Moolenbroek $DIG $DIGOPTS +noauth a.oldsigs.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1 252*00b67f09SDavid van Moolenbroek $DIG $DIGOPTS +noauth a.oldsigs.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1 253*00b67f09SDavid van Moolenbroek $PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n > digcomp.out.test$n || ret=1 254*00b67f09SDavid van Moolenbroek grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 255*00b67f09SDavid van Moolenbroek [ $ret = 0 ] && break 256*00b67f09SDavid van Moolenbroek sleep 1 257*00b67f09SDavid van Moolenbroekdone 258*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then cat digcomp.out.test$n; echo "I:failed"; fi 259*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 260*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 261*00b67f09SDavid van Moolenbroek 262*00b67f09SDavid van Moolenbroekecho "I:checking NSEC->NSEC3 conversion succeeded ($n)" 263*00b67f09SDavid van Moolenbroekret=0 264*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS nsec3.example. nsec3param @10.53.0.3 > dig.out.ns3.ok.test$n || ret=1 265*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns3.ok.test$n > /dev/null || ret=1 266*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.nsec3.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1 267*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.nsec3.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1 268*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 269*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 270*00b67f09SDavid van Moolenbroekgrep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1 271*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 272*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 273*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 274*00b67f09SDavid van Moolenbroek 275*00b67f09SDavid van Moolenbroekecho "I:checking direct NSEC3 autosigning succeeded ($n)" 276*00b67f09SDavid van Moolenbroekret=0 277*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noall +answer autonsec3.example. nsec3param @10.53.0.3 > dig.out.ns3.ok.test$n || ret=1 278*00b67f09SDavid van Moolenbroek[ -s dig.out.ns3.ok.test$n ] || ret=1 279*00b67f09SDavid van Moolenbroekgrep "NSEC3PARAM" dig.out.ns3.ok.test$n > /dev/null || ret=1 280*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.autonsec3.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1 281*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.autonsec3.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1 282*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 283*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 284*00b67f09SDavid van Moolenbroekgrep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1 285*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 286*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 287*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 288*00b67f09SDavid van Moolenbroek 289*00b67f09SDavid van Moolenbroekecho "I:checking NSEC->NSEC3 conversion failed with NSEC-only key ($n)" 290*00b67f09SDavid van Moolenbroekret=0 291*00b67f09SDavid van Moolenbroekgrep "failed: REFUSED" nsupdate.out > /dev/null || ret=1 292*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 293*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 294*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 295*00b67f09SDavid van Moolenbroek 296*00b67f09SDavid van Moolenbroekecho "I:checking NSEC3->NSEC conversion succeeded ($n)" 297*00b67f09SDavid van Moolenbroekret=0 298*00b67f09SDavid van Moolenbroek# this command should result in an empty file: 299*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noall +answer nsec3-to-nsec.example. nsec3param @10.53.0.3 > dig.out.ns3.nx.test$n || ret=1 300*00b67f09SDavid van Moolenbroekgrep "NSEC3PARAM" dig.out.ns3.nx.test$n > /dev/null && ret=1 301*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.nsec3-to-nsec.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1 302*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.nsec3-to-nsec.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1 303*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 304*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 305*00b67f09SDavid van Moolenbroekgrep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1 306*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 307*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 308*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 309*00b67f09SDavid van Moolenbroek 310*00b67f09SDavid van Moolenbroekecho "I:checking NSEC3->NSEC conversion with 'rndc signing -nsec3param none' ($n)" 311*00b67f09SDavid van Moolenbroekret=0 312*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 signing -nsec3param none autonsec3.example. > /dev/null 2>&1 313*00b67f09SDavid van Moolenbroeksleep 2 314*00b67f09SDavid van Moolenbroek# this command should result in an empty file: 315*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noall +answer autonsec3.example. nsec3param @10.53.0.3 > dig.out.ns3.nx.test$n || ret=1 316*00b67f09SDavid van Moolenbroekgrep "NSEC3PARAM" dig.out.ns3.nx.test$n > /dev/null && ret=1 317*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.autonsec3.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1 318*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.autonsec3.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1 319*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 320*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 321*00b67f09SDavid van Moolenbroekgrep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1 322*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 323*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 324*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 325*00b67f09SDavid van Moolenbroek 326*00b67f09SDavid van Moolenbroekecho "I:checking TTLs of imported DNSKEYs (no default) ($n)" 327*00b67f09SDavid van Moolenbroekret=0 328*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +tcp +noall +answer dnskey ttl1.example. @10.53.0.3 > dig.out.ns3.test$n || ret=1 329*00b67f09SDavid van Moolenbroek[ -s dig.out.ns3.test$n ] || ret=1 330*00b67f09SDavid van Moolenbroekawk 'BEGIN {r=0} $2 != 300 {r=1; print "I:found TTL " $2} END {exit r}' dig.out.ns3.test$n || ret=1 331*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 332*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 333*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 334*00b67f09SDavid van Moolenbroek 335*00b67f09SDavid van Moolenbroekecho "I:checking TTLs of imported DNSKEYs (with default) ($n)" 336*00b67f09SDavid van Moolenbroekret=0 337*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +tcp +noall +answer dnskey ttl2.example. @10.53.0.3 > dig.out.ns3.test$n || ret=1 338*00b67f09SDavid van Moolenbroek[ -s dig.out.ns3.test$n ] || ret=1 339*00b67f09SDavid van Moolenbroekawk 'BEGIN {r=0} $2 != 60 {r=1; print "I:found TTL " $2} END {exit r}' dig.out.ns3.test$n || ret=1 340*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 341*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 342*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 343*00b67f09SDavid van Moolenbroek 344*00b67f09SDavid van Moolenbroekecho "I:checking TTLs of imported DNSKEYs (mismatched) ($n)" 345*00b67f09SDavid van Moolenbroekret=0 346*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +tcp +noall +answer dnskey ttl3.example. @10.53.0.3 > dig.out.ns3.test$n || ret=1 347*00b67f09SDavid van Moolenbroek[ -s dig.out.ns3.test$n ] || ret=1 348*00b67f09SDavid van Moolenbroekawk 'BEGIN {r=0} $2 != 30 {r=1; print "I:found TTL " $2} END {exit r}' dig.out.ns3.test$n || ret=1 349*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 350*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 351*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 352*00b67f09SDavid van Moolenbroek 353*00b67f09SDavid van Moolenbroekecho "I:checking TTLs of imported DNSKEYs (existing RRset) ($n)" 354*00b67f09SDavid van Moolenbroekret=0 355*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +tcp +noall +answer dnskey ttl4.example. @10.53.0.3 > dig.out.ns3.test$n || ret=1 356*00b67f09SDavid van Moolenbroek[ -s dig.out.ns3.test$n ] || ret=1 357*00b67f09SDavid van Moolenbroekawk 'BEGIN {r=0} $2 != 30 {r=1; print "I:found TTL " $2} END {exit r}' dig.out.ns3.test$n || ret=1 358*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 359*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 360*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 361*00b67f09SDavid van Moolenbroek 362*00b67f09SDavid van Moolenbroekecho "I:checking positive validation NSEC ($n)" 363*00b67f09SDavid van Moolenbroekret=0 364*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.example. @10.53.0.2 a > dig.out.ns2.test$n || ret=1 365*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1 366*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1 367*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 368*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 369*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 370*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 371*00b67f09SDavid van Moolenbroek 372*00b67f09SDavid van Moolenbroekecho "I:checking positive validation NSEC3 ($n)" 373*00b67f09SDavid van Moolenbroekret=0 374*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.nsec3.example. \ 375*00b67f09SDavid van Moolenbroek @10.53.0.3 a > dig.out.ns3.test$n || ret=1 376*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.nsec3.example. \ 377*00b67f09SDavid van Moolenbroek @10.53.0.4 a > dig.out.ns4.test$n || ret=1 378*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 379*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 380*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 381*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 382*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 383*00b67f09SDavid van Moolenbroek 384*00b67f09SDavid van Moolenbroekecho "I:checking positive validation OPTOUT ($n)" 385*00b67f09SDavid van Moolenbroekret=0 386*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.optout.example. \ 387*00b67f09SDavid van Moolenbroek @10.53.0.3 a > dig.out.ns3.test$n || ret=1 388*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.optout.example. \ 389*00b67f09SDavid van Moolenbroek @10.53.0.4 a > dig.out.ns4.test$n || ret=1 390*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 391*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 392*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 393*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 394*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 395*00b67f09SDavid van Moolenbroek 396*00b67f09SDavid van Moolenbroekecho "I:checking negative validation NXDOMAIN NSEC ($n)" 397*00b67f09SDavid van Moolenbroekret=0 398*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.example. @10.53.0.2 a > dig.out.ns2.test$n || ret=1 399*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1 400*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1 401*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 402*00b67f09SDavid van Moolenbroekgrep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1 403*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 404*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 405*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 406*00b67f09SDavid van Moolenbroek 407*00b67f09SDavid van Moolenbroekecho "I:checking negative validation NXDOMAIN NSEC3 ($n)" 408*00b67f09SDavid van Moolenbroekret=0 409*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.nsec3.example. \ 410*00b67f09SDavid van Moolenbroek @10.53.0.3 a > dig.out.ns3.test$n || ret=1 411*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.nsec3.example. \ 412*00b67f09SDavid van Moolenbroek @10.53.0.4 a > dig.out.ns4.test$n || ret=1 413*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 414*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 415*00b67f09SDavid van Moolenbroekgrep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1 416*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 417*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 418*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 419*00b67f09SDavid van Moolenbroek 420*00b67f09SDavid van Moolenbroekecho "I:checking negative validation NXDOMAIN OPTOUT ($n)" 421*00b67f09SDavid van Moolenbroekret=0 422*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.optout.example. \ 423*00b67f09SDavid van Moolenbroek @10.53.0.3 a > dig.out.ns3.test$n || ret=1 424*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.optout.example. \ 425*00b67f09SDavid van Moolenbroek @10.53.0.4 a > dig.out.ns4.test$n || ret=1 426*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 427*00b67f09SDavid van Moolenbroekgrep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1 428*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the && 429*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 430*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 431*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 432*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 433*00b67f09SDavid van Moolenbroek 434*00b67f09SDavid van Moolenbroekecho "I:checking negative validation NODATA NSEC ($n)" 435*00b67f09SDavid van Moolenbroekret=0 436*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.example. @10.53.0.2 txt > dig.out.ns2.test$n || ret=1 437*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.example. @10.53.0.4 txt > dig.out.ns4.test$n || ret=1 438*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1 439*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 440*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 441*00b67f09SDavid van Moolenbroekgrep "ANSWER: 0" dig.out.ns4.test$n > /dev/null || ret=1 442*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 443*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 444*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 445*00b67f09SDavid van Moolenbroek 446*00b67f09SDavid van Moolenbroekecho "I:checking negative validation NODATA NSEC3 ($n)" 447*00b67f09SDavid van Moolenbroekret=0 448*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.nsec3.example. \ 449*00b67f09SDavid van Moolenbroek @10.53.0.3 txt > dig.out.ns3.test$n || ret=1 450*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.nsec3.example. \ 451*00b67f09SDavid van Moolenbroek @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 Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 455*00b67f09SDavid van Moolenbroekgrep "ANSWER: 0" dig.out.ns4.test$n > /dev/null || ret=1 456*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 457*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 458*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 459*00b67f09SDavid van Moolenbroek 460*00b67f09SDavid van Moolenbroekecho "I:checking negative validation NODATA OPTOUT ($n)" 461*00b67f09SDavid van Moolenbroekret=0 462*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.optout.example. \ 463*00b67f09SDavid van Moolenbroek @10.53.0.3 txt > dig.out.ns3.test$n || ret=1 464*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.optout.example. \ 465*00b67f09SDavid van Moolenbroek @10.53.0.4 txt > dig.out.ns4.test$n || ret=1 466*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 467*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 468*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 469*00b67f09SDavid van Moolenbroekgrep "ANSWER: 0" dig.out.ns4.test$n > /dev/null || ret=1 470*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 471*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 472*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 473*00b67f09SDavid van Moolenbroek 474*00b67f09SDavid van Moolenbroek# Check the insecure.example domain 475*00b67f09SDavid van Moolenbroek 476*00b67f09SDavid van Moolenbroekecho "I:checking 1-server insecurity proof NSEC ($n)" 477*00b67f09SDavid van Moolenbroekret=0 478*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.insecure.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1 479*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.insecure.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1 480*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 481*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 482*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the && 483*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 484*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 485*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 486*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 487*00b67f09SDavid van Moolenbroek 488*00b67f09SDavid van Moolenbroekecho "I:checking 1-server negative insecurity proof NSEC ($n)" 489*00b67f09SDavid van Moolenbroekret=0 490*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS q.insecure.example. a @10.53.0.3 \ 491*00b67f09SDavid van Moolenbroek > dig.out.ns3.test$n || ret=1 492*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS q.insecure.example. a @10.53.0.4 \ 493*00b67f09SDavid van Moolenbroek > dig.out.ns4.test$n || ret=1 494*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 495*00b67f09SDavid van Moolenbroekgrep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1 496*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the && 497*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 498*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 499*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 500*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 501*00b67f09SDavid van Moolenbroek 502*00b67f09SDavid van Moolenbroek# Check the secure.example domain 503*00b67f09SDavid van Moolenbroek 504*00b67f09SDavid van Moolenbroekecho "I:checking multi-stage positive validation NSEC/NSEC ($n)" 505*00b67f09SDavid van Moolenbroekret=0 506*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.secure.example. \ 507*00b67f09SDavid van Moolenbroek @10.53.0.3 a > dig.out.ns3.test$n || ret=1 508*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.secure.example. \ 509*00b67f09SDavid van Moolenbroek @10.53.0.4 a > dig.out.ns4.test$n || ret=1 510*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 511*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 512*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 513*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 514*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 515*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 516*00b67f09SDavid van Moolenbroek 517*00b67f09SDavid van Moolenbroekecho "I:checking multi-stage positive validation NSEC/NSEC3 ($n)" 518*00b67f09SDavid van Moolenbroekret=0 519*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.nsec3.example. \ 520*00b67f09SDavid van Moolenbroek @10.53.0.3 a > dig.out.ns3.test$n || ret=1 521*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.nsec3.example. \ 522*00b67f09SDavid van Moolenbroek @10.53.0.4 a > dig.out.ns4.test$n || ret=1 523*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 524*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 525*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 526*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 527*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 528*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 529*00b67f09SDavid van Moolenbroek 530*00b67f09SDavid van Moolenbroekecho "I:checking multi-stage positive validation NSEC/OPTOUT ($n)" 531*00b67f09SDavid van Moolenbroekret=0 532*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.optout.example. \ 533*00b67f09SDavid van Moolenbroek @10.53.0.3 a > dig.out.ns3.test$n || ret=1 534*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.optout.example. \ 535*00b67f09SDavid van Moolenbroek @10.53.0.4 a > dig.out.ns4.test$n || ret=1 536*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 537*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 538*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 539*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 540*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 541*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 542*00b67f09SDavid van Moolenbroek 543*00b67f09SDavid van Moolenbroekecho "I:checking multi-stage positive validation NSEC3/NSEC ($n)" 544*00b67f09SDavid van Moolenbroekret=0 545*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.secure.nsec3.example. \ 546*00b67f09SDavid van Moolenbroek @10.53.0.3 a > dig.out.ns3.test$n || ret=1 547*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.secure.nsec3.example. \ 548*00b67f09SDavid van Moolenbroek @10.53.0.4 a > dig.out.ns4.test$n || ret=1 549*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 550*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 551*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 552*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 553*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 554*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 555*00b67f09SDavid van Moolenbroek 556*00b67f09SDavid van Moolenbroekecho "I:checking multi-stage positive validation NSEC3/NSEC3 ($n)" 557*00b67f09SDavid van Moolenbroekret=0 558*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.nsec3.nsec3.example. \ 559*00b67f09SDavid van Moolenbroek @10.53.0.3 a > dig.out.ns3.test$n || ret=1 560*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.nsec3.nsec3.example. \ 561*00b67f09SDavid van Moolenbroek @10.53.0.4 a > dig.out.ns4.test$n || ret=1 562*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 563*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 564*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 565*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 566*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 567*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 568*00b67f09SDavid van Moolenbroek 569*00b67f09SDavid van Moolenbroekecho "I:checking multi-stage positive validation NSEC3/OPTOUT ($n)" 570*00b67f09SDavid van Moolenbroekret=0 571*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.optout.nsec3.example. \ 572*00b67f09SDavid van Moolenbroek @10.53.0.3 a > dig.out.ns3.test$n || ret=1 573*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.optout.nsec3.example. \ 574*00b67f09SDavid van Moolenbroek @10.53.0.4 a > dig.out.ns4.test$n || ret=1 575*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 576*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 577*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 578*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 579*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 580*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 581*00b67f09SDavid van Moolenbroek 582*00b67f09SDavid van Moolenbroekecho "I:checking multi-stage positive validation OPTOUT/NSEC ($n)" 583*00b67f09SDavid van Moolenbroekret=0 584*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.secure.optout.example. \ 585*00b67f09SDavid van Moolenbroek @10.53.0.3 a > dig.out.ns3.test$n || ret=1 586*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.secure.optout.example. \ 587*00b67f09SDavid van Moolenbroek @10.53.0.4 a > dig.out.ns4.test$n || ret=1 588*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 589*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 590*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 591*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 592*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 593*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 594*00b67f09SDavid van Moolenbroek 595*00b67f09SDavid van Moolenbroekecho "I:checking multi-stage positive validation OPTOUT/NSEC3 ($n)" 596*00b67f09SDavid van Moolenbroekret=0 597*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.nsec3.optout.example. \ 598*00b67f09SDavid van Moolenbroek @10.53.0.3 a > dig.out.ns3.test$n || ret=1 599*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.nsec3.optout.example. \ 600*00b67f09SDavid van Moolenbroek @10.53.0.4 a > dig.out.ns4.test$n || ret=1 601*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 602*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 603*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 604*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 605*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 606*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 607*00b67f09SDavid van Moolenbroek 608*00b67f09SDavid van Moolenbroekecho "I:checking multi-stage positive validation OPTOUT/OPTOUT ($n)" 609*00b67f09SDavid van Moolenbroekret=0 610*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.optout.optout.example. \ 611*00b67f09SDavid van Moolenbroek @10.53.0.3 a > dig.out.ns3.test$n || ret=1 612*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.optout.optout.example. \ 613*00b67f09SDavid van Moolenbroek @10.53.0.4 a > 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: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 616*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 617*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 618*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 619*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 620*00b67f09SDavid van Moolenbroek 621*00b67f09SDavid van Moolenbroekecho "I:checking empty NODATA OPTOUT ($n)" 622*00b67f09SDavid van Moolenbroekret=0 623*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth empty.optout.example. \ 624*00b67f09SDavid van Moolenbroek @10.53.0.3 a > dig.out.ns3.test$n || ret=1 625*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth empty.optout.example. \ 626*00b67f09SDavid van Moolenbroek @10.53.0.4 a > dig.out.ns4.test$n || ret=1 627*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 628*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 629*00b67f09SDavid van Moolenbroek#grep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 630*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 631*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 632*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 633*00b67f09SDavid van Moolenbroek 634*00b67f09SDavid van Moolenbroek# Check the insecure.secure.example domain (insecurity proof) 635*00b67f09SDavid van Moolenbroek 636*00b67f09SDavid van Moolenbroekecho "I:checking 2-server insecurity proof ($n)" 637*00b67f09SDavid van Moolenbroekret=0 638*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.insecure.secure.example. @10.53.0.2 a \ 639*00b67f09SDavid van Moolenbroek > dig.out.ns2.test$n || ret=1 640*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.insecure.secure.example. @10.53.0.4 a \ 641*00b67f09SDavid van Moolenbroek > dig.out.ns4.test$n || ret=1 642*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1 643*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 644*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the && 645*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 646*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 647*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 648*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 649*00b67f09SDavid van Moolenbroek 650*00b67f09SDavid van Moolenbroek# Check a negative response in insecure.secure.example 651*00b67f09SDavid van Moolenbroek 652*00b67f09SDavid van Moolenbroekecho "I:checking 2-server insecurity proof with a negative answer ($n)" 653*00b67f09SDavid van Moolenbroekret=0 654*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS q.insecure.secure.example. @10.53.0.2 a > dig.out.ns2.test$n \ 655*00b67f09SDavid van Moolenbroek || ret=1 656*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS q.insecure.secure.example. @10.53.0.4 a > dig.out.ns4.test$n \ 657*00b67f09SDavid van Moolenbroek || ret=1 658*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1 659*00b67f09SDavid van Moolenbroekgrep "status: NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1 660*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the && 661*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 662*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 663*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 664*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 665*00b67f09SDavid van Moolenbroek 666*00b67f09SDavid van Moolenbroekecho "I:checking security root query ($n)" 667*00b67f09SDavid van Moolenbroekret=0 668*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS . @10.53.0.4 key > dig.out.ns4.test$n || ret=1 669*00b67f09SDavid van Moolenbroekgrep "NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 670*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 671*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 672*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 673*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 674*00b67f09SDavid van Moolenbroek 675*00b67f09SDavid van Moolenbroekecho "I:checking positive validation RSASHA256 NSEC ($n)" 676*00b67f09SDavid van Moolenbroekret=0 677*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.rsasha256.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1 678*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.rsasha256.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1 679*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 680*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 681*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 682*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 683*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 684*00b67f09SDavid van Moolenbroek 685*00b67f09SDavid van Moolenbroekecho "I:checking positive validation RSASHA512 NSEC ($n)" 686*00b67f09SDavid van Moolenbroekret=0 687*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.rsasha512.example. @10.53.0.3 a > dig.out.ns3.test$n || ret=1 688*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.rsasha512.example. @10.53.0.4 a > dig.out.ns4.test$n || ret=1 689*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns3.test$n dig.out.ns4.test$n || ret=1 690*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1 691*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 692*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 693*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 694*00b67f09SDavid van Moolenbroek 695*00b67f09SDavid van Moolenbroekecho "I:checking that positive validation in a privately secure zone works ($n)" 696*00b67f09SDavid van Moolenbroekret=0 697*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.private.secure.example. a @10.53.0.2 \ 698*00b67f09SDavid van Moolenbroek > dig.out.ns2.test$n || ret=1 699*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth a.private.secure.example. a @10.53.0.4 \ 700*00b67f09SDavid van Moolenbroek > dig.out.ns4.test$n || ret=1 701*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1 702*00b67f09SDavid van Moolenbroekgrep "NOERROR" dig.out.ns4.test$n > /dev/null || ret=1 703*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the && 704*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 705*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 706*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 707*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 708*00b67f09SDavid van Moolenbroek 709*00b67f09SDavid van Moolenbroekecho "I:checking that negative validation in a privately secure zone works ($n)" 710*00b67f09SDavid van Moolenbroekret=0 711*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.private.secure.example. a @10.53.0.2 \ 712*00b67f09SDavid van Moolenbroek > dig.out.ns2.test$n || ret=1 713*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth q.private.secure.example. a @10.53.0.4 \ 714*00b67f09SDavid van Moolenbroek > dig.out.ns4.test$n || ret=1 715*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1 716*00b67f09SDavid van Moolenbroekgrep "NXDOMAIN" dig.out.ns4.test$n > /dev/null || ret=1 717*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the && 718*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 719*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 720*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 721*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 722*00b67f09SDavid van Moolenbroek 723*00b67f09SDavid van Moolenbroekecho "I:checking privately secure to nxdomain works ($n)" 724*00b67f09SDavid van Moolenbroekret=0 725*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth private2secure-nxdomain.private.secure.example. SOA @10.53.0.2 \ 726*00b67f09SDavid van Moolenbroek > dig.out.ns2.test$n || ret=1 727*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noauth private2secure-nxdomain.private.secure.example. SOA @10.53.0.4 \ 728*00b67f09SDavid van Moolenbroek > dig.out.ns4.test$n || ret=1 729*00b67f09SDavid van Moolenbroek$PERL ../digcomp.pl dig.out.ns2.test$n dig.out.ns4.test$n || ret=1 730*00b67f09SDavid van Moolenbroek# Note - this is looking for failure, hence the && 731*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1 732*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 733*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 734*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 735*00b67f09SDavid van Moolenbroek 736*00b67f09SDavid van Moolenbroek# Try validating with a revoked trusted key. 737*00b67f09SDavid van Moolenbroek# This should fail. 738*00b67f09SDavid van Moolenbroek 739*00b67f09SDavid van Moolenbroekecho "I:checking that validation returns insecure due to revoked trusted key ($n)" 740*00b67f09SDavid van Moolenbroekret=0 741*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS example. soa @10.53.0.5 > dig.out.ns5.test$n || ret=1 742*00b67f09SDavid van Moolenbroekgrep "flags:.*; QUERY" dig.out.ns5.test$n > /dev/null || ret=1 743*00b67f09SDavid van Moolenbroekgrep "flags:.* ad.*; QUERY" dig.out.ns5.test$n > /dev/null && ret=1 744*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 745*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 746*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 747*00b67f09SDavid van Moolenbroek 748*00b67f09SDavid van Moolenbroekecho "I:checking that revoked key is present ($n)" 749*00b67f09SDavid van Moolenbroekret=0 750*00b67f09SDavid van Moolenbroekid=`cat rev.key` 751*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +multi dnskey . @10.53.0.1 > dig.out.ns1.test$n || ret=1 752*00b67f09SDavid van Moolenbroekgrep '; key id = '"$id"'$' dig.out.ns1.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 that revoked key self-signs ($n)" 758*00b67f09SDavid van Moolenbroekret=0 759*00b67f09SDavid van Moolenbroekid=`cat rev.key` 760*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS dnskey . @10.53.0.1 > dig.out.ns1.test$n || ret=1 761*00b67f09SDavid van Moolenbroekgrep 'RRSIG.*'" $id "'\. ' dig.out.ns1.test$n > /dev/null || ret=1 762*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 763*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 764*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 765*00b67f09SDavid van Moolenbroek 766*00b67f09SDavid van Moolenbroekecho "I:checking for unpublished key ($n)" 767*00b67f09SDavid van Moolenbroekret=0 768*00b67f09SDavid van Moolenbroekid=`sed 's/^K.+007+0*\([0-9]\)/\1/' < unpub.key` 769*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +multi dnskey . @10.53.0.1 > dig.out.ns1.test$n || ret=1 770*00b67f09SDavid van Moolenbroekgrep '; key id = '"$id"'$' dig.out.ns1.test$n > /dev/null && ret=1 771*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 772*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 773*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 774*00b67f09SDavid van Moolenbroek 775*00b67f09SDavid van Moolenbroekecho "I:checking for activated but unpublished key ($n)" 776*00b67f09SDavid van Moolenbroekret=0 777*00b67f09SDavid van Moolenbroekid=`sed 's/^K.+007+0*\([0-9]\)/\1/' < activate-now-publish-1day.key` 778*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +multi dnskey . @10.53.0.1 > dig.out.ns1.test$n || ret=1 779*00b67f09SDavid van Moolenbroekgrep '; key id = '"$id"'$' dig.out.ns1.test$n > /dev/null && ret=1 780*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 781*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 782*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 783*00b67f09SDavid van Moolenbroek 784*00b67f09SDavid van Moolenbroekecho "I:checking that standby key does not sign records ($n)" 785*00b67f09SDavid van Moolenbroekret=0 786*00b67f09SDavid van Moolenbroekid=`sed 's/^K.+007+0*\([0-9]\)/\1/' < standby.key` 787*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS dnskey . @10.53.0.1 > dig.out.ns1.test$n || ret=1 788*00b67f09SDavid van Moolenbroekgrep 'RRSIG.*'" $id "'\. ' dig.out.ns1.test$n > /dev/null && ret=1 789*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 790*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 791*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 792*00b67f09SDavid van Moolenbroek 793*00b67f09SDavid van Moolenbroekecho "I:checking that deactivated key does not sign records ($n)" 794*00b67f09SDavid van Moolenbroekret=0 795*00b67f09SDavid van Moolenbroekid=`sed 's/^K.+007+0*\([0-9]\)/\1/' < inact.key` 796*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS dnskey . @10.53.0.1 > dig.out.ns1.test$n || ret=1 797*00b67f09SDavid van Moolenbroekgrep 'RRSIG.*'" $id "'\. ' dig.out.ns1.test$n > /dev/null && ret=1 798*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 799*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 800*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 801*00b67f09SDavid van Moolenbroek 802*00b67f09SDavid van Moolenbroekecho "I:checking insertion of public-only key ($n)" 803*00b67f09SDavid van Moolenbroekret=0 804*00b67f09SDavid van Moolenbroekid=`sed 's/^K.+007+0*\([0-9]\)/\1/' < nopriv.key` 805*00b67f09SDavid van Moolenbroekfile="ns1/`cat nopriv.key`.key" 806*00b67f09SDavid van Moolenbroekkeydata=`grep DNSKEY $file` 807*00b67f09SDavid van Moolenbroek$NSUPDATE > /dev/null 2>&1 <<END || status=1 808*00b67f09SDavid van Moolenbroekserver 10.53.0.1 5300 809*00b67f09SDavid van Moolenbroekzone . 810*00b67f09SDavid van Moolenbroekttl 3600 811*00b67f09SDavid van Moolenbroekupdate add $keydata 812*00b67f09SDavid van Moolenbroeksend 813*00b67f09SDavid van MoolenbroekEND 814*00b67f09SDavid van Moolenbroeksleep 1 815*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS dnskey . @10.53.0.1 > dig.out.ns1.test$n || ret=1 816*00b67f09SDavid van Moolenbroekgrep 'RRSIG.*'" $id "'\. ' dig.out.ns1.test$n > /dev/null && ret=1 817*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 818*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 819*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 820*00b67f09SDavid van Moolenbroek 821*00b67f09SDavid van Moolenbroekecho "I:checking key deletion ($n)" 822*00b67f09SDavid van Moolenbroekret=0 823*00b67f09SDavid van Moolenbroekid=`sed 's/^K.+007+0*\([0-9]\)/\1/' < del.key` 824*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +multi dnskey . @10.53.0.1 > dig.out.ns1.test$n || ret=1 825*00b67f09SDavid van Moolenbroekgrep '; key id = '"$id"'$' dig.out.ns1.test$n > /dev/null && ret=1 826*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 827*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 828*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 829*00b67f09SDavid van Moolenbroek 830*00b67f09SDavid van Moolenbroekecho "I:checking secure-to-insecure transition, nsupdate ($n)" 831*00b67f09SDavid van Moolenbroekret=0 832*00b67f09SDavid van Moolenbroek$NSUPDATE > /dev/null 2>&1 <<END || status=1 833*00b67f09SDavid van Moolenbroekserver 10.53.0.3 5300 834*00b67f09SDavid van Moolenbroekzone secure-to-insecure.example 835*00b67f09SDavid van Moolenbroekupdate delete secure-to-insecure.example dnskey 836*00b67f09SDavid van Moolenbroeksend 837*00b67f09SDavid van MoolenbroekEND 838*00b67f09SDavid van Moolenbroekfor i in 0 1 2 3 4 5 6 7 8 9; do 839*00b67f09SDavid van Moolenbroek ret=0 840*00b67f09SDavid van Moolenbroek $DIG $DIGOPTS axfr secure-to-insecure.example @10.53.0.3 > dig.out.ns3.test$n || ret=1 841*00b67f09SDavid van Moolenbroek egrep '(RRSIG|DNSKEY|NSEC)' dig.out.ns3.test$n > /dev/null && ret=1 842*00b67f09SDavid van Moolenbroek [ $ret -eq 0 ] && break 843*00b67f09SDavid van Moolenbroek echo "I:waiting ... ($i)" 844*00b67f09SDavid van Moolenbroek sleep 2 845*00b67f09SDavid van Moolenbroekdone 846*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 847*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 848*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 849*00b67f09SDavid van Moolenbroek 850*00b67f09SDavid van Moolenbroekecho "I:checking secure-to-insecure transition, scheduled ($n)" 851*00b67f09SDavid van Moolenbroekret=0 852*00b67f09SDavid van Moolenbroekfile="ns3/`cat del1.key`.key" 853*00b67f09SDavid van Moolenbroek$SETTIME -I now -D now $file > /dev/null 854*00b67f09SDavid van Moolenbroekfile="ns3/`cat del2.key`.key" 855*00b67f09SDavid van Moolenbroek$SETTIME -I now -D now $file > /dev/null 856*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 sign secure-to-insecure2.example. 2>&1 | sed 's/^/I:ns3 /' 857*00b67f09SDavid van Moolenbroekfor i in 0 1 2 3 4 5 6 7 8 9; do 858*00b67f09SDavid van Moolenbroek ret=0 859*00b67f09SDavid van Moolenbroek $DIG $DIGOPTS axfr secure-to-insecure2.example @10.53.0.3 > dig.out.ns3.test$n || ret=1 860*00b67f09SDavid van Moolenbroek egrep '(RRSIG|DNSKEY|NSEC3)' dig.out.ns3.test$n > /dev/null && ret=1 861*00b67f09SDavid van Moolenbroek [ $ret -eq 0 ] && break 862*00b67f09SDavid van Moolenbroek echo "I:waiting ... ($i)" 863*00b67f09SDavid van Moolenbroek sleep 2 864*00b67f09SDavid van Moolenbroekdone 865*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 866*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 867*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 868*00b67f09SDavid van Moolenbroek 869*00b67f09SDavid van Moolenbroekecho "I:checking that serial number and RRSIGs are both updated (rt21045) ($n)" 870*00b67f09SDavid van Moolenbroekret=0 871*00b67f09SDavid van Moolenbroekoldserial=`$DIG $DIGOPTS +short soa prepub.example @10.53.0.3 | awk '$0 !~ /SOA/ {print $3}'` 872*00b67f09SDavid van Moolenbroekoldinception=`$DIG $DIGOPTS +short soa prepub.example @10.53.0.3 | awk '/SOA/ {print $6}' | sort -u` 873*00b67f09SDavid van Moolenbroek 874*00b67f09SDavid van Moolenbroek$KEYGEN -3 -q -r $RANDFILE -K ns3 -P 0 -A +6d -I +38d -D +45d prepub.example > /dev/null 875*00b67f09SDavid van Moolenbroek 876*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 sign prepub.example 2>&1 | sed 's/^/I:ns1 /' 877*00b67f09SDavid van Moolenbroeknewserial=$oldserial 878*00b67f09SDavid van Moolenbroektry=0 879*00b67f09SDavid van Moolenbroekwhile [ $oldserial -eq $newserial -a $try -lt 42 ] 880*00b67f09SDavid van Moolenbroekdo 881*00b67f09SDavid van Moolenbroek newserial=`$DIG $DIGOPTS +short soa prepub.example @10.53.0.3 | 882*00b67f09SDavid van Moolenbroek awk '$0 !~ /SOA/ {print $3}'` 883*00b67f09SDavid van Moolenbroek sleep 1 884*00b67f09SDavid van Moolenbroek try=`expr $try + 1` 885*00b67f09SDavid van Moolenbroekdone 886*00b67f09SDavid van Moolenbroeknewinception=`$DIG $DIGOPTS +short soa prepub.example @10.53.0.3 | awk '/SOA/ {print $6}' | sort -u` 887*00b67f09SDavid van Moolenbroek#echo "$oldserial : $newserial" 888*00b67f09SDavid van Moolenbroek#echo "$oldinception : $newinception" 889*00b67f09SDavid van Moolenbroek 890*00b67f09SDavid van Moolenbroek[ "$oldserial" = "$newserial" ] && ret=1 891*00b67f09SDavid van Moolenbroek[ "$oldinception" = "$newinception" ] && ret=1 892*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 893*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 894*00b67f09SDavid van Moolenbroek 895*00b67f09SDavid van Moolenbroekecho "I:preparing to test key change corner cases" 896*00b67f09SDavid van Moolenbroekecho "I:removing a private key file" 897*00b67f09SDavid van Moolenbroekfile="ns1/`cat vanishing.key`.private" 898*00b67f09SDavid van Moolenbroekrm -f $file 899*00b67f09SDavid van Moolenbroek 900*00b67f09SDavid van Moolenbroekecho "I:preparing ZSK roll" 901*00b67f09SDavid van Moolenbroekstarttime=`$PERL -e 'print time(), "\n";'` 902*00b67f09SDavid van Moolenbroekoldfile=`cat active.key` 903*00b67f09SDavid van Moolenbroekoldid=`sed 's/^K.+007+0*\([0-9]\)/\1/' < active.key` 904*00b67f09SDavid van Moolenbroeknewfile=`cat standby.key` 905*00b67f09SDavid van Moolenbroeknewid=`sed 's/^K.+007+0*\([0-9]\)/\1/' < standby.key` 906*00b67f09SDavid van Moolenbroek$SETTIME -K ns1 -I now+2s -D now+25 $oldfile > /dev/null 907*00b67f09SDavid van Moolenbroek$SETTIME -K ns1 -i 0 -S $oldfile $newfile > /dev/null 908*00b67f09SDavid van Moolenbroek 909*00b67f09SDavid van Moolenbroek# note previous zone serial number 910*00b67f09SDavid van Moolenbroekoldserial=`$DIG $DIGOPTS +short soa . @10.53.0.1 | awk '{print $3}'` 911*00b67f09SDavid van Moolenbroek 912*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.1 -p 9953 loadkeys . 2>&1 | sed 's/^/I:ns1 /' 913*00b67f09SDavid van Moolenbroeksleep 4 914*00b67f09SDavid van Moolenbroek 915*00b67f09SDavid van Moolenbroekecho "I:revoking key to duplicated key ID" 916*00b67f09SDavid van Moolenbroek$SETTIME -R now -K ns2 Kbar.+005+30676.key > /dev/null 917*00b67f09SDavid van Moolenbroek 918*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.2 -p 9953 loadkeys bar. 2>&1 | sed 's/^/I:ns2 /' 919*00b67f09SDavid van Moolenbroek 920*00b67f09SDavid van Moolenbroekecho "I:waiting for changes to take effect" 921*00b67f09SDavid van Moolenbroeksleep 5 922*00b67f09SDavid van Moolenbroek 923*00b67f09SDavid van Moolenbroekecho "I:checking former standby key is now active ($n)" 924*00b67f09SDavid van Moolenbroekret=0 925*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS dnskey . @10.53.0.1 > dig.out.ns1.test$n || ret=1 926*00b67f09SDavid van Moolenbroekgrep 'RRSIG.*'" $newid "'\. ' dig.out.ns1.test$n > /dev/null || ret=1 927*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 928*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 929*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 930*00b67f09SDavid van Moolenbroek 931*00b67f09SDavid van Moolenbroekecho "I:checking former standby key has only signed incrementally ($n)" 932*00b67f09SDavid van Moolenbroekret=0 933*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS txt . @10.53.0.1 > dig.out.ns1.test$n || ret=1 934*00b67f09SDavid van Moolenbroekgrep 'RRSIG.*'" $newid "'\. ' dig.out.ns1.test$n > /dev/null && ret=1 935*00b67f09SDavid van Moolenbroekgrep 'RRSIG.*'" $oldid "'\. ' dig.out.ns1.test$n > /dev/null || ret=1 936*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 937*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 938*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 939*00b67f09SDavid van Moolenbroek 940*00b67f09SDavid van Moolenbroekecho "I:checking that signing records have been marked as complete ($n)" 941*00b67f09SDavid van Moolenbroekret=0 942*00b67f09SDavid van Moolenbroekcheckprivate . 10.53.0.1 || ret=1 943*00b67f09SDavid van Moolenbroekcheckprivate bar 10.53.0.2 || ret=1 944*00b67f09SDavid van Moolenbroekcheckprivate example 10.53.0.2 || ret=1 945*00b67f09SDavid van Moolenbroekcheckprivate private.secure.example 10.53.0.3 || ret=1 946*00b67f09SDavid van Moolenbroekcheckprivate nsec3.example 10.53.0.3 || ret=1 947*00b67f09SDavid van Moolenbroekcheckprivate nsec3.nsec3.example 10.53.0.3 || ret=1 948*00b67f09SDavid van Moolenbroekcheckprivate nsec3.optout.example 10.53.0.3 || ret=1 949*00b67f09SDavid van Moolenbroekcheckprivate nsec3-to-nsec.example 10.53.0.3 || ret=1 950*00b67f09SDavid van Moolenbroekcheckprivate nsec.example 10.53.0.3 || ret=1 951*00b67f09SDavid van Moolenbroekcheckprivate oldsigs.example 10.53.0.3 || ret=1 952*00b67f09SDavid van Moolenbroekcheckprivate optout.example 10.53.0.3 || ret=1 953*00b67f09SDavid van Moolenbroekcheckprivate optout.nsec3.example 10.53.0.3 || ret=1 954*00b67f09SDavid van Moolenbroekcheckprivate optout.optout.example 10.53.0.3 || ret=1 955*00b67f09SDavid van Moolenbroekcheckprivate prepub.example 10.53.0.3 1 || ret=1 956*00b67f09SDavid van Moolenbroekcheckprivate rsasha256.example 10.53.0.3 || ret=1 957*00b67f09SDavid van Moolenbroekcheckprivate rsasha512.example 10.53.0.3 || ret=1 958*00b67f09SDavid van Moolenbroekcheckprivate secure.example 10.53.0.3 || ret=1 959*00b67f09SDavid van Moolenbroekcheckprivate secure.nsec3.example 10.53.0.3 || ret=1 960*00b67f09SDavid van Moolenbroekcheckprivate secure.optout.example 10.53.0.3 || ret=1 961*00b67f09SDavid van Moolenbroekcheckprivate secure-to-insecure2.example 10.53.0.3 || ret=1 962*00b67f09SDavid van Moolenbroekcheckprivate secure-to-insecure.example 10.53.0.3 || ret=1 963*00b67f09SDavid van Moolenbroekcheckprivate ttl1.example 10.53.0.3 || ret=1 964*00b67f09SDavid van Moolenbroekcheckprivate ttl2.example 10.53.0.3 || ret=1 965*00b67f09SDavid van Moolenbroekcheckprivate ttl3.example 10.53.0.3 || ret=1 966*00b67f09SDavid van Moolenbroekcheckprivate ttl4.example 10.53.0.3 || ret=1 967*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 968*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 969*00b67f09SDavid van Moolenbroek 970*00b67f09SDavid van Moolenbroekecho "I:forcing full sign" 971*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.1 -p 9953 sign . 2>&1 | sed 's/^/I:ns1 /' 972*00b67f09SDavid van Moolenbroek 973*00b67f09SDavid van Moolenbroekecho "I:waiting for change to take effect" 974*00b67f09SDavid van Moolenbroeksleep 5 975*00b67f09SDavid van Moolenbroek 976*00b67f09SDavid van Moolenbroekecho "I:checking former standby key has now signed fully ($n)" 977*00b67f09SDavid van Moolenbroekret=0 978*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS txt . @10.53.0.1 > dig.out.ns1.test$n || ret=1 979*00b67f09SDavid van Moolenbroekgrep 'RRSIG.*'" $newid "'\. ' dig.out.ns1.test$n > /dev/null || ret=1 980*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 981*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 982*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 983*00b67f09SDavid van Moolenbroek 984*00b67f09SDavid van Moolenbroekecho "I:checking SOA serial number has been incremented ($n)" 985*00b67f09SDavid van Moolenbroekret=0 986*00b67f09SDavid van Moolenbroeknewserial=`$DIG $DIGOPTS +short soa . @10.53.0.1 | awk '{print $3}'` 987*00b67f09SDavid van Moolenbroek[ "$newserial" != "$oldserial" ] || ret=1 988*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 989*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 990*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 991*00b67f09SDavid van Moolenbroek 992*00b67f09SDavid van Moolenbroekecho "I:checking delayed key publication/activation ($n)" 993*00b67f09SDavid van Moolenbroekret=0 994*00b67f09SDavid van Moolenbroekzsk=`cat delayzsk.key` 995*00b67f09SDavid van Moolenbroekksk=`cat delayksk.key` 996*00b67f09SDavid van Moolenbroek# publication and activation times should be unset 997*00b67f09SDavid van Moolenbroek$SETTIME -K ns3 -pA -pP $zsk | grep -v UNSET > /dev/null 2>&1 && ret=1 998*00b67f09SDavid van Moolenbroek$SETTIME -K ns3 -pA -pP $ksk | grep -v UNSET > /dev/null 2>&1 && ret=1 999*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noall +answer dnskey delay.example. @10.53.0.3 > dig.out.ns3.test$n || ret=1 1000*00b67f09SDavid van Moolenbroek# DNSKEY not expected: 1001*00b67f09SDavid van Moolenbroekawk 'BEGIN {r=1} $4=="DNSKEY" {r=0} END {exit r}' dig.out.ns3.test$n && ret=1 1002*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 1003*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 1004*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 1005*00b67f09SDavid van Moolenbroek 1006*00b67f09SDavid van Moolenbroekecho "I:checking scheduled key publication, not activation ($n)" 1007*00b67f09SDavid van Moolenbroekret=0 1008*00b67f09SDavid van Moolenbroek$SETTIME -K ns3 -P now+3s -A none $zsk > /dev/null 2>&1 1009*00b67f09SDavid van Moolenbroek$SETTIME -K ns3 -P now+3s -A none $ksk > /dev/null 2>&1 1010*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 loadkeys delay.example. 2>&1 | sed 's/^/I:ns2 /' 1011*00b67f09SDavid van Moolenbroek 1012*00b67f09SDavid van Moolenbroekecho "I:waiting for changes to take effect" 1013*00b67f09SDavid van Moolenbroeksleep 5 1014*00b67f09SDavid van Moolenbroek 1015*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noall +answer dnskey delay.example. @10.53.0.3 > dig.out.ns3.test$n || ret=1 1016*00b67f09SDavid van Moolenbroek# DNSKEY expected: 1017*00b67f09SDavid van Moolenbroekawk 'BEGIN {r=1} $4=="DNSKEY" {r=0} END {exit r}' dig.out.ns3.test$n || ret=1 1018*00b67f09SDavid van Moolenbroek# RRSIG not expected: 1019*00b67f09SDavid van Moolenbroekawk 'BEGIN {r=1} $4=="RRSIG" {r=0} END {exit r}' dig.out.ns3.test$n && 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 scheduled key activation ($n)" 1025*00b67f09SDavid van Moolenbroekret=0 1026*00b67f09SDavid van Moolenbroek$SETTIME -K ns3 -A now+3s $zsk > /dev/null 2>&1 1027*00b67f09SDavid van Moolenbroek$SETTIME -K ns3 -A now+3s $ksk > /dev/null 2>&1 1028*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 loadkeys delay.example. 2>&1 | sed 's/^/I:ns2 /' 1029*00b67f09SDavid van Moolenbroek 1030*00b67f09SDavid van Moolenbroekecho "I:waiting for changes to take effect" 1031*00b67f09SDavid van Moolenbroeksleep 5 1032*00b67f09SDavid van Moolenbroek 1033*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noall +answer dnskey delay.example. @10.53.0.3 > dig.out.ns3.1.test$n || ret=1 1034*00b67f09SDavid van Moolenbroek# DNSKEY expected: 1035*00b67f09SDavid van Moolenbroekawk 'BEGIN {r=1} $4=="DNSKEY" {r=0} END {exit r}' dig.out.ns3.1.test$n || ret=1 1036*00b67f09SDavid van Moolenbroek# RRSIG expected: 1037*00b67f09SDavid van Moolenbroekawk 'BEGIN {r=1} $4=="RRSIG" {r=0} END {exit r}' dig.out.ns3.1.test$n || ret=1 1038*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +noall +answer a a.delay.example. @10.53.0.3 > dig.out.ns3.2.test$n || ret=1 1039*00b67f09SDavid van Moolenbroek# A expected: 1040*00b67f09SDavid van Moolenbroekawk 'BEGIN {r=1} $4=="A" {r=0} END {exit r}' dig.out.ns3.2.test$n || ret=1 1041*00b67f09SDavid van Moolenbroek# RRSIG expected: 1042*00b67f09SDavid van Moolenbroekawk 'BEGIN {r=1} $4=="RRSIG" {r=0} END {exit r}' dig.out.ns3.2.test$n || ret=1 1043*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 1044*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 1045*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 1046*00b67f09SDavid van Moolenbroek 1047*00b67f09SDavid van Moolenbroekecho "I:checking former active key was removed ($n)" 1048*00b67f09SDavid van Moolenbroek# 1049*00b67f09SDavid van Moolenbroek# Work out how long we need to sleep. Allow 4 seconds for the records 1050*00b67f09SDavid van Moolenbroek# to be removed. 1051*00b67f09SDavid van Moolenbroek# 1052*00b67f09SDavid van Moolenbroeknow=`$PERL -e 'print time(), "\n";'` 1053*00b67f09SDavid van Moolenbroeksleep=`expr $starttime + 29 - $now` 1054*00b67f09SDavid van Moolenbroekcase $sleep in 1055*00b67f09SDavid van Moolenbroek-*|0);; 1056*00b67f09SDavid van Moolenbroek*) echo "I:waiting for timer to have activated"; sleep $sleep;; 1057*00b67f09SDavid van Moolenbroekesac 1058*00b67f09SDavid van Moolenbroekret=0 1059*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +multi dnskey . @10.53.0.1 > dig.out.ns1.test$n || ret=1 1060*00b67f09SDavid van Moolenbroekgrep '; key id = '"$oldid"'$' dig.out.ns1.test$n > /dev/null && ret=1 1061*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 1062*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 1063*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 1064*00b67f09SDavid van Moolenbroek 1065*00b67f09SDavid van Moolenbroekecho "I:checking private key file removal caused no immediate harm ($n)" 1066*00b67f09SDavid van Moolenbroekret=0 1067*00b67f09SDavid van Moolenbroekid=`sed 's/^K.+007+0*\([0-9]\)/\1/' < vanishing.key` 1068*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS dnskey . @10.53.0.1 > dig.out.ns1.test$n || ret=1 1069*00b67f09SDavid van Moolenbroekgrep 'RRSIG.*'" $id "'\. ' dig.out.ns1.test$n > /dev/null || ret=1 1070*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 1071*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 1072*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 1073*00b67f09SDavid van Moolenbroek 1074*00b67f09SDavid van Moolenbroekecho "I:checking revoked key with duplicate key ID (failure expected) ($n)" 1075*00b67f09SDavid van Moolenbroeklret=0 1076*00b67f09SDavid van Moolenbroekid=30676 1077*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS +multi dnskey bar @10.53.0.2 > dig.out.ns2.test$n || lret=1 1078*00b67f09SDavid van Moolenbroekgrep '; key id = '"$id"'$' dig.out.ns2.test$n > /dev/null || lret=1 1079*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS dnskey bar @10.53.0.4 > dig.out.ns4.test$n || lret=1 1080*00b67f09SDavid van Moolenbroekgrep "flags:.*ad.*QUERY" dig.out.ns4.test$n > /dev/null || lret=1 1081*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 1082*00b67f09SDavid van Moolenbroekif [ $lret != 0 ]; then echo "I:not yet implemented"; fi 1083*00b67f09SDavid van Moolenbroek 1084*00b67f09SDavid van Moolenbroekecho "I:checking key event timers are always set ($n)" 1085*00b67f09SDavid van Moolenbroek# this is a regression test for a bug in which the next key event could 1086*00b67f09SDavid van Moolenbroek# be scheduled for the present moment, and then never fire. check for 1087*00b67f09SDavid van Moolenbroek# visible evidence of this error in the logs: 1088*00b67f09SDavid van Moolenbroekawk '/next key event/ {if ($1 == $8 && $2 == $9) exit 1}' */named.run || ret=1 1089*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 1090*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 1091*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 1092*00b67f09SDavid van Moolenbroek 1093*00b67f09SDavid van Moolenbroek# this confirms that key events are never scheduled more than 1094*00b67f09SDavid van Moolenbroek# 'dnssec-loadkeys-interval' minutes in the future, and that the 1095*00b67f09SDavid van Moolenbroek# event scheduled is within 10 seconds of expected interval. 1096*00b67f09SDavid van Moolenbroekcheck_interval () { 1097*00b67f09SDavid van Moolenbroek awk '/next key event/ {print $2 ":" $9}' $1/named.run | 1098*00b67f09SDavid van Moolenbroek sed 's/\.//g' | 1099*00b67f09SDavid van Moolenbroek awk -F: ' 1100*00b67f09SDavid van Moolenbroek { 1101*00b67f09SDavid van Moolenbroek x = ($6+ $5*60000 + $4*3600000) - ($3+ $2*60000 + $1*3600000); 1102*00b67f09SDavid van Moolenbroek # abs(x) < 1000 ms treat as 'now' 1103*00b67f09SDavid van Moolenbroek if (x < 1000 && x > -1000) 1104*00b67f09SDavid van Moolenbroek x = 0; 1105*00b67f09SDavid van Moolenbroek # convert to seconds 1106*00b67f09SDavid van Moolenbroek x = x/1000; 1107*00b67f09SDavid van Moolenbroek # handle end of day roll over 1108*00b67f09SDavid van Moolenbroek if (x < 0) 1109*00b67f09SDavid van Moolenbroek x = x + 24*3600; 1110*00b67f09SDavid van Moolenbroek # handle log timestamp being a few milliseconds later 1111*00b67f09SDavid van Moolenbroek if (x != int(x)) 1112*00b67f09SDavid van Moolenbroek x = int(x + 1); 1113*00b67f09SDavid van Moolenbroek if (int(x) > int(interval)) 1114*00b67f09SDavid van Moolenbroek exit (1); 1115*00b67f09SDavid van Moolenbroek } 1116*00b67f09SDavid van Moolenbroek END { if (int(x) > int(interval) || int(x) < int(interval-10)) exit(1) }' interval=$2 1117*00b67f09SDavid van Moolenbroek return $? 1118*00b67f09SDavid van Moolenbroek} 1119*00b67f09SDavid van Moolenbroek 1120*00b67f09SDavid van Moolenbroekecho "I:checking automatic key reloading interval ($n)" 1121*00b67f09SDavid van Moolenbroekret=0 1122*00b67f09SDavid van Moolenbroekcheck_interval ns1 3600 || ret=1 1123*00b67f09SDavid van Moolenbroekcheck_interval ns2 1800 || ret=1 1124*00b67f09SDavid van Moolenbroekcheck_interval ns3 600 || ret=1 1125*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 1126*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 1127*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 1128*00b67f09SDavid van Moolenbroek 1129*00b67f09SDavid van Moolenbroekecho "I:checking for key reloading loops ($n)" 1130*00b67f09SDavid van Moolenbroekret=0 1131*00b67f09SDavid van Moolenbroek# every key event should schedule a successor, so these should be equal 1132*00b67f09SDavid van Moolenbroekrekey_calls=`grep "reconfiguring zone keys" ns*/named.run | wc -l` 1133*00b67f09SDavid van Moolenbroekrekey_events=`grep "next key event" ns*/named.run | wc -l` 1134*00b67f09SDavid van Moolenbroek[ "$rekey_calls" = "$rekey_events" ] || ret=1 1135*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 1136*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 1137*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 1138*00b67f09SDavid van Moolenbroek 1139*00b67f09SDavid van Moolenbroekecho "I:forcing full sign with unreadable keys ($n)" 1140*00b67f09SDavid van Moolenbroekret=0 1141*00b67f09SDavid van Moolenbroekchmod 0 ns1/K.+*+*.key ns1/K.+*+*.private || ret=1 1142*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.1 -p 9953 sign . 2>&1 | sed 's/^/I:ns1 /' 1143*00b67f09SDavid van Moolenbroek$DIG $DIGOPTS . @10.53.0.1 dnskey > dig.out.ns1.test$n || ret=1 1144*00b67f09SDavid van Moolenbroekgrep "status: NOERROR" dig.out.ns1.test$n > /dev/null || ret=1 1145*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 1146*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 1147*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 1148*00b67f09SDavid van Moolenbroek 1149*00b67f09SDavid van Moolenbroekecho "I:test turning on auto-dnssec during reconfig ($n)" 1150*00b67f09SDavid van Moolenbroekret=0 1151*00b67f09SDavid van Moolenbroek# first create a zone that doesn't have auto-dnssec 1152*00b67f09SDavid van Moolenbroekrm -f ns3/*.nzf 1153*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 addzone reconf.example '{ type master; file "reconf.example.db"; };' 2>&1 | sed 's/^/I:ns3 /' 1154*00b67f09SDavid van Moolenbroekrekey_calls=`grep "zone reconf.example.*next key event" ns3/named.run | wc -l` 1155*00b67f09SDavid van Moolenbroek[ "$rekey_calls" -eq 0 ] || ret=1 1156*00b67f09SDavid van Moolenbroek# ...then we add auto-dnssec and reconfigure 1157*00b67f09SDavid van Moolenbroeknzf=`ls ns3/*.nzf` 1158*00b67f09SDavid van Moolenbroekecho 'zone reconf.example { type master; file "reconf.example.db"; allow-update { any; }; auto-dnssec maintain; };' > $nzf 1159*00b67f09SDavid van Moolenbroek$RNDC -c ../common/rndc.conf -s 10.53.0.3 -p 9953 reconfig 2>&1 | sed 's/^/I:ns3 /' 1160*00b67f09SDavid van Moolenbroekfor i in 0 1 2 3 4 5 6 7 8 9; do 1161*00b67f09SDavid van Moolenbroek lret=0 1162*00b67f09SDavid van Moolenbroek rekey_calls=`grep "zone reconf.example.*next key event" ns3/named.run | wc -l` 1163*00b67f09SDavid van Moolenbroek [ "$rekey_calls" -gt 0 ] || lret=1 1164*00b67f09SDavid van Moolenbroek if [ "$lret" -eq 0 ]; then break; fi 1165*00b67f09SDavid van Moolenbroek echo "I:waiting ... ($i)" 1166*00b67f09SDavid van Moolenbroek sleep 1 1167*00b67f09SDavid van Moolenbroekdone 1168*00b67f09SDavid van Moolenbroekn=`expr $n + 1` 1169*00b67f09SDavid van Moolenbroekif [ "$lret" != 0 ]; then ret=$lret; fi 1170*00b67f09SDavid van Moolenbroekif [ $ret != 0 ]; then echo "I:failed"; fi 1171*00b67f09SDavid van Moolenbroekstatus=`expr $status + $ret` 1172*00b67f09SDavid van Moolenbroek 1173*00b67f09SDavid van Moolenbroekecho "I:exit status: $status" 1174*00b67f09SDavid van Moolenbroekexit $status 1175