the line "$GENERATE 19-28/2147483645 $ CNAME x" should generate
a single CNAME with the owner "19.example.com", but prior to the
overflow bug it generated several CNAMEs, half of them with large
negative values.
we now test for the bugfix by using "named-checkzone -D" and
grepping for a single CNAME in the output.
(cherry picked from commit bd814b79d4)
199 lines
7.5 KiB
Bash
199 lines
7.5 KiB
Bash
# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
|
|
#
|
|
# SPDX-License-Identifier: MPL-2.0
|
|
#
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, you can obtain one at https://mozilla.org/MPL/2.0/.
|
|
#
|
|
# See the COPYRIGHT file distributed with this work for additional
|
|
# information regarding copyright ownership.
|
|
|
|
SYSTEMTESTTOP=..
|
|
. $SYSTEMTESTTOP/conf.sh
|
|
|
|
status=0
|
|
n=1
|
|
|
|
for db in zones/good*.db
|
|
do
|
|
echo_i "checking $db ($n)"
|
|
ret=0
|
|
case $db in
|
|
zones/good-gc-msdcs.db|zones/good-spf-exception.db)
|
|
$CHECKZONE -k fail -i local example $db > test.out.$n 2>&1 || ret=1
|
|
;;
|
|
zones/good-dns-sd-reverse.db)
|
|
$CHECKZONE -k fail -i local 0.0.0.0.in-addr.arpa $db > test.out.$n 2>&1 || ret=1
|
|
;;
|
|
*)
|
|
$CHECKZONE -i local example $db > test.out.$n 2>&1 || ret=1
|
|
;;
|
|
esac
|
|
n=$((n+1))
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
status=$((status+ret))
|
|
done
|
|
|
|
for db in zones/bad*.db
|
|
do
|
|
echo_i "checking $db ($n)"
|
|
ret=0 v=0
|
|
case $db in
|
|
zones/bad-dns-sd-reverse.db|zones/bad-svcb-servername.db)
|
|
$CHECKZONE -k fail -i local 0.0.0.0.in-addr.arpa $db > test.out.$n 2>&1 || v=$?
|
|
;;
|
|
*)
|
|
$CHECKZONE -i local example $db > test.out.$n 2>&1 || v=$?
|
|
;;
|
|
esac
|
|
test $v = 1 || ret=1
|
|
n=$((n+1))
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
status=$((status+ret))
|
|
done
|
|
|
|
echo_i "checking with journal file ($n)"
|
|
ret=0
|
|
$CHECKZONE -D -o test.orig.db test zones/test1.db > /dev/null 2>&1 || ret=1
|
|
$CHECKZONE -D -o test.changed.db test zones/test2.db > /dev/null 2>&1 || ret=1
|
|
$MAKEJOURNAL test test.orig.db test.changed.db test.orig.db.jnl 2>&1 || ret=1
|
|
jlines=$($JOURNALPRINT test.orig.db.jnl | wc -l)
|
|
[ $jlines = 3 ] || ret=1
|
|
$CHECKZONE -D -j -o test.out1.db test test.orig.db > /dev/null 2>&1 || ret=1
|
|
cmp -s test.changed.db test.out1.db || ret=1
|
|
mv -f test.orig.db.jnl test.journal
|
|
$CHECKZONE -D -J test.journal -o test.out2.db test test.orig.db > /dev/null 2>&1 || ret=1
|
|
cmp -s test.changed.db test.out2.db || ret=1
|
|
n=$((n+1))
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
status=$((status+ret))
|
|
|
|
echo_i "checking with spf warnings ($n)"
|
|
ret=0
|
|
$CHECKZONE example zones/spf.db > test.out1.$n 2>&1 || ret=1
|
|
$CHECKZONE -T ignore example zones/spf.db > test.out2.$n 2>&1 || ret=1
|
|
grep "'x.example' found type SPF" test.out1.$n > /dev/null && ret=1
|
|
grep "'y.example' found type SPF" test.out1.$n > /dev/null || ret=1
|
|
grep "'example' found type SPF" test.out1.$n > /dev/null && ret=1
|
|
grep "'x.example' found type SPF" test.out2.$n > /dev/null && ret=1
|
|
grep "'y.example' found type SPF" test.out2.$n > /dev/null && ret=1
|
|
grep "'example' found type SPF" test.out2.$n > /dev/null && ret=1
|
|
n=$((n+1))
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
status=$((status+ret))
|
|
|
|
echo_i "checking with max ttl (text) ($n)"
|
|
ret=0
|
|
$CHECKZONE -l 300 example zones/good1.db > test.out1.$n 2>&1 && ret=1
|
|
$CHECKZONE -l 600 example zones/good1.db > test.out2.$n 2>&1 || ret=1
|
|
n=$((n+1))
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
status=$((status+ret))
|
|
|
|
echo_i "checking with max ttl (raw) ($n)"
|
|
ret=0
|
|
$CHECKZONE -f raw -l 300 example good1.db.raw > test.out1.$n 2>&1 && ret=1
|
|
$CHECKZONE -f raw -l 600 example good1.db.raw > test.out2.$n 2>&1 || ret=1
|
|
n=$((n+1))
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
status=$((status+ret))
|
|
|
|
echo_i "checking with max ttl (map) ($n)"
|
|
ret=0
|
|
$CHECKZONE -f map -l 300 example good1.db.map > test.out1.$n 2>&1 && ret=1
|
|
$CHECKZONE -f map -l 600 example good1.db.map > test.out2.$n 2>&1 || ret=1
|
|
n=`expr $n + 1`
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
status=`expr $status + $ret`
|
|
|
|
echo_i "checking for no 'inherited owner' warning on '\$INCLUDE file' with no new \$ORIGIN ($n)"
|
|
ret=0
|
|
$CHECKZONE example zones/nowarn.inherited.owner.db > test.out1.$n 2>&1 || ret=1
|
|
grep "inherited.owner" test.out1.$n > /dev/null && ret=1
|
|
n=$((n+1))
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
status=$((status+ret))
|
|
|
|
echo_i "checking for 'inherited owner' warning on '\$ORIGIN + \$INCLUDE file' ($n)"
|
|
ret=0
|
|
$CHECKZONE example zones/warn.inherit.origin.db > test.out1.$n 2>&1 || ret=1
|
|
grep "inherited.owner" test.out1.$n > /dev/null || ret=1
|
|
n=$((n+1))
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
status=$((status+ret))
|
|
|
|
echo_i "checking for 'inherited owner' warning on '\$INCLUDE file origin' ($n)"
|
|
ret=0
|
|
$CHECKZONE example zones/warn.inherited.owner.db > test.out1.$n 2>&1 || ret=1
|
|
grep "inherited.owner" test.out1.$n > /dev/null || ret=1
|
|
n=$((n+1))
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
status=$((status+ret))
|
|
|
|
echo_i "checking that raw zone with bad class is handled ($n)"
|
|
ret=0
|
|
$CHECKZONE -f raw example zones/bad-badclass.raw > test.out.$n 2>&1 && ret=1
|
|
grep "failed: bad class" test.out.$n >/dev/null || ret=1
|
|
n=$((n+1))
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
status=$((status+ret))
|
|
|
|
echo_i "checking that expirations that loop using serial arithmetic are handled ($n)"
|
|
ret=0
|
|
q=-q
|
|
test $ret -eq 1 || $CHECKZONE $q dyn.example.net zones/crashzone.db || ret=1
|
|
test $ret -eq 1 || $CHECKZONE $q dyn.example.net zones/crashzone.db || ret=1
|
|
test $ret -eq 1 || $CHECKZONE $q dyn.example.net zones/crashzone.db || ret=1
|
|
test $ret -eq 1 || $CHECKZONE $q dyn.example.net zones/crashzone.db || ret=1
|
|
test $ret -eq 1 || $CHECKZONE $q dyn.example.net zones/crashzone.db || ret=1
|
|
test $ret -eq 1 || $CHECKZONE $q dyn.example.net zones/crashzone.db || ret=1
|
|
test $ret -eq 1 || $CHECKZONE $q dyn.example.net zones/crashzone.db || ret=1
|
|
test $ret -eq 1 || $CHECKZONE $q dyn.example.net zones/crashzone.db || ret=1
|
|
test $ret -eq 1 || $CHECKZONE $q dyn.example.net zones/crashzone.db || ret=1
|
|
test $ret -eq 1 || $CHECKZONE $q dyn.example.net zones/crashzone.db || ret=1
|
|
test $ret -eq 1 || $CHECKZONE $q dyn.example.net zones/crashzone.db || ret=1
|
|
test $ret -eq 1 || $CHECKZONE $q dyn.example.net zones/crashzone.db || ret=1
|
|
test $ret -eq 1 || $CHECKZONE $q dyn.example.net zones/crashzone.db || ret=1
|
|
test $ret -eq 1 || $CHECKZONE $q dyn.example.net zones/crashzone.db || ret=1
|
|
test $ret -eq 1 || $CHECKZONE $q dyn.example.net zones/crashzone.db || ret=1
|
|
test $ret -eq 1 || $CHECKZONE $q dyn.example.net zones/crashzone.db || ret=1
|
|
test $ret -eq 1 || $CHECKZONE $q dyn.example.net zones/crashzone.db || ret=1
|
|
test $ret -eq 1 || $CHECKZONE $q dyn.example.net zones/crashzone.db || ret=1
|
|
test $ret -eq 1 || $CHECKZONE $q dyn.example.net zones/crashzone.db || ret=1
|
|
test $ret -eq 1 || $CHECKZONE $q dyn.example.net zones/crashzone.db || ret=1
|
|
test $ret -eq 1 || $CHECKZONE $q dyn.example.net zones/crashzone.db || ret=1
|
|
test $ret -eq 1 || $CHECKZONE $q dyn.example.net zones/crashzone.db || ret=1
|
|
n=$((n+1))
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
status=$((status+ret))
|
|
|
|
echo_i "checking that nameserver below DNAME is reported even with occulted address record present ($n)"
|
|
ret=0
|
|
$CHECKZONE example.com zones/ns-address-below-dname.db > test.out.$n 2>&1 && ret=1
|
|
grep "is below a DNAME" test.out.$n >/dev/null || ret=1
|
|
n=$((n+1))
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
status=$((status+ret))
|
|
|
|
echo_i "checking that delegating nameserver below DNAME is reported even with occulted address record present ($n)"
|
|
ret=0
|
|
$CHECKZONE example.com zones/delegating-ns-address-below-dname.db > test.out.$n 2>&1 || ret=1
|
|
grep "is below a DNAME" test.out.$n >/dev/null || ret=1
|
|
n=$((n+1))
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
status=$((status+ret))
|
|
|
|
n=$((n+1))
|
|
ret=0
|
|
echo_i "checking integer overflow is prevented in \$GENERATE ($n)"
|
|
$CHECKZONE -D example.com zones/generate-overflow.db > test.out.$n 2>&1 || ret=1
|
|
lines=$(grep -c CNAME test.out.$n)
|
|
echo $lines
|
|
[ "$lines" -eq 1 ] || ret=1
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
status=$((status+ret))
|
|
|
|
echo_i "exit status: $status"
|
|
[ $status -eq 0 ] || exit 1
|