1#!/bin/sh 2 3# Copyright (C) Internet Systems Consortium, Inc. ("ISC") 4# 5# SPDX-License-Identifier: MPL-2.0 6# 7# This Source Code Form is subject to the terms of the Mozilla Public 8# License, v. 2.0. If a copy of the MPL was not distributed with this 9# file, you can obtain one at https://mozilla.org/MPL/2.0/. 10# 11# See the COPYRIGHT file distributed with this work for additional 12# information regarding copyright ownership. 13 14SYSTEMTESTTOP=.. 15. $SYSTEMTESTTOP/conf.sh 16 17DIGOPTS="-p ${PORT}" 18RNDCCMD="$RNDC -c $SYSTEMTESTTOP/common/rndc.conf -p ${CONTROLPORT} -s" 19CLEANQL="rm -f ans*/query.log" 20status=0 21n=0 22 23n=$((n+1)) 24echo_i "query for .good is not minimized when qname-minimization is off ($n)" 25ret=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 29grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 30grep "icky.icky.icky.ptang.zoop.boing.good. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 31sleep 1 32cat << __EOF | $DIFF ans2/query.log - > /dev/null || ret=1 33ADDR icky.icky.icky.ptang.zoop.boing.good. 34ADDR ns3.good. 35ADDR ns3.good. 36ADDR a.bit.longer.ns.name.good. 37ADDR a.bit.longer.ns.name.good. 38__EOF 39echo "ADDR icky.icky.icky.ptang.zoop.boing.good." | $DIFF ans3/query.log - > /dev/null || ret=1 40echo "ADDR icky.icky.icky.ptang.zoop.boing.good." | $DIFF ans4/query.log - > /dev/null || ret=1 41for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 42if [ $ret != 0 ]; then echo_i "failed"; fi 43status=$((status+ret)) 44 45n=$((n+1)) 46echo_i "query for .bad is not minimized when qname-minimization is off ($n)" 47ret=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 51grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 52grep "icky.icky.icky.ptang.zoop.boing.bad. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 53sleep 1 54cat << __EOF | $DIFF ans2/query.log - > /dev/null || ret=1 55ADDR icky.icky.icky.ptang.zoop.boing.bad. 56ADDR ns3.bad. 57ADDR ns3.bad. 58ADDR a.bit.longer.ns.name.bad. 59ADDR a.bit.longer.ns.name.bad. 60__EOF 61echo "ADDR icky.icky.icky.ptang.zoop.boing.bad." | $DIFF ans3/query.log - > /dev/null || ret=1 62echo "ADDR icky.icky.icky.ptang.zoop.boing.bad." | $DIFF ans4/query.log - > /dev/null || ret=1 63for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 64if [ $ret != 0 ]; then echo_i "failed"; fi 65status=$((status+ret)) 66 67n=$((n+1)) 68echo_i "query for .slow is not minimized when qname-minimization is off ($n)" 69ret=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 73sleep 5 74grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 75grep "icky.icky.icky.ptang.zoop.boing.slow. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 76sleep 1 77cat << __EOF | $DIFF ans2/query.log - > /dev/null || ret=1 78ADDR icky.icky.icky.ptang.zoop.boing.slow. 79ADDR ns3.slow. 80ADDR ns3.slow. 81ADDR a.bit.longer.ns.name.slow. 82ADDR a.bit.longer.ns.name.slow. 83__EOF 84echo "ADDR icky.icky.icky.ptang.zoop.boing.slow." | $DIFF ans3/query.log - > /dev/null || ret=1 85echo "ADDR icky.icky.icky.ptang.zoop.boing.slow." | $DIFF ans4/query.log - > /dev/null || ret=1 86for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 87if [ $ret != 0 ]; then echo_i "failed"; fi 88status=$((status+ret)) 89 90n=$((n+1)) 91echo_i "query for .ugly is not minimized when qname-minimization is off ($n)" 92ret=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 96sleep 5 97grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 98grep "icky.icky.icky.ptang.zoop.boing.ugly. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 99sleep 1 100cat << __EOF | $DIFF ans2/query.log - > /dev/null || ret=1 101ADDR icky.icky.icky.ptang.zoop.boing.ugly. 102ADDR ns3.ugly. 103ADDR ns3.ugly. 104ADDR a.bit.longer.ns.name.ugly. 105ADDR a.bit.longer.ns.name.ugly. 106__EOF 107echo "ADDR icky.icky.icky.ptang.zoop.boing.ugly." | $DIFF ans3/query.log - > /dev/null || ret=1 108echo "ADDR icky.icky.icky.ptang.zoop.boing.ugly." | $DIFF ans4/query.log - > /dev/null || ret=1 109for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 110if [ $ret != 0 ]; then echo_i "failed"; fi 111status=$((status+ret)) 112 113n=$((n+1)) 114echo_i "query for .good is properly minimized when qname-minimization is in strict mode ($n)" 115ret=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 119grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 120grep "icky.icky.icky.ptang.zoop.boing.good. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 121sleep 1 122sort ans2/query.log > ans2/query.log.sorted 123cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 124ADDR a.bit.longer.ns.name.good. 125ADDR a.bit.longer.ns.name.good. 126ADDR ns2.good. 127ADDR ns3.good. 128ADDR ns3.good. 129NS boing.good. 130NS good. 131NS zoop.boing.good. 132__EOF 133cat << __EOF | $DIFF ans3/query.log - > /dev/null || ret=1 134NS zoop.boing.good. 135NS ptang.zoop.boing.good. 136NS icky.ptang.zoop.boing.good. 137__EOF 138cat << __EOF | $DIFF ans4/query.log - > /dev/null || ret=1 139NS icky.ptang.zoop.boing.good. 140NS icky.icky.ptang.zoop.boing.good. 141ADDR icky.icky.icky.ptang.zoop.boing.good. 142__EOF 143for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 144if [ $ret != 0 ]; then echo_i "failed"; fi 145status=$((status+ret)) 146 147n=$((n+1)) 148echo_i "query for .good is properly minimized when qname-minimization is in relaxed mode ($n)" 149ret=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 153grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 154grep "icky.icky.icky.ptang.zoop.boing.good. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 155sleep 1 156sort ans2/query.log > ans2/query.log.sorted 157cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 158ADDR _.boing.good. 159ADDR _.zoop.boing.good. 160ADDR a.bit.longer.ns.name.good. 161ADDR a.bit.longer.ns.name.good. 162ADDR ns2.good. 163ADDR ns3.good. 164ADDR ns3.good. 165__EOF 166cat << __EOF | $DIFF ans3/query.log - > /dev/null || ret=1 167ADDR _.ptang.zoop.boing.good. 168ADDR _.icky.ptang.zoop.boing.good. 169__EOF 170cat << __EOF | $DIFF ans4/query.log - > /dev/null || ret=1 171ADDR _.icky.icky.ptang.zoop.boing.good. 172ADDR icky.icky.icky.ptang.zoop.boing.good. 173__EOF 174for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 175if [ $ret != 0 ]; then echo_i "failed"; fi 176status=$((status+ret)) 177 178n=$((n+1)) 179echo_i "query for .bad fails when qname-minimization is in strict mode ($n)" 180ret=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 184grep "status: NXDOMAIN" dig.out.test$n > /dev/null || ret=1 185sleep 1 186sort ans2/query.log > ans2/query.log.sorted 187cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 188ADDR ns2.bad. 189NS bad. 190NS boing.bad. 191__EOF 192for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 193if [ $ret != 0 ]; then echo_i "failed"; fi 194status=$((status+ret)) 195 196n=$((n+1)) 197echo_i "query for .bad succeeds when qname-minimization is in relaxed mode ($n)" 198ret=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 202grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 203grep "icky.icky.icky.ptang.zoop.boing.bad. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 204sleep 1 205sort ans2/query.log > ans2/query.log.sorted 206cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 207ADDR _.boing.bad. 208ADDR _.zoop.boing.bad. 209ADDR a.bit.longer.ns.name.bad. 210ADDR a.bit.longer.ns.name.bad. 211ADDR ns2.bad. 212ADDR ns3.bad. 213ADDR ns3.bad. 214__EOF 215cat << __EOF | $DIFF ans3/query.log - > /dev/null || ret=1 216ADDR _.ptang.zoop.boing.bad. 217ADDR _.icky.ptang.zoop.boing.bad. 218__EOF 219cat << __EOF | $DIFF ans4/query.log - > /dev/null || ret=1 220ADDR _.icky.icky.ptang.zoop.boing.bad. 221ADDR icky.icky.icky.ptang.zoop.boing.bad. 222__EOF 223for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 224if [ $ret != 0 ]; then echo_i "failed"; fi 225status=$((status+ret)) 226 227n=$((n+1)) 228echo_i "query for .ugly fails when qname-minimization is in strict mode ($n)" 229ret=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 233grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1 234sleep 1 235sort ans2/query.log > ans2/query.log.sorted 236cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 237ADDR ns2.ugly. 238NS boing.ugly. 239NS boing.ugly. 240NS ugly. 241__EOF 242for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 243if [ $ret != 0 ]; then echo_i "failed"; fi 244status=$((status+ret)) 245$RNDCCMD 10.53.0.6 flush 246 247n=$((n+1)) 248echo_i "query for .ugly succeeds when qname-minimization is in relaxed mode ($n)" 249ret=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 253grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 254grep "icky.icky.icky.ptang.zoop.boing.ugly. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 255sleep 1 256 257sort ans2/query.log > ans2/query.log.sorted 258cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 259ADDR _.boing.ugly. 260ADDR _.boing.ugly. 261ADDR a.bit.longer.ns.name.ugly. 262ADDR a.bit.longer.ns.name.ugly. 263ADDR icky.icky.icky.ptang.zoop.boing.ugly. 264ADDR ns2.ugly. 265ADDR ns3.ugly. 266ADDR ns3.ugly. 267__EOF 268echo "ADDR icky.icky.icky.ptang.zoop.boing.ugly." | $DIFF ans3/query.log - > /dev/null || ret=1 269echo "ADDR icky.icky.icky.ptang.zoop.boing.ugly." | $DIFF ans4/query.log - > /dev/null || ret=1 270for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 271if [ $ret != 0 ]; then echo_i "failed"; fi 272status=$((status+ret)) 273$RNDCCMD 10.53.0.7 flush 274 275n=$((n+1)) 276echo_i "information that minimization was unsuccessful for .ugly is logged ($n)" 277ret=0 278grep "success resolving 'icky.icky.icky.ptang.zoop.boing.ugly/A' after disabling qname minimization due to 'FORMERR'" ns7/named.run > /dev/null || ret=1 279if [ $ret != 0 ]; then echo_i "failed"; fi 280status=$((status+ret)) 281 282n=$((n+1)) 283echo_i "query for .slow is properly minimized when qname-minimization is on ($n)" 284ret=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 288sleep 5 289grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 290grep "icky.icky.icky.ptang.zoop.boing.slow. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 291sort ans2/query.log > ans2/query.log.sorted 292cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 293ADDR a.bit.longer.ns.name.slow. 294ADDR a.bit.longer.ns.name.slow. 295ADDR ns2.slow. 296ADDR ns3.slow. 297ADDR ns3.slow. 298NS boing.slow. 299NS slow. 300NS zoop.boing.slow. 301__EOF 302cat << __EOF | $DIFF ans3/query.log - > /dev/null || ret=1 303NS zoop.boing.slow. 304NS ptang.zoop.boing.slow. 305NS icky.ptang.zoop.boing.slow. 306__EOF 307cat << __EOF | $DIFF ans4/query.log - > /dev/null || ret=1 308NS icky.ptang.zoop.boing.slow. 309NS icky.icky.ptang.zoop.boing.slow. 310ADDR icky.icky.icky.ptang.zoop.boing.slow. 311__EOF 312for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 313if [ $ret != 0 ]; then echo_i "failed"; fi 314status=$((status+ret)) 315 316n=$((n+1)) 317echo_i "query for .ip6.arpa succeeds and skips on proper boundaries when qname-minimization is on ($n)" 318ret=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 322grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 323grep "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 324sleep 1 325grep -v ADDR ans2/query.log > ans2/query.log.trimmed 326cat << __EOF | $DIFF ans2/query.log.trimmed - > /dev/null || ret=1 327NS 1.0.0.2.ip6.arpa. 328NS 8.f.4.0.1.0.0.2.ip6.arpa. 329NS 0.0.0.0.8.f.4.0.1.0.0.2.ip6.arpa. 330NS 0.0.0.0.0.0.8.f.4.0.1.0.0.2.ip6.arpa. 331NS 0.0.0.0.0.0.0.0.8.f.4.0.1.0.0.2.ip6.arpa. 332PTR 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 334for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 335if [ $ret != 0 ]; then echo_i "failed"; fi 336status=$((status+ret)) 337 338n=$((n+1)) 339echo_i "query for multiple label name skips after 7th label ($n)" 340ret=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 344grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 345grep "more.icky.icky.icky.ptang.zoop.boing.good. 1 IN A 192.0.2.2" dig.out.test$n > /dev/null || ret=1 346sleep 1 347sort ans2/query.log > ans2/query.log.sorted 348cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 349ADDR a.bit.longer.ns.name.good. 350ADDR a.bit.longer.ns.name.good. 351ADDR ns2.good. 352ADDR ns3.good. 353ADDR ns3.good. 354NS boing.good. 355NS good. 356NS zoop.boing.good. 357__EOF 358cat << __EOF | $DIFF ans3/query.log - > /dev/null || ret=1 359NS zoop.boing.good. 360NS ptang.zoop.boing.good. 361NS icky.ptang.zoop.boing.good. 362__EOF 363# There's no NS icky.icky.icky.ptang.zoop.boing.good. query - we skipped it. 364cat << __EOF | $DIFF ans4/query.log - > /dev/null || ret=1 365NS icky.ptang.zoop.boing.good. 366NS icky.icky.ptang.zoop.boing.good. 367ADDR more.icky.icky.icky.ptang.zoop.boing.good. 368__EOF 369for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 370if [ $ret != 0 ]; then echo_i "failed"; fi 371status=$((status+ret)) 372 373n=$((n+1)) 374echo_i "qname minimization is disabled when forwarding ($n)" 375ret=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 379grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 380grep "a.bit.longer.ns.name.fwd. 1 IN A 10.53.0.4" dig.out.test$n >/dev/null || ret=1 381sleep 1 382cat << __EOF | $DIFF ans2/query.log - > /dev/null || ret=1 383ADDR a.bit.longer.ns.name.fwd. 384__EOF 385for ans in ans2; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 386if [ $ret != 0 ]; then echo_i "failed"; fi 387status=$((status+ret)) 388 389n=$((n+1)) 390echo_i "qname minimization resolves unusual ip6.arpa. names ($n)" 391ret=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 394grep "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" 398grep 'ip6\.arpa.*TXT.*long_ip6_name' dig.out.test$n > /dev/null || ret=1 399for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 400if [ $ret != 0 ]; then echo_i "failed"; fi 401status=$((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. 410n=$((n+1)) 411echo_i "query for .stale is not minimized when qname-minimization is off ($n)" 412ret=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 416grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 417grep "a\.b\.stale\..*1.*IN.*TXT.*peekaboo" dig.out.test$n > /dev/null || ret=1 418sleep 1 419echo "TXT a.b.stale." | $DIFF ans2/query.log - > /dev/null || ret=1 420echo "TXT a.b.stale." | $DIFF ans3/query.log - > /dev/null || ret=1 421test -f ans4/query.log && ret=1 422for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 423if [ $ret != 0 ]; then echo_i "failed"; fi 424status=$((status+ret)) 425 426n=$((n+1)) 427echo_i "query for .stale is properly minimized when qname-minimization is in strict mode ($n)" 428ret=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 432grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 433grep "a\.b\.stale\..*1.*IN.*TXT.*hooray" dig.out.test$n > /dev/null || ret=1 434sleep 1 435sort ans2/query.log > ans2/query.log.sorted 436cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 437ADDR ns.b.stale. 438ADDR ns2.stale. 439NS b.stale. 440NS stale. 441__EOF 442test -f ans3/query.log && ret=1 443sort ans4/query.log > ans4/query.log.sorted 444cat << __EOF | $DIFF ans4/query.log.sorted - > /dev/null || ret=1 445ADDR ns.b.stale. 446NS b.stale. 447TXT a.b.stale. 448__EOF 449for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 450if [ $ret != 0 ]; then echo_i "failed"; fi 451status=$((status+ret)) 452 453n=$((n+1)) 454echo_i "query for .stale is properly minimized when qname-minimization is in relaxed mode ($n)" 455ret=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 459grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 460grep "a\.b\.stale\..*1.*IN.*TXT.*hooray" dig.out.test$n > /dev/null || ret=1 461sleep 1 462sort ans2/query.log > ans2/query.log.sorted 463cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 464ADDR _.b.stale. 465ADDR ns.b.stale. 466ADDR ns2.stale. 467__EOF 468test -f ans3/query.log && ret=1 469sort ans4/query.log > ans4/query.log.sorted 470cat << __EOF | $DIFF ans4/query.log.sorted - > /dev/null || ret=1 471ADDR ns.b.stale. 472TXT a.b.stale. 473__EOF 474for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 475if [ $ret != 0 ]; then echo_i "failed"; fi 476status=$((status+ret)) 477 478echo_i "sleep 2, allow entries in cache to go stale" 479sleep 2 480 481n=$((n+1)) 482echo_i "query for .stale is not minimized when qname-minimization is off (stale cache) ($n)" 483ret=0 484$CLEANQL 485$DIG $DIGOPTS @10.53.0.5 txt a.b.stale. > dig.out.test$n 486grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 487grep "a\.b\.stale\..*1.*IN.*TXT.*peekaboo" dig.out.test$n > /dev/null || ret=1 488sleep 1 489echo "TXT a.b.stale." | $DIFF ans2/query.log - > /dev/null || ret=1 490echo "TXT a.b.stale." | $DIFF ans3/query.log - > /dev/null || ret=1 491test -f ans4/query.log && ret=1 492for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 493if [ $ret != 0 ]; then echo_i "failed"; fi 494status=$((status+ret)) 495 496n=$((n+1)) 497echo_i "query for .stale is properly minimized when qname-minimization is in strict mode (stale cache) ($n)" 498ret=0 499$CLEANQL 500$DIG $DIGOPTS @10.53.0.6 txt a.b.stale. > dig.out.test$n 501grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 502grep "a\.b\.stale\..*1.*IN.*TXT.*hooray" dig.out.test$n > /dev/null || ret=1 503sleep 1 504sort ans2/query.log > ans2/query.log.sorted 505cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 506NS b.stale. 507NS stale. 508__EOF 509test -f ans3/query.log && ret=1 510sort ans4/query.log > ans4/query.log.sorted 511cat << __EOF | $DIFF ans4/query.log.sorted - > /dev/null || ret=1 512NS b.stale. 513TXT a.b.stale. 514__EOF 515for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 516if [ $ret != 0 ]; then echo_i "failed"; fi 517status=$((status+ret)) 518 519n=$((n+1)) 520echo_i "query for .stale is properly minimized when qname-minimization is in relaxed mode (stale cache) ($n)" 521ret=0 522$CLEANQL 523$DIG $DIGOPTS @10.53.0.7 txt a.b.stale. > dig.out.test$n 524grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 525grep "a\.b\.stale\..*1.*IN.*TXT.*hooray" dig.out.test$n > /dev/null || ret=1 526sleep 1 527sort ans2/query.log > ans2/query.log.sorted 528cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 529ADDR _.b.stale. 530__EOF 531test -f ans3/query.log && ret=1 532sort ans4/query.log > ans4/query.log.sorted 533cat << __EOF | $DIFF ans4/query.log.sorted - > /dev/null || ret=1 534TXT a.b.stale. 535__EOF 536for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 537if [ $ret != 0 ]; then echo_i "failed"; fi 538status=$((status+ret)) 539 540echo_i "exit status: $status" 541[ $status -eq 0 ] || exit 1 542