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 boing.good. 131 NS good. 132 NS zoop.boing.good. 133 __EOF 134 cat <<__EOF | diff ans3/query.log - >/dev/null || ret=1 135 NS zoop.boing.good. 136 NS ptang.zoop.boing.good. 137 NS icky.ptang.zoop.boing.good. 138 __EOF 139 cat <<__EOF | diff ans4/query.log - >/dev/null || ret=1 140 NS icky.ptang.zoop.boing.good. 141 NS icky.icky.ptang.zoop.boing.good. 142 ADDR icky.icky.icky.ptang.zoop.boing.good. 143 __EOF 144 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 145 if [ $ret != 0 ]; then echo_i "failed"; fi 146 status=$((status + ret)) 147 148 n=$((n + 1)) 149 echo_i "query for .good is properly minimized when qname-minimization is in relaxed mode ($n)" 150 ret=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 || ret=1 154 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1 155 grep "icky.icky.icky.ptang.zoop.boing.good. 1 IN A 192.0.2.1" dig.out.test$n >/dev/null || ret=1 156 sleep 1 157 sort ans2/query.log >ans2/query.log.sorted 158 cat <<__EOF | diff ans2/query.log.sorted - >/dev/null || ret=1 159 ADDR a.bit.longer.ns.name.good. 160 ADDR a.bit.longer.ns.name.good. 161 ADDR ns2.good. 162 ADDR ns3.good. 163 ADDR ns3.good. 164 NS boing.good. 165 NS zoop.boing.good. 166 __EOF 167 cat <<__EOF | diff ans3/query.log - >/dev/null || ret=1 168 NS ptang.zoop.boing.good. 169 NS icky.ptang.zoop.boing.good. 170 __EOF 171 cat <<__EOF | diff ans4/query.log - >/dev/null || ret=1 172 NS icky.icky.ptang.zoop.boing.good. 173 ADDR icky.icky.icky.ptang.zoop.boing.good. 174 __EOF 175 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 176 if [ $ret != 0 ]; then echo_i "failed"; fi 177 status=$((status + ret)) 178 179 n=$((n + 1)) 180 echo_i "query for .bad fails when qname-minimization is in strict mode ($n)" 181 ret=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 || ret=1 185 grep "status: NXDOMAIN" dig.out.test$n >/dev/null || ret=1 186 sleep 1 187 sort ans2/query.log >ans2/query.log.sorted 188 cat <<__EOF | diff ans2/query.log.sorted - >/dev/null || ret=1 189 ADDR ns2.bad. 190 NS bad. 191 NS boing.bad. 192 __EOF 193 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 194 if [ $ret != 0 ]; then echo_i "failed"; fi 195 status=$((status + ret)) 196 197 n=$((n + 1)) 198 echo_i "query for .bad succeeds when qname-minimization is in relaxed mode ($n)" 199 ret=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 || ret=1 203 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1 204 grep "icky.icky.icky.ptang.zoop.boing.bad. 1 IN A 192.0.2.1" dig.out.test$n >/dev/null || ret=1 205 sleep 1 206 sort ans2/query.log >ans2/query.log.sorted 207 cat <<__EOF | diff ans2/query.log.sorted - >/dev/null || ret=1 208 ADDR a.bit.longer.ns.name.bad. 209 ADDR a.bit.longer.ns.name.bad. 210 ADDR icky.icky.icky.ptang.zoop.boing.bad. 211 ADDR ns2.bad. 212 ADDR ns3.bad. 213 ADDR ns3.bad. 214 NS boing.bad. 215 __EOF 216 cat <<__EOF | diff ans3/query.log - >/dev/null || ret=1 217 ADDR icky.icky.icky.ptang.zoop.boing.bad. 218 __EOF 219 cat <<__EOF | diff ans4/query.log - >/dev/null || ret=1 220 ADDR icky.icky.icky.ptang.zoop.boing.bad. 221 __EOF 222 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 223 if [ $ret != 0 ]; then echo_i "failed"; fi 224 status=$((status + ret)) 225 226 n=$((n + 1)) 227 echo_i "query for .ugly fails when qname-minimization is in strict mode ($n)" 228 ret=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 || ret=1 232 grep "status: SERVFAIL" dig.out.test$n >/dev/null || ret=1 233 sleep 1 234 sort ans2/query.log >ans2/query.log.sorted 235 cat <<__EOF | diff ans2/query.log.sorted - >/dev/null || ret=1 236 ADDR ns2.ugly. 237 NS boing.ugly. 238 NS ugly. 239 __EOF 240 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 241 if [ $ret != 0 ]; then echo_i "failed"; fi 242 status=$((status + ret)) 243 $RNDCCMD 10.53.0.6 flush 244 245 n=$((n + 1)) 246 echo_i "query for .ugly succeeds when qname-minimization is in relaxed mode ($n)" 247 ret=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 || ret=1 251 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1 252 grep "icky.icky.icky.ptang.zoop.boing.ugly. 1 IN A 192.0.2.1" dig.out.test$n >/dev/null || ret=1 253 sleep 1 254 sort ans2/query.log >ans2/query.log.sorted 255 cat <<__EOF | diff ans2/query.log.sorted - >/dev/null || ret=1 256 ADDR a.bit.longer.ns.name.ugly. 257 ADDR a.bit.longer.ns.name.ugly. 258 ADDR icky.icky.icky.ptang.zoop.boing.ugly. 259 ADDR ns2.ugly. 260 ADDR ns3.ugly. 261 ADDR ns3.ugly. 262 NS boing.ugly. 263 __EOF 264 echo "ADDR icky.icky.icky.ptang.zoop.boing.ugly." | diff ans3/query.log - >/dev/null || ret=1 265 echo "ADDR icky.icky.icky.ptang.zoop.boing.ugly." | diff ans4/query.log - >/dev/null || ret=1 266 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 267 if [ $ret != 0 ]; then echo_i "failed"; fi 268 status=$((status + ret)) 269 $RNDCCMD 10.53.0.7 flush 270 271 n=$((n + 1)) 272 echo_i "information that minimization was unsuccessful for .ugly is logged in relaxed mode ($n)" 273 ret=0 274 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 275 if [ $ret != 0 ]; then echo_i "failed"; fi 276 status=$((status + ret)) 277 278 n=$((n + 1)) 279 echo_i "query for .slow is properly minimized when qname-minimization is on ($n)" 280 ret=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 || ret=1 284 sleep 5 285 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1 286 grep "icky.icky.icky.ptang.zoop.boing.slow. 1 IN A 192.0.2.1" dig.out.test$n >/dev/null || ret=1 287 sort ans2/query.log >ans2/query.log.sorted 288 cat <<__EOF | diff ans2/query.log.sorted - >/dev/null || ret=1 289 ADDR a.bit.longer.ns.name.slow. 290 ADDR a.bit.longer.ns.name.slow. 291 ADDR ns2.slow. 292 ADDR ns3.slow. 293 ADDR ns3.slow. 294 NS boing.slow. 295 NS slow. 296 NS zoop.boing.slow. 297 __EOF 298 cat <<__EOF | diff ans3/query.log - >/dev/null || ret=1 299 NS zoop.boing.slow. 300 NS ptang.zoop.boing.slow. 301 NS icky.ptang.zoop.boing.slow. 302 __EOF 303 cat <<__EOF | diff ans4/query.log - >/dev/null || ret=1 304 NS icky.ptang.zoop.boing.slow. 305 NS icky.icky.ptang.zoop.boing.slow. 306 ADDR icky.icky.icky.ptang.zoop.boing.slow. 307 __EOF 308 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 309 if [ $ret != 0 ]; then echo_i "failed"; fi 310 status=$((status + ret)) 311 312 n=$((n + 1)) 313 echo_i "query for .ip6.arpa succeeds and skips on proper boundaries when qname-minimization is on ($n)" 314 ret=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 || ret=1 318 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1 319 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 320 sleep 1 321 grep -v ADDR ans2/query.log >ans2/query.log.trimmed 322 cat <<__EOF | diff ans2/query.log.trimmed - >/dev/null || ret=1 323 NS 1.0.0.2.ip6.arpa. 324 NS 8.f.4.0.1.0.0.2.ip6.arpa. 325 NS 0.0.0.0.8.f.4.0.1.0.0.2.ip6.arpa. 326 NS 0.0.0.0.0.0.8.f.4.0.1.0.0.2.ip6.arpa. 327 NS 0.0.0.0.0.0.0.0.8.f.4.0.1.0.0.2.ip6.arpa. 328 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. 329 __EOF 330 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 331 if [ $ret != 0 ]; then echo_i "failed"; fi 332 status=$((status + ret)) 333 334 n=$((n + 1)) 335 echo_i "query for multiple label name skips after 7th label ($n)" 336 ret=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 || ret=1 340 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1 341 grep "more.icky.icky.icky.ptang.zoop.boing.good. 1 IN A 192.0.2.2" dig.out.test$n >/dev/null || ret=1 342 sleep 1 343 sort ans2/query.log >ans2/query.log.sorted 344 cat <<__EOF | diff ans2/query.log.sorted - >/dev/null || ret=1 345 ADDR a.bit.longer.ns.name.good. 346 ADDR a.bit.longer.ns.name.good. 347 ADDR ns2.good. 348 ADDR ns3.good. 349 ADDR ns3.good. 350 NS boing.good. 351 NS good. 352 NS zoop.boing.good. 353 __EOF 354 cat <<__EOF | diff ans3/query.log - >/dev/null || ret=1 355 NS zoop.boing.good. 356 NS ptang.zoop.boing.good. 357 NS icky.ptang.zoop.boing.good. 358 __EOF 359 # There's no NS icky.icky.icky.ptang.zoop.boing.good. query - we skipped it. 360 cat <<__EOF | diff ans4/query.log - >/dev/null || ret=1 361 NS icky.ptang.zoop.boing.good. 362 NS icky.icky.ptang.zoop.boing.good. 363 ADDR more.icky.icky.icky.ptang.zoop.boing.good. 364 __EOF 365 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 366 if [ $ret != 0 ]; then echo_i "failed"; fi 367 status=$((status + ret)) 368 369 n=$((n + 1)) 370 echo_i "qname minimization is disabled when forwarding ($n)" 371 ret=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 || ret=1 375 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1 376 grep "a.bit.longer.ns.name.fwd. 1 IN A 10.53.0.4" dig.out.test$n >/dev/null || ret=1 377 sleep 1 378 cat <<__EOF | diff ans2/query.log - >/dev/null || ret=1 379 ADDR a.bit.longer.ns.name.fwd. 380 __EOF 381 for ans in ans2; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 382 if [ $ret != 0 ]; then echo_i "failed"; fi 383 status=$((status + ret)) 384 385 n=$((n + 1)) 386 echo_i "qname minimization resolves unusual ip6.arpa. names ($n)" 387 ret=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 || ret=1 390 grep "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" 394 grep 'ip6\.arpa.*TXT.*long_ip6_name' dig.out.test$n >/dev/null || ret=1 395 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 396 if [ $ret != 0 ]; then echo_i "failed"; fi 397 status=$((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. 406 n=$((n + 1)) 407 echo_i "query for .stale is not minimized when qname-minimization is off ($n)" 408 ret=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 || ret=1 412 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1 413 grep "a\.b\.stale\..*1.*IN.*TXT.*peekaboo" dig.out.test$n >/dev/null || ret=1 414 sleep 1 415 echo "TXT a.b.stale." | diff ans2/query.log - >/dev/null || ret=1 416 echo "TXT a.b.stale." | diff ans3/query.log - >/dev/null || ret=1 417 test -f ans4/query.log && ret=1 418 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 419 if [ $ret != 0 ]; then echo_i "failed"; fi 420 status=$((status + ret)) 421 422 n=$((n + 1)) 423 echo_i "query for .stale is properly minimized when qname-minimization is in strict mode ($n)" 424 ret=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 || ret=1 428 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1 429 grep "a\.b\.stale\..*1.*IN.*TXT.*hooray" dig.out.test$n >/dev/null || ret=1 430 sleep 1 431 sort ans2/query.log >ans2/query.log.sorted 432 cat <<__EOF | diff ans2/query.log.sorted - >/dev/null || ret=1 433 ADDR ns.b.stale. 434 ADDR ns2.stale. 435 NS b.stale. 436 NS stale. 437 __EOF 438 test -f ans3/query.log && ret=1 439 sort ans4/query.log >ans4/query.log.sorted 440 cat <<__EOF | diff ans4/query.log.sorted - >/dev/null || ret=1 441 ADDR ns.b.stale. 442 NS b.stale. 443 TXT a.b.stale. 444 __EOF 445 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 446 if [ $ret != 0 ]; then echo_i "failed"; fi 447 status=$((status + ret)) 448 449 n=$((n + 1)) 450 echo_i "query for .stale is properly minimized when qname-minimization is in relaxed mode ($n)" 451 ret=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 || ret=1 455 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1 456 grep "a\.b\.stale\..*1.*IN.*TXT.*hooray" dig.out.test$n >/dev/null || ret=1 457 sleep 1 458 sort ans2/query.log >ans2/query.log.sorted 459 cat <<__EOF | diff ans2/query.log.sorted - >/dev/null || ret=1 460 ADDR ns.b.stale. 461 ADDR ns2.stale. 462 NS b.stale. 463 __EOF 464 test -f ans3/query.log && ret=1 465 sort ans4/query.log >ans4/query.log.sorted 466 cat <<__EOF | diff ans4/query.log.sorted - >/dev/null || ret=1 467 ADDR ns.b.stale. 468 TXT a.b.stale. 469 __EOF 470 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 471 if [ $ret != 0 ]; then echo_i "failed"; fi 472 status=$((status + ret)) 473 474 echo_i "sleep 2, allow entries in cache to go stale" 475 sleep 2 476 477 n=$((n + 1)) 478 echo_i "query for .stale is not minimized when qname-minimization is off (stale cache) ($n)" 479 ret=0 480 $CLEANQL 481 $DIG $DIGOPTS @10.53.0.5 txt a.b.stale. >dig.out.test$n || ret=1 482 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1 483 grep "a\.b\.stale\..*1.*IN.*TXT.*peekaboo" dig.out.test$n >/dev/null || ret=1 484 sleep 1 485 echo "TXT a.b.stale." | diff ans2/query.log - >/dev/null || ret=1 486 echo "TXT a.b.stale." | diff ans3/query.log - >/dev/null || ret=1 487 test -f ans4/query.log && ret=1 488 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 489 if [ $ret != 0 ]; then echo_i "failed"; fi 490 status=$((status + ret)) 491 492 n=$((n + 1)) 493 echo_i "query for .stale is properly minimized when qname-minimization is in strict mode (stale cache) ($n)" 494 ret=0 495 $CLEANQL 496 $DIG $DIGOPTS @10.53.0.6 txt a.b.stale. >dig.out.test$n || ret=1 497 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1 498 grep "a\.b\.stale\..*1.*IN.*TXT.*hooray" dig.out.test$n >/dev/null || ret=1 499 sleep 1 500 sort ans2/query.log >ans2/query.log.sorted 501 cat <<__EOF | diff ans2/query.log.sorted - >/dev/null || ret=1 502 NS b.stale. 503 NS stale. 504 __EOF 505 test -f ans3/query.log && ret=1 506 sort ans4/query.log >ans4/query.log.sorted 507 cat <<__EOF | diff ans4/query.log.sorted - >/dev/null || ret=1 508 NS b.stale. 509 TXT a.b.stale. 510 __EOF 511 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 512 if [ $ret != 0 ]; then echo_i "failed"; fi 513 status=$((status + ret)) 514 515 n=$((n + 1)) 516 echo_i "query for .stale is properly minimized when qname-minimization is in relaxed mode (stale cache) ($n)" 517 ret=0 518 $CLEANQL 519 $DIG $DIGOPTS @10.53.0.7 txt a.b.stale. >dig.out.test$n || ret=1 520 grep "status: NOERROR" dig.out.test$n >/dev/null || ret=1 521 grep "a\.b\.stale\..*1.*IN.*TXT.*hooray" dig.out.test$n >/dev/null || ret=1 522 sleep 1 523 sort ans2/query.log >ans2/query.log.sorted 524 cat <<__EOF | diff ans2/query.log.sorted - >/dev/null || ret=1 525 NS b.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 TXT a.b.stale. 531 __EOF 532 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 533 if [ $ret != 0 ]; then echo_i "failed"; fi 534 status=$((status + ret)) 535 536 n=$((n + 1)) 537 echo_i "test that \"success resolving\" is not logged for NXDOMAIN final answer when qname-minimization is in relaxed mode ($n)" 538 ret=0 539 nextpart ns7/named.run >/dev/null 540 $DIG $DIGOPTS 1.0.53.10.in-addr.arpa ptr @10.53.0.7 >dig.out.test$n || ret=1 541 nextpart ns7/named.run >named.run.test$n 542 grep "status: NXDOMAIN" dig.out.test$n >/dev/null || ret=1 543 grep "success resolving" named.run.test$n >/dev/null && ret=1 544 if [ $ret != 0 ]; then echo_i "failed"; fi 545 status=$((status + ret)) 546 547 echo_i "exit status: $status" 548 [ $status -eq 0 ] || exit 1 549