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