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