From: Michal 'vorner' Vaner Date: Tue, 18 Dec 2012 12:23:25 +0000 (+0100) Subject: [2427] Warn about relative $ORIGIN X-Git-Tag: bind10-1.0.0-beta-release~13^2^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b5904bd8eed8e36d1d6fd6d4305f687f53fe6733;p=thirdparty%2Fkea.git [2427] Warn about relative $ORIGIN It is probably unusual and most probably a typo, resulting in broken zone. --- diff --git a/src/lib/dns/master_loader.cc b/src/lib/dns/master_loader.cc index 0848d5d4c5..7274002a64 100644 --- a/src/lib/dns/master_loader.cc +++ b/src/lib/dns/master_loader.cc @@ -157,6 +157,13 @@ private: name_string(name_tok.getStringRegion()); active_origin_ = Name(name_string.beg, name_string.len, &active_origin_); + if (name_string.len > 0 && + name_string.beg[name_string.len - 1] != '.') { + callbacks_.warning(lexer_.getSourceName(), + lexer_.getSourceLine(), + "The new origin is relative, did you really" + " mean " + active_origin_.toText() + "?"); + } } else { // If it is not optional, we must not get anything but // a string token. diff --git a/src/lib/dns/tests/master_loader_unittest.cc b/src/lib/dns/tests/master_loader_unittest.cc index 934902d72a..26d24a792e 100644 --- a/src/lib/dns/tests/master_loader_unittest.cc +++ b/src/lib/dns/tests/master_loader_unittest.cc @@ -195,6 +195,22 @@ TEST_F(MasterLoaderTest, include) { } } +// A commonly used helper to check callback message. +void +checkCallbackMessage(const string& actual_msg, const string& expected_msg, + size_t expected_line) { + // The actual message should begin with the expected message. + EXPECT_EQ(0, actual_msg.find(expected_msg)) << "actual message: " << + actual_msg << " expected: " << + expected_msg; + + // and it should end with "...:]" + const string line_desc = ":" + lexical_cast(expected_line) + "]"; + EXPECT_EQ(actual_msg.size() - line_desc.size(), + actual_msg.find(line_desc)) << "Expected on line " << + expected_line; +} + TEST_F(MasterLoaderTest, origin) { // Various forms of the directive const char* origins[] = { @@ -226,7 +242,11 @@ TEST_F(MasterLoaderTest, origin) { loader_->load(); EXPECT_TRUE(loader_->loadedSucessfully()); EXPECT_TRUE(errors_.empty()); - EXPECT_TRUE(warnings_.empty()); + // There's a relative origin in it, we warn about that. + EXPECT_EQ(1, warnings_.size()); + checkCallbackMessage(warnings_.at(0), + "The new origin is relative, did you really mean " + "relative.sub.example.org.?", 4); checkARR("example.org"); checkARR("www.sub.example.org"); @@ -370,22 +390,6 @@ struct ErrorCase { { NULL, NULL, NULL } }; -// A commonly used helper to check callback message. -void -checkCallbackMessage(const string& actual_msg, const string& expected_msg, - size_t expected_line) { - // The actual message should begin with the expected message. - EXPECT_EQ(0, actual_msg.find(expected_msg)) << "actual message: " << - actual_msg << " expected: " << - expected_msg; - - // and it should end with "...:]" - const string line_desc = ":" + lexical_cast(expected_line) + "]"; - EXPECT_EQ(actual_msg.size() - line_desc.size(), - actual_msg.find(line_desc)) << "Expected on line " << - expected_line; -} - // Test a broken zone is handled properly. We test several problems, // both in strict and lenient mode. TEST_F(MasterLoaderTest, brokenZone) { @@ -480,7 +484,7 @@ TEST_F(MasterLoaderTest, includeWithGarbage) { // Check we error about garbage at the end of $ORIGIN line (but the line // works). TEST_F(MasterLoaderTest, originWithGarbage) { - const string origin_str = "$ORIGIN www More garbage here\n" + const string origin_str = "$ORIGIN www.example.org. More garbage here\n" "@ 1H IN A 192.0.2.1\n"; stringstream ss(origin_str); setLoader(ss, Name("example.org."), RRClass::IN(), @@ -497,7 +501,7 @@ TEST_F(MasterLoaderTest, originWithGarbage) { TEST_F(MasterLoaderTest, includeAndOrigin) { // First, switch origin to something else, so we can check it is // switched back. - const string include_string = "$ORIGIN www\n" + const string include_string = "$ORIGIN www.example.org.\n" "@ 1H IN A 192.0.2.1\n" // Then include the file with data and switch origin back "$INCLUDE " TEST_DATA_SRCDIR "/example.org example.org.\n"