1#!/bin/sh 2 3# Copyright (C) Internet Systems Consortium, Inc. ("ISC") 4# 5# SPDX-License-Identifier: MPL-2.0 6# 7# This Source Code Form is subject to the terms of the Mozilla Public 8# License, v. 2.0. If a copy of the MPL was not distributed with this 9# file, you can obtain one at https://mozilla.org/MPL/2.0/. 10# 11# See the COPYRIGHT file distributed with this work for additional 12# information regarding copyright ownership. 13 14SYSTEMTESTTOP=.. 15. $SYSTEMTESTTOP/conf.sh 16 17DIGOPTS="-p ${PORT}" 18RNDCCMD="$RNDC -c $SYSTEMTESTTOP/common/rndc.conf -p ${CONTROLPORT} -s" 19 20status=0 21n=0 22 23emptyzones=" 2410.IN-ADDR.ARPA 2516.172.IN-ADDR.ARPA 2617.172.IN-ADDR.ARPA 2718.172.IN-ADDR.ARPA 2819.172.IN-ADDR.ARPA 2920.172.IN-ADDR.ARPA 3021.172.IN-ADDR.ARPA 3122.172.IN-ADDR.ARPA 3223.172.IN-ADDR.ARPA 3324.172.IN-ADDR.ARPA 3425.172.IN-ADDR.ARPA 3526.172.IN-ADDR.ARPA 3627.172.IN-ADDR.ARPA 3728.172.IN-ADDR.ARPA 3829.172.IN-ADDR.ARPA 3930.172.IN-ADDR.ARPA 4031.172.IN-ADDR.ARPA 41168.192.IN-ADDR.ARPA 4264.100.IN-ADDR.ARPA 4365.100.IN-ADDR.ARPA 4466.100.IN-ADDR.ARPA 4567.100.IN-ADDR.ARPA 4668.100.IN-ADDR.ARPA 4769.100.IN-ADDR.ARPA 4870.100.IN-ADDR.ARPA 4971.100.IN-ADDR.ARPA 5072.100.IN-ADDR.ARPA 5173.100.IN-ADDR.ARPA 5274.100.IN-ADDR.ARPA 5375.100.IN-ADDR.ARPA 5476.100.IN-ADDR.ARPA 5577.100.IN-ADDR.ARPA 5678.100.IN-ADDR.ARPA 5779.100.IN-ADDR.ARPA 5880.100.IN-ADDR.ARPA 5981.100.IN-ADDR.ARPA 6082.100.IN-ADDR.ARPA 6183.100.IN-ADDR.ARPA 6284.100.IN-ADDR.ARPA 6385.100.IN-ADDR.ARPA 6486.100.IN-ADDR.ARPA 6587.100.IN-ADDR.ARPA 6688.100.IN-ADDR.ARPA 6789.100.IN-ADDR.ARPA 6890.100.IN-ADDR.ARPA 6991.100.IN-ADDR.ARPA 7092.100.IN-ADDR.ARPA 7193.100.IN-ADDR.ARPA 7294.100.IN-ADDR.ARPA 7395.100.IN-ADDR.ARPA 7496.100.IN-ADDR.ARPA 7597.100.IN-ADDR.ARPA 7698.100.IN-ADDR.ARPA 7799.100.IN-ADDR.ARPA 78100.100.IN-ADDR.ARPA 79101.100.IN-ADDR.ARPA 80102.100.IN-ADDR.ARPA 81103.100.IN-ADDR.ARPA 82104.100.IN-ADDR.ARPA 83105.100.IN-ADDR.ARPA 84106.100.IN-ADDR.ARPA 85107.100.IN-ADDR.ARPA 86108.100.IN-ADDR.ARPA 87109.100.IN-ADDR.ARPA 88110.100.IN-ADDR.ARPA 89111.100.IN-ADDR.ARPA 90112.100.IN-ADDR.ARPA 91113.100.IN-ADDR.ARPA 92114.100.IN-ADDR.ARPA 93115.100.IN-ADDR.ARPA 94116.100.IN-ADDR.ARPA 95117.100.IN-ADDR.ARPA 96118.100.IN-ADDR.ARPA 97119.100.IN-ADDR.ARPA 98120.100.IN-ADDR.ARPA 99121.100.IN-ADDR.ARPA 100122.100.IN-ADDR.ARPA 101123.100.IN-ADDR.ARPA 102124.100.IN-ADDR.ARPA 103125.100.IN-ADDR.ARPA 104126.100.IN-ADDR.ARPA 105127.100.IN-ADDR.ARPA 1060.IN-ADDR.ARPA 107127.IN-ADDR.ARPA 108254.169.IN-ADDR.ARPA 1092.0.192.IN-ADDR.ARPA 110100.51.198.IN-ADDR.ARPA 111113.0.203.IN-ADDR.ARPA 112255.255.255.255.IN-ADDR.ARPA 1130.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA 1141.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA 115D.F.IP6.ARPA 1168.E.F.IP6.ARPA 1179.E.F.IP6.ARPA 118A.E.F.IP6.ARPA 119B.E.F.IP6.ARPA 1208.B.D.0.1.0.0.2.IP6.ARPA 121EMPTY.AS112.ARPA 122HOME.ARPA" 123 124n=`expr $n + 1` 125ret=0 126count=0 127echo_i "Checking expected empty zones were configured ($n)" 128for zone in ${emptyzones} 129do 130 grep "automatic empty zone: $zone" ns1/named.run > /dev/null || { 131 echo_i "failed (empty zone $zone missing)" 132 ret=1 133 } 134 count=`expr $count + 1` 135done 136lines=`grep "automatic empty zone: " ns1/named.run | wc -l` 137test $count -eq $lines -a $count -eq 99 || { 138 ret=1; echo_i "failed (count mismatch)"; 139} 140if [ $ret != 0 ] ; then status=`expr $status + $ret`; fi 141 142n=`expr $n + 1` 143echo_i "Checking that reconfiguring empty zones is silent ($n)" 144$RNDCCMD 10.53.0.1 reconfig 145ret=0 146grep "automatic empty zone" ns1/named.run > /dev/null || ret=1 147grep "received control channel command 'reconfig'" ns1/named.run > /dev/null || ret=1 148grep "reloading configuration succeeded" ns1/named.run > /dev/null || ret=1 149sleep 1 150grep "zone serial (0) unchanged." ns1/named.run > /dev/null && ret=1 151if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi 152 153n=`expr $n + 1` 154echo_i "Checking that reloading empty zones is silent ($n)" 155rndc_reload ns1 10.53.0.1 156ret=0 157grep "automatic empty zone" ns1/named.run > /dev/null || ret=1 158grep "received control channel command 'reload'" ns1/named.run > /dev/null || ret=1 159grep "reloading configuration succeeded" ns1/named.run > /dev/null || ret=1 160sleep 1 161grep "zone serial (0) unchanged." ns1/named.run > /dev/null && ret=1 162if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi 163 164HOST_NAME=`$FEATURETEST --gethostname` 165BIND_VERSION_STRING=$($NAMED -V | head -1) 166BIND_VERSION=$($NAMED -V | sed -ne 's/^BIND \([^ ]*\).*/\1/p') 167 168n=`expr $n + 1` 169ret=0 170echo_i "Checking that default version works for rndc ($n)" 171$RNDCCMD 10.53.0.1 status > rndc.status.ns1.$n 2>&1 172grep -F "version: $BIND_VERSION_STRING" rndc.status.ns1.$n > /dev/null || ret=1 173if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi 174 175n=`expr $n + 1` 176ret=0 177echo_i "Checking that custom version works for rndc ($n)" 178$RNDCCMD 10.53.0.3 status > rndc.status.ns3.$n 2>&1 179grep -F "version: $BIND_VERSION_STRING (this is a test of version)" rndc.status.ns3.$n > /dev/null || ret=1 180if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi 181 182n=`expr $n + 1` 183ret=0 184echo_i "Checking that default version works for query ($n)" 185$DIG $DIGOPTS +short version.bind txt ch @10.53.0.1 > dig.out.ns1.$n 186grep "^\"$BIND_VERSION\"$" dig.out.ns1.$n > /dev/null || ret=1 187if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi 188 189n=`expr $n + 1` 190ret=0 191echo_i "Checking that custom version works for query ($n)" 192$DIG $DIGOPTS +short version.bind txt ch @10.53.0.3 > dig.out.ns3.$n 193grep "^\"this is a test of version\"$" dig.out.ns3.$n > /dev/null || ret=1 194if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi 195 196n=`expr $n + 1` 197ret=0 198echo_i "Checking that default hostname works for query ($n)" 199$DIG $DIGOPTS +short hostname.bind txt ch @10.53.0.1 > dig.out.ns1.$n 200grep "^\"$HOST_NAME\"$" dig.out.ns1.$n > /dev/null || ret=1 201if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi 202 203n=`expr $n + 1` 204ret=0 205echo_i "Checking that custom hostname works for query ($n)" 206$DIG $DIGOPTS +short hostname.bind txt ch @10.53.0.3 > dig.out.ns3.$n 207grep "^\"this.is.a.test.of.hostname\"$" dig.out.ns3.$n > /dev/null || ret=1 208if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi 209 210n=`expr $n + 1` 211ret=0 212echo_i "Checking that default server-id is none for query ($n)" 213$DIG $DIGOPTS id.server txt ch @10.53.0.1 > dig.out.ns1.$n 214grep "status: NOERROR" dig.out.ns1.$n > /dev/null || ret=1 215grep "ANSWER: 0" dig.out.ns1.$n > /dev/null || ret=1 216if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi 217 218n=`expr $n + 1` 219ret=0 220echo_i "Checking that server-id hostname works for query ($n)" 221$DIG $DIGOPTS +short id.server txt ch @10.53.0.2 > dig.out.ns2.$n 222grep "^\"$HOST_NAME\"$" dig.out.ns2.$n > /dev/null || ret=1 223if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi 224 225n=`expr $n + 1` 226ret=0 227echo_i "Checking that server-id hostname works for EDNS name server ID request ($n)" 228$DIG $DIGOPTS +norec +nsid foo @10.53.0.2 > dig.out.ns2.$n 229grep "^; NSID: .* (\"$HOST_NAME\")$" dig.out.ns2.$n > /dev/null || ret=1 230if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi 231 232n=`expr $n + 1` 233ret=0 234echo_i "Checking that custom server-id works for query ($n)" 235$DIG $DIGOPTS +short id.server txt ch @10.53.0.3 > dig.out.ns3.$n 236grep "^\"this.is.a.test.of.server-id\"$" dig.out.ns3.$n > /dev/null || ret=1 237if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi 238 239n=`expr $n + 1` 240ret=0 241echo_i "Checking that custom server-id works for EDNS name server ID request ($n)" 242$DIG $DIGOPTS +norec +nsid foo @10.53.0.3 > dig.out.ns3.$n 243grep "^; NSID: .* (\"this.is.a.test.of.server-id\")$" dig.out.ns3.$n > /dev/null || ret=1 244if [ $ret != 0 ] ; then echo_i "failed"; status=`expr $status + $ret`; fi 245 246echo_i "exit status: $status" 247[ $status -eq 0 ] || exit 1 248