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 on ($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 .bad fails when qname-minimization is in strict mode ($n)" 147 ret=0 148 $CLEANQL 149 $RNDCCMD 10.53.0.6 flush 150 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.bad. @10.53.0.6 > dig.out.test$n 151 grep "status: NXDOMAIN" dig.out.test$n > /dev/null || ret=1 152 sleep 1 153 sort ans2/query.log > ans2/query.log.sorted 154 cat << __EOF | diff ans2/query.log.sorted - > /dev/null || ret=1 155 ADDR ns2.bad. 156 NS bad. 157 NS boing.bad. 158 __EOF 159 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 160 if [ $ret != 0 ]; then echo_i "failed"; fi 161 status=`expr $status + $ret` 162 163 n=`expr $n + 1` 164 echo_i "query for .bad succeds when qname-minimization is in relaxed mode ($n)" 165 ret=0 166 $CLEANQL 167 $RNDCCMD 10.53.0.7 flush 168 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.bad. @10.53.0.7 > dig.out.test$n 169 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 170 grep "icky.icky.icky.ptang.zoop.boing.bad. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 171 sleep 1 172 sort ans2/query.log > ans2/query.log.sorted 173 cat << __EOF | diff ans2/query.log.sorted - > /dev/null || ret=1 174 ADDR a.bit.longer.ns.name.bad. 175 ADDR a.bit.longer.ns.name.bad. 176 ADDR icky.icky.icky.ptang.zoop.boing.bad. 177 ADDR ns2.bad. 178 ADDR ns3.bad. 179 ADDR ns3.bad. 180 NS bad. 181 NS boing.bad. 182 __EOF 183 echo "ADDR icky.icky.icky.ptang.zoop.boing.bad." | diff ans3/query.log - > /dev/null || ret=1 184 echo "ADDR icky.icky.icky.ptang.zoop.boing.bad." | diff ans4/query.log - > /dev/null || ret=1 185 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 186 if [ $ret != 0 ]; then echo_i "failed"; fi 187 status=`expr $status + $ret` 188 189 n=`expr $n + 1` 190 echo_i "query for .ugly fails when qname-minimization is in strict mode ($n)" 191 ret=0 192 $CLEANQL 193 $RNDCCMD 10.53.0.6 flush 194 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.ugly. @10.53.0.6 > dig.out.test$n 195 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1 196 sleep 1 197 sort ans2/query.log > ans2/query.log.sorted 198 cat << __EOF | diff ans2/query.log.sorted - > /dev/null || ret=1 199 ADDR ns2.ugly. 200 NS boing.ugly. 201 NS boing.ugly. 202 NS ugly. 203 __EOF 204 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 205 if [ $ret != 0 ]; then echo_i "failed"; fi 206 status=`expr $status + $ret` 207 $RNDCCMD 10.53.0.6 flush 208 209 n=`expr $n + 1` 210 echo_i "query for .ugly succeds when qname-minimization is in relaxed mode ($n)" 211 ret=0 212 $CLEANQL 213 $RNDCCMD 10.53.0.7 flush 214 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.ugly. @10.53.0.7 > dig.out.test$n 215 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 216 grep "icky.icky.icky.ptang.zoop.boing.ugly. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 217 sleep 1 218 sort ans2/query.log > ans2/query.log.sorted 219 cat << __EOF | diff ans2/query.log.sorted - > /dev/null || ret=1 220 ADDR a.bit.longer.ns.name.ugly. 221 ADDR a.bit.longer.ns.name.ugly. 222 ADDR icky.icky.icky.ptang.zoop.boing.ugly. 223 ADDR ns2.ugly. 224 ADDR ns3.ugly. 225 ADDR ns3.ugly. 226 NS boing.ugly. 227 NS boing.ugly. 228 NS ugly. 229 __EOF 230 echo "ADDR icky.icky.icky.ptang.zoop.boing.ugly." | diff ans3/query.log - > /dev/null || ret=1 231 echo "ADDR icky.icky.icky.ptang.zoop.boing.ugly." | diff ans4/query.log - > /dev/null || ret=1 232 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 233 if [ $ret != 0 ]; then echo_i "failed"; fi 234 status=`expr $status + $ret` 235 $RNDCCMD 10.53.0.7 flush 236 237 n=`expr $n + 1` 238 echo_i "information that minimization was unsuccessful for .ugly is logged ($n)" 239 ret=0 240 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 241 if [ $ret != 0 ]; then echo_i "failed"; fi 242 status=`expr $status + $ret` 243 244 n=`expr $n + 1` 245 echo_i "query for .slow is properly minimized when qname-minimization is on ($n)" 246 ret=0 247 $CLEANQL 248 $RNDCCMD 10.53.0.6 flush 249 $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.slow. @10.53.0.6 > dig.out.test$n 250 sleep 5 251 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 252 grep "icky.icky.icky.ptang.zoop.boing.slow. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1 253 sort ans2/query.log > ans2/query.log.sorted 254 cat << __EOF | diff ans2/query.log.sorted - > /dev/null || ret=1 255 ADDR a.bit.longer.ns.name.slow. 256 ADDR a.bit.longer.ns.name.slow. 257 ADDR ns2.slow. 258 ADDR ns3.slow. 259 ADDR ns3.slow. 260 NS boing.slow. 261 NS slow. 262 NS zoop.boing.slow. 263 __EOF 264 cat << __EOF | diff ans3/query.log - > /dev/null || ret=1 265 NS zoop.boing.slow. 266 NS ptang.zoop.boing.slow. 267 NS icky.ptang.zoop.boing.slow. 268 __EOF 269 cat << __EOF | diff ans4/query.log - > /dev/null || ret=1 270 NS icky.ptang.zoop.boing.slow. 271 NS icky.icky.ptang.zoop.boing.slow. 272 ADDR icky.icky.icky.ptang.zoop.boing.slow. 273 __EOF 274 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 275 if [ $ret != 0 ]; then echo_i "failed"; fi 276 status=`expr $status + $ret` 277 278 n=`expr $n + 1` 279 echo_i "query for .ip6.arpa succeds and skips on proper boundaries when qname-minimization is on ($n)" 280 ret=0 281 $CLEANQL 282 $RNDCCMD 10.53.0.6 flush 283 $DIG $DIGOPTS -x 2001:4f8::1 @10.53.0.6 > dig.out.test$n 284 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 285 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 286 sleep 1 287 grep -v ADDR ans2/query.log > ans2/query.log.trimmed 288 cat << __EOF | diff ans2/query.log.trimmed - > /dev/null || ret=1 289 NS 1.0.0.2.ip6.arpa. 290 NS 8.f.4.0.1.0.0.2.ip6.arpa. 291 NS 0.0.0.0.8.f.4.0.1.0.0.2.ip6.arpa. 292 NS 0.0.0.0.0.0.8.f.4.0.1.0.0.2.ip6.arpa. 293 NS 0.0.0.0.0.0.0.0.8.f.4.0.1.0.0.2.ip6.arpa. 294 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. 295 __EOF 296 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 297 if [ $ret != 0 ]; then echo_i "failed"; fi 298 status=`expr $status + $ret` 299 300 n=`expr $n + 1` 301 echo_i "query for multiple label name skips after 7th label ($n)" 302 ret=0 303 $CLEANQL 304 $RNDCCMD 10.53.0.6 flush 305 $DIG $DIGOPTS more.icky.icky.icky.ptang.zoop.boing.good. @10.53.0.6 > dig.out.test$n 306 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 307 grep "more.icky.icky.icky.ptang.zoop.boing.good. 1 IN A 192.0.2.2" dig.out.test$n > /dev/null || ret=1 308 sleep 1 309 sort ans2/query.log > ans2/query.log.sorted 310 cat << __EOF | diff ans2/query.log.sorted - > /dev/null || ret=1 311 ADDR a.bit.longer.ns.name.good. 312 ADDR a.bit.longer.ns.name.good. 313 ADDR ns2.good. 314 ADDR ns3.good. 315 ADDR ns3.good. 316 NS boing.good. 317 NS good. 318 NS zoop.boing.good. 319 __EOF 320 cat << __EOF | diff ans3/query.log - > /dev/null || ret=1 321 NS zoop.boing.good. 322 NS ptang.zoop.boing.good. 323 NS icky.ptang.zoop.boing.good. 324 __EOF 325 # There's no NS icky.icky.icky.ptang.zoop.boing.good. query - we skipped it. 326 cat << __EOF | diff ans4/query.log - > /dev/null || ret=1 327 NS icky.ptang.zoop.boing.good. 328 NS icky.icky.ptang.zoop.boing.good. 329 ADDR more.icky.icky.icky.ptang.zoop.boing.good. 330 __EOF 331 for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 332 if [ $ret != 0 ]; then echo_i "failed"; fi 333 status=`expr $status + $ret` 334 335 n=`expr $n + 1` 336 echo_i "qname minimization is disabled when forwarding ($n)" 337 ret=0 338 $CLEANQL 339 $RNDCCMD 10.53.0.7 flush 340 $DIG $DIGOPTS a.bit.longer.ns.name.fwd. @10.53.0.7 > dig.out.test$n 341 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1 342 grep "a.bit.longer.ns.name.fwd. 1 IN A 10.53.0.4" dig.out.test$n >/dev/null || ret=1 343 sleep 1 344 cat << __EOF | diff ans2/query.log - > /dev/null || ret=1 345 ADDR a.bit.longer.ns.name.fwd. 346 __EOF 347 for ans in ans2; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done 348 if [ $ret != 0 ]; then echo_i "failed"; fi 349 status=`expr $status + $ret` 350 351 echo_i "exit status: $status" 352 [ $status -eq 0 ] || exit 1 353