1 1.1 christos #!/bin/sh 2 1.1.1.6 christos 3 1.1 christos # Copyright (C) Internet Systems Consortium, Inc. ("ISC") 4 1.1 christos # 5 1.1.1.6 christos # SPDX-License-Identifier: MPL-2.0 6 1.1.1.6 christos # 7 1.1 christos # This Source Code Form is subject to the terms of the Mozilla Public 8 1.1.1.6 christos # License, v. 2.0. If a copy of the MPL was not distributed with this 9 1.1.1.5 christos # file, you can obtain one at https://mozilla.org/MPL/2.0/. 10 1.1 christos # 11 1.1 christos # See the COPYRIGHT file distributed with this work for additional 12 1.1 christos # information regarding copyright ownership. 13 1.1 christos 14 1.1.1.7 christos # set -e 15 1.1.1.7 christos # 16 1.1.1.3 christos # shellcheck source=conf.sh 17 1.1.1.7 christos . ../conf.sh 18 1.1.1.7 christos 19 1.1.1.7 christos RNDCCMD="$RNDC -c ../_common/rndc.conf -p ${CONTROLPORT} -s" 20 1.1.1.3 christos 21 1.1.1.3 christos set -e 22 1.1 christos 23 1.1 christos status=0 24 1.1 christos n=1 25 1.1.1.7 christos synth_default=yes 26 1.1 christos 27 1.1 christos rm -f dig.out.* 28 1.1 christos 29 1.1.1.3 christos dig_with_opts() { 30 1.1.1.7 christos "$DIG" +tcp +noadd +nosea +nostat +nocmd +dnssec -p "$PORT" "$@" 31 1.1.1.3 christos } 32 1.1 christos 33 1.1.1.7 christos check_ad_flag() { 34 1.1.1.7 christos if [ ${1} = yes ]; then 35 1.1.1.7 christos grep "flags:[^;]* ad[^;]*; QUERY" ${2} >/dev/null || return 1 36 1.1.1.7 christos else 37 1.1.1.7 christos grep "flags:[^;]* ad[^;]*; QUERY" ${2} >/dev/null && return 1 38 1.1.1.7 christos fi 39 1.1.1.7 christos return 0 40 1.1.1.7 christos } 41 1.1 christos 42 1.1.1.7 christos check_status() { 43 1.1.1.7 christos grep "status: ${1}," ${2} >/dev/null || return 1 44 1.1.1.7 christos return 0 45 1.1.1.7 christos } 46 1.1 christos 47 1.1.1.7 christos check_synth_soa() ( 48 1.1.1.7 christos name=$(echo "$1" | sed 's/\./\\./g') 49 1.1.1.7 christos grep "^${name}.*[0-9]*.IN.SOA" ${2} >/dev/null || return 1 50 1.1.1.7 christos grep "^${name}.*3600.IN.SOA" ${2} >/dev/null && return 1 51 1.1.1.7 christos return 0 52 1.1.1.7 christos ) 53 1.1.1.7 christos 54 1.1.1.7 christos check_nosynth_soa() ( 55 1.1.1.7 christos name=$(echo "$1" | sed 's/\./\\./g') 56 1.1.1.7 christos grep "^${name}.*3600.IN.SOA" ${2} >/dev/null || return 1 57 1.1.1.7 christos return 0 58 1.1.1.7 christos ) 59 1.1.1.7 christos 60 1.1.1.7 christos check_synth_a() ( 61 1.1.1.7 christos name=$(echo "$1" | sed 's/\./\\./g') 62 1.1.1.7 christos grep "^${name}.*[0-9]*.IN.A.[0-2]" ${2} >/dev/null || return 1 63 1.1.1.7 christos grep "^${name}.*3600.IN.A.[0-2]" ${2} >/dev/null && return 1 64 1.1.1.7 christos return 0 65 1.1.1.7 christos ) 66 1.1.1.7 christos 67 1.1.1.7 christos check_nosynth_a() ( 68 1.1.1.7 christos name=$(echo "$1" | sed 's/\./\\./g') 69 1.1.1.7 christos grep "^${name}.*3600.IN.A.[0-2]" ${2} >/dev/null || return 1 70 1.1.1.7 christos return 0 71 1.1.1.7 christos ) 72 1.1.1.7 christos 73 1.1.1.7 christos check_synth_aaaa() ( 74 1.1.1.7 christos name=$(echo "$1" | sed 's/\./\\./g') 75 1.1.1.7 christos grep "^${name}.*[0-9]*.IN.AAAA" ${2} >/dev/null || return 1 76 1.1.1.7 christos grep "^${name}.*3600.IN.A" ${2} >/dev/null && return 1 77 1.1.1.7 christos return 0 78 1.1.1.7 christos ) 79 1.1.1.7 christos 80 1.1.1.7 christos check_nosynth_aaaa() ( 81 1.1.1.7 christos name=$(echo "$1" | sed 's/\./\\./g') 82 1.1.1.7 christos grep "^${name}.*3600.IN.AAAA" ${2} >/dev/null || return 1 83 1.1.1.7 christos return 0 84 1.1.1.7 christos ) 85 1.1.1.7 christos 86 1.1.1.7 christos check_synth_cname() ( 87 1.1.1.7 christos name=$(echo "$1" | sed 's/\./\\./g') 88 1.1.1.7 christos grep "^${name}.*[0-9]*.IN.CNAME" ${2} >/dev/null || return 1 89 1.1.1.7 christos grep "^${name}.*3600.IN.CNAME" ${2} >/dev/null && return 1 90 1.1.1.7 christos return 0 91 1.1.1.7 christos ) 92 1.1.1.7 christos 93 1.1.1.7 christos check_nosynth_cname() ( 94 1.1.1.7 christos name=$(echo "$1" | sed 's/\./\\./g') 95 1.1.1.7 christos grep "^${name}.*3600.IN.CNAME" ${2} >/dev/null || return 1 96 1.1.1.7 christos return 0 97 1.1.1.7 christos ) 98 1.1.1.7 christos 99 1.1.1.7 christos check_auth_count() { 100 1.1.1.7 christos grep "AUTHORITY: ${1}," ${2} >/dev/null || return 1 101 1.1.1.7 christos return 0 102 1.1.1.7 christos } 103 1.1.1.7 christos 104 1.1.1.7 christos for ns in 2 4 5 6; do 105 1.1.1.7 christos case $ns in 106 1.1.1.7 christos 2) 107 1.1.1.7 christos ad=yes 108 1.1.1.7 christos description="<default>" 109 1.1.1.7 christos ;; 110 1.1.1.7 christos 4) 111 1.1.1.7 christos ad=yes 112 1.1.1.7 christos description="no" 113 1.1.1.7 christos ;; 114 1.1.1.7 christos 5) 115 1.1.1.7 christos ad=yes 116 1.1.1.7 christos description="yes" 117 1.1.1.7 christos ;; 118 1.1.1.7 christos 6) 119 1.1.1.7 christos ad=no 120 1.1.1.7 christos description="yes; dnssec-validation no" 121 1.1.1.7 christos ;; 122 1.1.1.7 christos *) exit 1 ;; 123 1.1.1.7 christos esac 124 1.1.1.7 christos echo_i "prime negative NXDOMAIN response (synth-from-dnssec ${description};) ($n)" 125 1.1.1.7 christos ret=0 126 1.1.1.7 christos dig_with_opts a.example. @10.53.0.${ns} a >dig.out.ns${ns}.test$n || ret=1 127 1.1.1.7 christos check_ad_flag $ad dig.out.ns${ns}.test$n || ret=1 128 1.1.1.7 christos check_status NXDOMAIN dig.out.ns${ns}.test$n || ret=1 129 1.1.1.7 christos check_nosynth_soa example. dig.out.ns${ns}.test$n || ret=1 130 1.1.1.7 christos [ $ns -eq 2 ] && cp dig.out.ns${ns}.test$n nxdomain.out 131 1.1.1.7 christos n=$((n + 1)) 132 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 133 1.1.1.7 christos status=$((status + ret)) 134 1.1.1.7 christos 135 1.1.1.8 christos echo_i "prime negative NXDOMAIN response no-apex-covering (synth-from-dnssec ${description};) ($n)" 136 1.1.1.8 christos ret=0 137 1.1.1.8 christos dig_with_opts a.no-apex-covering. @10.53.0.${ns} a >dig.out.ns${ns}.test$n || ret=1 138 1.1.1.8 christos check_ad_flag $ad dig.out.ns${ns}.test$n || ret=1 139 1.1.1.8 christos check_status NXDOMAIN dig.out.ns${ns}.test$n || ret=1 140 1.1.1.8 christos check_nosynth_soa no-apex-covering. dig.out.ns${ns}.test$n || ret=1 141 1.1.1.8 christos [ $ns -eq 2 ] && cp dig.out.ns${ns}.test$n no-apex-covering.out 142 1.1.1.8 christos n=$((n + 1)) 143 1.1.1.8 christos if [ $ret != 0 ]; then echo_i "failed"; fi 144 1.1.1.8 christos status=$((status + ret)) 145 1.1.1.8 christos 146 1.1.1.7 christos echo_i "prime negative NODATA response (synth-from-dnssec ${description};) ($n)" 147 1.1.1.7 christos ret=0 148 1.1.1.7 christos dig_with_opts nodata.example. @10.53.0.${ns} a >dig.out.ns${ns}.test$n || ret=1 149 1.1.1.7 christos check_ad_flag $ad dig.out.ns${ns}.test$n || ret=1 150 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 151 1.1.1.7 christos check_nosynth_soa example. dig.out.ns${ns}.test$n || ret=1 152 1.1.1.7 christos [ $ns -eq 2 ] && cp dig.out.ns${ns}.test$n nodata.out 153 1.1.1.7 christos n=$((n + 1)) 154 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 155 1.1.1.7 christos status=$((status + ret)) 156 1.1.1.7 christos 157 1.1.1.7 christos echo_i "prime wildcard response (synth-from-dnssec ${description};) ($n)" 158 1.1.1.7 christos ret=0 159 1.1.1.7 christos dig_with_opts a.wild-a.example. @10.53.0.${ns} a >dig.out.ns${ns}.test$n || ret=1 160 1.1.1.7 christos check_ad_flag $ad dig.out.ns${ns}.test$n || ret=1 161 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 162 1.1.1.7 christos check_nosynth_a a.wild-a.example. dig.out.ns${ns}.test$n || ret=1 163 1.1.1.7 christos [ $ns -eq 2 ] && sed 's/^a\./b./' dig.out.ns${ns}.test$n >wild.out 164 1.1.1.7 christos n=$((n + 1)) 165 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 166 1.1.1.7 christos status=$((status + ret)) 167 1.1.1.7 christos 168 1.1.1.7 christos echo_i "prime wildcard CNAME response (synth-from-dnssec ${description};) ($n)" 169 1.1.1.7 christos ret=0 170 1.1.1.7 christos dig_with_opts a.wild-cname.example. @10.53.0.${ns} a >dig.out.ns${ns}.test$n || ret=1 171 1.1.1.7 christos check_ad_flag $ad dig.out.ns${ns}.test$n || ret=1 172 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 173 1.1.1.7 christos check_nosynth_cname a.wild-cname.example. dig.out.ns${ns}.test$n || ret=1 174 1.1.1.7 christos [ $ns -eq 2 ] && sed 's/^a\./b./' dig.out.ns${ns}.test$n >wildcname.out 175 1.1.1.7 christos n=$((n + 1)) 176 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 177 1.1.1.7 christos status=$((status + ret)) 178 1.1.1.7 christos 179 1.1.1.7 christos echo_i "prime wildcard NODATA 1 NSEC response (synth-from-dnssec ${description};) ($n)" 180 1.1.1.7 christos ret=0 181 1.1.1.7 christos dig_with_opts a.wild-1-nsec.example. @10.53.0.${ns} TXT >dig.out.ns${ns}.test$n || ret=1 182 1.1.1.7 christos check_ad_flag $ad dig.out.ns${ns}.test$n || ret=1 183 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 184 1.1.1.7 christos check_nosynth_soa example. dig.out.ns${ns}.test$n || ret=1 185 1.1.1.7 christos check_auth_count 4 dig.out.ns${ns}.test$n || ret=1 186 1.1.1.7 christos [ $ns -eq 2 ] && sed 's/^a\./b./' dig.out.ns${ns}.test$n >wildnodata1nsec.out 187 1.1.1.7 christos n=$((n + 1)) 188 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 189 1.1.1.7 christos status=$((status + ret)) 190 1.1.1.7 christos 191 1.1.1.7 christos echo_i "prime wildcard NODATA 2 NSEC response (synth-from-dnssec ${description};) ($n)" 192 1.1.1.7 christos ret=0 193 1.1.1.7 christos dig_with_opts a.wild-2-nsec.example. @10.53.0.${ns} TXT >dig.out.ns${ns}.test$n || ret=1 194 1.1.1.7 christos check_ad_flag $ad dig.out.ns${ns}.test$n || ret=1 195 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 196 1.1.1.7 christos check_nosynth_soa example. dig.out.ns${ns}.test$n || ret=1 197 1.1.1.7 christos check_auth_count 6 dig.out.ns${ns}.test$n || ret=1 198 1.1.1.7 christos [ $ns -eq 2 ] && sed 's/^a\./b./' dig.out.ns${ns}.test$n >wildnodata2nsec.out 199 1.1.1.7 christos n=$((n + 1)) 200 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 201 1.1.1.7 christos status=$((status + ret)) 202 1.1.1.7 christos 203 1.1.1.7 christos echo_i "prime wildcard NODATA 2 NSEC after data response (synth-from-dnssec ${description};) ($n)" 204 1.1.1.7 christos ret=0 205 1.1.1.7 christos dig_with_opts a.wild-2-nsec-afterdata.example. @10.53.0.${ns} TXT >dig.out.txt.ns${ns}.test$n || ret=1 206 1.1.1.7 christos check_ad_flag $ad dig.out.txt.ns${ns}.test$n || ret=1 207 1.1.1.7 christos check_status NOERROR dig.out.txt.ns${ns}.test$n || ret=1 208 1.1.1.7 christos check_nosynth_soa example. dig.out.txt.ns${ns}.test$n || ret=1 209 1.1.1.7 christos check_auth_count 6 dig.out.txt.ns${ns}.test$n || ret=1 210 1.1.1.7 christos [ $ns -eq 2 ] && sed 's/^a\./b./' dig.out.txt.ns${ns}.test$n >wildnodata2nsecafterdata.out 211 1.1.1.7 christos n=$((n + 1)) 212 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 213 1.1.1.7 christos status=$((status + ret)) 214 1.1.1.7 christos 215 1.1.1.7 christos echo_i "prime insecure negative NXDOMAIN response (synth-from-dnssec ${description};) ($n)" 216 1.1.1.7 christos ret=0 217 1.1.1.7 christos dig_with_opts a.insecure.example. @10.53.0.${ns} a >dig.out.ns${ns}.test$n || ret=1 218 1.1.1.7 christos check_ad_flag no dig.out.ns${ns}.test$n || ret=1 219 1.1.1.7 christos check_status NXDOMAIN dig.out.ns${ns}.test$n || ret=1 220 1.1.1.7 christos check_nosynth_soa insecure.example. dig.out.ns${ns}.test$n || ret=1 221 1.1.1.7 christos [ $ns -eq 2 ] && cp dig.out.ns${ns}.test$n insecure.nxdomain.out 222 1.1.1.7 christos n=$((n + 1)) 223 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 224 1.1.1.7 christos status=$((status + ret)) 225 1.1.1.7 christos 226 1.1.1.7 christos echo_i "prime insecure negative NODATA response (synth-from-dnssec ${description};) ($n)" 227 1.1.1.7 christos ret=0 228 1.1.1.7 christos dig_with_opts nodata.insecure.example. @10.53.0.${ns} a >dig.out.ns${ns}.test$n || ret=1 229 1.1.1.7 christos check_ad_flag no dig.out.ns${ns}.test$n || ret=1 230 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 231 1.1.1.7 christos check_nosynth_soa insecure.example. dig.out.ns${ns}.test$n || ret=1 232 1.1.1.7 christos [ $ns -eq 2 ] && cp dig.out.ns${ns}.test$n insecure.nodata.out 233 1.1.1.7 christos n=$((n + 1)) 234 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 235 1.1.1.7 christos status=$((status + ret)) 236 1.1.1.7 christos 237 1.1.1.7 christos echo_i "prime insecure wildcard response (synth-from-dnssec ${description};) ($n)" 238 1.1.1.7 christos ret=0 239 1.1.1.7 christos dig_with_opts a.wild-a.insecure.example. @10.53.0.${ns} a >dig.out.ns${ns}.test$n || ret=1 240 1.1.1.7 christos check_ad_flag no dig.out.ns${ns}.test$n || ret=1 241 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 242 1.1.1.7 christos check_nosynth_a a.wild-a.insecure.example. dig.out.ns${ns}.test$n || ret=1 243 1.1.1.7 christos [ $ns -eq 2 ] && sed 's/^a\./b./' dig.out.ns${ns}.test$n >insecure.wild.out 244 1.1.1.7 christos n=$((n + 1)) 245 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 246 1.1.1.7 christos status=$((status + ret)) 247 1.1.1.7 christos 248 1.1.1.7 christos echo_i "prime wildcard CNAME response (synth-from-dnssec ${description};) ($n)" 249 1.1.1.7 christos ret=0 250 1.1.1.7 christos dig_with_opts a.wild-cname.insecure.example. @10.53.0.${ns} a >dig.out.ns${ns}.test$n || ret=1 251 1.1.1.7 christos check_ad_flag no dig.out.ns${ns}.test$n || ret=1 252 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 253 1.1.1.7 christos check_nosynth_cname a.wild-cname.insecure.example. dig.out.ns${ns}.test$n || ret=1 254 1.1.1.7 christos [ $ns -eq 2 ] && sed 's/^a\./b./' dig.out.ns${ns}.test$n >insecure.wildcname.out 255 1.1.1.7 christos n=$((n + 1)) 256 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 257 1.1.1.7 christos status=$((status + ret)) 258 1.1.1.7 christos 259 1.1.1.7 christos echo_i "prime insecure wildcard NODATA 1 NSEC response (synth-from-dnssec ${description};) ($n)" 260 1.1.1.7 christos ret=0 261 1.1.1.7 christos dig_with_opts a.wild-1-nsec.insecure.example. @10.53.0.${ns} TXT >dig.out.ns${ns}.test$n || ret=1 262 1.1.1.7 christos check_ad_flag no dig.out.ns${ns}.test$n || ret=1 263 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 264 1.1.1.7 christos check_nosynth_soa insecure.example. dig.out.ns${ns}.test$n || ret=1 265 1.1.1.7 christos check_auth_count 4 dig.out.ns${ns}.test$n || ret=1 266 1.1.1.7 christos [ $ns -eq 2 ] && cp dig.out.ns${ns}.test$n insecure.wildnodata1nsec.out 267 1.1.1.7 christos n=$((n + 1)) 268 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 269 1.1.1.7 christos status=$((status + ret)) 270 1.1.1.7 christos 271 1.1.1.7 christos echo_i "prime insecure wildcard NODATA 2 NSEC response (synth-from-dnssec ${description};) ($n)" 272 1.1.1.7 christos ret=0 273 1.1.1.7 christos dig_with_opts a.wild-2-nsec.insecure.example. @10.53.0.${ns} TXT >dig.out.ns${ns}.test$n || ret=1 274 1.1.1.7 christos check_ad_flag no dig.out.ns${ns}.test$n || ret=1 275 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 276 1.1.1.7 christos check_nosynth_soa insecure.example. dig.out.ns${ns}.test$n || ret=1 277 1.1.1.7 christos check_auth_count 6 dig.out.ns${ns}.test$n || ret=1 278 1.1.1.7 christos [ $ns -eq 2 ] && cp dig.out.ns${ns}.test$n insecure.wildnodata2nsec.out 279 1.1.1.7 christos n=$((n + 1)) 280 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 281 1.1.1.7 christos status=$((status + ret)) 282 1.1.1.7 christos 283 1.1.1.7 christos echo_i "prime insecure wildcard NODATA 2 NSEC after data response (synth-from-dnssec ${description};) ($n)" 284 1.1.1.7 christos ret=0 285 1.1.1.7 christos dig_with_opts a.wild-2-nsec-afterdata.insecure.example. @10.53.0.${ns} TXT >dig.out.txt.ns${ns}.test$n || ret=1 286 1.1.1.7 christos check_ad_flag no dig.out.txt.ns${ns}.test$n || ret=1 287 1.1.1.7 christos check_status NOERROR dig.out.txt.ns${ns}.test$n || ret=1 288 1.1.1.7 christos check_nosynth_soa insecure.example. dig.out.txt.ns${ns}.test$n || ret=1 289 1.1.1.7 christos check_auth_count 6 dig.out.txt.ns${ns}.test$n || ret=1 290 1.1.1.7 christos [ $ns -eq 2 ] && sed 's/^a\./b./' dig.out.txt.ns${ns}.test$n >insecure.wildnodata2nsecafterdata.out 291 1.1.1.7 christos n=$((n + 1)) 292 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 293 1.1.1.7 christos status=$((status + ret)) 294 1.1.1.7 christos 295 1.1.1.7 christos echo_i "prime minimal NXDOMAIN response (synth-from-dnssec ${description};) ($n)" 296 1.1.1.7 christos ret=0 297 1.1.1.7 christos dig_with_opts nxdomain.minimal. @10.53.0.${ns} a >dig.out.ns${ns}.test$n || ret=1 298 1.1.1.7 christos check_ad_flag $ad dig.out.ns${ns}.test$n || ret=1 299 1.1.1.7 christos check_status NXDOMAIN dig.out.ns${ns}.test$n || ret=1 300 1.1.1.7 christos check_nosynth_soa minimal. dig.out.ns${ns}.test$n || ret=1 301 1.1.1.7 christos grep "nxdomaia.minimal.*3600.IN.NSEC.nxdomaiz.minimal. RRSIG NSEC" dig.out.ns${ns}.test$n >/dev/null || ret=1 302 1.1.1.7 christos [ $ns -eq 2 ] && cp dig.out.ns${ns}.test$n minimal.nxdomain.out 303 1.1.1.7 christos n=$((n + 1)) 304 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 305 1.1.1.7 christos status=$((status + ret)) 306 1.1.1.7 christos 307 1.1.1.7 christos echo_i "prime black lie NODATA response (synth-from-dnssec ${description};) ($n)" 308 1.1.1.7 christos ret=0 309 1.1.1.7 christos dig_with_opts black.minimal. @10.53.0.${ns} a >dig.out.ns${ns}.test$n || ret=1 310 1.1.1.7 christos check_ad_flag $ad dig.out.ns${ns}.test$n || ret=1 311 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 312 1.1.1.7 christos check_nosynth_soa minimal. dig.out.ns${ns}.test$n || ret=1 313 1.1.1.7 christos grep 'black.minimal.*3600.IN.NSEC.\\000.black.minimal. RRSIG NSEC' dig.out.ns${ns}.test$n >/dev/null || ret=1 314 1.1.1.7 christos [ $ns -eq 2 ] && cp dig.out.ns${ns}.test$n black.out 315 1.1.1.7 christos n=$((n + 1)) 316 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 317 1.1.1.7 christos status=$((status + ret)) 318 1.1.1.7 christos 319 1.1.1.7 christos echo_i "prime bad type map NODATA response (synth-from-dnssec ${description};) ($n)" 320 1.1.1.7 christos ret=0 321 1.1.1.7 christos dig_with_opts badtypemap.minimal. @10.53.0.${ns} TXT >dig.out.ns${ns}.test$n || ret=1 322 1.1.1.7 christos check_ad_flag $ad dig.out.ns${ns}.test$n || ret=1 323 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 324 1.1.1.7 christos check_nosynth_soa minimal. dig.out.ns${ns}.test$n || ret=1 325 1.1.1.7 christos grep 'badtypemap.minimal.*3600.IN.NSEC.black.minimal. A$' dig.out.ns${ns}.test$n >/dev/null || ret=1 326 1.1.1.7 christos n=$((n + 1)) 327 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 328 1.1.1.7 christos status=$((status + ret)) 329 1.1.1.7 christos 330 1.1.1.7 christos echo_i "prime SOA without DNSKEY bad type map NODATA response (synth-from-dnssec ${description};) ($n)" 331 1.1.1.7 christos ret=0 332 1.1.1.7 christos dig_with_opts soa-without-dnskey. @10.53.0.${ns} TXT >dig.out.ns${ns}.test$n || ret=1 333 1.1.1.7 christos check_ad_flag $ad dig.out.ns${ns}.test$n || ret=1 334 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 335 1.1.1.7 christos check_nosynth_soa soa-without-dnskey. dig.out.ns${ns}.test$n || ret=1 336 1.1.1.7 christos grep 'soa-without-dnskey.*3600.IN.NSEC.ns1.soa-without-dnskey. NS SOA RRSIG NSEC$' dig.out.ns${ns}.test$n >/dev/null || ret=1 337 1.1.1.7 christos n=$((n + 1)) 338 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 339 1.1.1.7 christos status=$((status + ret)) 340 1.1 christos 341 1.1 christos done 342 1.1 christos 343 1.1 christos echo_i "prime redirect response (+nodnssec) (synth-from-dnssec <default>;) ($n)" 344 1.1 christos ret=0 345 1.1.1.7 christos dig_with_opts +nodnssec a.redirect. @10.53.0.3 a >dig.out.ns3.test$n || ret=1 346 1.1.1.7 christos check_ad_flag no dig.out.ns3.test$n || ret=1 347 1.1.1.7 christos check_status NOERROR dig.out.ns3.test$n || ret=1 348 1.1.1.7 christos grep 'a\.redirect\..*300.IN.A.100\.100\.100\.2' dig.out.ns3.test$n >/dev/null || ret=1 349 1.1.1.7 christos n=$((n + 1)) 350 1.1 christos if [ $ret != 0 ]; then echo_i "failed"; fi 351 1.1.1.7 christos status=$((status + ret)) 352 1.1 christos 353 1.1 christos # 354 1.1 christos # ensure TTL of synthesised answers differs from direct answers. 355 1.1 christos # 356 1.1 christos sleep 1 357 1.1 christos 358 1.1.1.7 christos for ns in 2 4 5 6; do 359 1.1.1.7 christos case $ns in 360 1.1.1.7 christos 2) ad=yes synth=${synth_default} description="<default>" ;; 361 1.1.1.7 christos 4) ad=yes synth=no description="no" ;; 362 1.1.1.7 christos 5) ad=yes synth=yes description="yes" ;; 363 1.1.1.7 christos 6) ad=no synth=no description="yes; dnssec-validation no" ;; 364 1.1.1.7 christos *) exit 1 ;; 365 1.1.1.7 christos esac 366 1.1.1.7 christos echo_i "check synthesized NXDOMAIN response (synth-from-dnssec ${description};) ($n)" 367 1.1.1.7 christos ret=0 368 1.1.1.7 christos nextpart ns1/named.run >/dev/null 369 1.1.1.7 christos dig_with_opts b.example. @10.53.0.${ns} a >dig.out.ns${ns}.test$n || ret=1 370 1.1.1.7 christos check_ad_flag $ad dig.out.ns${ns}.test$n || ret=1 371 1.1.1.7 christos check_status NXDOMAIN dig.out.ns${ns}.test$n || ret=1 372 1.1.1.7 christos if [ ${synth} = yes ]; then 373 1.1.1.7 christos check_synth_soa example. dig.out.ns${ns}.test$n || ret=1 374 1.1.1.7 christos nextpart ns1/named.run | grep b.example/A >/dev/null && ret=1 375 1.1.1.7 christos else 376 1.1.1.7 christos check_nosynth_soa example. dig.out.ns${ns}.test$n || ret=1 377 1.1.1.7 christos nextpart ns1/named.run | grep b.example/A >/dev/null || ret=1 378 1.1.1.7 christos fi 379 1.1.1.7 christos digcomp nxdomain.out dig.out.ns${ns}.test$n || ret=1 380 1.1.1.7 christos n=$((n + 1)) 381 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 382 1.1.1.7 christos status=$((status + ret)) 383 1.1.1.7 christos 384 1.1.1.8 christos echo_i "check synthesized NXDOMAIN response no-apex-covering (synth-from-dnssec ${description};) ($n)" 385 1.1.1.8 christos ret=0 386 1.1.1.8 christos nextpart ns1/named.run >/dev/null 387 1.1.1.8 christos dig_with_opts b.no-apex-covering. @10.53.0.${ns} a >dig.out.ns${ns}.test$n || ret=1 388 1.1.1.8 christos check_ad_flag $ad dig.out.ns${ns}.test$n || ret=1 389 1.1.1.8 christos check_status NXDOMAIN dig.out.ns${ns}.test$n || ret=1 390 1.1.1.8 christos if [ ${synth} = yes ]; then 391 1.1.1.8 christos check_synth_soa no-apex-covering. dig.out.ns${ns}.test$n || ret=1 392 1.1.1.8 christos nextpart ns1/named.run | grep b.no-apex-covering/A >/dev/null && ret=1 393 1.1.1.8 christos else 394 1.1.1.8 christos check_nosynth_soa no-apex-covering. dig.out.ns${ns}.test$n || ret=1 395 1.1.1.8 christos nextpart ns1/named.run | grep b.no-apex-covering/A >/dev/null || ret=1 396 1.1.1.8 christos fi 397 1.1.1.8 christos digcomp no-apex-covering.out dig.out.ns${ns}.test$n || ret=1 398 1.1.1.8 christos n=$((n + 1)) 399 1.1.1.8 christos if [ $ret != 0 ]; then echo_i "failed"; fi 400 1.1.1.8 christos status=$((status + ret)) 401 1.1.1.8 christos 402 1.1.1.7 christos echo_i "check synthesized NODATA response (synth-from-dnssec ${description};) ($n)" 403 1.1.1.7 christos ret=0 404 1.1.1.7 christos nextpart ns1/named.run >/dev/null 405 1.1.1.7 christos dig_with_opts nodata.example. @10.53.0.${ns} aaaa >dig.out.ns${ns}.test$n || ret=1 406 1.1.1.7 christos check_ad_flag $ad dig.out.ns${ns}.test$n || ret=1 407 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 408 1.1.1.7 christos if [ ${synth} = yes ]; then 409 1.1.1.7 christos check_synth_soa example. dig.out.ns${ns}.test$n || ret=1 410 1.1.1.7 christos nextpart ns1/named.run | grep nodata.example/AAAA >/dev/null && ret=1 411 1.1.1.7 christos else 412 1.1.1.7 christos check_nosynth_soa example. dig.out.ns${ns}.test$n || ret=1 413 1.1.1.7 christos nextpart ns1/named.run | grep nodata.example/AAAA >/dev/null || ret=1 414 1.1.1.7 christos fi 415 1.1.1.7 christos digcomp nodata.out dig.out.ns${ns}.test$n || ret=1 416 1.1.1.7 christos n=$((n + 1)) 417 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 418 1.1.1.7 christos status=$((status + ret)) 419 1.1.1.7 christos 420 1.1.1.7 christos echo_i "check synthesized wildcard response (synth-from-dnssec ${description};) ($n)" 421 1.1.1.7 christos ret=0 422 1.1.1.7 christos nextpart ns1/named.run >/dev/null 423 1.1.1.7 christos dig_with_opts b.wild-a.example. @10.53.0.${ns} a >dig.out.ns${ns}.test$n || ret=1 424 1.1.1.7 christos check_ad_flag $ad dig.out.ns${ns}.test$n || ret=1 425 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 426 1.1.1.7 christos if [ ${synth} = yes ]; then 427 1.1.1.7 christos check_synth_a b.wild-a.example. dig.out.ns${ns}.test$n || ret=1 428 1.1.1.7 christos nextpart ns1/named.run | grep b.wild-a.example/A >/dev/null && ret=1 429 1.1.1.7 christos else 430 1.1.1.7 christos check_nosynth_a b.wild-a.example. dig.out.ns${ns}.test$n || ret=1 431 1.1.1.7 christos nextpart ns1/named.run | grep b.wild-a.example/A >/dev/null || ret=1 432 1.1.1.7 christos fi 433 1.1.1.7 christos digcomp wild.out dig.out.ns${ns}.test$n || ret=1 434 1.1.1.7 christos n=$((n + 1)) 435 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 436 1.1.1.7 christos status=$((status + ret)) 437 1.1.1.7 christos 438 1.1.1.7 christos echo_i "check synthesized wildcard CNAME response (synth-from-dnssec ${description};) ($n)" 439 1.1.1.7 christos ret=0 440 1.1.1.7 christos nextpart ns1/named.run >/dev/null 441 1.1.1.7 christos dig_with_opts b.wild-cname.example. @10.53.0.${ns} a >dig.out.ns${ns}.test$n || ret=1 442 1.1.1.7 christos check_ad_flag $ad dig.out.ns${ns}.test$n || ret=1 443 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 444 1.1.1.7 christos if [ ${synth} = yes ]; then 445 1.1.1.7 christos check_synth_cname b.wild-cname.example. dig.out.ns${ns}.test$n || ret=1 446 1.1.1.7 christos nextpart ns1/named.run | grep b.wild-cname.example/A >/dev/null && ret=1 447 1.1.1.7 christos else 448 1.1.1.7 christos check_nosynth_cname b.wild-cname.example. dig.out.ns${ns}.test$n || ret=1 449 1.1.1.7 christos nextpart ns1/named.run | grep b.wild-cname.example/A >/dev/null || ret=1 450 1.1.1.7 christos fi 451 1.1.1.7 christos grep "ns1.example.*.IN.A" dig.out.ns${ns}.test$n >/dev/null || ret=1 452 1.1.1.7 christos digcomp wildcname.out dig.out.ns${ns}.test$n || ret=1 453 1.1.1.7 christos n=$((n + 1)) 454 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 455 1.1.1.7 christos status=$((status + ret)) 456 1.1.1.7 christos 457 1.1.1.7 christos echo_i "check synthesized wildcard NODATA 1 NSEC response (synth-from-dnssec ${description};) ($n)" 458 1.1.1.7 christos ret=0 459 1.1.1.7 christos nextpart ns1/named.run >/dev/null 460 1.1.1.7 christos dig_with_opts b.wild-1-nsec.example. @10.53.0.${ns} AAAA >dig.out.ns${ns}.test$n || ret=1 461 1.1.1.7 christos check_ad_flag $ad dig.out.ns${ns}.test$n || ret=1 462 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 463 1.1.1.7 christos if [ ${synth} = yes ]; then 464 1.1.1.7 christos check_synth_soa example. dig.out.ns${ns}.test$n || ret=1 465 1.1.1.7 christos nextpart ns1/named.run | grep b.wild-1-nsec.example/AAAA >/dev/null && ret=1 466 1.1.1.7 christos else 467 1.1.1.7 christos check_nosynth_soa example. dig.out.ns${ns}.test$n || ret=1 468 1.1.1.7 christos nextpart ns1/named.run | grep b.wild-1-nsec.example/AAAA >/dev/null || ret=1 469 1.1.1.7 christos fi 470 1.1.1.7 christos digcomp wildnodata1nsec.out dig.out.ns${ns}.test$n || ret=1 471 1.1.1.7 christos n=$((n + 1)) 472 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 473 1.1.1.7 christos status=$((status + ret)) 474 1.1.1.7 christos 475 1.1.1.7 christos echo_i "check synthesized wildcard NODATA 2 NSEC response (synth-from-dnssec ${description};) ($n)" 476 1.1.1.7 christos ret=0 477 1.1.1.7 christos nextpart ns1/named.run >/dev/null 478 1.1.1.7 christos dig_with_opts b.wild-2-nsec.example. @10.53.0.${ns} AAAA >dig.out.ns${ns}.test$n || ret=1 479 1.1.1.7 christos check_ad_flag $ad dig.out.ns${ns}.test$n || ret=1 480 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 481 1.1.1.7 christos if [ ${synth} = yes ]; then 482 1.1.1.7 christos check_synth_soa example. dig.out.ns${ns}.test$n || ret=1 483 1.1.1.7 christos nextpart ns1/named.run | grep b.wild-2-nsec.example/AAAA >/dev/null && ret=1 484 1.1.1.7 christos else 485 1.1.1.7 christos check_nosynth_soa example. dig.out.ns${ns}.test$n || ret=1 486 1.1.1.7 christos nextpart ns1/named.run | grep b.wild-2-nsec.example/AAAA >/dev/null || ret=1 487 1.1.1.7 christos fi 488 1.1.1.7 christos digcomp wildnodata2nsec.out dig.out.ns${ns}.test$n || ret=1 489 1.1.1.7 christos n=$((n + 1)) 490 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 491 1.1.1.7 christos status=$((status + ret)) 492 1.1.1.7 christos 493 1.1.1.7 christos echo_i "check synthesized wildcard NODATA 2 NSEC after data response (synth-from-dnssec ${description};) ($n)" 494 1.1.1.7 christos ret=0 495 1.1.1.7 christos # Use AAAA to avoid cached qname minimisation _.wild-2-nsec-afterdata.example A record 496 1.1.1.7 christos dig_with_opts b.wild-2-nsec-afterdata.example. @10.53.0.${ns} AAAA >dig.out.a.ns${ns}.test$n || ret=1 497 1.1.1.7 christos check_ad_flag $ad dig.out.a.ns${ns}.test$n || ret=1 498 1.1.1.7 christos check_status NOERROR dig.out.a.ns${ns}.test$n || ret=1 499 1.1.1.7 christos check_nosynth_aaaa b.wild-2-nsec-afterdata.example. dig.out.a.ns${ns}.test$n || ret=1 500 1.1.1.7 christos # 501 1.1.1.7 christos nextpart ns1/named.run >/dev/null 502 1.1.1.7 christos dig_with_opts b.wild-2-nsec-afterdata.example. @10.53.0.${ns} TLSA >dig.out.ns${ns}.test$n || ret=1 503 1.1.1.7 christos check_ad_flag $ad dig.out.ns${ns}.test$n || ret=1 504 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 505 1.1.1.7 christos if [ ${synth} = yes ]; then 506 1.1.1.7 christos check_synth_soa example. dig.out.ns${ns}.test$n || ret=1 507 1.1.1.7 christos nextpart ns1/named.run | grep b.wild-2-nsec-afterdata.example/TLSA >/dev/null && ret=1 508 1.1.1.7 christos else 509 1.1.1.7 christos check_nosynth_soa example. dig.out.ns${ns}.test$n || ret=1 510 1.1.1.7 christos nextpart ns1/named.run | grep b.wild-2-nsec-afterdata.example/TLSA >/dev/null || ret=1 511 1.1.1.7 christos fi 512 1.1.1.7 christos digcomp wildnodata2nsecafterdata.out dig.out.ns${ns}.test$n || ret=1 513 1.1.1.7 christos n=$((n + 1)) 514 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 515 1.1.1.7 christos status=$((status + ret)) 516 1.1.1.7 christos 517 1.1.1.7 christos echo_i "check insecure NXDOMAIN response (synth-from-dnssec ${description};) ($n)" 518 1.1.1.7 christos ret=0 519 1.1.1.7 christos nextpart ns1/named.run >/dev/null 520 1.1.1.7 christos dig_with_opts b.insecure.example. @10.53.0.${ns} a >dig.out.ns${ns}.test$n || ret=1 521 1.1.1.7 christos check_ad_flag no dig.out.ns${ns}.test$n || ret=1 522 1.1.1.7 christos check_status NXDOMAIN dig.out.ns${ns}.test$n || ret=1 523 1.1.1.7 christos check_nosynth_soa insecure.example. dig.out.ns${ns}.test$n || ret=1 524 1.1.1.7 christos nextpart ns1/named.run | grep b.insecure.example/A >/dev/null || ret=1 525 1.1.1.7 christos digcomp insecure.nxdomain.out dig.out.ns${ns}.test$n || ret=1 526 1.1.1.7 christos n=$((n + 1)) 527 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 528 1.1.1.7 christos status=$((status + ret)) 529 1.1.1.7 christos 530 1.1.1.7 christos echo_i "check insecure NODATA response (synth-from-dnssec ${description};) ($n)" 531 1.1.1.7 christos ret=0 532 1.1.1.7 christos nextpart ns1/named.run >/dev/null 533 1.1.1.7 christos dig_with_opts nodata.insecure.example. @10.53.0.${ns} aaaa >dig.out.ns${ns}.test$n || ret=1 534 1.1.1.7 christos check_ad_flag no dig.out.ns${ns}.test$n || ret=1 535 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 536 1.1.1.7 christos check_nosynth_soa insecure.example. dig.out.ns${ns}.test$n || ret=1 537 1.1.1.7 christos nextpart ns1/named.run | grep nodata.insecure.example/AAAA >/dev/null || ret=1 538 1.1.1.7 christos digcomp insecure.nodata.out dig.out.ns${ns}.test$n || ret=1 539 1.1.1.7 christos n=$((n + 1)) 540 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 541 1.1.1.7 christos status=$((status + ret)) 542 1.1.1.7 christos 543 1.1.1.7 christos echo_i "check insecure wildcard response (synth-from-dnssec ${description};) ($n)" 544 1.1.1.7 christos ret=0 545 1.1.1.7 christos nextpart ns1/named.run >/dev/null 546 1.1.1.7 christos dig_with_opts b.wild-a.insecure.example. @10.53.0.${ns} a >dig.out.ns${ns}.test$n || ret=1 547 1.1.1.7 christos check_ad_flag no dig.out.ns${ns}.test$n || ret=1 548 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 549 1.1.1.7 christos grep "b\.wild-a\.insecure\.example\..*3600.IN.A" dig.out.ns${ns}.test$n >/dev/null || ret=1 550 1.1.1.7 christos nextpart ns1/named.run | grep b.wild-a.insecure.example/A >/dev/null || ret=1 551 1.1.1.7 christos digcomp insecure.wild.out dig.out.ns${ns}.test$n || ret=1 552 1.1.1.7 christos n=$((n + 1)) 553 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 554 1.1.1.7 christos status=$((status + ret)) 555 1.1.1.7 christos 556 1.1.1.7 christos echo_i "check insecure wildcard CNAME response (synth-from-dnssec ${description};) ($n)" 557 1.1.1.7 christos ret=0 558 1.1.1.7 christos nextpart ns1/named.run >/dev/null 559 1.1.1.7 christos dig_with_opts b.wild-cname.insecure.example. @10.53.0.${ns} a >dig.out.ns${ns}.test$n || ret=1 560 1.1.1.7 christos check_ad_flag no dig.out.ns${ns}.test$n || ret=1 561 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 562 1.1.1.7 christos check_nosynth_cname b.wild-cname.insecure.example dig.out.ns${ns}.test$n || ret=1 563 1.1.1.7 christos nextpart ns1/named.run | grep b.wild-cname.insecure.example/A >/dev/null || ret=1 564 1.1.1.7 christos grep "ns1.insecure.example.*.IN.A" dig.out.ns${ns}.test$n >/dev/null || ret=1 565 1.1.1.7 christos digcomp insecure.wildcname.out dig.out.ns${ns}.test$n || ret=1 566 1.1.1.7 christos n=$((n + 1)) 567 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 568 1.1.1.7 christos status=$((status + ret)) 569 1.1.1.7 christos 570 1.1.1.7 christos echo_i "check insecure wildcard NODATA 1 NSEC response (synth-from-dnssec ${description};) ($n)" 571 1.1.1.7 christos ret=0 572 1.1.1.7 christos nextpart ns1/named.run >/dev/null 573 1.1.1.7 christos dig_with_opts b.wild-1-nsec.insecure.example. @10.53.0.${ns} AAAA >dig.out.ns${ns}.test$n || ret=1 574 1.1.1.7 christos check_ad_flag no dig.out.ns${ns}.test$n || ret=1 575 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 576 1.1.1.7 christos check_nosynth_soa insecure.example. dig.out.ns${ns}.test$n || ret=1 577 1.1.1.7 christos digcomp insecure.wildnodata1nsec.out dig.out.ns${ns}.test$n || ret=1 578 1.1.1.7 christos n=$((n + 1)) 579 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 580 1.1.1.7 christos status=$((status + ret)) 581 1.1.1.7 christos 582 1.1.1.7 christos echo_i "check insecure wildcard NODATA 2 NSEC response (synth-from-dnssec ${description};) ($n)" 583 1.1.1.7 christos ret=0 584 1.1.1.7 christos nextpart ns1/named.run >/dev/null 585 1.1.1.7 christos dig_with_opts b.wild-2-nsec.insecure.example. @10.53.0.${ns} AAAA >dig.out.ns${ns}.test$n || ret=1 586 1.1.1.7 christos check_ad_flag no dig.out.ns${ns}.test$n || ret=1 587 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 588 1.1.1.7 christos check_nosynth_soa insecure.example. dig.out.ns${ns}.test$n || ret=1 589 1.1.1.7 christos digcomp insecure.wildnodata2nsec.out dig.out.ns${ns}.test$n || ret=1 590 1.1.1.7 christos n=$((n + 1)) 591 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 592 1.1.1.7 christos status=$((status + ret)) 593 1.1.1.7 christos 594 1.1.1.7 christos echo_i "check insecure wildcard NODATA 2 NSEC after data response (synth-from-dnssec ${description};) ($n)" 595 1.1.1.7 christos ret=0 596 1.1.1.7 christos nextpart ns1/named.run >/dev/null 597 1.1.1.7 christos dig_with_opts b.wild-2-nsec-afterdata.insecure.example. @10.53.0.${ns} AAAA >dig.out.a.ns${ns}.test$n || ret=1 598 1.1.1.7 christos check_ad_flag no dig.out.a.ns${ns}.test$n || ret=1 599 1.1.1.7 christos check_status NOERROR dig.out.a.ns${ns}.test$n || ret=1 600 1.1.1.7 christos check_nosynth_aaaa b.wild-2-nsec-afterdata.insecure.example. dig.out.a.ns${ns}.test$n || ret=1 601 1.1.1.7 christos # 602 1.1.1.7 christos dig_with_opts b.wild-2-nsec-afterdata.insecure.example. @10.53.0.${ns} TLSA >dig.out.ns${ns}.test$n || ret=1 603 1.1.1.7 christos check_ad_flag no dig.out.ns${ns}.test$n || ret=1 604 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 605 1.1.1.7 christos check_nosynth_soa insecure.example. dig.out.ns${ns}.test$n || ret=1 606 1.1.1.7 christos digcomp insecure.wildnodata2nsecafterdata.out dig.out.ns${ns}.test$n || ret=1 607 1.1.1.7 christos n=$((n + 1)) 608 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 609 1.1.1.7 christos status=$((status + ret)) 610 1.1.1.7 christos 611 1.1.1.7 christos echo_i "check minimal NXDOMAIN response (synth-from-dnssec ${description};) ($n)" 612 1.1.1.7 christos ret=0 613 1.1.1.7 christos nextpart ns1/named.run >/dev/null 614 1.1.1.7 christos dig_with_opts nxdomaic.minimal. @10.53.0.${ns} a >dig.out.ns${ns}.test$n || ret=1 615 1.1.1.7 christos check_ad_flag $ad dig.out.ns${ns}.test$n || ret=1 616 1.1.1.7 christos check_status NXDOMAIN dig.out.ns${ns}.test$n || ret=1 617 1.1.1.7 christos check_nosynth_soa minimal. dig.out.ns${ns}.test$n || ret=1 618 1.1.1.7 christos nextpart ns1/named.run | grep nxdomaic.minimal/A >/dev/null || ret=1 619 1.1.1.7 christos digcomp minimal.nxdomain.out dig.out.ns${ns}.test$n || ret=1 620 1.1.1.7 christos n=$((n + 1)) 621 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 622 1.1.1.7 christos status=$((status + ret)) 623 1.1.1.7 christos 624 1.1.1.7 christos echo_i "check black lie NODATA response (synth-from-dnssec ${description};) ($n)" 625 1.1.1.7 christos ret=0 626 1.1.1.7 christos nextpart ns1/named.run >/dev/null 627 1.1.1.7 christos dig_with_opts black.minimal. @10.53.0.${ns} aaaa >dig.out.ns${ns}.test$n || ret=1 628 1.1.1.7 christos check_ad_flag $ad dig.out.ns${ns}.test$n || ret=1 629 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 630 1.1.1.7 christos check_nosynth_soa minimal. dig.out.ns${ns}.test$n || ret=1 631 1.1.1.7 christos nextpart ns1/named.run | grep black.minimal/AAAA >/dev/null || ret=1 632 1.1.1.7 christos digcomp black.out dig.out.ns${ns}.test$n || ret=1 633 1.1.1.7 christos n=$((n + 1)) 634 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 635 1.1.1.7 christos status=$((status + ret)) 636 1.1.1.7 christos 637 1.1.1.7 christos echo_i "check bad type map NODATA response (synth-from-dnssec ${description};) ($n)" 638 1.1.1.7 christos ret=0 639 1.1.1.7 christos dig_with_opts badtypemap.minimal. @10.53.0.${ns} HINFO >dig.out.ns${ns}.test$n || ret=1 640 1.1.1.7 christos check_ad_flag $ad dig.out.ns${ns}.test$n || ret=1 641 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 642 1.1.1.7 christos check_nosynth_soa minimal. dig.out.ns${ns}.test$n || ret=1 643 1.1.1.7 christos grep 'badtypemap.minimal.*3600.IN.NSEC.black.minimal. A$' dig.out.ns${ns}.test$n >/dev/null || ret=1 644 1.1.1.7 christos n=$((n + 1)) 645 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 646 1.1.1.7 christos status=$((status + ret)) 647 1.1.1.7 christos 648 1.1.1.7 christos echo_i "check bad type map NODATA response with existent data (synth-from-dnssec ${description};) ($n)" 649 1.1.1.7 christos ret=0 650 1.1.1.7 christos dig_with_opts badtypemap.minimal. @10.53.0.${ns} AAAA >dig.out.ns${ns}.test$n || ret=1 651 1.1.1.7 christos check_ad_flag $ad dig.out.ns${ns}.test$n || ret=1 652 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 653 1.1.1.7 christos check_nosynth_aaaa badtypemap.minimal. dig.out.ns${ns}.test$n || ret=1 654 1.1.1.7 christos n=$((n + 1)) 655 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 656 1.1.1.7 christos status=$((status + ret)) 657 1.1.1.7 christos 658 1.1.1.7 christos echo_i "check SOA without DNSKEY bad type map NODATA response (synth-from-dnssec ${description};) ($n)" 659 1.1.1.7 christos ret=0 660 1.1.1.7 christos dig_with_opts soa-without-dnskey. @10.53.0.${ns} A >dig.out.ns${ns}.test$n || ret=1 661 1.1.1.7 christos check_ad_flag $ad dig.out.ns${ns}.test$n || ret=1 662 1.1.1.7 christos check_status NOERROR dig.out.ns${ns}.test$n || ret=1 663 1.1.1.7 christos check_nosynth_soa soa-without-dnskey. dig.out.ns${ns}.test$n || ret=1 664 1.1.1.7 christos grep 'soa-without-dnskey.*3600.IN.NSEC.ns1.soa-without-dnskey. NS SOA RRSIG NSEC$' dig.out.ns${ns}.test$n >/dev/null || ret=1 665 1.1.1.7 christos n=$((n + 1)) 666 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 667 1.1.1.7 christos status=$((status + ret)) 668 1.1.1.7 christos 669 1.1.1.7 christos echo_i "check 'rndc stats' output for 'covering nsec returned' (synth-from-dnssec ${description};) ($n)" 670 1.1.1.7 christos ret=0 671 1.1.1.7 christos ${RNDCCMD} 10.53.0.${ns} stats 2>&1 | sed 's/^/ns6 /' | cat_i 672 1.1.1.7 christos # 2 views, _bind should always be '0 covering nsec returned' 673 1.1.1.7 christos count=$(grep "covering nsec returned" ns${ns}/named.stats | wc -l) 674 1.1.1.7 christos test $count = 2 || ret=1 675 1.1.1.7 christos zero=$(grep " 0 covering nsec returned" ns${ns}/named.stats | wc -l) 676 1.1.1.7 christos if [ ${synth} = yes ]; then 677 1.1.1.7 christos test $zero = 1 || ret=1 678 1.1.1.7 christos else 679 1.1.1.7 christos test $zero = 2 || ret=1 680 1.1.1.7 christos fi 681 1.1.1.7 christos n=$((n + 1)) 682 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 683 1.1.1.7 christos status=$((status + ret)) 684 1.1.1.7 christos 685 1.1.1.7 christos echo_i "check 'rndc stats' output for 'cache NSEC auxiliary database nodes' (synth-from-dnssec ${description};) ($n)" 686 1.1.1.7 christos ret=0 687 1.1.1.7 christos # 2 views, _bind should always be '0 cache NSEC auxiliary database nodes' 688 1.1.1.7 christos count=$(grep "cache NSEC auxiliary database nodes" ns${ns}/named.stats | wc -l) 689 1.1.1.7 christos test $count = 2 || ret=1 690 1.1.1.7 christos zero=$(grep "0 cache NSEC auxiliary database nodes" ns${ns}/named.stats | wc -l) 691 1.1.1.7 christos if [ ${ad} = yes ]; then 692 1.1.1.7 christos test $zero = 1 || ret=1 693 1.1.1.7 christos else 694 1.1.1.7 christos test $zero = 2 || ret=1 695 1.1.1.7 christos fi 696 1.1.1.7 christos n=$((n + 1)) 697 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 698 1.1.1.7 christos status=$((status + ret)) 699 1.1.1.7 christos 700 1.1.1.7 christos for synthesized in NXDOMAIN no-data wildcard; do 701 1.1.1.7 christos case $synthesized in 702 1.1.1.8 christos NXDOMAIN) count=2 ;; 703 1.1.1.7 christos no-data) count=4 ;; 704 1.1.1.7 christos wildcard) count=2 ;; 705 1.1 christos esac 706 1.1.1.7 christos echo_i "check 'rndc stats' output for 'synthesized a ${synthesized} response' (synth-from-dnssec ${description};) ($n)" 707 1.1.1.7 christos ret=0 708 1.1.1.7 christos if [ ${synth} = yes ]; then 709 1.1.1.7 christos grep "$count synthesized a ${synthesized} response" ns${ns}/named.stats >/dev/null || ret=1 710 1.1.1.7 christos else 711 1.1.1.7 christos grep "synthesized a ${synthesized} response" ns${ns}/named.stats >/dev/null && ret=1 712 1.1.1.7 christos fi 713 1.1.1.7 christos n=$((n + 1)) 714 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 715 1.1.1.7 christos status=$((status + ret)) 716 1.1.1.7 christos done 717 1.1.1.7 christos 718 1.1.1.8 christos if ${FEATURETEST} --have-libxml2 && [ -x "${CURL}" ] && [ -x "${XMLLINT}" ]; then 719 1.1.1.7 christos echo_i "getting XML statisistcs for (synth-from-dnssec ${description};) ($n)" 720 1.1 christos ret=0 721 1.1.1.7 christos xml=xml.out$n 722 1.1.1.7 christos ${CURL} http://10.53.0.${ns}:${EXTRAPORT1}/xml/v3/server >$xml 2>/dev/null || ret=1 723 1.1.1.7 christos n=$((n + 1)) 724 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 725 1.1.1.7 christos status=$((status + ret)) 726 1.1.1.7 christos 727 1.1.1.7 christos echo_i "check XML for 'CoveringNSEC' with (synth-from-dnssec ${description};) ($n)" 728 1.1.1.7 christos ret=0 729 1.1.1.8 christos count=$("${XMLLINT}" --xpath 'count(/statistics/views/view[@name="_default"]/counters[@type="cachestats"]/counter[@name="CoveringNSEC"])' $xml) 730 1.1.1.7 christos test $count = 1 || ret=1 731 1.1.1.8 christos zero=$("${XMLLINT}" --xpath 'count(/statistics/views/view[@name="_default"]/counters[@type="cachestats"]/counter[@name="CoveringNSEC" and text()="0"])' $xml) 732 1.1.1.7 christos if [ ${synth} = yes ]; then 733 1.1.1.7 christos test $zero = 0 || ret=1 734 1.1 christos else 735 1.1.1.7 christos test $zero = 1 || ret=1 736 1.1 christos fi 737 1.1.1.7 christos n=$((n + 1)) 738 1.1 christos if [ $ret != 0 ]; then echo_i "failed"; fi 739 1.1.1.7 christos status=$((status + ret)) 740 1.1 christos 741 1.1.1.7 christos echo_i "check XML for 'CacheNSECNodes' with (synth-from-dnssec ${description};) ($n)" 742 1.1 christos ret=0 743 1.1.1.8 christos count=$("${XMLLINT}" --xpath 'count(/statistics/views/view[@name="_default"]/counters[@type="cachestats"]/counter[@name="CacheNSECNodes"])' $xml) 744 1.1.1.7 christos test $count = 1 || ret=1 745 1.1.1.8 christos zero=$("${XMLLINT}" --xpath 'count(/statistics/views/view[@name="_default"]/counters[@type="cachestats"]/counter[@name="CacheNSECNodes" and text()="0"])' $xml) 746 1.1.1.7 christos if [ ${ad} = yes ]; then 747 1.1.1.7 christos test $zero = 0 || ret=1 748 1.1 christos else 749 1.1.1.7 christos test $zero = 1 || ret=1 750 1.1 christos fi 751 1.1.1.7 christos n=$((n + 1)) 752 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 753 1.1.1.7 christos status=$((status + ret)) 754 1.1.1.7 christos 755 1.1.1.7 christos for synthesized in SynthNXDOMAIN SynthNODATA SynthWILDCARD; do 756 1.1.1.7 christos case $synthesized in 757 1.1.1.8 christos SynthNXDOMAIN) count=2 ;; 758 1.1.1.7 christos SynthNODATA) count=4 ;; 759 1.1.1.7 christos SynthWILDCARD) count=2 ;; 760 1.1.1.7 christos esac 761 1.1.1.7 christos 762 1.1.1.7 christos echo_i "check XML for '$synthesized}' with (synth-from-dnssec ${description};) ($n)" 763 1.1.1.7 christos ret=0 764 1.1.1.8 christos if [ ${synth} != yes ]; then 765 1.1.1.8 christos count=0 766 1.1.1.7 christos fi 767 1.1.1.8 christos test $("${XMLLINT}" --xpath '/statistics/server/counters[@type="nsstat"]/counter[@name="'"${synthesized}"'"]/text()' $xml) -eq $count || ret=1 768 1.1.1.7 christos n=$((n + 1)) 769 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 770 1.1.1.7 christos status=$((status + ret)) 771 1.1.1.7 christos done 772 1.1.1.7 christos else 773 1.1.1.7 christos echo_i "Skipping XML statistics checks" 774 1.1.1.7 christos fi 775 1.1.1.7 christos 776 1.1.1.8 christos if $FEATURETEST --have-json-c && [ -x "${CURL}" ] && [ -x "${JQ}" ]; then 777 1.1.1.7 christos echo_i "getting JSON statisistcs for (synth-from-dnssec ${description};) ($n)" 778 1.1.1.7 christos ret=0 779 1.1.1.7 christos json=json.out$n 780 1.1.1.7 christos ${CURL} http://10.53.0.${ns}:${EXTRAPORT1}/json/v1/server >$json 2>/dev/null || ret=1 781 1.1.1.7 christos n=$((n + 1)) 782 1.1 christos if [ $ret != 0 ]; then echo_i "failed"; fi 783 1.1.1.7 christos status=$((status + ret)) 784 1.1 christos 785 1.1.1.7 christos echo_i "check JSON for 'CoveringNSEC' with (synth-from-dnssec ${description};) ($n)" 786 1.1 christos ret=0 787 1.1.1.8 christos count=$("${JQ}" '.views | map(select(.resolver.cachestats | has("CoveringNSEC"))) | length' <$json) 788 1.1.1.7 christos test $count = 2 || ret=1 789 1.1.1.8 christos zero=$("${JQ}" '.views | map(select(.resolver.cachestats.CoveringNSEC == 0)) | length' <$json) 790 1.1.1.7 christos if [ ${synth} = yes ]; then 791 1.1.1.7 christos test $zero = 1 || ret=1 792 1.1 christos else 793 1.1.1.7 christos test $zero = 2 || ret=1 794 1.1 christos fi 795 1.1.1.7 christos n=$((n + 1)) 796 1.1 christos if [ $ret != 0 ]; then echo_i "failed"; fi 797 1.1.1.7 christos status=$((status + ret)) 798 1.1 christos 799 1.1.1.7 christos echo_i "check JSON for 'CacheNSECNodes' with (synth-from-dnssec ${description};) ($n)" 800 1.1 christos ret=0 801 1.1.1.8 christos count=$("${JQ}" '.views | map(select(.resolver.cachestats | has("CacheNSECNodes"))) | length' <$json) 802 1.1.1.7 christos test $count = 2 || ret=1 803 1.1.1.8 christos zero=$("${JQ}" '.views | map(select(.resolver.cachestats.CacheNSECNodes == 0)) | length' <$json) 804 1.1.1.7 christos if [ ${ad} = yes ]; then 805 1.1.1.7 christos test $zero = 1 || ret=1 806 1.1 christos else 807 1.1.1.7 christos test $zero = 2 || ret=1 808 1.1 christos fi 809 1.1.1.7 christos n=$((n + 1)) 810 1.1 christos if [ $ret != 0 ]; then echo_i "failed"; fi 811 1.1.1.7 christos status=$((status + ret)) 812 1.1.1.7 christos 813 1.1.1.7 christos for synthesized in SynthNXDOMAIN SynthNODATA SynthWILDCARD; do 814 1.1.1.7 christos case $synthesized in 815 1.1.1.8 christos SynthNXDOMAIN) count=2 ;; 816 1.1.1.7 christos SynthNODATA) count=4 ;; 817 1.1.1.7 christos SynthWILDCARD) count=2 ;; 818 1.1.1.7 christos esac 819 1.1.1.7 christos 820 1.1.1.7 christos echo_i "check JSON for '$synthesized}' with (synth-from-dnssec ${description};) ($n)" 821 1.1.1.7 christos ret=0 822 1.1.1.7 christos if [ ${synth} = yes ]; then 823 1.1.1.8 christos test $("${JQ}" ".nsstats.${synthesized}" <$json) -eq $count || ret=1 824 1.1.1.7 christos else 825 1.1.1.8 christos "${JQ}" -e '.nsstats | has("'"${synthesized}"'")' <$json >/dev/null && ret=1 826 1.1.1.7 christos fi 827 1.1.1.7 christos n=$((n + 1)) 828 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 829 1.1.1.7 christos status=$((status + ret)) 830 1.1.1.7 christos done 831 1.1.1.7 christos else 832 1.1.1.7 christos echo_i "Skipping JSON statistics checks" 833 1.1.1.7 christos fi 834 1.1 christos done 835 1.1 christos 836 1.1 christos echo_i "check redirect response (+dnssec) (synth-from-dnssec <default>;) ($n)" 837 1.1 christos ret=0 838 1.1.1.7 christos synth=${synth_default} 839 1.1.1.7 christos dig_with_opts b.redirect. @10.53.0.3 a >dig.out.ns3.test$n || ret=1 840 1.1.1.7 christos check_ad_flag yes dig.out.ns3.test$n || ret=1 841 1.1.1.7 christos check_status NXDOMAIN dig.out.ns3.test$n || ret=1 842 1.1.1.7 christos if [ ${synth} = yes ]; then 843 1.1.1.7 christos check_synth_soa . dig.out.ns3.test$n || ret=1 844 1.1.1.7 christos else 845 1.1.1.7 christos check_nosynth_soa . dig.out.ns3.test$n || ret=1 846 1.1.1.7 christos fi 847 1.1.1.7 christos n=$((n + 1)) 848 1.1 christos if [ $ret != 0 ]; then echo_i "failed"; fi 849 1.1.1.7 christos status=$((status + ret)) 850 1.1 christos 851 1.1 christos echo_i "check redirect response (+nodnssec) (synth-from-dnssec <default>;) ($n)" 852 1.1 christos ret=0 853 1.1.1.7 christos dig_with_opts +nodnssec b.redirect. @10.53.0.3 a >dig.out.ns3.test$n || ret=1 854 1.1.1.7 christos check_ad_flag no dig.out.ns3.test$n || ret=1 855 1.1.1.7 christos check_status NOERROR dig.out.ns3.test$n || ret=1 856 1.1.1.7 christos grep 'b\.redirect\..*300.IN.A.100\.100\.100\.2' dig.out.ns3.test$n >/dev/null || ret=1 857 1.1.1.7 christos n=$((n + 1)) 858 1.1 christos if [ $ret != 0 ]; then echo_i "failed"; fi 859 1.1.1.7 christos status=$((status + ret)) 860 1.1.1.2 christos 861 1.1.1.2 christos echo_i "check DNAME handling (synth-from-dnssec yes;) ($n)" 862 1.1.1.2 christos ret=0 863 1.1.1.7 christos dig_with_opts dnamed.example. ns @10.53.0.5 >dig.out.ns5.test$n || ret=1 864 1.1.1.7 christos dig_with_opts a.dnamed.example. a @10.53.0.5 >dig.out.ns5-1.test$n || ret=1 865 1.1.1.7 christos check_status NOERROR dig.out.ns5-1.test$n || ret=1 866 1.1.1.7 christos n=$((n + 1)) 867 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 868 1.1.1.7 christos status=$((status + ret)) 869 1.1.1.7 christos 870 1.1.1.7 christos echo_i "regression test for CVE-2022-0635 ($n)" 871 1.1.1.7 christos ret=0 872 1.1.1.7 christos # add DNAME to cache 873 1.1.1.7 christos dig_with_opts dname.dnamed. dname @10.53.0.5 >dig.out.ns5-1.test$n || ret=1 874 1.1.1.7 christos grep "status: NOERROR" dig.out.ns5-1.test$n >/dev/null || ret=1 875 1.1.1.7 christos # add A record to cache at name before DNAME owner 876 1.1.1.7 christos dig_with_opts a.dnamed. a @10.53.0.5 >dig.out.ns5-2.test$n || ret=1 877 1.1.1.7 christos grep "status: NOERROR" dig.out.ns5-2.test$n >/dev/null || ret=1 878 1.1.1.7 christos # add NSEC record to cache at name before DNAME owner 879 1.1.1.7 christos dig_with_opts a.dnamed. aaaa @10.53.0.5 >dig.out.ns5-3.test$n || ret=1 880 1.1.1.7 christos grep "status: NOERROR" dig.out.ns5-3.test$n >/dev/null || ret=1 881 1.1.1.7 christos # wait for NSEC to timeout 882 1.1.1.7 christos sleep 6 883 1.1.1.7 christos # use DNAME for lookup 884 1.1.1.7 christos dig_with_opts b.dname.dnamed a @10.53.0.5 >dig.out.ns5-4.test$n || ret=1 885 1.1.1.7 christos grep "status: NXDOMAIN" dig.out.ns5-4.test$n >/dev/null || ret=1 886 1.1.1.7 christos n=$((n + 1)) 887 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 888 1.1.1.7 christos status=$((status + ret)) 889 1.1.1.7 christos 890 1.1.1.7 christos echo_i "check synth-from-dnssec with grafted zone (forward only) ($n)" 891 1.1.1.7 christos ret=0 892 1.1.1.7 christos #prime cache with NXDOMAIN NSEC covering 'fun' to 'minimal' 893 1.1.1.7 christos dig_with_opts internal @10.53.0.5 >dig.out.ns5-1.test$n || ret=1 894 1.1.1.7 christos grep "status: NXDOMAIN" dig.out.ns5-1.test$n >/dev/null || ret=1 895 1.1.1.7 christos grep '^fun\..*NSEC.minimal\. ' dig.out.ns5-1.test$n >/dev/null || ret=1 896 1.1.1.7 christos #perform lookup in grafted zone 897 1.1.1.7 christos dig_with_opts example.internal @10.53.0.5 >dig.out.ns5-2.test$n || ret=1 898 1.1.1.7 christos grep "status: NOERROR" dig.out.ns5-2.test$n >/dev/null || ret=1 899 1.1.1.7 christos grep '^example\.internal\..*A.1.2.3.4$' dig.out.ns5-2.test$n >/dev/null || ret=1 900 1.1.1.7 christos n=$((n + 1)) 901 1.1.1.7 christos if [ $ret != 0 ]; then echo_i "failed"; fi 902 1.1.1.7 christos status=$((status + ret)) 903 1.1.1.7 christos 904 1.1.1.7 christos echo_i "check synth-from-dnssec with grafted zone (primary zone) ($n)" 905 1.1.1.7 christos ret=0 906 1.1.1.7 christos #prime cache with NXDOMAIN NSEC covering 'fun' to 'minimal' 907 1.1.1.7 christos dig_with_opts internal @10.53.0.5 >dig.out.ns5-1.test$n || ret=1 908 1.1.1.7 christos grep "status: NXDOMAIN" dig.out.ns5-1.test$n >/dev/null || ret=1 909 1.1.1.7 christos grep '^fun\..*NSEC.minimal\. ' dig.out.ns5-1.test$n >/dev/null || ret=1 910 1.1.1.7 christos #perform lookup in grafted zone 911 1.1.1.7 christos dig_with_opts example.internal2 @10.53.0.5 >dig.out.ns5-2.test$n || ret=1 912 1.1.1.7 christos grep "status: NOERROR" dig.out.ns5-2.test$n >/dev/null || ret=1 913 1.1.1.7 christos grep '^example\.internal2\..*A.1.2.3.4$' dig.out.ns5-2.test$n >/dev/null || ret=1 914 1.1.1.7 christos n=$((n + 1)) 915 1.1.1.2 christos if [ $ret != 0 ]; then echo_i "failed"; fi 916 1.1.1.7 christos status=$((status + ret)) 917 1.1.1.2 christos 918 1.1 christos echo_i "exit status: $status" 919 1.1 christos [ $status -eq 0 ] || exit 1 920