1 #!/bin/sh 2 # 3 # Copyright (C) Internet Systems Consortium, Inc. ("ISC") 4 # 5 # This Source Code Form is subject to the terms of the Mozilla Public 6 # License, v. 2.0. If a copy of the MPL was not distributed with this 7 # file, You can obtain one at http://mozilla.org/MPL/2.0/. 8 # 9 # See the COPYRIGHT file distributed with this work for additional 10 # information regarding copyright ownership. 11 12 SYSTEMTESTTOP=.. 13 . $SYSTEMTESTTOP/conf.sh 14 15 DIGOPTS="-p ${PORT}" 16 RNDCCMD="$RNDC -c $SYSTEMTESTTOP/common/rndc.conf -p ${CONTROLPORT} -s" 17 CLEANQL="rm -f ans*/query.log" 18 status=0 19 n=0 20 21 n=`expr $n + 1` 22 echo_i "query for .good is not minimized when qname-minimization is off ($n)" 23 ret=0 24 $CLEANQL 25 $RNDCCMD 10.53.0.5 flush 26 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.good. @10.53.0.5 > dig.out.test$n 27 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 28 grep "icky.icky.icky.ptang.zoop.boing.good. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 29 sleep 1 30 cat << __EOF | $DIFF ans2/query.log - > /dev/null || ret=1 31 ADDR icky.icky.icky.ptang.zoop.boing.good. 32 ADDR ns3.good. 33 ADDR ns3.good. 34 ADDR a.bit.longer.ns.name.good. 35 ADDR a.bit.longer.ns.name.good. 36 __EOF 37 echo "ADDR icky.icky.icky.ptang.zoop.boing.good." | $DIFF ans3/query.log - > /dev/null || ret=1 38 echo "ADDR icky.icky.icky.ptang.zoop.boing.good." | $DIFF ans4/query.log - > /dev/null || ret=1 39 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 40 if [ $ret != 0 ]; then echo_i "failed"; fi 41 status=`expr $status + $ret` 42 43 n=`expr $n + 1` 44 echo_i "query for .bad is not minimized when qname-minimization is off ($n)" 45 ret=0 46 $CLEANQL 47 $RNDCCMD 10.53.0.5 flush 48 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.bad. @10.53.0.5 > dig.out.test$n 49 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 50 grep "icky.icky.icky.ptang.zoop.boing.bad. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 51 sleep 1 52 cat << __EOF | $DIFF ans2/query.log - > /dev/null || ret=1 53 ADDR icky.icky.icky.ptang.zoop.boing.bad. 54 ADDR ns3.bad. 55 ADDR ns3.bad. 56 ADDR a.bit.longer.ns.name.bad. 57 ADDR a.bit.longer.ns.name.bad. 58 __EOF 59 echo "ADDR icky.icky.icky.ptang.zoop.boing.bad." | $DIFF ans3/query.log - > /dev/null || ret=1 60 echo "ADDR icky.icky.icky.ptang.zoop.boing.bad." | $DIFF ans4/query.log - > /dev/null || ret=1 61 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 62 if [ $ret != 0 ]; then echo_i "failed"; fi 63 status=`expr $status + $ret` 64 65 n=`expr $n + 1` 66 echo_i "query for .slow is not minimized when qname-minimization is off ($n)" 67 ret=0 68 $CLEANQL 69 $RNDCCMD 10.53.0.5 flush 70 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.slow. @10.53.0.5 > dig.out.test$n 71 sleep 5 72 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 73 grep "icky.icky.icky.ptang.zoop.boing.slow. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 74 sleep 1 75 cat << __EOF | $DIFF ans2/query.log - > /dev/null || ret=1 76 ADDR icky.icky.icky.ptang.zoop.boing.slow. 77 ADDR ns3.slow. 78 ADDR ns3.slow. 79 ADDR a.bit.longer.ns.name.slow. 80 ADDR a.bit.longer.ns.name.slow. 81 __EOF 82 echo "ADDR icky.icky.icky.ptang.zoop.boing.slow." | $DIFF ans3/query.log - > /dev/null || ret=1 83 echo "ADDR icky.icky.icky.ptang.zoop.boing.slow." | $DIFF ans4/query.log - > /dev/null || ret=1 84 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 85 if [ $ret != 0 ]; then echo_i "failed"; fi 86 status=`expr $status + $ret` 87 88 n=`expr $n + 1` 89 echo_i "query for .ugly is not minimized when qname-minimization is off ($n)" 90 ret=0 91 $CLEANQL 92 $RNDCCMD 10.53.0.5 flush 93 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.ugly. @10.53.0.5 > dig.out.test$n 94 sleep 5 95 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 96 grep "icky.icky.icky.ptang.zoop.boing.ugly. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 97 sleep 1 98 cat << __EOF | $DIFF ans2/query.log - > /dev/null || ret=1 99 ADDR icky.icky.icky.ptang.zoop.boing.ugly. 100 ADDR ns3.ugly. 101 ADDR ns3.ugly. 102 ADDR a.bit.longer.ns.name.ugly. 103 ADDR a.bit.longer.ns.name.ugly. 104 __EOF 105 echo "ADDR icky.icky.icky.ptang.zoop.boing.ugly." | $DIFF ans3/query.log - > /dev/null || ret=1 106 echo "ADDR icky.icky.icky.ptang.zoop.boing.ugly." | $DIFF ans4/query.log - > /dev/null || ret=1 107 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 108 if [ $ret != 0 ]; then echo_i "failed"; fi 109 status=`expr $status + $ret` 110 111 n=`expr $n + 1` 112 echo_i "query for .good is properly minimized when qname-minimization is in strict mode ($n)" 113 ret=0 114 $CLEANQL 115 $RNDCCMD 10.53.0.6 flush 116 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.good. @10.53.0.6 > dig.out.test$n 117 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 118 grep "icky.icky.icky.ptang.zoop.boing.good. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 119 sleep 1 120 sort ans2/query.log > ans2/query.log.sorted 121 cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 122 ADDR a.bit.longer.ns.name.good. 123 ADDR a.bit.longer.ns.name.good. 124 ADDR ns2.good. 125 ADDR ns3.good. 126 ADDR ns3.good. 127 NS boing.good. 128 NS good. 129 NS zoop.boing.good. 130 __EOF 131 cat << __EOF | $DIFF ans3/query.log - > /dev/null || ret=1 132 NS zoop.boing.good. 133 NS ptang.zoop.boing.good. 134 NS icky.ptang.zoop.boing.good. 135 __EOF 136 cat << __EOF | $DIFF ans4/query.log - > /dev/null || ret=1 137 NS icky.ptang.zoop.boing.good. 138 NS icky.icky.ptang.zoop.boing.good. 139 ADDR icky.icky.icky.ptang.zoop.boing.good. 140 __EOF 141 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 142 if [ $ret != 0 ]; then echo_i "failed"; fi 143 status=`expr $status + $ret` 144 145 n=`expr $n + 1` 146 echo_i "query for .good is properly minimized when qname-minimization is in relaxed mode ($n)" 147 ret=0 148 $CLEANQL 149 $RNDCCMD 10.53.0.7 flush 150 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.good. @10.53.0.7 > dig.out.test$n 151 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 152 grep "icky.icky.icky.ptang.zoop.boing.good. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 153 sleep 1 154 sort ans2/query.log > ans2/query.log.sorted 155 cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 156 ADDR _.boing.good. 157 ADDR _.zoop.boing.good. 158 ADDR a.bit.longer.ns.name.good. 159 ADDR a.bit.longer.ns.name.good. 160 ADDR ns2.good. 161 ADDR ns3.good. 162 ADDR ns3.good. 163 __EOF 164 cat << __EOF | $DIFF ans3/query.log - > /dev/null || ret=1 165 ADDR _.ptang.zoop.boing.good. 166 ADDR _.icky.ptang.zoop.boing.good. 167 __EOF 168 cat << __EOF | $DIFF ans4/query.log - > /dev/null || ret=1 169 ADDR _.icky.icky.ptang.zoop.boing.good. 170 ADDR icky.icky.icky.ptang.zoop.boing.good. 171 __EOF 172 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 173 if [ $ret != 0 ]; then echo_i "failed"; fi 174 status=`expr $status + $ret` 175 176 n=`expr $n + 1` 177 echo_i "query for .bad fails when qname-minimization is in strict mode ($n)" 178 ret=0 179 $CLEANQL 180 $RNDCCMD 10.53.0.6 flush 181 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.bad. @10.53.0.6 > dig.out.test$n 182 grep "status: NXDOMAIN" dig.out.test$n > /dev/null || ret=1 183 sleep 1 184 sort ans2/query.log > ans2/query.log.sorted 185 cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 186 ADDR ns2.bad. 187 NS bad. 188 NS boing.bad. 189 __EOF 190 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 191 if [ $ret != 0 ]; then echo_i "failed"; fi 192 status=`expr $status + $ret` 193 194 n=`expr $n + 1` 195 echo_i "query for .bad succeeds when qname-minimization is in relaxed mode ($n)" 196 ret=0 197 $CLEANQL 198 $RNDCCMD 10.53.0.7 flush 199 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.bad. @10.53.0.7 > dig.out.test$n 200 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 201 grep "icky.icky.icky.ptang.zoop.boing.bad. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 202 sleep 1 203 sort ans2/query.log > ans2/query.log.sorted 204 cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 205 ADDR _.boing.bad. 206 ADDR _.zoop.boing.bad. 207 ADDR a.bit.longer.ns.name.bad. 208 ADDR a.bit.longer.ns.name.bad. 209 ADDR ns2.bad. 210 ADDR ns3.bad. 211 ADDR ns3.bad. 212 __EOF 213 cat << __EOF | $DIFF ans3/query.log - > /dev/null || ret=1 214 ADDR _.ptang.zoop.boing.bad. 215 ADDR _.icky.ptang.zoop.boing.bad. 216 __EOF 217 cat << __EOF | $DIFF ans4/query.log - > /dev/null || ret=1 218 ADDR _.icky.icky.ptang.zoop.boing.bad. 219 ADDR icky.icky.icky.ptang.zoop.boing.bad. 220 __EOF 221 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 222 if [ $ret != 0 ]; then echo_i "failed"; fi 223 status=`expr $status + $ret` 224 225 n=`expr $n + 1` 226 echo_i "query for .ugly fails when qname-minimization is in strict mode ($n)" 227 ret=0 228 $CLEANQL 229 $RNDCCMD 10.53.0.6 flush 230 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.ugly. @10.53.0.6 > dig.out.test$n 231 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1 232 sleep 1 233 sort ans2/query.log > ans2/query.log.sorted 234 cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 235 ADDR ns2.ugly. 236 NS boing.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=`expr $status + $ret` 243 $RNDCCMD 10.53.0.6 flush 244 245 n=`expr $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 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 255 sort ans2/query.log > ans2/query.log.sorted 256 cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || cat ans2/query.log.sorted 257 ADDR _.boing.ugly. 258 ADDR _.boing.ugly. 259 ADDR a.bit.longer.ns.name.ugly. 260 ADDR a.bit.longer.ns.name.ugly. 261 ADDR icky.icky.icky.ptang.zoop.boing.ugly. 262 ADDR ns2.ugly. 263 ADDR ns3.ugly. 264 ADDR ns3.ugly. 265 __EOF 266 echo "ADDR icky.icky.icky.ptang.zoop.boing.ugly." | $DIFF ans3/query.log - > /dev/null || ret=1 267 echo "ADDR icky.icky.icky.ptang.zoop.boing.ugly." | $DIFF ans4/query.log - > /dev/null || ret=1 268 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 269 if [ $ret != 0 ]; then echo_i "failed"; fi 270 status=`expr $status + $ret` 271 $RNDCCMD 10.53.0.7 flush 272 273 n=`expr $n + 1` 274 echo_i "information that minimization was unsuccessful for .ugly is logged ($n)" 275 ret=0 276 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 277 if [ $ret != 0 ]; then echo_i "failed"; fi 278 status=`expr $status + $ret` 279 280 n=`expr $n + 1` 281 echo_i "query for .slow is properly minimized when qname-minimization is on ($n)" 282 ret=0 283 $CLEANQL 284 $RNDCCMD 10.53.0.6 flush 285 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.slow. @10.53.0.6 > dig.out.test$n 286 sleep 5 287 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 288 grep "icky.icky.icky.ptang.zoop.boing.slow. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 289 sort ans2/query.log > ans2/query.log.sorted 290 cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 291 ADDR a.bit.longer.ns.name.slow. 292 ADDR a.bit.longer.ns.name.slow. 293 ADDR ns2.slow. 294 ADDR ns3.slow. 295 ADDR ns3.slow. 296 NS boing.slow. 297 NS slow. 298 NS zoop.boing.slow. 299 __EOF 300 cat << __EOF | $DIFF ans3/query.log - > /dev/null || ret=1 301 NS zoop.boing.slow. 302 NS ptang.zoop.boing.slow. 303 NS icky.ptang.zoop.boing.slow. 304 __EOF 305 cat << __EOF | $DIFF ans4/query.log - > /dev/null || ret=1 306 NS icky.ptang.zoop.boing.slow. 307 NS icky.icky.ptang.zoop.boing.slow. 308 ADDR icky.icky.icky.ptang.zoop.boing.slow. 309 __EOF 310 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 311 if [ $ret != 0 ]; then echo_i "failed"; fi 312 status=`expr $status + $ret` 313 314 n=`expr $n + 1` 315 echo_i "query for .ip6.arpa succeeds and skips on proper boundaries when qname-minimization is on ($n)" 316 ret=0 317 $CLEANQL 318 $RNDCCMD 10.53.0.6 flush 319 $DIG $DIGOPTS -x 2001:4f8::1 @10.53.0.6 > dig.out.test$n 320 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 321 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 322 sleep 1 323 grep -v ADDR ans2/query.log > ans2/query.log.trimmed 324 cat << __EOF | $DIFF ans2/query.log.trimmed - > /dev/null || ret=1 325 NS 1.0.0.2.ip6.arpa. 326 NS 8.f.4.0.1.0.0.2.ip6.arpa. 327 NS 0.0.0.0.8.f.4.0.1.0.0.2.ip6.arpa. 328 NS 0.0.0.0.0.0.8.f.4.0.1.0.0.2.ip6.arpa. 329 NS 0.0.0.0.0.0.0.0.8.f.4.0.1.0.0.2.ip6.arpa. 330 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. 331 __EOF 332 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 333 if [ $ret != 0 ]; then echo_i "failed"; fi 334 status=`expr $status + $ret` 335 336 n=`expr $n + 1` 337 echo_i "query for multiple label name skips after 7th label ($n)" 338 ret=0 339 $CLEANQL 340 $RNDCCMD 10.53.0.6 flush 341 $DIG $DIGOPTS more.icky.icky.icky.ptang.zoop.boing.good. @10.53.0.6 > dig.out.test$n 342 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 343 grep "more.icky.icky.icky.ptang.zoop.boing.good. 1 IN A 192.0.2.2" dig.out.test$n > /dev/null || ret=1 344 sleep 1 345 sort ans2/query.log > ans2/query.log.sorted 346 cat << __EOF | $DIFF ans2/query.log.sorted - > /dev/null || ret=1 347 ADDR a.bit.longer.ns.name.good. 348 ADDR a.bit.longer.ns.name.good. 349 ADDR ns2.good. 350 ADDR ns3.good. 351 ADDR ns3.good. 352 NS boing.good. 353 NS good. 354 NS zoop.boing.good. 355 __EOF 356 cat << __EOF | $DIFF ans3/query.log - > /dev/null || ret=1 357 NS zoop.boing.good. 358 NS ptang.zoop.boing.good. 359 NS icky.ptang.zoop.boing.good. 360 __EOF 361 # There's no NS icky.icky.icky.ptang.zoop.boing.good. query - we skipped it. 362 cat << __EOF | $DIFF ans4/query.log - > /dev/null || ret=1 363 NS icky.ptang.zoop.boing.good. 364 NS icky.icky.ptang.zoop.boing.good. 365 ADDR more.icky.icky.icky.ptang.zoop.boing.good. 366 __EOF 367 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 368 if [ $ret != 0 ]; then echo_i "failed"; fi 369 status=`expr $status + $ret` 370 371 n=`expr $n + 1` 372 echo_i "qname minimization is disabled when forwarding ($n)" 373 ret=0 374 $CLEANQL 375 $RNDCCMD 10.53.0.7 flush 376 $DIG $DIGOPTS a.bit.longer.ns.name.fwd. @10.53.0.7 > dig.out.test$n 377 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 378 grep "a.bit.longer.ns.name.fwd. 1 IN A 10.53.0.4" dig.out.test$n >/dev/null || ret=1 379 sleep 1 380 cat << __EOF | $DIFF ans2/query.log - > /dev/null || ret=1 381 ADDR a.bit.longer.ns.name.fwd. 382 __EOF 383 for ans in ans2; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 384 if [ $ret != 0 ]; then echo_i "failed"; fi 385 status=`expr $status + $ret` 386 387 echo_i "exit status: $status" 388 [ $status -eq 0 ] || exit 1 389