Home | History | Annotate | Line # | Download | only in qmin
      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