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 SYSTEMTESTTOP=.. 15 . $SYSTEMTESTTOP/conf.sh 16 17 DIGOPTS="-p ${PORT}" 18 RNDCCMD="$RNDC -c $SYSTEMTESTTOP/common/rndc.conf -p ${CONTROLPORT} -s" 19 CLEANQL="rm -f ans*/query.log" 20 status=0 21 n=0 22 23 n=$((n+1)) 24 echo_i "query for .good is not minimized when qname-minimization is off ($n)" 25 ret=0 26 $CLEANQL 27 $RNDCCMD 10.53.0.5 flush 28 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.good. @10.53.0.5 > dig.out.test$n 29 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 30 grep "icky.icky.icky.ptang.zoop.boing.good. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 31 sleep 1 32 cat << __EOF | $DIFF ans2/query.log - > /dev/null || ret=1 33 ADDR icky.icky.icky.ptang.zoop.boing.good. 34 ADDR ns3.good. 35 ADDR ns3.good. 36 ADDR a.bit.longer.ns.name.good. 37 ADDR a.bit.longer.ns.name.good. 38 __EOF 39 echo "ADDR icky.icky.icky.ptang.zoop.boing.good." | $DIFF ans3/query.log - > /dev/null || ret=1 40 echo "ADDR icky.icky.icky.ptang.zoop.boing.good." | $DIFF ans4/query.log - > /dev/null || ret=1 41 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 42 if [ $ret != 0 ]; then echo_i "failed"; fi 43 status=$((status+ret)) 44 45 n=$((n+1)) 46 echo_i "query for .bad is not minimized when qname-minimization is off ($n)" 47 ret=0 48 $CLEANQL 49 $RNDCCMD 10.53.0.5 flush 50 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.bad. @10.53.0.5 > dig.out.test$n 51 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 52 grep "icky.icky.icky.ptang.zoop.boing.bad. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 53 sleep 1 54 cat << __EOF | $DIFF ans2/query.log - > /dev/null || ret=1 55 ADDR icky.icky.icky.ptang.zoop.boing.bad. 56 ADDR ns3.bad. 57 ADDR ns3.bad. 58 ADDR a.bit.longer.ns.name.bad. 59 ADDR a.bit.longer.ns.name.bad. 60 __EOF 61 echo "ADDR icky.icky.icky.ptang.zoop.boing.bad." | $DIFF ans3/query.log - > /dev/null || ret=1 62 echo "ADDR icky.icky.icky.ptang.zoop.boing.bad." | $DIFF ans4/query.log - > /dev/null || ret=1 63 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 64 if [ $ret != 0 ]; then echo_i "failed"; fi 65 status=$((status+ret)) 66 67 n=$((n+1)) 68 echo_i "query for .slow is not minimized when qname-minimization is off ($n)" 69 ret=0 70 $CLEANQL 71 $RNDCCMD 10.53.0.5 flush 72 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.slow. @10.53.0.5 > dig.out.test$n 73 sleep 5 74 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 75 grep "icky.icky.icky.ptang.zoop.boing.slow. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 76 sleep 1 77 cat << __EOF | $DIFF ans2/query.log - > /dev/null || ret=1 78 ADDR icky.icky.icky.ptang.zoop.boing.slow. 79 ADDR ns3.slow. 80 ADDR ns3.slow. 81 ADDR a.bit.longer.ns.name.slow. 82 ADDR a.bit.longer.ns.name.slow. 83 __EOF 84 echo "ADDR icky.icky.icky.ptang.zoop.boing.slow." | $DIFF ans3/query.log - > /dev/null || ret=1 85 echo "ADDR icky.icky.icky.ptang.zoop.boing.slow." | $DIFF ans4/query.log - > /dev/null || ret=1 86 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 87 if [ $ret != 0 ]; then echo_i "failed"; fi 88 status=$((status+ret)) 89 90 n=$((n+1)) 91 echo_i "query for .ugly is not minimized when qname-minimization is off ($n)" 92 ret=0 93 $CLEANQL 94 $RNDCCMD 10.53.0.5 flush 95 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.ugly. @10.53.0.5 > dig.out.test$n 96 sleep 5 97 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 98 grep "icky.icky.icky.ptang.zoop.boing.ugly. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 99 sleep 1 100 cat << __EOF | $DIFF ans2/query.log - > /dev/null || ret=1 101 ADDR icky.icky.icky.ptang.zoop.boing.ugly. 102 ADDR ns3.ugly. 103 ADDR ns3.ugly. 104 ADDR a.bit.longer.ns.name.ugly. 105 ADDR a.bit.longer.ns.name.ugly. 106 __EOF 107 echo "ADDR icky.icky.icky.ptang.zoop.boing.ugly." | $DIFF ans3/query.log - > /dev/null || ret=1 108 echo "ADDR icky.icky.icky.ptang.zoop.boing.ugly." | $DIFF ans4/query.log - > /dev/null || ret=1 109 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 110 if [ $ret != 0 ]; then echo_i "failed"; fi 111 status=$((status+ret)) 112 113 n=$((n+1)) 114 echo_i "query for .good is properly minimized when qname-minimization is in strict mode ($n)" 115 ret=0 116 $CLEANQL 117 $RNDCCMD 10.53.0.6 flush 118 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.good. @10.53.0.6 > dig.out.test$n 119 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 120 grep "icky.icky.icky.ptang.zoop.boing.good. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 121 sleep 1 122 sort ans2/query.log > ans2/query.log.sorted 123 cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 124 ADDR a.bit.longer.ns.name.good. 125 ADDR a.bit.longer.ns.name.good. 126 ADDR ns2.good. 127 ADDR ns3.good. 128 ADDR ns3.good. 129 NS boing.good. 130 NS good. 131 NS zoop.boing.good. 132 __EOF 133 cat << __EOF | $DIFF ans3/query.log - > /dev/null || ret=1 134 NS zoop.boing.good. 135 NS ptang.zoop.boing.good. 136 NS icky.ptang.zoop.boing.good. 137 __EOF 138 cat << __EOF | $DIFF ans4/query.log - > /dev/null || ret=1 139 NS icky.ptang.zoop.boing.good. 140 NS icky.icky.ptang.zoop.boing.good. 141 ADDR icky.icky.icky.ptang.zoop.boing.good. 142 __EOF 143 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 144 if [ $ret != 0 ]; then echo_i "failed"; fi 145 status=$((status+ret)) 146 147 n=$((n+1)) 148 echo_i "query for .good is properly minimized when qname-minimization is in relaxed mode ($n)" 149 ret=0 150 $CLEANQL 151 $RNDCCMD 10.53.0.7 flush 152 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.good. @10.53.0.7 > dig.out.test$n 153 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 154 grep "icky.icky.icky.ptang.zoop.boing.good. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 155 sleep 1 156 sort ans2/query.log > ans2/query.log.sorted 157 cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 158 ADDR _.boing.good. 159 ADDR _.zoop.boing.good. 160 ADDR a.bit.longer.ns.name.good. 161 ADDR a.bit.longer.ns.name.good. 162 ADDR ns2.good. 163 ADDR ns3.good. 164 ADDR ns3.good. 165 __EOF 166 cat << __EOF | $DIFF ans3/query.log - > /dev/null || ret=1 167 ADDR _.ptang.zoop.boing.good. 168 ADDR _.icky.ptang.zoop.boing.good. 169 __EOF 170 cat << __EOF | $DIFF ans4/query.log - > /dev/null || ret=1 171 ADDR _.icky.icky.ptang.zoop.boing.good. 172 ADDR icky.icky.icky.ptang.zoop.boing.good. 173 __EOF 174 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 175 if [ $ret != 0 ]; then echo_i "failed"; fi 176 status=$((status+ret)) 177 178 n=$((n+1)) 179 echo_i "query for .bad fails when qname-minimization is in strict mode ($n)" 180 ret=0 181 $CLEANQL 182 $RNDCCMD 10.53.0.6 flush 183 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.bad. @10.53.0.6 > dig.out.test$n 184 grep "status: NXDOMAIN" dig.out.test$n > /dev/null || ret=1 185 sleep 1 186 sort ans2/query.log > ans2/query.log.sorted 187 cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 188 ADDR ns2.bad. 189 NS bad. 190 NS boing.bad. 191 __EOF 192 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 193 if [ $ret != 0 ]; then echo_i "failed"; fi 194 status=$((status+ret)) 195 196 n=$((n+1)) 197 echo_i "query for .bad succeeds when qname-minimization is in relaxed mode ($n)" 198 ret=0 199 $CLEANQL 200 $RNDCCMD 10.53.0.7 flush 201 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.bad. @10.53.0.7 > dig.out.test$n 202 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 203 grep "icky.icky.icky.ptang.zoop.boing.bad. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 204 sleep 1 205 sort ans2/query.log > ans2/query.log.sorted 206 cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 207 ADDR _.boing.bad. 208 ADDR _.zoop.boing.bad. 209 ADDR a.bit.longer.ns.name.bad. 210 ADDR a.bit.longer.ns.name.bad. 211 ADDR ns2.bad. 212 ADDR ns3.bad. 213 ADDR ns3.bad. 214 __EOF 215 cat << __EOF | $DIFF ans3/query.log - > /dev/null || ret=1 216 ADDR _.ptang.zoop.boing.bad. 217 ADDR _.icky.ptang.zoop.boing.bad. 218 __EOF 219 cat << __EOF | $DIFF ans4/query.log - > /dev/null || ret=1 220 ADDR _.icky.icky.ptang.zoop.boing.bad. 221 ADDR icky.icky.icky.ptang.zoop.boing.bad. 222 __EOF 223 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 224 if [ $ret != 0 ]; then echo_i "failed"; fi 225 status=$((status+ret)) 226 227 n=$((n+1)) 228 echo_i "query for .ugly fails when qname-minimization is in strict mode ($n)" 229 ret=0 230 $CLEANQL 231 $RNDCCMD 10.53.0.6 flush 232 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.ugly. @10.53.0.6 > dig.out.test$n 233 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1 234 sleep 1 235 sort ans2/query.log > ans2/query.log.sorted 236 cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 237 ADDR ns2.ugly. 238 NS boing.ugly. 239 NS boing.ugly. 240 NS ugly. 241 __EOF 242 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 243 if [ $ret != 0 ]; then echo_i "failed"; fi 244 status=$((status+ret)) 245 $RNDCCMD 10.53.0.6 flush 246 247 n=$((n+1)) 248 echo_i "query for .ugly succeeds when qname-minimization is in relaxed mode ($n)" 249 ret=0 250 $CLEANQL 251 $RNDCCMD 10.53.0.7 flush 252 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.ugly. @10.53.0.7 > dig.out.test$n 253 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 254 grep "icky.icky.icky.ptang.zoop.boing.ugly. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 255 sleep 1 256 257 sort ans2/query.log > ans2/query.log.sorted 258 cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 259 ADDR _.boing.ugly. 260 ADDR _.boing.ugly. 261 ADDR a.bit.longer.ns.name.ugly. 262 ADDR a.bit.longer.ns.name.ugly. 263 ADDR icky.icky.icky.ptang.zoop.boing.ugly. 264 ADDR ns2.ugly. 265 ADDR ns3.ugly. 266 ADDR ns3.ugly. 267 __EOF 268 echo "ADDR icky.icky.icky.ptang.zoop.boing.ugly." | $DIFF ans3/query.log - > /dev/null || ret=1 269 echo "ADDR icky.icky.icky.ptang.zoop.boing.ugly." | $DIFF ans4/query.log - > /dev/null || ret=1 270 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 271 if [ $ret != 0 ]; then echo_i "failed"; fi 272 status=$((status+ret)) 273 $RNDCCMD 10.53.0.7 flush 274 275 n=$((n+1)) 276 echo_i "information that minimization was unsuccessful for .ugly is logged ($n)" 277 ret=0 278 grep "success resolving 'icky.icky.icky.ptang.zoop.boing.ugly/A' after disabling qname minimization due to 'FORMERR'" ns7/named.run > /dev/null || ret=1 279 if [ $ret != 0 ]; then echo_i "failed"; fi 280 status=$((status+ret)) 281 282 n=$((n+1)) 283 echo_i "query for .slow is properly minimized when qname-minimization is on ($n)" 284 ret=0 285 $CLEANQL 286 $RNDCCMD 10.53.0.6 flush 287 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.slow. @10.53.0.6 > dig.out.test$n 288 sleep 5 289 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 290 grep "icky.icky.icky.ptang.zoop.boing.slow. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 291 sort ans2/query.log > ans2/query.log.sorted 292 cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 293 ADDR a.bit.longer.ns.name.slow. 294 ADDR a.bit.longer.ns.name.slow. 295 ADDR ns2.slow. 296 ADDR ns3.slow. 297 ADDR ns3.slow. 298 NS boing.slow. 299 NS slow. 300 NS zoop.boing.slow. 301 __EOF 302 cat << __EOF | $DIFF ans3/query.log - > /dev/null || ret=1 303 NS zoop.boing.slow. 304 NS ptang.zoop.boing.slow. 305 NS icky.ptang.zoop.boing.slow. 306 __EOF 307 cat << __EOF | $DIFF ans4/query.log - > /dev/null || ret=1 308 NS icky.ptang.zoop.boing.slow. 309 NS icky.icky.ptang.zoop.boing.slow. 310 ADDR icky.icky.icky.ptang.zoop.boing.slow. 311 __EOF 312 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 313 if [ $ret != 0 ]; then echo_i "failed"; fi 314 status=$((status+ret)) 315 316 n=$((n+1)) 317 echo_i "query for .ip6.arpa succeeds and skips on proper boundaries when qname-minimization is on ($n)" 318 ret=0 319 $CLEANQL 320 $RNDCCMD 10.53.0.6 flush 321 $DIG $DIGOPTS -x 2001:4f8::1 @10.53.0.6 > dig.out.test$n 322 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 323 grep "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.f.4.0.1.0.0.2.ip6.arpa. 1 IN PTR nee.com." dig.out.test$n > /dev/null || ret=1 324 sleep 1 325 grep -v ADDR ans2/query.log > ans2/query.log.trimmed 326 cat << __EOF | $DIFF ans2/query.log.trimmed - > /dev/null || ret=1 327 NS 1.0.0.2.ip6.arpa. 328 NS 8.f.4.0.1.0.0.2.ip6.arpa. 329 NS 0.0.0.0.8.f.4.0.1.0.0.2.ip6.arpa. 330 NS 0.0.0.0.0.0.8.f.4.0.1.0.0.2.ip6.arpa. 331 NS 0.0.0.0.0.0.0.0.8.f.4.0.1.0.0.2.ip6.arpa. 332 PTR 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.f.4.0.1.0.0.2.ip6.arpa. 333 __EOF 334 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 335 if [ $ret != 0 ]; then echo_i "failed"; fi 336 status=$((status+ret)) 337 338 n=$((n+1)) 339 echo_i "query for multiple label name skips after 7th label ($n)" 340 ret=0 341 $CLEANQL 342 $RNDCCMD 10.53.0.6 flush 343 $DIG $DIGOPTS more.icky.icky.icky.ptang.zoop.boing.good. @10.53.0.6 > dig.out.test$n 344 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 345 grep "more.icky.icky.icky.ptang.zoop.boing.good. 1 IN A 192.0.2.2" dig.out.test$n > /dev/null || ret=1 346 sleep 1 347 sort ans2/query.log > ans2/query.log.sorted 348 cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 349 ADDR a.bit.longer.ns.name.good. 350 ADDR a.bit.longer.ns.name.good. 351 ADDR ns2.good. 352 ADDR ns3.good. 353 ADDR ns3.good. 354 NS boing.good. 355 NS good. 356 NS zoop.boing.good. 357 __EOF 358 cat << __EOF | $DIFF ans3/query.log - > /dev/null || ret=1 359 NS zoop.boing.good. 360 NS ptang.zoop.boing.good. 361 NS icky.ptang.zoop.boing.good. 362 __EOF 363 # There's no NS icky.icky.icky.ptang.zoop.boing.good. query - we skipped it. 364 cat << __EOF | $DIFF ans4/query.log - > /dev/null || ret=1 365 NS icky.ptang.zoop.boing.good. 366 NS icky.icky.ptang.zoop.boing.good. 367 ADDR more.icky.icky.icky.ptang.zoop.boing.good. 368 __EOF 369 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 370 if [ $ret != 0 ]; then echo_i "failed"; fi 371 status=$((status+ret)) 372 373 n=$((n+1)) 374 echo_i "qname minimization is disabled when forwarding ($n)" 375 ret=0 376 $CLEANQL 377 $RNDCCMD 10.53.0.7 flush 378 $DIG $DIGOPTS a.bit.longer.ns.name.fwd. @10.53.0.7 > dig.out.test$n 379 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 380 grep "a.bit.longer.ns.name.fwd. 1 IN A 10.53.0.4" dig.out.test$n >/dev/null || ret=1 381 sleep 1 382 cat << __EOF | $DIFF ans2/query.log - > /dev/null || ret=1 383 ADDR a.bit.longer.ns.name.fwd. 384 __EOF 385 for ans in ans2; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 386 if [ $ret != 0 ]; then echo_i "failed"; fi 387 status=$((status+ret)) 388 389 n=$((n+1)) 390 echo_i "qname minimization resolves unusual ip6.arpa. names ($n)" 391 ret=0 392 $CLEANQL 393 $DIG $DIGOPTS test1.test2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.9.0.9.4.1.1.1.1.8.2.6.0.1.0.0.2.ip6.arpa. txt @10.53.0.7 > dig.out.test$n 2>&1 394 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 395 # Expected output in dig.out.test$n: 396 # ;; ANSWER SECTION: 397 # test1.test2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.9.0.9.4.1.1.1.1.8.2.6.0.1.0.0.2.ip6.arpa. 1 IN TXT "long_ip6_name" 398 grep 'ip6\.arpa.*TXT.*long_ip6_name' dig.out.test$n > /dev/null || ret=1 399 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 400 if [ $ret != 0 ]; then echo_i "failed"; fi 401 status=$((status+ret)) 402 403 # Below are test cases for GL #2665: The QNAME minimization (if enabled) should 404 # also occur on the second query, after the RRsets have expired from cache. 405 # BIND will still have the entries in cache, but marked stale. These stale 406 # entries should not prevent the resolver from minimizing the QNAME. 407 # We query for the test domain a.b.stale. in all cases (QNAME minimization off, 408 # strict mode, and relaxed mode) and expect it to behave the same the second 409 # time when we have a stale delegation structure in cache. 410 n=$((n+1)) 411 echo_i "query for .stale is not minimized when qname-minimization is off ($n)" 412 ret=0 413 $CLEANQL 414 $RNDCCMD 10.53.0.5 flush 415 $DIG $DIGOPTS @10.53.0.5 txt a.b.stale. > dig.out.test$n 416 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 417 grep "a\.b\.stale\..*1.*IN.*TXT.*peekaboo" dig.out.test$n > /dev/null || ret=1 418 sleep 1 419 echo "TXT a.b.stale." | $DIFF ans2/query.log - > /dev/null || ret=1 420 echo "TXT a.b.stale." | $DIFF ans3/query.log - > /dev/null || ret=1 421 test -f ans4/query.log && ret=1 422 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 423 if [ $ret != 0 ]; then echo_i "failed"; fi 424 status=$((status+ret)) 425 426 n=$((n+1)) 427 echo_i "query for .stale is properly minimized when qname-minimization is in strict mode ($n)" 428 ret=0 429 $CLEANQL 430 $RNDCCMD 10.53.0.6 flush 431 $DIG $DIGOPTS @10.53.0.6 txt a.b.stale. > dig.out.test$n 432 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 433 grep "a\.b\.stale\..*1.*IN.*TXT.*hooray" dig.out.test$n > /dev/null || ret=1 434 sleep 1 435 sort ans2/query.log > ans2/query.log.sorted 436 cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 437 ADDR ns.b.stale. 438 ADDR ns2.stale. 439 NS b.stale. 440 NS stale. 441 __EOF 442 test -f ans3/query.log && ret=1 443 sort ans4/query.log > ans4/query.log.sorted 444 cat << __EOF | $DIFF ans4/query.log.sorted - > /dev/null || ret=1 445 ADDR ns.b.stale. 446 NS b.stale. 447 TXT a.b.stale. 448 __EOF 449 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 450 if [ $ret != 0 ]; then echo_i "failed"; fi 451 status=$((status+ret)) 452 453 n=$((n+1)) 454 echo_i "query for .stale is properly minimized when qname-minimization is in relaxed mode ($n)" 455 ret=0 456 $CLEANQL 457 $RNDCCMD 10.53.0.7 flush 458 $DIG $DIGOPTS @10.53.0.7 txt a.b.stale. > dig.out.test$n 459 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 460 grep "a\.b\.stale\..*1.*IN.*TXT.*hooray" dig.out.test$n > /dev/null || ret=1 461 sleep 1 462 sort ans2/query.log > ans2/query.log.sorted 463 cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 464 ADDR _.b.stale. 465 ADDR ns.b.stale. 466 ADDR ns2.stale. 467 __EOF 468 test -f ans3/query.log && ret=1 469 sort ans4/query.log > ans4/query.log.sorted 470 cat << __EOF | $DIFF ans4/query.log.sorted - > /dev/null || ret=1 471 ADDR ns.b.stale. 472 TXT a.b.stale. 473 __EOF 474 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 475 if [ $ret != 0 ]; then echo_i "failed"; fi 476 status=$((status+ret)) 477 478 echo_i "sleep 2, allow entries in cache to go stale" 479 sleep 2 480 481 n=$((n+1)) 482 echo_i "query for .stale is not minimized when qname-minimization is off (stale cache) ($n)" 483 ret=0 484 $CLEANQL 485 $DIG $DIGOPTS @10.53.0.5 txt a.b.stale. > dig.out.test$n 486 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 487 grep "a\.b\.stale\..*1.*IN.*TXT.*peekaboo" dig.out.test$n > /dev/null || ret=1 488 sleep 1 489 echo "TXT a.b.stale." | $DIFF ans2/query.log - > /dev/null || ret=1 490 echo "TXT a.b.stale." | $DIFF ans3/query.log - > /dev/null || ret=1 491 test -f ans4/query.log && ret=1 492 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 493 if [ $ret != 0 ]; then echo_i "failed"; fi 494 status=$((status+ret)) 495 496 n=$((n+1)) 497 echo_i "query for .stale is properly minimized when qname-minimization is in strict mode (stale cache) ($n)" 498 ret=0 499 $CLEANQL 500 $DIG $DIGOPTS @10.53.0.6 txt a.b.stale. > dig.out.test$n 501 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 502 grep "a\.b\.stale\..*1.*IN.*TXT.*hooray" dig.out.test$n > /dev/null || ret=1 503 sleep 1 504 sort ans2/query.log > ans2/query.log.sorted 505 cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 506 NS b.stale. 507 NS stale. 508 __EOF 509 test -f ans3/query.log && ret=1 510 sort ans4/query.log > ans4/query.log.sorted 511 cat << __EOF | $DIFF ans4/query.log.sorted - > /dev/null || ret=1 512 NS b.stale. 513 TXT a.b.stale. 514 __EOF 515 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 516 if [ $ret != 0 ]; then echo_i "failed"; fi 517 status=$((status+ret)) 518 519 n=$((n+1)) 520 echo_i "query for .stale is properly minimized when qname-minimization is in relaxed mode (stale cache) ($n)" 521 ret=0 522 $CLEANQL 523 $DIG $DIGOPTS @10.53.0.7 txt a.b.stale. > dig.out.test$n 524 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 525 grep "a\.b\.stale\..*1.*IN.*TXT.*hooray" dig.out.test$n > /dev/null || ret=1 526 sleep 1 527 sort ans2/query.log > ans2/query.log.sorted 528 cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 529 ADDR _.b.stale. 530 __EOF 531 test -f ans3/query.log && ret=1 532 sort ans4/query.log > ans4/query.log.sorted 533 cat << __EOF | $DIFF ans4/query.log.sorted - > /dev/null || ret=1 534 TXT a.b.stale. 535 __EOF 536 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 537 if [ $ret != 0 ]; then echo_i "failed"; fi 538 status=$((status+ret)) 539 540 echo_i "exit status: $status" 541 [ $status -eq 0 ] || exit 1 542