From be2972438caed9c68bde69612101529f30537a06 Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Mon, 30 Mar 2020 16:14:55 -0700 Subject: [PATCH] Add a test with an incorrect question in a continuation message --- bin/tests/system/ans.pl | 17 ++++++++++------- bin/tests/system/xfer/ans5/wrongname | 10 ++++++++++ bin/tests/system/xfer/tests.sh | 19 +++++++++++++++++++ util/copyrights | 1 + 4 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 bin/tests/system/xfer/ans5/wrongname diff --git a/bin/tests/system/ans.pl b/bin/tests/system/ans.pl index 9d77eb4575..0f391a0d2f 100644 --- a/bin/tests/system/ans.pl +++ b/bin/tests/system/ans.pl @@ -154,13 +154,13 @@ sub handleUDP { foreach $r (@rules) { my $pattern = $r->{pattern}; my($dbtype, $key_name, $key_data) = split(/ /,$pattern); - print "[handleUDP] $dbtype, $key_name, $key_data \n"; + print "[handleUDP] $dbtype, $key_name, $key_data\n"; if ("$qname $qtype" =~ /$dbtype/) { my $a; foreach $a (@{$r->{answer}}) { $packet->push("answer", $a); } - if(defined($key_name) && defined($key_data)) { + if (defined($key_name) && defined($key_data)) { my $tsig; # Sign the packet print " Signing the response with " . @@ -366,18 +366,18 @@ sub handleTCP { my $r; foreach $r (@rules) { my $pattern = $r->{pattern}; - my($dbtype, $key_name, $key_data, $extra) = split(/ /,$pattern); - print "[handleTCP] $dbtype, $key_name, $key_data \n"; + my($dbtype, $key_name, $key_data, $tname) = split(/ /,$pattern); + print "[handleTCP] $dbtype, $key_name, $key_data, $tname \n"; if ("$qname $qtype" =~ /$dbtype/) { $count_these++; my $a; foreach $a (@{$r->{answer}}) { $packet->push("answer", $a); } - if(defined($key_name) && $key_name eq "bad-id") { + if (defined($key_name) && $key_name eq "bad-id") { $packet->header->id(($id+50)%0xffff); $key_name = $key_data; - $key_data = $extra; + ($key_data, $tname) = split(/ /,$tname) } if (defined($key_name) && defined($key_data)) { my $tsig; @@ -446,7 +446,10 @@ sub handleTCP { } #$packet->print; push(@results,$packet->data); - $packet = new Net::DNS::Packet($qname, $qtype, $qclass); + if ($tname eq "") { + $tname = $qname; + } + $packet = new Net::DNS::Packet($tname, $qtype, $qclass); $packet->header->qr(1); $packet->header->aa(1); $packet->header->id($id); diff --git a/bin/tests/system/xfer/ans5/wrongname b/bin/tests/system/xfer/ans5/wrongname new file mode 100644 index 0000000000..346ac3df62 --- /dev/null +++ b/bin/tests/system/xfer/ans5/wrongname @@ -0,0 +1,10 @@ +/SOA tsig_key LSAnCU+Z/ +nil. 300 SOA ns.nil. root.nil. 1 300 300 604800 300 +/AXFR tsig_key LSAnCU+Z/ +nil. 300 SOA ns.nil. root.nil. 1 300 300 604800 300 +/AXFR tsig_key LSAnCU+Z ns.wrong./ +nil. 300 NS ns.nil. +nil. 300 TXT "wrong question AXFR" +a.nil. 60 A 10.0.0.61 +/AXFR tsig_key LSAnCU+Z/ +nil. 300 SOA ns.nil. root.nil. 1 300 300 604800 300 diff --git a/bin/tests/system/xfer/tests.sh b/bin/tests/system/xfer/tests.sh index 67cdfd1af4..9b853be55e 100755 --- a/bin/tests/system/xfer/tests.sh +++ b/bin/tests/system/xfer/tests.sh @@ -387,6 +387,25 @@ $DIGCMD nil. TXT | grep 'incorrect key AXFR' >/dev/null && { status=$((status+1)) } +n=$((n+1)) +echo_i "bad question section ($n)" + +sendcmd < ans5/wrongname + +$RNDCCMD 10.53.0.4 retransfer nil | sed 's/^/ns4 /' | cat_i + +sleep 2 + +nextpart ns4/named.run | grep "question name mismatch" > /dev/null || { + echo_i "failed: expected status was not logged" + status=$((status+1)) +} + +$DIGCMD nil. TXT | grep 'wrong question AXFR' >/dev/null && { + echo_i "failed" + status=$((status+1)) +} + n=$((n+1)) echo_i "bad message id ($n)" diff --git a/util/copyrights b/util/copyrights index 70cf2e35fd..6ea48afacb 100644 --- a/util/copyrights +++ b/util/copyrights @@ -934,6 +934,7 @@ ./bin/tests/system/xfer/ans5/unknownkey X 2011,2018,2019,2020 ./bin/tests/system/xfer/ans5/unsigned X 2011,2018,2019,2020 ./bin/tests/system/xfer/ans5/wrongkey X 2011,2018,2019,2020 +./bin/tests/system/xfer/ans5/wrongname X 2020 ./bin/tests/system/xfer/axfr-stats.good X 2019,2020 ./bin/tests/system/xfer/clean.sh SH 2000,2001,2004,2007,2011,2012,2013,2014,2015,2016,2018,2019,2020 ./bin/tests/system/xfer/dig1.good X 2000,2001,2003,2004,2009,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020