[svn] commit: r1378 - in /trunk/src/bin/auth: auth_srv.cc auth_srv.h main.cc tests/auth_srv_unittest.cc
BIND 10 source code commits
bind10-changes at lists.isc.org
Fri Mar 12 23:16:14 UTC 2010
Author: jinmei
Date: Fri Mar 12 23:16:13 2010
New Revision: 1378
Log:
had the AuthSrv maintain verbosity
Modified:
trunk/src/bin/auth/auth_srv.cc
trunk/src/bin/auth/auth_srv.h
trunk/src/bin/auth/main.cc
trunk/src/bin/auth/tests/auth_srv_unittest.cc
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 23:16:13 2010
@@ -71,11 +71,13 @@
/// file change
isc::auth::ConstDataSrcPtr cur_datasrc_;
+ bool verbose_mode_;
+
/// Currently non-configurable, but will be.
static const uint16_t DEFAULT_LOCAL_UDPSIZE = 4096;
};
-AuthSrvImpl::AuthSrvImpl() {
+AuthSrvImpl::AuthSrvImpl() : verbose_mode_(false) {
// cur_datasrc_ is automatically initialized by the default constructor,
// effectively being an empty (sqlite) data source. once ccsession is up
// the datasource will be set by the configuration setting
@@ -142,10 +144,20 @@
}
}
+void
+AuthSrv::setVerbose(const bool on) {
+ impl_->verbose_mode_ = on;
+}
+
+bool
+AuthSrv::getVerbose() const {
+ return (impl_->verbose_mode_);
+}
+
bool
AuthSrv::processMessage(InputBuffer& request_buffer, Message& message,
MessageRenderer& response_renderer,
- const bool udp_buffer, const bool verbose_mode)
+ const bool udp_buffer)
{
// First, check the header part. If we fail even for the base header,
// just drop the message.
@@ -154,7 +166,7 @@
// Ignore all responses.
if (message.getHeaderFlag(MessageFlag::QR())) {
- if (verbose_mode) {
+ if (impl_->verbose_mode_) {
cerr << "received unexpected response, ignoring" << endl;
}
return (false);
@@ -167,23 +179,23 @@
try {
message.fromWire(request_buffer);
} catch (const DNSProtocolError& error) {
- if (verbose_mode) {
+ if (impl_->verbose_mode_) {
cerr << "returning " << error.getRcode().toText() << ": "
<< error.what() << endl;
}
makeErrorMessage(message, response_renderer, error.getRcode(),
- verbose_mode);
+ impl_->verbose_mode_);
return (true);
} catch (const Exception& ex) {
- if (verbose_mode) {
+ if (impl_->verbose_mode_) {
cerr << "returning SERVFAIL: " << ex.what() << endl;
}
makeErrorMessage(message, response_renderer, Rcode::SERVFAIL(),
- verbose_mode);
+ impl_->verbose_mode_);
return (true);
} // other exceptions will be handled at a higher layer.
- if (verbose_mode) {
+ if (impl_->verbose_mode_) {
cerr << "[AuthSrv] received a message:\n" << message.toText() << endl;
}
@@ -191,17 +203,17 @@
// In this implementation, we only support normal queries
if (message.getOpcode() != Opcode::QUERY()) {
- if (verbose_mode) {
+ if (impl_->verbose_mode_) {
cerr << "unsupported opcode" << endl;
}
makeErrorMessage(message, response_renderer, Rcode::NOTIMP(),
- verbose_mode);
+ impl_->verbose_mode_);
return (true);
}
if (message.getRRCount(Section::QUESTION()) != 1) {
makeErrorMessage(message, response_renderer, Rcode::FORMERR(),
- verbose_mode);
+ impl_->verbose_mode_);
return (true);
}
@@ -218,17 +230,17 @@
Query query(message, dnssec_ok);
impl_->data_sources_.doQuery(query);
} catch (const Exception& ex) {
- if (verbose_mode) {
+ if (impl_->verbose_mode_) {
cerr << "Internal error, returning SERVFAIL: " << ex.what() << endl;
}
makeErrorMessage(message, response_renderer, Rcode::SERVFAIL(),
- verbose_mode);
+ impl_->verbose_mode_);
return (true);
}
response_renderer.setLengthLimit(udp_buffer ? remote_bufsize : 65535);
message.toWire(response_renderer);
- if (verbose_mode) {
+ if (impl_->verbose_mode_) {
cerr << "sending a response (" <<
boost::lexical_cast<string>(response_renderer.getLength())
<< " bytes):\n" << message.toText() << endl;
@@ -241,7 +253,9 @@
AuthSrvImpl::setDbFile(const isc::data::ElementPtr config) {
if (config) {
db_file_ = config->get("database_file")->stringValue();
- cout << "[AuthSrv] Data source database file: " << db_file_ << endl;
+ if (verbose_mode_) {
+ cout << "[AuthSrv] Data source database file: " << db_file_ << endl;
+ }
}
// create SQL data source
@@ -284,7 +298,9 @@
return answer;
} catch (const isc::Exception& error) {
- cout << "[AuthSrv] error: " << error.what() << endl;
+ if (impl_->verbose_mode_) {
+ cerr << "[AuthSrv] error: " << error.what() << endl;
+ }
return isc::config::createAnswer(1, error.what());
}
}
Modified: trunk/src/bin/auth/auth_srv.h
==============================================================================
--- trunk/src/bin/auth/auth_srv.h (original)
+++ trunk/src/bin/auth/auth_srv.h Fri Mar 12 23:16:13 2010
@@ -50,7 +50,9 @@
bool processMessage(isc::dns::InputBuffer& request_buffer,
isc::dns::Message& message,
isc::dns::MessageRenderer& response_renderer,
- bool udp_buffer, bool verbose_mode);
+ bool udp_buffer);
+ void setVerbose(bool on);
+ bool getVerbose() const;
void serve(std::string zone_name);
isc::data::ElementPtr updateConfig(isc::data::ElementPtr config);
private:
Modified: trunk/src/bin/auth/main.cc
==============================================================================
--- trunk/src/bin/auth/main.cc (original)
+++ trunk/src/bin/auth/main.cc Fri Mar 12 23:16:13 2010
@@ -149,8 +149,7 @@
if (!error) {
InputBuffer dnsbuffer(data_, bytes_transferred);
if (auth_server->processMessage(dnsbuffer, dns_message_,
- response_renderer_, false,
- verbose_mode)) {
+ response_renderer_, false)) {
responselen_buffer_.writeUint16(response_buffer_.getLength());
async_write(socket_,
boost::asio::buffer(
@@ -258,8 +257,7 @@
dns_message_.clear(Message::PARSE);
response_renderer_.clear();
if (auth_server->processMessage(request_buffer, dns_message_,
- response_renderer_, true,
- verbose_mode)) {
+ response_renderer_, true)) {
socket_.async_send_to(
boost::asio::buffer(response_buffer_.getData(),
response_buffer_.getLength()),
@@ -450,7 +448,7 @@
if ((cc = recvfrom(fd, recvbuf, sizeof(recvbuf), 0, sa, &sa_len)) > 0) {
InputBuffer buffer(recvbuf, cc);
if (auth_server->processMessage(buffer, dns_message, response_renderer,
- true, verbose_mode)) {
+ true)) {
sendto(fd, response_renderer.getData(),
response_renderer.getLength(), 0, sa, sa_len);
}
@@ -496,7 +494,7 @@
dns_message.clear(Message::PARSE);
response_renderer.clear();
if (auth_server->processMessage(buffer, dns_message, response_renderer,
- false, verbose_mode)) {
+ false)) {
size = response_renderer.getLength();
size_n = htons(size);
if (send(ts, &size_n, 2, 0) == 2) {
@@ -639,6 +637,7 @@
}
auth_server = new AuthSrv;
+ auth_server->setVerbose(verbose_mode);
// initialize command channel
int ret = 0;
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 23:16:13 2010
@@ -122,17 +122,26 @@
parse_message.clear(Message::PARSE);
EXPECT_EQ(true, server.processMessage(*ibuffer, parse_message,
- response_renderer, true, false));
+ response_renderer, true));
headerCheck(parse_message, default_qid, Rcode::NOTIMP(), i, QR_FLAG,
0, 0, 0, 0);
}
}
+// Simple API check
+TEST_F(AuthSrvTest, verbose) {
+ EXPECT_FALSE(server.getVerbose());
+ server.setVerbose(true);
+ EXPECT_TRUE(server.getVerbose());
+ server.setVerbose(false);
+ EXPECT_FALSE(server.getVerbose());
+}
+
// Multiple questions. Should result in FORMERR.
TEST_F(AuthSrvTest, multiQuestion) {
createDataFromFile("testdata/multiquestion_fromWire");
EXPECT_EQ(true, server.processMessage(*ibuffer, parse_message,
- response_renderer, true, false));
+ response_renderer, true));
headerCheck(parse_message, default_qid, Rcode::FORMERR(), opcode.getCode(),
QR_FLAG, 2, 0, 0, 0);
@@ -153,7 +162,7 @@
TEST_F(AuthSrvTest, shortMessage) {
createDataFromFile("testdata/shortmessage_fromWire");
EXPECT_EQ(false, server.processMessage(*ibuffer, parse_message,
- response_renderer, true, false));
+ response_renderer, true));
}
// Response messages. Must be silently dropped, whether it's a valid response
@@ -162,25 +171,25 @@
// A valid (although unusual) response
createDataFromFile("testdata/simpleresponse_fromWire");
EXPECT_EQ(false, server.processMessage(*ibuffer, parse_message,
- response_renderer, true, false));
+ response_renderer, true));
// A response with a broken question section. must be dropped rather than
// returning FORMERR.
createDataFromFile("testdata/shortresponse_fromWire");
EXPECT_EQ(false, server.processMessage(*ibuffer, parse_message,
- response_renderer, true, false));
+ response_renderer, true));
// A response to iquery. must be dropped rather than returning NOTIMP.
createDataFromFile("testdata/iqueryresponse_fromWire");
EXPECT_EQ(false, server.processMessage(*ibuffer, parse_message,
- response_renderer, true, false));
+ response_renderer, true));
}
// Query with a broken question
TEST_F(AuthSrvTest, shortQuestion) {
createDataFromFile("testdata/shortquestion_fromWire");
EXPECT_EQ(true, server.processMessage(*ibuffer, parse_message,
- response_renderer, true, false));
+ response_renderer, true));
// Since the query's question is broken, the question section of the
// response should be empty.
headerCheck(parse_message, default_qid, Rcode::FORMERR(), opcode.getCode(),
@@ -191,7 +200,7 @@
TEST_F(AuthSrvTest, shortAnswer) {
createDataFromFile("testdata/shortanswer_fromWire");
EXPECT_EQ(true, server.processMessage(*ibuffer, parse_message,
- response_renderer, true, false));
+ response_renderer, true));
// This is a bogus query, but question section is valid. So the response
// should copy the question section.
@@ -210,7 +219,7 @@
TEST_F(AuthSrvTest, ednsBadVers) {
createDataFromFile("testdata/queryBadEDNS_fromWire");
EXPECT_EQ(true, server.processMessage(*ibuffer, parse_message,
- response_renderer, true, false));
+ response_renderer, true));
// 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
@@ -244,7 +253,7 @@
// and authority section.
createDataFromFile("testdata/examplequery_fromWire");
EXPECT_EQ(true, server.processMessage(*ibuffer, parse_message,
- response_renderer, true, false));
+ response_renderer, true));
headerCheck(parse_message, default_qid, Rcode::NOERROR(), opcode.getCode(),
QR_FLAG | AA_FLAG, 1, 1, 1, 0);
}
@@ -258,7 +267,7 @@
// be empty.
createDataFromFile("testdata/badExampleQuery_fromWire");
EXPECT_EQ(true, server.processMessage(*ibuffer, parse_message,
- response_renderer, true, false));
+ response_renderer, true));
headerCheck(parse_message, default_qid, Rcode::SERVFAIL(), opcode.getCode(),
QR_FLAG, 1, 0, 0, 0);
}
@@ -273,7 +282,7 @@
// The original data source should still exist.
createDataFromFile("testdata/examplequery_fromWire");
EXPECT_EQ(true, server.processMessage(*ibuffer, parse_message,
- response_renderer, true, false));
+ response_renderer, true));
headerCheck(parse_message, default_qid, Rcode::NOERROR(), opcode.getCode(),
QR_FLAG | AA_FLAG, 1, 1, 1, 0);
}
More information about the bind10-changes
mailing list