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