mirror of
https://github.com/isc-projects/bind9.git
synced 2026-05-28 04:34:54 -04:00
Merge branch '4726-increase-formerr-coverage-in-message-parsing-9.18' into 'bind-9.18'
[9.18] Resolve "Increase FORMERR coverage in message parsing" See merge request isc-projects/bind9!9048
This commit is contained in:
commit
5ac515de1a
21 changed files with 299 additions and 10 deletions
20
.reuse/dep5
20
.reuse/dep5
|
|
@ -39,10 +39,25 @@ Files: **/*.after*
|
|||
bin/tests/system/doth/CA/index.txt
|
||||
bin/tests/system/doth/CA/index.txt.attr
|
||||
bin/tests/system/doth/CA/serial
|
||||
bin/tests/system/notify/ns4/named.port.in
|
||||
bin/tests/system/formerr/badnsec3owner
|
||||
bin/tests/system/formerr/badrecordname
|
||||
bin/tests/system/formerr/dupans
|
||||
bin/tests/system/formerr/dupquestion
|
||||
bin/tests/system/formerr/keyclass
|
||||
bin/tests/system/formerr/malformeddeltype
|
||||
bin/tests/system/formerr/malformedrrsig
|
||||
bin/tests/system/formerr/nametoolong
|
||||
bin/tests/system/formerr/noquestions
|
||||
bin/tests/system/formerr/twoquestions
|
||||
bin/tests/system/formerr/optwrongname
|
||||
bin/tests/system/formerr/qtypeasanswer
|
||||
bin/tests/system/formerr/questionclass
|
||||
bin/tests/system/formerr/shortquestion
|
||||
bin/tests/system/formerr/shortrecord
|
||||
bin/tests/system/formerr/tsignotlast
|
||||
bin/tests/system/formerr/tsigwrongclass
|
||||
bin/tests/system/formerr/twoquestionnames
|
||||
bin/tests/system/formerr/twoquestiontypes
|
||||
bin/tests/system/formerr/wrongclass
|
||||
bin/tests/system/journal/ns1/managed-keys.bind.in
|
||||
bin/tests/system/journal/ns1/managed-keys.bind.jnl.in
|
||||
bin/tests/system/journal/ns2/managed-keys.bind.in
|
||||
|
|
@ -53,6 +68,7 @@ Files: **/*.after*
|
|||
bin/tests/system/masterfile/knowngood.include
|
||||
bin/tests/system/masterfile/knowngood.ttl1
|
||||
bin/tests/system/masterfile/knowngood.ttl2
|
||||
bin/tests/system/notify/ns4/named.port.in
|
||||
bin/tests/system/nsupdate/commandlist
|
||||
bin/tests/system/nsupdate/verylarge.in
|
||||
bin/tests/system/org.isc.bind.system.plist
|
||||
|
|
|
|||
7
bin/tests/system/formerr/badnsec3owner
Normal file
7
bin/tests/system/formerr/badnsec3owner
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# bad NSEC3 owner (:) not in base32hex valid characters
|
||||
# header: id=0008 opcode=query questions=1 authority=1
|
||||
00 08 00 00 00 01 00 00 00 01 00 00
|
||||
# question: ./A/IN
|
||||
00 00 01 00 01
|
||||
# :./NSEC3/IN/1 length=7 hashtype=240 flags=0 interations=0 salt=- hashlen=1 hash=ff
|
||||
01 58 00 00 32 00 01 00 00 00 01 00 07 f0 00 00 00 00 01 ff
|
||||
21
bin/tests/system/formerr/badrecordname
Normal file
21
bin/tests/system/formerr/badrecordname
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
# oversized owner name
|
||||
# header: additional=1
|
||||
00 00 00 00 00 00 00 00 00 00 00 01
|
||||
# owner name too big (256 octets) A/IN/1 0.0.0.0
|
||||
0f 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
|
||||
0f 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
|
||||
0f 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
|
||||
0f 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
|
||||
0f 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
|
||||
0f 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
|
||||
0f 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
|
||||
0f 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
|
||||
0f 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
|
||||
0f 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
|
||||
0f 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
|
||||
0f 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
|
||||
0f 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
|
||||
0f 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
|
||||
0f 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
|
||||
0e 41 41 41 41 41 41 41 41 41 41 41 41 41 41 00
|
||||
00 01 00 01 00 00 00 01 00 04 00 00 00 00
|
||||
|
|
@ -11,11 +11,27 @@
|
|||
# See the COPYRIGHT file distributed with this work for additional
|
||||
# information regarding copyright ownership.
|
||||
|
||||
rm -f badnsec3owner.out
|
||||
rm -f badrecordname.out
|
||||
rm -f dupans.out
|
||||
rm -f dupquestion.out
|
||||
rm -f keyclass.out
|
||||
rm -f malformeddeltype.out
|
||||
rm -f malformedrrsig.out
|
||||
rm -f nametoolong.out
|
||||
rm -f twoquestions.out
|
||||
rm -f noquestions.out
|
||||
rm -f ns*/managed-keys.bind*
|
||||
rm -f ns*/named.conf
|
||||
rm -f ns*/named.lock
|
||||
rm -f ns*/named.run
|
||||
rm -f ns*/named.memstats
|
||||
rm -f ns*/managed-keys.bind*
|
||||
rm -f ns*/named.run
|
||||
rm -f optwrongname.out
|
||||
rm -f qtypeasanswer.out
|
||||
rm -f questionclass.out
|
||||
rm -f shortquestion.out
|
||||
rm -f shortrecord.out
|
||||
rm -f tsignotlast.out
|
||||
rm -f tsigwrongclass.out
|
||||
rm -f twoquestionnames.out
|
||||
rm -f twoquestiontypes.out
|
||||
rm -f wrongclass.out
|
||||
|
|
|
|||
8
bin/tests/system/formerr/dupans
Normal file
8
bin/tests/system/formerr/dupans
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
# multiple singletons (SOA)
|
||||
# header questions=1 answers=2
|
||||
00 00 00 00 00 01 00 02 00 00 00 00
|
||||
# question SOA/IN
|
||||
00 00 06 00 01
|
||||
# 2 SOA records that differ in expire
|
||||
00 00 06 00 01 00 00 00 01 00 16 00 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05
|
||||
00 00 06 00 01 00 00 00 01 00 16 00 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 06
|
||||
10
bin/tests/system/formerr/dupquestion
Normal file
10
bin/tests/system/formerr/dupquestion
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
# header: 2 questions
|
||||
00 00 00 00 00 02 00 00 00 00 00 00
|
||||
# question: AAAAAAAAAAAAAA./A/IN
|
||||
0e 41 41 41 41 41 41 41 41 41 41 41 41 41 41 00
|
||||
00 01
|
||||
00 01
|
||||
# question: AAAAAAAAAAAAAA./A/IN
|
||||
0e 41 41 41 41 41 41 41 41 41 41 41 41 41 41 00
|
||||
00 01
|
||||
00 01
|
||||
7
bin/tests/system/formerr/keyclass
Normal file
7
bin/tests/system/formerr/keyclass
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# mismatched key class
|
||||
# header: questions=1 additional=1
|
||||
00 00 00 00 00 01 00 00 00 00 00 01
|
||||
# question: ./A/IN
|
||||
00 00 01 00 01
|
||||
# additional: ./KEY/CLASS2 flags=0 protocol=0 algorithm=248 keydata=00
|
||||
00 00 19 00 02 00 00 00 01 00 05 00 00 00 f8 00
|
||||
5
bin/tests/system/formerr/malformeddeltype
Normal file
5
bin/tests/system/formerr/malformeddeltype
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
# UPDATE malformed 'delete type' update change (non empty data)
|
||||
# header: UPDATE authority=1
|
||||
00 00 28 00 00 00 00 00 00 01 00 00
|
||||
# ./A/ANY TTL=0 length=1 data=00
|
||||
00 00 01 00 ff 00 00 00 00 00 01 00
|
||||
5
bin/tests/system/formerr/malformedrrsig
Normal file
5
bin/tests/system/formerr/malformedrrsig
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
# malformed RRRSIG
|
||||
# header: QUERY, additional=1
|
||||
00 00 00 00 00 00 00 00 00 00 00 01
|
||||
# ./RRSIG/IN TTL=1 covers=0 algorithm=240 labels=0 ttl=1 expire=2 signed=3 id=0
|
||||
00 00 2e 00 01 00 00 00 01 00 14 00 00 f0 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 00
|
||||
5
bin/tests/system/formerr/optwrongname
Normal file
5
bin/tests/system/formerr/optwrongname
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
# OPT record with wrong name (not .)
|
||||
# header: QUERY, additional=1
|
||||
00 00 00 00 00 00 00 00 00 00 00 01
|
||||
# OPT record (owner A.)
|
||||
01 41 00 00 29 00 01 00 00 00 00 00 00
|
||||
5
bin/tests/system/formerr/qtypeasanswer
Normal file
5
bin/tests/system/formerr/qtypeasanswer
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
# QTYPE-only type as answer
|
||||
# header, answers=1
|
||||
00 00 00 00 00 00 00 01 00 00 00 00
|
||||
# ./MAILB/IN
|
||||
00 00 fd 00 01 00 00 00 01 00 00
|
||||
7
bin/tests/system/formerr/questionclass
Normal file
7
bin/tests/system/formerr/questionclass
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# two questions of different classes
|
||||
# header: QUERY, questions=2
|
||||
00 00 00 00 00 02 00 00 00 00 00 00
|
||||
# ./A/IN
|
||||
00 00 01 00 01
|
||||
# ./A/CLASS2
|
||||
00 00 01 00 02
|
||||
5
bin/tests/system/formerr/shortquestion
Normal file
5
bin/tests/system/formerr/shortquestion
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
# truncated question section
|
||||
# header: QUERY, questions=1
|
||||
00 00 00 00 00 01 00 00 00 00 00 00
|
||||
# truncated question (no class)
|
||||
00 00 01
|
||||
5
bin/tests/system/formerr/shortrecord
Normal file
5
bin/tests/system/formerr/shortrecord
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
# truncated record
|
||||
# header: QUERY, additional=1
|
||||
00 09 00 00 00 00 00 00 00 00 00 01
|
||||
# truncated A record (no ttl, length or data)
|
||||
00 00 01 00 01
|
||||
|
|
@ -25,14 +25,46 @@ if [ "${ans}" != "got: 000080010000000000000000" ]; then
|
|||
status=$((status + 1))
|
||||
fi
|
||||
|
||||
echo_i "two questions"
|
||||
$PERL formerr.pl -a 10.53.0.1 -p ${PORT} twoquestions >twoquestions.out
|
||||
ans=$(grep got: twoquestions.out)
|
||||
echo_i "two question names"
|
||||
$PERL formerr.pl -a 10.53.0.1 -p ${PORT} twoquestionnames >twoquestionnames.out
|
||||
ans=$(grep got: twoquestionnames.out)
|
||||
if [ "${ans}" != "got: 000080010000000000000000" ]; then
|
||||
echo_i "failed"
|
||||
status=$((status + 1))
|
||||
fi
|
||||
|
||||
echo_i "two question types"
|
||||
$PERL formerr.pl -a 10.53.0.1 -p ${PORT} twoquestiontypes >twoquestiontypes.out
|
||||
ans=$(grep got: twoquestiontypes.out)
|
||||
if [ "${ans}" != "got: 0000800100020000000000000e41414141414141414141414141410000010001c00c00020001" ]; then
|
||||
echo_i "failed"
|
||||
status=$((status + 1))
|
||||
fi
|
||||
|
||||
echo_i "duplicate questions"
|
||||
$PERL formerr.pl -a 10.53.0.1 -p ${PORT} dupquestion >dupquestion.out
|
||||
ans=$(grep got: dupquestion.out)
|
||||
if [ "${ans}" != "got: 000080010000000000000000" ]; then
|
||||
echo_i "failed"
|
||||
status=$(expr $status + 1)
|
||||
fi
|
||||
|
||||
echo_i "duplicate answer"
|
||||
$PERL formerr.pl -a 10.53.0.1 -p ${PORT} dupans >dupans.out
|
||||
ans=$(grep got: dupans.out)
|
||||
if [ "${ans}" != "got: 0000800100010000000000000000060001" ]; then
|
||||
echo_i "failed"
|
||||
status=$(expr $status + 1)
|
||||
fi
|
||||
|
||||
echo_i "question only type in answer"
|
||||
$PERL formerr.pl -a 10.53.0.1 -p ${PORT} qtypeasanswer >qtypeasanswer.out
|
||||
ans=$(grep got: qtypeasanswer.out)
|
||||
if [ "${ans}" != "got: 000080010000000000000000" ]; then
|
||||
echo_i "failed"
|
||||
status=$(expr $status + 1)
|
||||
fi
|
||||
|
||||
# this would be NOERROR if it included a COOKIE option,
|
||||
# but is a FORMERR without one.
|
||||
echo_i "empty question section (and no COOKIE option)"
|
||||
|
|
@ -43,6 +75,103 @@ if [ "${ans}" != "got: 000080010000000000000000" ]; then
|
|||
status=$((status + 1))
|
||||
fi
|
||||
|
||||
echo_i "bad nsec3 owner"
|
||||
$PERL formerr.pl -a 10.53.0.1 -p ${PORT} badnsec3owner >badnsec3owner.out
|
||||
ans=$(grep got: badnsec3owner.out)
|
||||
# SERVFAIL (2) rather than FORMERR (1)
|
||||
if [ "${ans}" != "got: 0008800200010000000000000000010001" ]; then
|
||||
echo_i "failed"
|
||||
status=$(expr $status + 1)
|
||||
fi
|
||||
|
||||
echo_i "short record before rdata "
|
||||
$PERL formerr.pl -a 10.53.0.1 -p ${PORT} shortrecord >shortrecord.out
|
||||
ans=$(grep got: shortrecord.out)
|
||||
if [ "${ans}" != "got: 000980010000000000000000" ]; then
|
||||
echo_i "failed"
|
||||
status=$(expr $status + 1)
|
||||
fi
|
||||
|
||||
echo_i "short question"
|
||||
$PERL formerr.pl -a 10.53.0.1 -p ${PORT} shortquestion >shortquestion.out
|
||||
ans=$(grep got: shortquestion.out)
|
||||
if [ "${ans}" != "got: 000080010000000000000000" ]; then
|
||||
echo_i "failed"
|
||||
status=$(expr $status + 1)
|
||||
fi
|
||||
|
||||
echo_i "mismatch classes in question section"
|
||||
$PERL formerr.pl -a 10.53.0.1 -p ${PORT} questionclass >questionclass.out
|
||||
ans=$(grep got: questionclass.out)
|
||||
if [ "${ans}" != "got: 000080010000000000000000" ]; then
|
||||
echo_i "failed"
|
||||
status=$(expr $status + 1)
|
||||
fi
|
||||
|
||||
echo_i "bad record owner name"
|
||||
$PERL formerr.pl -a 10.53.0.1 -p ${PORT} badrecordname >badrecordname.out
|
||||
ans=$(grep got: badrecordname.out)
|
||||
if [ "${ans}" != "got: 000080010000000000000000" ]; then
|
||||
echo_i "failed"
|
||||
status=$(expr $status + 1)
|
||||
fi
|
||||
|
||||
echo_i "mismatched class in record"
|
||||
$PERL formerr.pl -a 10.53.0.1 -p ${PORT} wrongclass >wrongclass.out
|
||||
ans=$(grep got: wrongclass.out)
|
||||
if [ "${ans}" != "got: 000080010000000000000000" ]; then
|
||||
echo_i "failed"
|
||||
status=$(expr $status + 1)
|
||||
fi
|
||||
|
||||
echo_i "mismatched KEY class"
|
||||
$PERL formerr.pl -a 10.53.0.1 -p ${PORT} keyclass >keyclass.out
|
||||
ans=$(grep got: keyclass.out)
|
||||
if [ "${ans}" != "got: 0000800100010000000000000000010001" ]; then
|
||||
echo_i "failed"
|
||||
status=$(expr $status + 1)
|
||||
fi
|
||||
|
||||
echo_i "OPT wrong owner name"
|
||||
$PERL formerr.pl -a 10.53.0.1 -p ${PORT} optwrongname >optwrongname.out
|
||||
ans=$(grep got: optwrongname.out)
|
||||
if [ "${ans}" != "got: 000080010000000000000000" ]; then
|
||||
echo_i "failed"
|
||||
status=$(expr $status + 1)
|
||||
fi
|
||||
|
||||
echo_i "RRSIG invalid covers"
|
||||
$PERL formerr.pl -a 10.53.0.1 -p ${PORT} malformedrrsig >malformedrrsig.out
|
||||
ans=$(grep got: malformedrrsig.out)
|
||||
if [ "${ans}" != "got: 000080010000000000000000" ]; then
|
||||
echo_i "failed"
|
||||
status=$(expr $status + 1)
|
||||
fi
|
||||
|
||||
echo_i "UPDATE malformed delete type"
|
||||
$PERL formerr.pl -a 10.53.0.1 -p ${PORT} malformeddeltype >malformeddeltype.out
|
||||
ans=$(grep got: malformeddeltype.out)
|
||||
if [ "${ans}" != "got: 0000a8010000000000000000" ]; then
|
||||
echo_i "failed"
|
||||
status=$(expr $status + 1)
|
||||
fi
|
||||
|
||||
echo_i "TSIG wrong class"
|
||||
$PERL formerr.pl -a 10.53.0.1 -p ${PORT} tsigwrongclass >tsigwrongclass.out
|
||||
ans=$(grep got: tsigwrongclass.out)
|
||||
if [ "${ans}" != "got: 000080010000000000000000" ]; then
|
||||
echo_i "failed"
|
||||
status=$(expr $status + 1)
|
||||
fi
|
||||
|
||||
echo_i "TSIG not last"
|
||||
$PERL formerr.pl -a 10.53.0.1 -p ${PORT} tsignotlast >tsignotlast.out
|
||||
ans=$(grep got: tsignotlast.out)
|
||||
if [ "${ans}" != "got: 000080010000000000000000" ]; then
|
||||
echo_i "failed"
|
||||
status=$(expr $status + 1)
|
||||
fi
|
||||
|
||||
echo_i "exit status: $status"
|
||||
|
||||
[ $status -eq 0 ] || exit 1
|
||||
|
|
|
|||
8
bin/tests/system/formerr/tsignotlast
Normal file
8
bin/tests/system/formerr/tsignotlast
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
# SIG not last in additional
|
||||
# header: QUERY additional=2
|
||||
00 00 00 00 00 00 00 00 00 00 00 02
|
||||
# Additional records:
|
||||
# SIG record (class ANY)
|
||||
00 00 fa 00 ff 00 00 00 01 00 12 00 01 02 03 04 05 06 01 02 00 01 00 00 00 00 00 00 00
|
||||
# A record
|
||||
00 00 01 00 01 00 00 00 01 00 04 00 00 00 00
|
||||
5
bin/tests/system/formerr/tsigwrongclass
Normal file
5
bin/tests/system/formerr/tsigwrongclass
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
# TSIG wrong class
|
||||
# header: QUERY, additional=1
|
||||
00 00 00 00 00 00 00 00 00 00 00 01
|
||||
# class should be ANY (00 ff) not IN (00 01)
|
||||
00 00 fa 00 01 00 00 00 01 00 12 00 01 02 03 04 05 06 01 02 00 01 00 00 00 00 00 00 00
|
||||
11
bin/tests/system/formerr/twoquestionnames
Normal file
11
bin/tests/system/formerr/twoquestionnames
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
# two questions with different names
|
||||
00 00 00 00 00 02 00 00 00 00 00 00
|
||||
# AAAAAAAAAAAAAA./A/IN
|
||||
0e 41 41 41 41 41 41 41 41 41 41 41 41 41 41 00
|
||||
00 01
|
||||
00 01
|
||||
# AAAAAAAAAAAAAB./A/IN
|
||||
0e 41 41 41 41 41 41 41 41 41 41 41 41 41 41 00
|
||||
0e 41 41 41 41 41 41 41 41 41 41 41 41 41 42 00
|
||||
00 01
|
||||
00 01
|
||||
|
|
@ -1,7 +1,10 @@
|
|||
# two questions that differ by type
|
||||
00 00 00 00 00 02 00 00 00 00 00 00
|
||||
# AAAAAAAAAAAAAAA./A/IN
|
||||
0e 41 41 41 41 41 41 41 41 41 41 41 41 41 41 00
|
||||
00 01
|
||||
00 01
|
||||
# AAAAAAAAAAAAAAA./NS/IN
|
||||
0e 41 41 41 41 41 41 41 41 41 41 41 41 41 41 00
|
||||
00 02
|
||||
0e 41 41 41 41 41 41 41 41 41 41 41 41 41 41 00
|
||||
00 01
|
||||
00 01
|
||||
7
bin/tests/system/formerr/wrongclass
Normal file
7
bin/tests/system/formerr/wrongclass
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# class mismatch
|
||||
# header: QUERY, additional=2
|
||||
00 00 00 00 00 00 00 00 00 00 00 02
|
||||
# ./A/IN
|
||||
00 00 01 00 01 00 00 00 01 00 04 00 00 00 00
|
||||
# ./TYPE65280/CLASS256
|
||||
00 ff 00 01 00 02 00 00 01 00 04 00 00 00 00
|
||||
|
|
@ -1159,6 +1159,7 @@ getquestions(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
|
|||
}
|
||||
|
||||
if (seen_problem) {
|
||||
/* XXX test coverage */
|
||||
result = DNS_R_RECOVERABLE;
|
||||
}
|
||||
|
||||
|
|
@ -1494,6 +1495,7 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
|
|||
if (msg->rdclass != dns_rdataclass_any &&
|
||||
msg->rdclass != rdclass)
|
||||
{
|
||||
/* XXX test coverage */
|
||||
DO_ERROR(DNS_R_FORMERR);
|
||||
}
|
||||
}
|
||||
|
|
@ -1713,6 +1715,7 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
|
|||
|
||||
if (seen_problem) {
|
||||
if (free_name) {
|
||||
/* XXX test coverage */
|
||||
dns_message_puttempname(msg, &name);
|
||||
}
|
||||
free_name = false;
|
||||
|
|
@ -1731,6 +1734,7 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_decompress_t *dctx,
|
|||
((msg->flags & DNS_MESSAGEFLAG_TC) == 0) && !preserve_order &&
|
||||
!auth_signed(section))
|
||||
{
|
||||
/* XXX test coverage */
|
||||
DO_ERROR(DNS_R_FORMERR);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue