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 14 set -e 15 16 . ../conf.sh 17 18 status=0 19 n=0 20 21 DIGOPTS="-p ${PORT}" 22 23 dig_cmd() { 24 # shellcheck disable=SC2086 25 "$DIG" $DIGOPTS "$@" | grep -v '^;' 26 } 27 28 n=$((n + 1)) 29 echo_i "querying for various representations of an IN A record ($n)" 30 for i in 1 2 3 4 5 6 7 8 9 10 11 12; do 31 ret=0 32 dig_cmd +short @10.53.0.1 a$i.example a in >dig.out.$i.test$n 33 echo 10.0.0.1 | diff - dig.out.$i.test$n || ret=1 34 if [ $ret != 0 ]; then 35 echo_i "#$i failed" 36 fi 37 status=$((status + ret)) 38 done 39 40 n=$((n + 1)) 41 echo_i "querying for various representations of an IN TXT record ($n)" 42 for i in 1 2 3 4 5 6 7; do 43 ret=0 44 dig_cmd +short @10.53.0.1 txt$i.example txt in >dig.out.$i.test$n 45 echo '"hello"' | diff - dig.out.$i.test$n || ret=1 46 if [ $ret != 0 ]; then 47 echo_i "#$i failed" 48 fi 49 status=$((status + ret)) 50 done 51 52 n=$((n + 1)) 53 echo_i "querying for various representations of an IN TYPE123 record ($n)" 54 for i in 1 2 3; do 55 ret=0 56 dig_cmd +short @10.53.0.1 unk$i.example type123 in >dig.out.$i.test$n 57 echo '\# 1 00' | diff - dig.out.$i.test$n || ret=1 58 if [ $ret != 0 ]; then 59 echo_i "#$i failed" 60 fi 61 status=$((status + ret)) 62 done 63 64 n=$((n + 1)) 65 echo_i "querying for NULL record ($n)" 66 ret=0 67 dig_cmd +short @10.53.0.1 null.example null in >dig.out.test$n 68 echo '\# 1 00' | diff - dig.out.test$n || ret=1 69 [ $ret = 0 ] || echo_i "failed" 70 status=$((status + ret)) 71 72 n=$((n + 1)) 73 echo_i "querying for empty NULL record ($n)" 74 ret=0 75 dig_cmd +short @10.53.0.1 empty.example null in >dig.out.test$n 76 echo '\# 0' | diff - dig.out.test$n || ret=1 77 [ $ret = 0 ] || echo_i "failed" 78 status=$((status + ret)) 79 80 n=$((n + 1)) 81 echo_i "querying for various representations of a CLASS10 TYPE1 record ($n)" 82 for i in 1 2; do 83 ret=0 84 dig_cmd +short @10.53.0.1 a$i.example a class10 >dig.out.$i.test$n 85 echo '\# 4 0A000001' | diff - dig.out.$i.test$n || ret=1 86 if [ $ret != 0 ]; then 87 echo_i "#$i failed" 88 fi 89 status=$((status + ret)) 90 done 91 92 n=$((n + 1)) 93 echo_i "querying for various representations of a CLASS10 TXT record ($n)" 94 for i in 1 2 3 4; do 95 ret=0 96 dig_cmd +short @10.53.0.1 txt$i.example txt class10 >dig.out.$i.test$n 97 echo '"hello"' | diff - dig.out.$i.test$n || ret=1 98 if [ $ret != 0 ]; then 99 echo_i "#$i failed" 100 fi 101 status=$((status + ret)) 102 done 103 104 n=$((n + 1)) 105 echo_i "querying for various representations of a CLASS10 TYPE123 record ($n)" 106 for i in 1 2; do 107 ret=0 108 dig_cmd +short @10.53.0.1 unk$i.example type123 class10 >dig.out.$i.test$n 109 echo '\# 1 00' | diff - dig.out.$i.test$n || ret=1 110 if [ $ret != 0 ]; then 111 echo_i "#$i failed" 112 fi 113 status=$((status + ret)) 114 done 115 116 n=$((n + 1)) 117 echo_i "querying for SOAs of zone that should have failed to load ($n)" 118 for i in 1 2 3 4; do 119 ret=0 120 $DIG $DIGOPTS @10.53.0.1 broken$i. soa in >dig.out.$i.test$n || ret=1 121 grep "SERVFAIL" dig.out.$i.test$n >/dev/null || ret=1 122 if [ $ret != 0 ]; then 123 echo_i "#$i failed" 124 fi 125 status=$((status + ret)) 126 done 127 128 n=$((n + 1)) 129 echo_i "checking large unknown record loading on primary ($n)" 130 for try in 0 1 2 3 4 5 6 7 8 9; do 131 ret=0 132 dig_cmd @10.53.0.1 +tcp +short large.example TYPE45234 >dig.out.$i.test$n 133 diff -s large.out dig.out.$i.test$n >/dev/null || { 134 ret=1 135 echo_i "diff failed" 136 } 137 [ "$ret" -eq 0 ] && break 138 sleep 1 139 done 140 [ $ret = 0 ] || echo_i "failed" 141 status=$((status + ret)) 142 143 n=$((n + 1)) 144 echo_i "checking large unknown record loading on secondary ($n)" 145 for try in 0 1 2 3 4 5 6 7 8 9; do 146 ret=0 147 dig_cmd @10.53.0.2 +tcp +short large.example TYPE45234 >dig.out.$i.test$n 148 diff -s large.out dig.out.$i.test$n >/dev/null || { 149 ret=1 150 echo_i "diff failed" 151 } 152 [ "$ret" -eq 0 ] && break 153 sleep 1 154 done 155 [ $ret = 0 ] || echo_i "failed" 156 status=$((status + ret)) 157 158 echo_i "stop and restart secondary" 159 stop_server ns2 160 start_server --noclean --restart --port ${PORT} ns2 161 162 # server may be answering queries before zones are loaded, 163 # so retry a few times if this query fails 164 n=$((n + 1)) 165 echo_i "checking large unknown record loading on secondary ($n)" 166 for try in 0 1 2 3 4 5 6 7 8 9; do 167 ret=0 168 dig_cmd @10.53.0.2 +tcp +short large.example TYPE45234 >dig.out.$i.test$n 169 diff -s large.out dig.out.$i.test$n >/dev/null || { 170 ret=1 171 echo_i "diff failed" 172 } 173 [ "$ret" -eq 0 ] && break 174 sleep 1 175 done 176 [ $ret = 0 ] || echo_i "failed" 177 status=$((status + ret)) 178 179 n=$((n + 1)) 180 echo_i "checking large unknown record loading on inline secondary ($n)" 181 ret=0 182 dig_cmd @10.53.0.3 +tcp +short large.example TYPE45234 >dig.out.test$n 183 diff large.out dig.out.test$n >/dev/null || { 184 ret=1 185 echo_i "diff failed" 186 } 187 [ $ret = 0 ] || echo_i "failed" 188 status=$((status + ret)) 189 190 echo_i "stop and restart inline secondary" 191 stop_server ns3 192 start_server --noclean --restart --port ${PORT} ns3 193 194 # server may be answering queries before zones are loaded, 195 # so retry a few times if this query fails 196 n=$((n + 1)) 197 echo_i "checking large unknown record loading on inline secondary ($n)" 198 for try in 0 1 2 3 4 5 6 7 8 9; do 199 ret=0 200 dig_cmd @10.53.0.3 +tcp +short large.example TYPE45234 >dig.out.$i.test$n 201 diff large.out dig.out.$i.test$n >/dev/null || { 202 ret=1 203 echo_i "diff failed" 204 } 205 [ "$ret" -eq 0 ] && break 206 sleep 1 207 done 208 [ $ret = 0 ] || echo_i "failed" 209 status=$((status + ret)) 210 211 n=$((n + 1)) 212 echo_i "check that '"'"\\#"'"' is not treated as the unknown escape sequence ($n)" 213 ret=0 214 dig_cmd @10.53.0.1 +tcp +short txt8.example txt >dig.out.test$n 215 echo '"#" "2" "0145"' | diff - dig.out.test$n || ret=1 216 [ $ret = 0 ] || echo_i "failed" 217 status=$((status + ret)) 218 219 n=$((n + 1)) 220 echo_i "check that 'TXT \# text' is not treated as the unknown escape sequence ($n)" 221 ret=0 222 dig_cmd @10.53.0.1 +tcp +short txt9.example txt >dig.out.test$n 223 echo '"#" "text"' | diff - dig.out.test$n || ret=1 224 [ $ret = 0 ] || echo_i "failed" 225 status=$((status + ret)) 226 227 n=$((n + 1)) 228 echo_i "check that 'TYPE353 \# cat' produces 'not a valid number' ($n)" 229 ret=0 230 $CHECKZONE nan.bad zones/nan.bad >check.out 2>&1 && ret=1 231 grep "not a valid number" check.out >/dev/null || ret=1 232 [ $ret = 0 ] || echo_i "failed" 233 status=$((status + ret)) 234 235 echo_i "exit status: $status" 236 [ $status -eq 0 ] || exit 1 237