[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