[svn] commit: r1358 - in /trunk/src/bin/auth: auth_srv.cc tests/auth_srv_unittest.cc tests/testdata/queryBadEDNS_fromWire tests/testdata/queryBadEDNS_fromWire.spec tests/testdata/shortanswer_fromWire.spec
BIND 10 source code commits
bind10-changes at lists.isc.org
Fri Mar 12 09:20:53 UTC 2010
Author: jinmei
Date: Fri Mar 12 09:20:52 2010
New Revision: 1358
Log:
added a test case for EDNS BADVERS
Added:
trunk/src/bin/auth/tests/testdata/queryBadEDNS_fromWire
trunk/src/bin/auth/tests/testdata/queryBadEDNS_fromWire.spec
Modified:
trunk/src/bin/auth/auth_srv.cc
trunk/src/bin/auth/tests/auth_srv_unittest.cc
trunk/src/bin/auth/tests/testdata/shortanswer_fromWire.spec
Modified: trunk/src/bin/auth/auth_srv.cc
==============================================================================
--- trunk/src/bin/auth/auth_srv.cc (original)
+++ trunk/src/bin/auth/auth_srv.cc Fri Mar 12 09:20:52 2010
@@ -70,6 +70,9 @@
/// so that we can specifically remove that one should the database
/// file change
isc::auth::ConstDataSrcPtr cur_datasrc_;
+
+ /// Currently non-configurable, but will be.
+ static const uint16_t DEFAULT_LOCAL_UDPSIZE = 4096;
};
AuthSrvImpl::AuthSrvImpl() {
@@ -100,7 +103,7 @@
void
makeErrorMessage(Message& message, MessageRenderer& renderer,
- const Rcode& rcode)
+ const Rcode& rcode, const bool verbose_mode)
{
// extract the parameters that should be kept.
// XXX: with the current implementation, it's not easy to set EDNS0
@@ -120,6 +123,7 @@
message.setQid(qid);
message.setOpcode(opcode);
message.setHeaderFlag(MessageFlag::QR());
+ message.setUDPSize(AuthSrvImpl::DEFAULT_LOCAL_UDPSIZE);
if (rd) {
message.setHeaderFlag(MessageFlag::RD());
}
@@ -129,6 +133,12 @@
for_each(questions.begin(), questions.end(), QuestionInserter(&message));
message.setRcode(rcode);
message.toWire(renderer);
+
+ if (verbose_mode) {
+ cerr << "sending an error response (" <<
+ boost::lexical_cast<string>(renderer.getLength())
+ << " bytes):\n" << message.toText() << endl;
+ }
}
}
@@ -161,13 +171,15 @@
cerr << "returning " << error.getRcode().toText() << ": "
<< error.what() << endl;
}
- makeErrorMessage(message, response_renderer, error.getRcode());
+ makeErrorMessage(message, response_renderer, error.getRcode(),
+ verbose_mode);
return (true);
} catch (const Exception& ex) {
if (verbose_mode) {
cerr << "returning SERVFAIL: " << ex.what() << endl;
}
- makeErrorMessage(message, response_renderer, Rcode::SERVFAIL());
+ makeErrorMessage(message, response_renderer, Rcode::SERVFAIL(),
+ verbose_mode);
return (true);
} // other exceptions will be handled at a higher layer.
@@ -182,12 +194,14 @@
if (verbose_mode) {
cerr << "unsupported opcode" << endl;
}
- makeErrorMessage(message, response_renderer, Rcode::NOTIMP());
+ makeErrorMessage(message, response_renderer, Rcode::NOTIMP(),
+ verbose_mode);
return (true);
}
if (message.getRRCount(Section::QUESTION()) != 1) {
- makeErrorMessage(message, response_renderer, Rcode::FORMERR());
+ makeErrorMessage(message, response_renderer, Rcode::FORMERR(),
+ verbose_mode);
return (true);
}
@@ -198,7 +212,7 @@
message.setHeaderFlag(MessageFlag::AA());
message.setRcode(Rcode::NOERROR());
message.setDNSSECSupported(dnssec_ok);
- message.setUDPSize(4096); // XXX: hardcoding
+ message.setUDPSize(AuthSrvImpl::DEFAULT_LOCAL_UDPSIZE);
try {
Query query(message, dnssec_ok);
Modified: trunk/src/bin/auth/tests/auth_srv_unittest.cc
==============================================================================
--- trunk/src/bin/auth/tests/auth_srv_unittest.cc (original)
+++ trunk/src/bin/auth/tests/auth_srv_unittest.cc Fri Mar 12 09:20:52 2010
@@ -182,12 +182,13 @@
TEST_F(AuthSrvTest, shortAnswer) {
createDataFromFile("testdata/shortanswer_fromWire");
EXPECT_EQ(true, server.processMessage(*ibuffer, parse_message,
- response_renderer, true, true));
+ response_renderer, true, false));
+
+ // This is a bogus query, but question section is valid. So the response
+ // should copy the question section.
headerCheck(parse_message, default_qid, Rcode::FORMERR(), opcode.getCode(),
QR_FLAG, 1, 0, 0, 0);
- // This is a bogus query, but question section is valid. So the response
- // should copy the question section.
QuestionIterator qit = parse_message.beginQuestion();
EXPECT_EQ(Name("example.com"), (*qit)->getName());
EXPECT_EQ(RRClass::IN(), (*qit)->getClass());
@@ -196,4 +197,19 @@
EXPECT_TRUE(qit == parse_message.endQuestion());
}
-}
+// Query with unsupported version of EDNS.
+TEST_F(AuthSrvTest, ednsBadVers) {
+ createDataFromFile("testdata/queryBadEDNS_fromWire");
+ EXPECT_EQ(true, server.processMessage(*ibuffer, parse_message,
+ response_renderer, true, false));
+
+ // The response must have an EDNS OPT RR in the additional section.
+ // Note that the DNSSEC DO bit is cleared even if this bit in the query
+ // is set. This is a limitation of the current implementation.
+ headerCheck(parse_message, default_qid, Rcode::BADVERS(), opcode.getCode(),
+ QR_FLAG, 1, 0, 0, 1);
+ EXPECT_EQ(4096, parse_message.getUDPSize());
+ EXPECT_FALSE(parse_message.isDNSSECSupported());
+}
+
+}
Modified: trunk/src/bin/auth/tests/testdata/shortanswer_fromWire.spec
==============================================================================
--- trunk/src/bin/auth/tests/testdata/shortanswer_fromWire.spec (original)
+++ trunk/src/bin/auth/tests/testdata/shortanswer_fromWire.spec Fri Mar 12 09:20:52 2010
@@ -5,6 +5,6 @@
[header]
# use default
-ancount: 1
+arcount: 1
[question]
# use default
More information about the bind10-changes
mailing list