tests.sh revision 1.1.1.1
1#!/bin/sh 2# 3# Copyright (C) Internet Systems Consortium, Inc. ("ISC") 4# 5# This Source Code Form is subject to the terms of the Mozilla Public 6# License, v. 2.0. If a copy of the MPL was not distributed with this 7# file, You can obtain one at http://mozilla.org/MPL/2.0/. 8# 9# See the COPYRIGHT file distributed with this work for additional 10# information regarding copyright ownership. 11 12SYSTEMTESTTOP=.. 13. $SYSTEMTESTTOP/conf.sh 14 15DIGOPTS="+tcp +nosea +nostat +nocmd +norec +noques +noauth +noadd +nostats +dnssec -p ${PORT}" 16RNDCCMD="$RNDC -c $SYSTEMTESTTOP/common/rndc.conf -p ${CONTROLPORT} -s" 17 18status=0 19n=0 20 21echo_i "checking normally loaded zone ($n)" 22ret=0 23$DIG $DIGOPTS @10.53.0.2 a.normal.example a > dig.out.ns2.$n || ret=1 24grep 'status: NOERROR' dig.out.ns2.$n > /dev/null || ret=1 25grep '^a.normal.example' dig.out.ns2.$n > /dev/null || ret=1 26n=`expr $n + 1` 27if [ $ret != 0 ]; then echo_i "failed"; fi 28status=`expr $status + $ret` 29 30# When LMDB support is compiled in, this tests that migration from 31# NZF to NZD occurs during named startup 32echo_i "checking previously added zone ($n)" 33ret=0 34$DIG $DIGOPTS @10.53.0.2 a.previous.example a > dig.out.ns2.$n || ret=1 35grep 'status: NOERROR' dig.out.ns2.$n > /dev/null || ret=1 36grep '^a.previous.example' dig.out.ns2.$n > /dev/null || ret=1 37n=`expr $n + 1` 38if [ $ret != 0 ]; then echo_i "failed"; fi 39status=`expr $status + $ret` 40 41if [ -n "$NZD" ]; then 42 echo_i "checking that existing NZF file was renamed after migration ($n)" 43 [ -e ns2/3bf305731dd26307.nzf~ ] || ret=1 44 n=`expr $n + 1` 45 if [ $ret != 0 ]; then echo_i "failed"; fi 46 status=`expr $status + $ret` 47fi 48 49echo_i "adding new zone ($n)" 50ret=0 51$RNDCCMD 10.53.0.2 addzone 'added.example { type master; file "added.db"; };' 2>&1 | sed 's/^/I:ns2 /' 52$DIG $DIGOPTS @10.53.0.2 a.added.example a > dig.out.ns2.$n || ret=1 53grep 'status: NOERROR' dig.out.ns2.$n > /dev/null || ret=1 54grep '^a.added.example' dig.out.ns2.$n > /dev/null || ret=1 55n=`expr $n + 1` 56if [ $ret != 0 ]; then echo_i "failed"; fi 57status=`expr $status + $ret` 58 59echo_i "checking addzone errors are logged correctly" 60ret=0 61$RNDCCMD 10.53.0.2 addzone bad.example '{ type mister; };' 2>&1 | grep 'unexpected token' > /dev/null 2>&1 || ret=1 62grep "addzone: 'mister' unexpected" ns2/named.run >/dev/null 2>&1 || ret=1 63n=`expr $n + 1` 64if [ $ret != 0 ]; then echo_i "failed"; fi 65status=`expr $status + $ret` 66 67echo_i "checking modzone errors are logged correctly" 68ret=0 69$RNDCCMD 10.53.0.2 modzone added.example '{ type mister; };' 2>&1 | grep 'unexpected token' > /dev/null 2>&1 || ret=1 70grep "modzone: 'mister' unexpected" ns2/named.run >/dev/null 2>&1 || ret=1 71n=`expr $n + 1` 72if [ $ret != 0 ]; then echo_i "failed"; fi 73status=`expr $status + $ret` 74 75echo_i "adding a zone that requires quotes ($n)" 76ret=0 77$RNDCCMD 10.53.0.2 addzone '"32/1.0.0.127-in-addr.added.example" { check-names ignore; type master; file "added.db"; };' 2>&1 | sed 's/^/I:ns2 /' 78$DIG $DIGOPTS @10.53.0.2 "a.32/1.0.0.127-in-addr.added.example" a > dig.out.ns2.$n || ret=1 79grep 'status: NOERROR' dig.out.ns2.$n > /dev/null || ret=1 80grep '^a.32/1.0.0.127-in-addr.added.example' dig.out.ns2.$n > /dev/null || ret=1 81n=`expr $n + 1` 82if [ $ret != 0 ]; then echo_i "failed"; fi 83status=`expr $status + $ret` 84 85echo_i "adding a zone with a quote in the name ($n)" 86ret=0 87$RNDCCMD 10.53.0.2 addzone '"foo\"bar.example" { check-names ignore; type master; file "added.db"; };' 2>&1 | sed 's/^/I:ns2 /' 88$DIG $DIGOPTS @10.53.0.2 "a.foo\"bar.example" a > dig.out.ns2.$n || ret=1 89grep 'status: NOERROR' dig.out.ns2.$n > /dev/null || ret=1 90grep '^a.foo\\"bar.example' dig.out.ns2.$n > /dev/null || ret=1 91n=`expr $n + 1` 92if [ $ret != 0 ]; then echo_i "failed"; fi 93status=`expr $status + $ret` 94 95echo_i "adding new zone with missing master file ($n)" 96ret=0 97$DIG $DIGOPTS +all @10.53.0.2 a.missing.example a > dig.out.ns2.pre.$n || ret=1 98grep "status: REFUSED" dig.out.ns2.pre.$n > /dev/null || ret=1 99$RNDCCMD 10.53.0.2 addzone 'missing.example { type master; file "missing.db"; };' 2> rndc.out.ns2.$n 100grep "file not found" rndc.out.ns2.$n > /dev/null || ret=1 101$DIG $DIGOPTS +all @10.53.0.2 a.missing.example a > dig.out.ns2.post.$n || ret=1 102grep "status: REFUSED" dig.out.ns2.post.$n > /dev/null || ret=1 103digcomp dig.out.ns2.pre.$n dig.out.ns2.post.$n || ret=1 104n=`expr $n + 1` 105if [ $ret != 0 ]; then echo_i "failed"; fi 106status=`expr $status + $ret` 107 108if [ -z "$NZD" ]; then 109 echo_i "verifying no comments in NZF file ($n)" 110 ret=0 111 hcount=`grep "^# New zone file for view: _default" ns2/3bf305731dd26307.nzf | wc -l` 112 [ $hcount -eq 0 ] || ret=1 113 n=`expr $n + 1` 114 if [ $ret != 0 ]; then echo_i "failed"; fi 115 status=`expr $status + $ret` 116fi 117 118echo_i "checking rndc showzone with previously added zone ($n)" 119ret=0 120$RNDCCMD 10.53.0.2 showzone previous.example > rndc.out.ns2.$n 121expected='zone "previous.example" { type master; file "previous.db"; };' 122[ "`cat rndc.out.ns2.$n`" = "$expected" ] || ret=1 123n=`expr $n + 1` 124if [ $ret != 0 ]; then echo_i "failed"; fi 125status=`expr $status + $ret` 126 127if [ -n "$NZD" ]; then 128 echo_i "checking zone is present in NZD ($n)" 129 ret=0 130 $NZD2NZF ns2/_default.nzd | grep previous.example > /dev/null || ret=1 131 if [ $ret != 0 ]; then echo_i "failed"; fi 132 status=`expr $status + $ret` 133fi 134 135echo_i "deleting previously added zone ($n)" 136ret=0 137$RNDCCMD 10.53.0.2 delzone previous.example 2>&1 | sed 's/^/I:ns2 /' 138$DIG $DIGOPTS @10.53.0.2 a.previous.example a > dig.out.ns2.$n 139grep 'status: REFUSED' dig.out.ns2.$n > /dev/null || ret=1 140grep '^a.previous.example' dig.out.ns2.$n > /dev/null && ret=1 141n=`expr $n + 1` 142if [ $ret != 0 ]; then echo_i "failed"; fi 143status=`expr $status + $ret` 144 145if [ -n "$NZD" ]; then 146 echo_i "checking zone was deleted from NZD ($n)" 147 for i in 0 1 2 3 4 5 6 7 8 9; do 148 ret=0 149 $NZD2NZF ns2/_default.nzd | grep previous.example > /dev/null && ret=1 150 [ $ret = 0 ] && break 151 sleep 1 152 done 153 if [ $ret != 0 ]; then echo_i "failed"; fi 154 status=`expr $status + $ret` 155fi 156 157if [ -z "$NZD" ]; then 158 echo_i "checking NZF file now has comment ($n)" 159 ret=0 160 hcount=`grep "^# New zone file for view: _default" ns2/3bf305731dd26307.nzf | wc -l` 161 [ $hcount -eq 1 ] || ret=1 162 n=`expr $n + 1` 163 if [ $ret != 0 ]; then echo_i "failed"; fi 164 status=`expr $status + $ret` 165fi 166 167echo_i "deleting newly added zone added.example ($n)" 168ret=0 169$RNDCCMD 10.53.0.2 delzone added.example 2>&1 | sed 's/^/I:ns2 /' 170$DIG $DIGOPTS @10.53.0.2 a.added.example a > dig.out.ns2.$n 171grep 'status: REFUSED' dig.out.ns2.$n > /dev/null || ret=1 172grep '^a.added.example' dig.out.ns2.$n > /dev/null && ret=1 173n=`expr $n + 1` 174if [ $ret != 0 ]; then echo_i "failed"; fi 175status=`expr $status + $ret` 176 177echo_i "deleting newly added zone with escaped quote ($n)" 178ret=0 179$RNDCCMD 10.53.0.2 delzone "foo\\\"bar.example" 2>&1 | sed 's/^/I:ns2 /' 180$DIG $DIGOPTS @10.53.0.2 "a.foo\"bar.example" a > dig.out.ns2.$n 181grep 'status: REFUSED' dig.out.ns2.$n > /dev/null || ret=1 182grep "^a.foo\"bar.example" dig.out.ns2.$n > /dev/null && ret=1 183n=`expr $n + 1` 184if [ $ret != 0 ]; then echo_i "failed"; fi 185status=`expr $status + $ret` 186 187echo_i "checking rndc showzone with a normally-loaded zone ($n)" 188ret=0 189$RNDCCMD 10.53.0.2 showzone normal.example > rndc.out.ns2.$n 190expected='zone "normal.example" { type master; file "normal.db"; };' 191[ "`cat rndc.out.ns2.$n`" = "$expected" ] || ret=1 192n=`expr $n + 1` 193if [ $ret != 0 ]; then echo_i "failed"; fi 194status=`expr $status + $ret` 195 196echo_i "checking rndc showzone with a normally-loaded zone with trailing dot ($n)" 197ret=0 198$RNDCCMD 10.53.0.2 showzone finaldot.example > rndc.out.ns2.$n 199expected='zone "finaldot.example." { type master; file "normal.db"; };' 200[ "`cat rndc.out.ns2.$n`" = "$expected" ] || ret=1 201n=`expr $n + 1` 202if [ $ret != 0 ]; then echo_i "failed"; fi 203status=`expr $status + $ret` 204 205echo_i "checking rndc showzone with a normally-loaded redirect zone ($n)" 206ret=0 207$RNDCCMD 10.53.0.1 showzone -redirect > rndc.out.ns1.$n 208expected='zone "." { type redirect; file "redirect.db"; };' 209[ "`cat rndc.out.ns1.$n`" = "$expected" ] || ret=1 210n=`expr $n + 1` 211if [ $ret != 0 ]; then echo_i "failed"; fi 212status=`expr $status + $ret` 213 214echo_i "checking rndc zonestatus with a normally-loaded redirect zone ($n)" 215ret=0 216$RNDCCMD 10.53.0.1 zonestatus -redirect > rndc.out.ns1.$n 217grep "type: redirect" rndc.out.ns1.$n > /dev/null || ret=1 218grep "serial: 0" rndc.out.ns1.$n > /dev/null || ret=1 219n=`expr $n + 1` 220if [ $ret != 0 ]; then echo_i "failed"; fi 221status=`expr $status + $ret` 222 223echo_i "checking rndc reload with a normally-loaded redirect zone ($n)" 224ret=0 225sleep 1 226cp -f ns1/redirect.db.2 ns1/redirect.db 227$RNDCCMD 10.53.0.1 reload -redirect > rndc.out.ns1.$n 228$RNDCCMD 10.53.0.1 zonestatus -redirect > zonestatus.out.ns1.$n 229grep "type: redirect" zonestatus.out.ns1.$n > /dev/null || ret=1 230grep "serial: 1" zonestatus.out.ns1.$n > /dev/null || ret=1 231n=`expr $n + 1` 232if [ $ret != 0 ]; then echo_i "failed"; fi 233status=`expr $status + $ret` 234 235echo_i "delete a normally-loaded zone ($n)" 236ret=0 237$RNDCCMD 10.53.0.2 delzone normal.example > rndc.out.ns2.$n 2>&1 238$DIG $DIGOPTS @10.53.0.2 a.normal.example a > dig.out.ns2.$n 239grep "is no longer active and will be deleted" rndc.out.ns2.$n > /dev/null || ret=1 240grep "To keep it from returning when the server is restarted" rndc.out.ns2.$n > /dev/null || ret=1 241grep "must also be removed from named.conf." rndc.out.ns2.$n > /dev/null || ret=1 242 243grep 'status: REFUSED' dig.out.ns2.$n > /dev/null || ret=1 244n=`expr $n + 1` 245if [ $ret != 0 ]; then echo_i "failed"; fi 246status=`expr $status + $ret` 247 248echo_i "attempting to add master zone with inline signing ($n)" 249$RNDCCMD 10.53.0.2 addzone 'inline.example { type master; file "inline.db"; inline-signing yes; };' 2>&1 | sed 's/^/I:ns2 /' 250for i in 1 2 3 4 5 251do 252ret=0 253$DIG $DIGOPTS @10.53.0.2 a.inline.example a > dig.out.ns2.$n || ret=1 254grep 'status: NOERROR' dig.out.ns2.$n > /dev/null || ret=1 255grep '^a.inline.example' dig.out.ns2.$n > /dev/null || ret=1 256[ $ret = 0 ] && break 257sleep 1 258done 259n=`expr $n + 1` 260if [ $ret != 0 ]; then echo_i "failed"; fi 261status=`expr $status + $ret` 262 263echo_i "attempting to add master zone with inline signing and missing master ($n)" 264ret=0 265$RNDCCMD 10.53.0.2 addzone 'inlinemissing.example { type master; file "missing.db"; inline-signing yes; };' 2> rndc.out.ns2.$n 266grep "file not found" rndc.out.ns2.$n > /dev/null || ret=1 267n=`expr $n + 1` 268if [ $ret != 0 ]; then echo_i "failed"; fi 269status=`expr $status + $ret` 270 271echo_i "attempting to add slave zone with inline signing ($n)" 272$RNDCCMD 10.53.0.2 addzone 'inlineslave.example { type slave; masters { 10.53.0.1; }; file "inlineslave.bk"; inline-signing yes; };' 2>&1 | sed 's/^/I:ns2 /' 273for i in 1 2 3 4 5 274do 275ret=0 276$DIG $DIGOPTS @10.53.0.2 a.inlineslave.example a > dig.out.ns2.$n || ret=1 277grep 'status: NOERROR' dig.out.ns2.$n > /dev/null || ret=1 278grep '^a.inlineslave.example' dig.out.ns2.$n > /dev/null || ret=1 279[ $ret = 0 ] && break 280sleep 1 281done 282n=`expr $n + 1` 283if [ $ret != 0 ]; then echo_i "failed"; fi 284status=`expr $status + $ret` 285 286echo_i "attempting to delete slave zone with inline signing ($n)" 287ret=0 288for i in 0 1 2 3 4 5 6 7 8 9 289do 290 test -f ns2/inlineslave.bk.signed -a -f ns2/inlineslave.bk && break 291 sleep 1 292done 293$RNDCCMD 10.53.0.2 delzone inlineslave.example 2>&1 > rndc.out2.test$n 294test -f inlineslave.bk || 295grep '^inlineslave.bk$' rndc.out2.test$n > /dev/null || { 296 echo_i "failed to report inlineslave.bk"; ret=1; 297} 298test ! -f inlineslave.bk.signed || 299grep '^inlineslave.bk.signed$' rndc.out2.test$n > /dev/null || { 300 echo_i "failed to report inlineslave.bk.signed"; ret=1; 301} 302n=`expr $n + 1` 303status=`expr $status + $ret` 304 305echo_i "restoring slave zone with inline signing ($n)" 306$RNDCCMD 10.53.0.2 addzone 'inlineslave.example { type slave; masters { 10.53.0.1; }; file "inlineslave.bk"; inline-signing yes; };' 2>&1 | sed 's/^/I:ns2 /' 307for i in 1 2 3 4 5 308do 309ret=0 310$DIG $DIGOPTS @10.53.0.2 a.inlineslave.example a > dig.out.ns2.$n || ret=1 311grep 'status: NOERROR' dig.out.ns2.$n > /dev/null || ret=1 312grep '^a.inlineslave.example' dig.out.ns2.$n > /dev/null || ret=1 313[ $ret = 0 ] && break 314sleep 1 315done 316n=`expr $n + 1` 317if [ $ret != 0 ]; then echo_i "failed"; fi 318status=`expr $status + $ret` 319 320echo_i "deleting slave zone with automatic zone file removal ($n)" 321ret=0 322for i in 0 1 2 3 4 5 6 7 8 9 323do 324 test -f ns2/inlineslave.bk.signed -a -f ns2/inlineslave.bk && break 325 sleep 1 326done 327$RNDCCMD 10.53.0.2 delzone -clean inlineslave.example 2>&1 > /dev/null 328for i in 0 1 2 3 4 5 6 7 8 9 329do 330 ret=0 331 test -f ns2/inlineslave.bk.signed -a -f ns2/inlineslave.bk && ret=1 332 [ $ret = 0 ] && break 333 sleep 1 334done 335n=`expr $n + 1` 336status=`expr $status + $ret` 337 338echo_i "modifying zone configuration ($n)" 339ret=0 340$RNDCCMD 10.53.0.2 addzone 'mod.example { type master; file "added.db"; };' 2>&1 | sed 's/^/I:ns2 /' 341$DIG +norec $DIGOPTS @10.53.0.2 mod.example ns > dig.out.ns2.1.$n || ret=1 342grep 'status: NOERROR' dig.out.ns2.1.$n > /dev/null || ret=1 343$RNDCCMD 10.53.0.2 modzone 'mod.example { type master; file "added.db"; allow-query { none; }; };' 2>&1 | sed 's/^/I:ns2 /' 344$DIG +norec $DIGOPTS @10.53.0.2 mod.example ns > dig.out.ns2.2.$n || ret=1 345$RNDCCMD 10.53.0.2 showzone mod.example | grep 'allow-query { "none"; };' > /dev/null 2>&1 || ret=1 346n=`expr $n + 1` 347if [ $ret != 0 ]; then echo_i "failed"; fi 348status=`expr $status + $ret` 349 350echo_i "check that adding a 'stub' zone works ($n)" 351ret=0 352$RNDCCMD 10.53.0.2 addzone 'stub.example { type stub; masters { 1.2.3.4; }; file "stub.example.bk"; };' > rndc.out.ns2.$n 2>&1 || ret=1 353n=`expr $n + 1` 354if [ $ret != 0 ]; then echo_i "failed"; fi 355status=`expr $status + $ret` 356 357echo_i "check that adding a 'static-stub' zone works ($n)" 358ret=0 359$RNDCCMD 10.53.0.2 addzone 'static-stub.example { type static-stub; server-addresses { 1.2.3.4; }; };' > rndc.out.ns2.$n 2>&1 || ret=1 360n=`expr $n + 1` 361if [ $ret != 0 ]; then echo_i "failed"; fi 362status=`expr $status + $ret` 363 364echo_i "check that adding a 'master redirect' zone works ($n)" 365ret=0 366$RNDCCMD 10.53.0.2 addzone '"." { type redirect; file "redirect.db"; };' > rndc.out.ns2.$n 2>&1 || ret=1 367$RNDCCMD 10.53.0.2 showzone -redirect > showzone.out.ns2.$n 2>&1 || ret=1 368grep "type redirect;" showzone.out.ns2.$n > /dev/null || ret=1 369$RNDCCMD 10.53.0.2 zonestatus -redirect > zonestatus.out.ns2.$n 2>&1 || ret=1 370grep "type: redirect" zonestatus.out.ns2.$n > /dev/null || ret=1 371grep "serial: 0" zonestatus.out.ns2.$n > /dev/null || ret=1 372n=`expr $n + 1` 373if [ $ret != 0 ]; then echo_i "failed"; fi 374 375echo_i "check that reloading a added 'master redirect' zone works ($n)" 376ret=0 377sleep 1 378cp -f ns2/redirect.db.2 ns2/redirect.db 379$RNDCCMD 10.53.0.2 reload -redirect > rndc.out.ns2.$n 380$RNDCCMD 10.53.0.2 zonestatus -redirect > zonestatus.out.ns2.$n 2>&1 || ret=1 381grep "type: redirect" zonestatus.out.ns2.$n > /dev/null || ret=1 382grep "serial: 1" zonestatus.out.ns2.$n > /dev/null || ret=1 383n=`expr $n + 1` 384if [ $ret != 0 ]; then echo_i "failed"; fi 385 386echo_i "check that retransfer of a added 'master redirect' zone fails ($n)" 387ret=0 388$RNDCCMD 10.53.0.2 retransfer -redirect > rndc.out.ns2.$n 2>&1 && ret=1 389n=`expr $n + 1` 390if [ $ret != 0 ]; then echo_i "failed"; fi 391 392echo_i "check that deleting a 'master redirect' zone works ($n)" 393ret=0 394$RNDCCMD 10.53.0.2 delzone -redirect > rndc.out.ns2.$n 2>&1 || ret=1 395$RNDCCMD 10.53.0.2 showzone -redirect > showzone.out.ns2.$n 2>&1 396grep 'not found' showzone.out.ns2.$n > /dev/null || ret=1 397n=`expr $n + 1` 398if [ $ret != 0 ]; then echo_i "failed"; fi 399status=`expr $status + $ret` 400 401echo_i "check that adding a 'slave redirect' zone works ($n)" 402ret=0 403$RNDCCMD 10.53.0.2 addzone '"." { type redirect; masters { 10.53.0.3;}; file "redirect.bk"; };' > rndc.out.ns2.$n 2>&1 || ret=1 404$RNDCCMD 10.53.0.2 showzone -redirect > showzone.out.ns2.$n 2>&1 || ret=1 405grep "type redirect;" showzone.out.ns2.$n > /dev/null || ret=1 406sleep 1 407$RNDCCMD 10.53.0.2 zonestatus -redirect > zonestatus.out.ns2.$n 2>&1 || ret=1 408grep "type: redirect" zonestatus.out.ns2.$n > /dev/null || ret=1 409grep "serial: 0" zonestatus.out.ns2.$n > /dev/null || ret=1 410n=`expr $n + 1` 411if [ $ret != 0 ]; then echo_i "failed"; fi 412status=`expr $status + $ret` 413 414echo_i "check that retransfering a added 'slave redirect' zone works ($n)" 415ret=0 416cp -f ns3/redirect.db.2 ns3/redirect.db 417$RNDCCMD 10.53.0.3 reload . > showzone.out.ns3.$n 2>&1 || ret=1 418sleep 1 419$RNDCCMD 10.53.0.2 retransfer -redirect > rndc.out.ns2.$n 2>&1 || ret=1 420sleep 1 421$RNDCCMD 10.53.0.2 zonestatus -redirect > zonestatus.out.ns2.$n 2>&1 || ret=1 422grep "type: redirect" zonestatus.out.ns2.$n > /dev/null || ret=1 423grep "serial: 1" zonestatus.out.ns2.$n > /dev/null || ret=1 424n=`expr $n + 1` 425if [ $ret != 0 ]; then echo_i "failed"; fi 426status=`expr $status + $ret` 427 428echo_i "check that deleting a 'slave redirect' zone works ($n)" 429ret=0 430$RNDCCMD 10.53.0.2 delzone -redirect > rndc.out.ns2.$n 2>&1 || ret=1 431$RNDCCMD 10.53.0.2 showzone -redirect > showzone.out.ns2.$n 2>&1 432grep 'not found' showzone.out.ns2.$n > /dev/null || ret=1 433n=`expr $n + 1` 434if [ $ret != 0 ]; then echo_i "failed"; fi 435status=`expr $status + $ret` 436 437echo_i "check that zone type 'hint' is properly rejected ($n)" 438ret=0 439$RNDCCMD 10.53.0.2 addzone '"." { type hint; file "hints.db"; };' > rndc.out.ns2.$n 2>&1 && ret=1 440grep "zones not supported by addzone" rndc.out.ns2.$n > /dev/null || ret=1 441n=`expr $n + 1` 442if [ $ret != 0 ]; then echo_i "failed"; fi 443status=`expr $status + $ret` 444 445echo_i "check that zone type 'forward' is properly rejected ($n)" 446ret=0 447$RNDCCMD 10.53.0.2 addzone 'forward.example { type forward; forwarders { 1.2.3.4; }; forward only; };' > rndc.out.ns2.$n 2>&1 && ret=1 448grep "zones not supported by addzone" rndc.out.ns2.$n > /dev/null || ret=1 449n=`expr $n + 1` 450if [ $ret != 0 ]; then echo_i "failed"; fi 451status=`expr $status + $ret` 452 453echo_i "check that zone type 'delegation-only' is properly rejected ($n)" 454ret=0 455$RNDCCMD 10.53.0.2 addzone 'delegation-only.example { type delegation-only; };' > rndc.out.ns2.$n 2>&1 && ret=1 456grep "zones not supported by addzone" rndc.out.ns2.$n > /dev/null || ret=1 457n=`expr $n + 1` 458if [ $ret != 0 ]; then echo_i "failed"; fi 459status=`expr $status + $ret` 460 461echo_i "check that 'in-view' zones are properly rejected ($n)" 462ret=0 463$RNDCCMD 10.53.0.2 addzone 'in-view.example { in-view "_default"; };' > rndc.out.ns2.$n 2>&1 && ret=1 464grep "zones not supported by addzone" rndc.out.ns2.$n > /dev/null || ret=1 465n=`expr $n + 1` 466if [ $ret != 0 ]; then echo_i "failed"; fi 467status=`expr $status + $ret` 468 469echo_i "reconfiguring server with multiple views" 470rm -f ns2/named.conf 471copy_setports ns2/named2.conf.in ns2/named.conf 472$RNDCCMD 10.53.0.2 reconfig 2>&1 | sed 's/^/I:ns2 /' 473sleep 5 474 475echo_i "adding new zone to external view ($n)" 476# NOTE: The internal view has "recursion yes" set, and so queries for 477# nonexistent zones should return NOERROR. The external view is 478# "recursion no", so queries for nonexistent zones should return 479# REFUSED. This behavior should be the same regardless of whether 480# the zone does not exist because a) it has not yet been loaded, b) 481# it failed to load, or c) it has been deleted. 482ret=0 483$DIG +norec $DIGOPTS @10.53.0.2 -b 10.53.0.2 a.added.example a > dig.out.ns2.intpre.$n || ret=1 484grep 'status: NOERROR' dig.out.ns2.intpre.$n > /dev/null || ret=1 485$DIG +norec $DIGOPTS @10.53.0.4 -b 10.53.0.4 a.added.example a > dig.out.ns2.extpre.$n || ret=1 486grep 'status: REFUSED' dig.out.ns2.extpre.$n > /dev/null || ret=1 487$RNDCCMD 10.53.0.2 addzone 'added.example in external { type master; file "added.db"; };' 2>&1 | sed 's/^/I:ns2 /' 488$DIG +norec $DIGOPTS @10.53.0.2 -b 10.53.0.2 a.added.example a > dig.out.ns2.int.$n || ret=1 489grep 'status: NOERROR' dig.out.ns2.int.$n > /dev/null || ret=1 490$DIG +norec $DIGOPTS @10.53.0.4 -b 10.53.0.4 a.added.example a > dig.out.ns2.ext.$n || ret=1 491grep 'status: NOERROR' dig.out.ns2.ext.$n > /dev/null || ret=1 492grep '^a.added.example' dig.out.ns2.ext.$n > /dev/null || ret=1 493n=`expr $n + 1` 494if [ $ret != 0 ]; then echo_i "failed"; fi 495status=`expr $status + $ret` 496 497if [ -z "$NZD" ]; then 498 echo_i "checking new NZF file has comment ($n)" 499 ret=0 500 hcount=`grep "^# New zone file for view: external" ns2/external.nzf | wc -l` 501 [ $hcount -eq 1 ] || ret=1 502 n=`expr $n + 1` 503 if [ $ret != 0 ]; then echo_i "failed"; fi 504 status=`expr $status + $ret` 505fi 506 507if [ -n "$NZD" ]; then 508 echo_i "verifying added.example in external view created an external.nzd DB ($n)" 509 ret=0 510 [ -e ns2/external.nzd ] || ret=1 511 n=`expr $n + 1` 512 if [ $ret != 0 ]; then echo_i "failed"; fi 513 status=`expr $status + $ret` 514fi 515 516echo_i "checking rndc reload causes named to reload the external view's new zone config ($n)" 517ret=0 518$RNDCCMD 10.53.0.2 reload 2>&1 | sed 's/^/I:ns2 /' 519$DIG +norec $DIGOPTS @10.53.0.2 -b 10.53.0.2 a.added.example a > dig.out.ns2.int.$n || ret=1 520grep 'status: NOERROR' dig.out.ns2.int.$n > /dev/null || ret=1 521$DIG +norec $DIGOPTS @10.53.0.4 -b 10.53.0.4 a.added.example a > dig.out.ns2.ext.$n || ret=1 522grep 'status: NOERROR' dig.out.ns2.ext.$n > /dev/null || ret=1 523grep '^a.added.example' dig.out.ns2.ext.$n > /dev/null || ret=1 524n=`expr $n + 1` 525if [ $ret != 0 ]; then echo_i "failed"; fi 526status=`expr $status + $ret` 527 528echo_i "checking rndc showzone with newly added zone ($n)" 529# loop because showzone may complain if zones are still being 530# loaded from the NZDB at this point. 531for try in 0 1 2 3 4 5; do 532 ret=0 533$RNDCCMD 10.53.0.2 showzone added.example in external > rndc.out.ns2.$n 2>/dev/null 534 if [ -z "$NZD" ]; then 535 expected='zone "added.example" in external { type master; file "added.db"; };' 536 else 537 expected='zone "added.example" { type master; file "added.db"; };' 538 fi 539 [ "`cat rndc.out.ns2.$n`" = "$expected" ] || ret=1 540 [ $ret -eq 0 ] && break 541 sleep 1 542done 543n=`expr $n + 1` 544if [ $ret != 0 ]; then echo_i "failed"; fi 545status=`expr $status + $ret` 546 547echo_i "deleting newly added zone ($n)" 548ret=0 549$RNDCCMD 10.53.0.2 delzone 'added.example in external' 2>&1 | sed 's/^/I:ns2 /' 550$DIG $DIGOPTS @10.53.0.4 -b 10.53.0.4 a.added.example a > dig.out.ns2.$n || ret=1 551grep 'status: REFUSED' dig.out.ns2.$n > /dev/null || ret=1 552grep '^a.added.example' dig.out.ns2.$n > /dev/null && ret=1 553n=`expr $n + 1` 554if [ $ret != 0 ]; then echo_i "failed"; fi 555status=`expr $status + $ret` 556 557echo_i "attempting to add zone to internal view ($n)" 558ret=0 559$DIG +norec $DIGOPTS @10.53.0.2 -b 10.53.0.2 a.added.example a > dig.out.ns2.pre.$n || ret=1 560grep 'status: NOERROR' dig.out.ns2.pre.$n > /dev/null || ret=1 561$RNDCCMD 10.53.0.2 addzone 'added.example in internal { type master; file "added.db"; };' 2> rndc.out.ns2.$n 562grep "permission denied" rndc.out.ns2.$n > /dev/null || ret=1 563$DIG $DIGOPTS @10.53.0.2 -b 10.53.0.2 a.added.example a > dig.out.ns2.int.$n || ret=1 564grep 'status: NOERROR' dig.out.ns2.int.$n > /dev/null || ret=1 565$DIG $DIGOPTS @10.53.0.4 -b 10.53.0.4 a.added.example a > dig.out.ns2.ext.$n || ret=1 566grep 'status: REFUSED' dig.out.ns2.ext.$n > /dev/null || ret=1 567n=`expr $n + 1` 568if [ $ret != 0 ]; then echo_i "failed"; fi 569status=`expr $status + $ret` 570 571echo_i "attempting to delete a policy zone ($n)" 572ret=0 573$RNDCCMD 10.53.0.2 delzone 'policy in internal' 2> rndc.out.ns2.$n >&1 574grep 'cannot be deleted' rndc.out.ns2.$n > /dev/null || ret=1 575n=`expr $n + 1` 576if [ $ret != 0 ]; then echo_i "failed"; fi 577status=`expr $status + $ret` 578 579echo_i "adding new zone again to external view ($n)" 580ret=0 581$RNDCCMD 10.53.0.2 addzone 'added.example in external { type master; file "added.db"; };' 2>&1 | sed 's/^/I:ns2 /' 582$DIG +norec $DIGOPTS @10.53.0.2 -b 10.53.0.2 a.added.example a > dig.out.ns2.int.$n || ret=1 583grep 'status: NOERROR' dig.out.ns2.int.$n > /dev/null || ret=1 584$DIG +norec $DIGOPTS @10.53.0.4 -b 10.53.0.4 a.added.example a > dig.out.ns2.ext.$n || ret=1 585grep 'status: NOERROR' dig.out.ns2.ext.$n > /dev/null || ret=1 586grep '^a.added.example' dig.out.ns2.ext.$n > /dev/null || ret=1 587n=`expr $n + 1` 588if [ $ret != 0 ]; then echo_i "failed"; fi 589status=`expr $status + $ret` 590 591echo_i "reconfiguring server with multiple views and new-zones-directory" 592rm -f ns2/named.conf 593copy_setports ns2/named3.conf.in ns2/named.conf 594$RNDCCMD 10.53.0.2 reconfig 2>&1 | sed 's/^/I:ns2 /' 595sleep 5 596 597echo_i "checking new zone is still loaded after dir change ($n)" 598ret=0 599$DIG +norec $DIGOPTS @10.53.0.4 -b 10.53.0.4 a.added.example a > dig.out.ns2.ext.$n || ret=1 600grep 'status: NOERROR' dig.out.ns2.ext.$n > /dev/null || ret=1 601grep '^a.added.example' dig.out.ns2.ext.$n > /dev/null || ret=1 602n=`expr $n + 1` 603if [ $ret != 0 ]; then echo_i "failed"; fi 604status=`expr $status + $ret` 605 606echo_i "deleting newly added zone from external ($n)" 607ret=0 608$RNDCCMD 10.53.0.2 delzone 'added.example in external' 2>&1 | sed 's/^/I:ns2 /' 609$DIG $DIGOPTS @10.53.0.4 -b 10.53.0.4 a.added.example a > dig.out.ns2.$n || ret=1 610grep 'status: REFUSED' dig.out.ns2.$n > /dev/null || ret=1 611grep '^a.added.example' dig.out.ns2.$n > /dev/null && ret=1 612n=`expr $n + 1` 613if [ $ret != 0 ]; then echo_i "failed"; fi 614status=`expr $status + $ret` 615 616echo_i "adding new zone to directory view ($n)" 617ret=0 618$DIG +norec $DIGOPTS @10.53.0.2 -b 10.53.0.2 a.added.example a > dig.out.ns2.intpre.$n || ret=1 619grep 'status: NOERROR' dig.out.ns2.intpre.$n > /dev/null || ret=1 620$DIG +norec $DIGOPTS @10.53.0.4 -b 10.53.0.4 a.added.example a > dig.out.ns2.extpre.$n || ret=1 621grep 'status: REFUSED' dig.out.ns2.extpre.$n > /dev/null || ret=1 622$DIG +norec $DIGOPTS @10.53.0.5 -b 10.53.0.5 a.added.example a > dig.out.ns2.dirpre.$n || ret=1 623grep 'status: REFUSED' dig.out.ns2.dirpre.$n > /dev/null || ret=1 624$RNDCCMD 10.53.0.2 addzone 'added.example in directory { type master; file "added.db"; };' 2>&1 | sed 's/^/I:ns2 /' 625$DIG +norec $DIGOPTS @10.53.0.2 -b 10.53.0.2 a.added.example a > dig.out.ns2.int.$n || ret=1 626grep 'status: NOERROR' dig.out.ns2.int.$n > /dev/null || ret=1 627$DIG +norec $DIGOPTS @10.53.0.4 -b 10.53.0.4 a.added.example a > dig.out.ns2.ext.$n || ret=1 628grep 'status: REFUSED' dig.out.ns2.ext.$n > /dev/null || ret=1 629$DIG +norec $DIGOPTS @10.53.0.5 -b 10.53.0.5 a.added.example a > dig.out.ns2.dir.$n || ret=1 630grep 'status: NOERROR' dig.out.ns2.dir.$n > /dev/null || ret=1 631grep '^a.added.example' dig.out.ns2.dir.$n > /dev/null || ret=1 632n=`expr $n + 1` 633if [ $ret != 0 ]; then echo_i "failed"; fi 634status=`expr $status + $ret` 635 636if [ -n "$NZD" ]; then 637 echo_i "checking NZD file was created in new-zones-directory ($n)" 638 expect=ns2/new-zones/directory.nzd 639else 640 echo_i "checking NZF file was created in new-zones-directory ($n)" 641 expect=ns2/new-zones/directory.nzf 642fi 643$RNDCCMD 10.53.0.2 sync 'added.example IN directory' 2>&1 | sed 's/^/I:ns2 /' 644sleep 2 645[ -e "$expect" ] || ret=1 646n=`expr $n + 1` 647if [ $ret != 0 ]; then echo_i "failed"; fi 648status=`expr $status + $ret` 649 650echo_i "deleting newly added zone from directory ($n)" 651ret=0 652$RNDCCMD 10.53.0.2 delzone 'added.example in directory' 2>&1 | sed 's/^/I:ns2 /' 653$DIG $DIGOPTS @10.53.0.5 -b 10.53.0.5 a.added.example a > dig.out.ns2.$n || ret=1 654grep 'status: REFUSED' dig.out.ns2.$n > /dev/null || ret=1 655grep '^a.added.example' dig.out.ns2.$n > /dev/null && ret=1 656n=`expr $n + 1` 657if [ $ret != 0 ]; then echo_i "failed"; fi 658status=`expr $status + $ret` 659 660echo_i "ensure the configuration context is cleaned up correctly ($n)" 661ret=0 662$RNDCCMD 10.53.0.2 reconfig > /dev/null 2>&1 || ret=1 663sleep 5 664$RNDCCMD 10.53.0.2 status > /dev/null 2>&1 || ret=1 665n=`expr $n + 1` 666if [ $ret != 0 ]; then echo_i "failed"; fi 667status=`expr $status + $ret` 668 669echo_i "check delzone after reconfig failure ($n)" 670ret=0 671$RNDCCMD 10.53.0.3 addzone 'inlineslave.example. IN { type slave; file "inlineslave.db"; masterfile-format text; masters { testmaster; }; };' > /dev/null 2>&1 || ret=1 672copy_setports ns3/named2.conf.in ns3/named.conf 673$RNDCCMD 10.53.0.3 reconfig > /dev/null 2>&1 && ret=1 674sleep 5 675$RNDCCMD 10.53.0.3 delzone inlineslave.example > /dev/null 2>&1 || ret=1 676n=`expr $n + 1` 677if [ $ret != 0 ]; then echo_i "failed"; fi 678status=`expr $status + $ret` 679 680if ! $FEATURETEST --with-lmdb 681then 682 echo_i "check that addzone is fully reversed on failure (--with-lmdb=no) ($n)" 683 ret=0 684 $RNDCCMD 10.53.0.3 addzone "test1.baz" '{ type master; file "e.db"; };' > /dev/null 2>&1 || ret=1 685 $RNDCCMD 10.53.0.3 addzone "test2.baz" '{ type master; file "dne.db"; };' > /dev/null 2>&1 && ret=1 686 $RNDCCMD 10.53.0.3 addzone "test3.baz" '{ type master; file "e.db"; };' > /dev/null 2>&1 || ret=1 687 $RNDCCMD 10.53.0.3 delzone "test3.baz" > /dev/null 2>&1 || ret=1 688 grep test2.baz ns3/_default.nzf > /dev/null && ret=1 689 n=`expr $n + 1` 690 if [ $ret != 0 ]; then echo_i "failed"; fi 691 status=`expr $status + $ret` 692fi 693 694echo_i "check that named restarts with multiple added zones ($n)" 695ret=0 696$RNDCCMD 10.53.0.3 addzone "test4.baz" '{ type master; file "e.db"; };' > /dev/null 2>&1 || ret=1 697$RNDCCMD 10.53.0.3 addzone "test5.baz" '{ type master; file "e.db"; };' > /dev/null 2>&1 || ret=1 698$PERL $SYSTEMTESTTOP/stop.pl . ns3 699$PERL $SYSTEMTESTTOP/start.pl --noclean --restart --port ${PORT} . ns3 || ret=1 700$DIG $DIGOPTS @10.53.0.3 version.bind txt ch > dig.out.test$n || ret=1 701grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 702n=`expr $n + 1` 703if [ $ret != 0 ]; then echo_i "failed"; fi 704status=`expr $status + $ret` 705 706echo_i "exit status: $status" 707[ $status -eq 0 ] || exit 1 708