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