|
@@ -625,7 +625,6 @@ testGetTime() {
|
|
|
const unsigned int QR_FLAG = 0x1;
|
|
|
const unsigned int AA_FLAG = 0x2;
|
|
|
const unsigned int RD_FLAG = 0x4;
|
|
|
-const unsigned int TC_FLAG = 0x8;
|
|
|
|
|
|
void
|
|
|
commonTSIGToWireCheck(Message& message, MessageRenderer& renderer,
|
|
@@ -645,9 +644,6 @@ commonTSIGToWireCheck(Message& message, MessageRenderer& renderer,
|
|
|
if ((message_flags & RD_FLAG) != 0) {
|
|
|
message.setHeaderFlag(Message::HEADERFLAG_RD);
|
|
|
}
|
|
|
- if ((message_flags & TC_FLAG) != 0) {
|
|
|
- message.setHeaderFlag(Message::HEADERFLAG_TC);
|
|
|
- }
|
|
|
message.addQuestion(Question(Name("www.example.com"), RRClass::IN(),
|
|
|
qtype));
|
|
|
|
|
@@ -723,6 +719,10 @@ const char* const long_txt2 = "0123456789abcdef0123456789abcdef0123456789abcdef0
|
|
|
// adding a TSIG would result in truncation (33 + 268 + 127 + 85 = 513)
|
|
|
const char* const long_txt3 = "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef01";
|
|
|
|
|
|
+// This is 1 byte shorter than txt3, which will result in a possible longest
|
|
|
+// message containing answer RRs and TSIG.
|
|
|
+const char* const long_txt4 = "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0";
|
|
|
+
|
|
|
// Example output generated by
|
|
|
// "dig -y www.example.com:SFuWd/q99SzF8Yzd1QbB9g== www.example.com txt
|
|
|
// QID: 0x22c2
|
|
@@ -731,13 +731,12 @@ TEST_F(MessageTest, toWireTSIGTruncation) {
|
|
|
isc::util::detail::gettimeFunction = testGetTime<0x4e179212>;
|
|
|
|
|
|
// Verify a validly signed query so that we can use the TSIG context
|
|
|
- // in a response mode.
|
|
|
+
|
|
|
factoryFromFile(message_parse, "message_fromWire17.wire");
|
|
|
EXPECT_EQ(TSIGError::NOERROR(),
|
|
|
tsig_ctx.verify(message_parse.getTSIGRecord(),
|
|
|
&received_data[0], received_data.size()));
|
|
|
|
|
|
-
|
|
|
message_render.setQid(0x22c2);
|
|
|
vector<const char*> answer_data;
|
|
|
answer_data.push_back(long_txt1);
|
|
@@ -746,7 +745,7 @@ TEST_F(MessageTest, toWireTSIGTruncation) {
|
|
|
SCOPED_TRACE("Message sign with TSIG and TC bit on");
|
|
|
commonTSIGToWireCheck(message_render, renderer, tsig_ctx,
|
|
|
"message_toWire4.wire",
|
|
|
- QR_FLAG|AA_FLAG|RD_FLAG|TC_FLAG,
|
|
|
+ QR_FLAG|AA_FLAG|RD_FLAG,
|
|
|
RRType::TXT(), &answer_data);
|
|
|
}
|
|
|
}
|
|
@@ -768,7 +767,29 @@ TEST_F(MessageTest, toWireTSIGTruncation2) {
|
|
|
SCOPED_TRACE("Message sign with TSIG and TC bit on (2)");
|
|
|
commonTSIGToWireCheck(message_render, renderer, tsig_ctx,
|
|
|
"message_toWire4.wire",
|
|
|
- QR_FLAG|AA_FLAG|RD_FLAG|TC_FLAG,
|
|
|
+ QR_FLAG|AA_FLAG|RD_FLAG,
|
|
|
+ RRType::TXT(), &answer_data);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+TEST_F(MessageTest, toWireTSIGNoTruncation) {
|
|
|
+ // A boundary case that shouldn't cause truncation: the resulting
|
|
|
+ // response message with a TSIG will be 512 bytes long.
|
|
|
+ isc::util::detail::gettimeFunction = testGetTime<0x4e17b38d>;
|
|
|
+ factoryFromFile(message_parse, "message_fromWire18.wire");
|
|
|
+ EXPECT_EQ(TSIGError::NOERROR(),
|
|
|
+ tsig_ctx.verify(message_parse.getTSIGRecord(),
|
|
|
+ &received_data[0], received_data.size()));
|
|
|
+
|
|
|
+ message_render.setQid(0xd6e2);
|
|
|
+ vector<const char*> answer_data;
|
|
|
+ answer_data.push_back(long_txt1);
|
|
|
+ answer_data.push_back(long_txt4);
|
|
|
+ {
|
|
|
+ SCOPED_TRACE("Message sign with TSIG, no truncation");
|
|
|
+ commonTSIGToWireCheck(message_render, renderer, tsig_ctx,
|
|
|
+ "message_toWire5.wire",
|
|
|
+ QR_FLAG|AA_FLAG|RD_FLAG,
|
|
|
RRType::TXT(), &answer_data);
|
|
|
}
|
|
|
}
|