|
@@ -38,6 +38,8 @@
|
|
|
#include <dns/rrset.h>
|
|
|
#include <dns/rrsetlist.h>
|
|
|
|
|
|
+#include <log/macros.h>
|
|
|
+
|
|
|
#include <cc/data.h>
|
|
|
|
|
|
#define RETERR(x) do { \
|
|
@@ -124,11 +126,8 @@ getAdditional(Query& q, ConstRRsetPtr rrset) {
|
|
|
const Rdata& rd(it->getCurrent());
|
|
|
if (rrset->getType() == RRType::NS()) {
|
|
|
const generic::NS& ns = dynamic_cast<const generic::NS&>(rd);
|
|
|
- if (logger.isDebugEnabled(DBG_TRACE_DATA)) {
|
|
|
- logger.debug(DBG_TRACE_DATA, DATASRC_QUERY_GET_NS_ADDITIONAL,
|
|
|
- ns.getNSName().toText().c_str(),
|
|
|
- rrset->getName().toText().c_str());
|
|
|
- }
|
|
|
+ LOG_DEBUG(logger, DBG_TRACE_DATA, DATASRC_QUERY_GET_NS_ADDITIONAL).
|
|
|
+ arg(ns.getNSName()).arg(rrset->getName());
|
|
|
q.tasks().push(QueryTaskPtr(
|
|
|
new QueryTask(q, ns.getNSName(),
|
|
|
Message::SECTION_ADDITIONAL,
|
|
@@ -136,11 +135,8 @@ getAdditional(Query& q, ConstRRsetPtr rrset) {
|
|
|
QueryTask::GETADDITIONAL)));
|
|
|
} else if (rrset->getType() == RRType::MX()) {
|
|
|
const generic::MX& mx = dynamic_cast<const generic::MX&>(rd);
|
|
|
- if (logger.isDebugEnabled(DBG_TRACE_DATA)) {
|
|
|
- logger.debug(DBG_TRACE_DATA, DATASRC_QUERY_GET_MX_ADDITIONAL,
|
|
|
- mx.getMXName().toText().c_str(),
|
|
|
- rrset->getName().toText().c_str());
|
|
|
- }
|
|
|
+ LOG_DEBUG(logger, DBG_TRACE_DATA, DATASRC_QUERY_GET_MX_ADDITIONAL).
|
|
|
+ arg(mx.getMXName()).arg(rrset->getName());
|
|
|
q.tasks().push(QueryTaskPtr(
|
|
|
new QueryTask(q, mx.getMXName(),
|
|
|
Message::SECTION_ADDITIONAL,
|
|
@@ -154,17 +150,14 @@ getAdditional(Query& q, ConstRRsetPtr rrset) {
|
|
|
// understand DNAME
|
|
|
void
|
|
|
synthesizeCname(QueryTaskPtr task, RRsetPtr rrset, RRsetList& target) {
|
|
|
- if (logger.isDebugEnabled(DBG_TRACE_DATA)) {
|
|
|
- logger.debug(DBG_TRACE_DATA, DATASRC_QUERY_SYNTH_CNAME,
|
|
|
- rrset->getName().toText().c_str());
|
|
|
- }
|
|
|
+ logger.debug(DBG_TRACE_DATA, DATASRC_QUERY_SYNTH_CNAME).
|
|
|
+ arg(rrset->getName());
|
|
|
RdataIteratorPtr it = rrset->getRdataIterator();
|
|
|
|
|
|
// More than one DNAME RR in the RRset is illegal, so we only have
|
|
|
// to process the first one.
|
|
|
if (it->isLast()) {
|
|
|
- logger.error(DATASRC_QUERY_EMPTY_DNAME,
|
|
|
- rrset->getName().toText().c_str());
|
|
|
+ logger.error(DATASRC_QUERY_EMPTY_DNAME).arg(rrset->getName());
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -188,24 +181,20 @@ synthesizeCname(QueryTaskPtr task, RRsetPtr rrset, RRsetList& target) {
|
|
|
// to by a CNAME record
|
|
|
void
|
|
|
chaseCname(Query& q, QueryTaskPtr task, RRsetPtr rrset) {
|
|
|
- if (logger.isDebugEnabled(DBG_TRACE_DATA)) {
|
|
|
- logger.debug(DBG_TRACE_DATA, DATASRC_QUERY_FOLLOW_CNAME,
|
|
|
- rrset->getName().toText().c_str());
|
|
|
- }
|
|
|
+ logger.debug(DBG_TRACE_DATA, DATASRC_QUERY_FOLLOW_CNAME).
|
|
|
+ arg(rrset->getName());
|
|
|
RdataIteratorPtr it = rrset->getRdataIterator();
|
|
|
|
|
|
// More than one CNAME RR in the RRset is illegal, so we only have
|
|
|
// to process the first one.
|
|
|
if (it->isLast()) {
|
|
|
- logger.error(DATASRC_QUERY_EMPTY_CNAME,
|
|
|
- rrset->getName().toText().c_str());
|
|
|
+ logger.error(DATASRC_QUERY_EMPTY_CNAME).arg(rrset->getName());
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// Stop chasing CNAMES after 16 lookups, to prevent loops
|
|
|
if (q.tooMany()) {
|
|
|
- logger.error(DATASRC_QUERY_TOO_MANY_CNAMES,
|
|
|
- rrset->getName().toText().c_str());
|
|
|
+ logger.error(DATASRC_QUERY_TOO_MANY_CNAMES).arg(rrset->getName());
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -219,10 +208,8 @@ chaseCname(Query& q, QueryTaskPtr task, RRsetPtr rrset) {
|
|
|
// Check the cache for data which can answer the current query task.
|
|
|
bool
|
|
|
checkCache(QueryTask& task, RRsetList& target) {
|
|
|
- if (logger.isDebugEnabled(DBG_TRACE_DATA)) {
|
|
|
- logger.debug(DBG_TRACE_DATA, DATASRC_QUERY_CHECK_CACHE,
|
|
|
- task.qname.toText().c_str(), task.qtype.toText().c_str());
|
|
|
- }
|
|
|
+ logger.debug(DBG_TRACE_DATA, DATASRC_QUERY_CHECK_CACHE).arg(task.qname).
|
|
|
+ arg(task.qtype);
|
|
|
HotCache& cache = task.q.getCache();
|
|
|
RRsetList rrsets;
|
|
|
RRsetPtr rrset;
|
|
@@ -384,10 +371,8 @@ DataSrc::Result
|
|
|
doQueryTask(QueryTask& task, ZoneInfo& zoneinfo, RRsetList& target) {
|
|
|
HotCache& cache = task.q.getCache();
|
|
|
RRsetPtr rrset;
|
|
|
- if (logger.isDebugEnabled(DBG_TRACE_DATA)) {
|
|
|
- logger.debug(DBG_TRACE_DATA, DATASRC_DO_QUERY,
|
|
|
- task.qname.toText().c_str(), task.qtype.toText().c_str());
|
|
|
- }
|
|
|
+ logger.debug(DBG_TRACE_DATA, DATASRC_DO_QUERY).arg(task.qname).
|
|
|
+ arg(task.qtype);
|
|
|
|
|
|
// First off, make sure at least we have a matching zone in some data
|
|
|
// source. We must do this before checking the cache, because it can
|
|
@@ -398,10 +383,7 @@ doQueryTask(QueryTask& task, ZoneInfo& zoneinfo, RRsetList& target) {
|
|
|
const Name* const zonename = zoneinfo.getEnclosingZone();
|
|
|
if (ds == NULL) {
|
|
|
task.flags |= DataSrc::NO_SUCH_ZONE;
|
|
|
- if (logger.isInfoEnabled()) {
|
|
|
- logger.info(DATASRC_QUERY_NO_ZONE, task.qname.toText().c_str(),
|
|
|
- task.qclass.toText().c_str());
|
|
|
- }
|
|
|
+ logger.info(DATASRC_QUERY_NO_ZONE).arg(task.qname).arg(task.qclass);
|
|
|
return (DataSrc::SUCCESS);
|
|
|
}
|
|
|
|
|
@@ -423,7 +405,7 @@ doQueryTask(QueryTask& task, ZoneInfo& zoneinfo, RRsetList& target) {
|
|
|
target, task.flags, zonename);
|
|
|
|
|
|
if (result != DataSrc::SUCCESS) {
|
|
|
- logger.error(DATASRC_QUERY_SIMPLE_FAIL, unsigned(result));
|
|
|
+ logger.error(DATASRC_QUERY_SIMPLE_FAIL).arg(result);
|
|
|
return (result);
|
|
|
}
|
|
|
|
|
@@ -450,7 +432,7 @@ doQueryTask(QueryTask& task, ZoneInfo& zoneinfo, RRsetList& target) {
|
|
|
target, task.flags, zonename);
|
|
|
|
|
|
if (result != DataSrc::SUCCESS) {
|
|
|
- logger.error(DATASRC_QUERY_AUTH_FAIL, unsigned(result));
|
|
|
+ logger.error(DATASRC_QUERY_AUTH_FAIL).arg(result);
|
|
|
return (result);
|
|
|
}
|
|
|
|
|
@@ -490,8 +472,8 @@ doQueryTask(QueryTask& task, ZoneInfo& zoneinfo, RRsetList& target) {
|
|
|
|
|
|
if (result != DataSrc::SUCCESS) {
|
|
|
logger.error(task.op == QueryTask::GLUE_QUERY ?
|
|
|
- DATASRC_QUERY_GLUE_FAIL : DATASRC_QUERY_NOGLUE_FAIL,
|
|
|
- unsigned(result));
|
|
|
+ DATASRC_QUERY_GLUE_FAIL : DATASRC_QUERY_NOGLUE_FAIL).
|
|
|
+ arg(result);
|
|
|
return (result);
|
|
|
}
|
|
|
|
|
@@ -522,7 +504,7 @@ doQueryTask(QueryTask& task, ZoneInfo& zoneinfo, RRsetList& target) {
|
|
|
task.flags, zonename);
|
|
|
|
|
|
if (result != DataSrc::SUCCESS) {
|
|
|
- logger.error(DATASRC_QUERY_REF_FAIL, unsigned(result));
|
|
|
+ logger.error(DATASRC_QUERY_REF_FAIL).arg(result);
|
|
|
return (result);
|
|
|
}
|
|
|
|
|
@@ -568,11 +550,8 @@ inline void
|
|
|
addToMessage(Query& q, const Message::Section sect, RRsetPtr rrset,
|
|
|
bool no_dnssec = false)
|
|
|
{
|
|
|
- if (logger.isDebugEnabled(DBG_TRACE_DATA)) {
|
|
|
- logger.debug(DBG_TRACE_DATA, DATASRC_QUERY_ADD_RRSET,
|
|
|
- rrset->getName().toText().c_str(),
|
|
|
- rrset->getType().toText().c_str());
|
|
|
- }
|
|
|
+ LOG_DEBUG(logger, DBG_TRACE_DATA, DATASRC_QUERY_ADD_RRSET).
|
|
|
+ arg(rrset->getName()).arg(rrset->getType());
|
|
|
Message& m = q.message();
|
|
|
if (no_dnssec) {
|
|
|
if (rrset->getType() == RRType::RRSIG() ||
|
|
@@ -629,10 +608,8 @@ refQuery(const Query& q, const Name& name, ZoneInfo& zoneinfo,
|
|
|
// they'll be handled in a normal lookup in the zone.
|
|
|
inline bool
|
|
|
hasDelegation(Query& q, QueryTaskPtr task, ZoneInfo& zoneinfo) {
|
|
|
- if (logger.isDebugEnabled(DBG_TRACE_DATA)) {
|
|
|
- logger.debug(DBG_TRACE_DATA, DATASRC_QUERY_DELEGATION,
|
|
|
- task->qname.toText().c_str());
|
|
|
- }
|
|
|
+ LOG_DEBUG(logger, DBG_TRACE_DATA, DATASRC_QUERY_DELEGATION).
|
|
|
+ arg(task->qname);
|
|
|
|
|
|
const Name* const zonename = zoneinfo.getEnclosingZone();
|
|
|
if (zonename == NULL) {
|
|
@@ -699,10 +676,7 @@ addSOA(Query& q, ZoneInfo& zoneinfo) {
|
|
|
RRsetList soa;
|
|
|
|
|
|
const Name* const zonename = zoneinfo.getEnclosingZone();
|
|
|
- if (logger.isDebugEnabled(DBG_TRACE_DATA)) {
|
|
|
- logger.debug(DBG_TRACE_DATA, DATASRC_QUERY_ADD_SOA,
|
|
|
- zonename->toText().c_str());
|
|
|
- }
|
|
|
+ logger.debug(DBG_TRACE_DATA, DATASRC_QUERY_ADD_SOA).arg(*zonename);
|
|
|
QueryTask newtask(q, *zonename, RRType::SOA(), QueryTask::SIMPLE_QUERY);
|
|
|
RETERR(doQueryTask(newtask, zoneinfo, soa));
|
|
|
if (newtask.flags != 0) {
|
|
@@ -716,10 +690,7 @@ addSOA(Query& q, ZoneInfo& zoneinfo) {
|
|
|
|
|
|
inline DataSrc::Result
|
|
|
addNSEC(Query& q, const Name& name, ZoneInfo& zoneinfo) {
|
|
|
- if (logger.isDebugEnabled(DBG_TRACE_DATA)) {
|
|
|
- logger.debug(DBG_TRACE_DATA, DATASRC_QUERY_ADD_NSEC,
|
|
|
- name.toText().c_str());
|
|
|
- }
|
|
|
+ logger.debug(DBG_TRACE_DATA, DATASRC_QUERY_ADD_NSEC).arg(name);
|
|
|
RRsetList nsec;
|
|
|
|
|
|
QueryTask newtask(q, name, RRType::NSEC(), QueryTask::SIMPLE_QUERY);
|
|
@@ -736,14 +707,11 @@ inline DataSrc::Result
|
|
|
getNsec3(Query& q, ZoneInfo& zoneinfo, string& hash, RRsetPtr& target) {
|
|
|
const DataSrc* ds = zoneinfo.getDataSource();
|
|
|
const Name* const zonename = zoneinfo.getEnclosingZone();
|
|
|
- if (logger.isDebugEnabled(DBG_TRACE_DATA)) {
|
|
|
- logger.debug(DBG_TRACE_DATA, DATASRC_QUERY_ADD_NSEC3,
|
|
|
- zonename->toText().c_str());
|
|
|
- }
|
|
|
+ logger.debug(DBG_TRACE_DATA, DATASRC_QUERY_ADD_NSEC3).arg(*zonename);
|
|
|
|
|
|
if (ds == NULL) {
|
|
|
q.message().setRcode(Rcode::SERVFAIL());
|
|
|
- logger.error(DATASRC_QUERY_NO_DS_NSEC3, zonename->toText().c_str());
|
|
|
+ logger.error(DATASRC_QUERY_NO_DS_NSEC3).arg(*zonename);
|
|
|
return (DataSrc::ERROR);
|
|
|
}
|
|
|
|
|
@@ -846,8 +814,7 @@ proveNX(Query& q, QueryTaskPtr task, ZoneInfo& zoneinfo, const bool wildcard) {
|
|
|
const DataSrc* ds = zoneinfo.getDataSource();
|
|
|
if (ds == NULL) {
|
|
|
m.setRcode(Rcode::SERVFAIL());
|
|
|
- logger.error(DATASRC_QUERY_NO_DS_NSEC,
|
|
|
- zonename->toText().c_str());
|
|
|
+ logger.error(DATASRC_QUERY_NO_DS_NSEC).arg(*zonename);
|
|
|
return (DataSrc::ERROR);
|
|
|
}
|
|
|
ds->findPreviousName(task->qname, nsecname, zonename);
|
|
@@ -876,10 +843,7 @@ proveNX(Query& q, QueryTaskPtr task, ZoneInfo& zoneinfo, const bool wildcard) {
|
|
|
// Attempt a wildcard lookup
|
|
|
inline DataSrc::Result
|
|
|
tryWildcard(Query& q, QueryTaskPtr task, ZoneInfo& zoneinfo, bool& found) {
|
|
|
- if (logger.isDebugEnabled(DBG_TRACE_DATA)) {
|
|
|
- logger.debug(DBG_TRACE_DATA, DATASRC_QUERY_WILDCARD,
|
|
|
- task->qname.toText().c_str());
|
|
|
- }
|
|
|
+ logger.debug(DBG_TRACE_DATA, DATASRC_QUERY_WILDCARD).arg(task->qname);
|
|
|
Message& m = q.message();
|
|
|
DataSrc::Result result;
|
|
|
found = false;
|
|
@@ -933,9 +897,8 @@ tryWildcard(Query& q, QueryTaskPtr task, ZoneInfo& zoneinfo, bool& found) {
|
|
|
result = proveNX(q, task, zoneinfo, true);
|
|
|
if (result != DataSrc::SUCCESS) {
|
|
|
m.setRcode(Rcode::SERVFAIL());
|
|
|
- logger.error(DATASRC_QUERY_WILDCARD_PROVENX_FAIL,
|
|
|
- task->qname.toText().c_str(),
|
|
|
- unsigned(result));
|
|
|
+ logger.error(DATASRC_QUERY_WILDCARD_PROVENX_FAIL).
|
|
|
+ arg(task->qname).arg(result);
|
|
|
return (DataSrc::ERROR);
|
|
|
}
|
|
|
}
|
|
@@ -958,9 +921,8 @@ tryWildcard(Query& q, QueryTaskPtr task, ZoneInfo& zoneinfo, bool& found) {
|
|
|
|
|
|
RRsetList auth;
|
|
|
if (!refQuery(q, *zonename, zoneinfo, auth)) {
|
|
|
- logger.error(DATASRC_QUERY_WILDCARD_REFERRAL,
|
|
|
- task->qname.toText().c_str(),
|
|
|
- unsigned(result));
|
|
|
+ logger.error(DATASRC_QUERY_WILDCARD_REFERRAL).arg(task->qname).
|
|
|
+ arg(result);
|
|
|
return (DataSrc::ERROR);
|
|
|
}
|
|
|
|
|
@@ -976,11 +938,8 @@ tryWildcard(Query& q, QueryTaskPtr task, ZoneInfo& zoneinfo, bool& found) {
|
|
|
//
|
|
|
void
|
|
|
DataSrc::doQuery(Query& q) {
|
|
|
- if (logger.isDebugEnabled(DBG_TRACE_BASIC)) {
|
|
|
- logger.debug(DBG_TRACE_BASIC, DATASRC_QUERY_PROCESS,
|
|
|
- q.qname().toText().c_str(), q.qtype().toText().c_str(),
|
|
|
- q.qclass().toText().c_str());
|
|
|
- }
|
|
|
+ logger.debug(DBG_TRACE_BASIC, DATASRC_QUERY_PROCESS).arg(q.qname()).
|
|
|
+ arg(q.qclass());
|
|
|
Message& m = q.message();
|
|
|
vector<RRsetPtr> additional;
|
|
|
|
|
@@ -998,9 +957,7 @@ DataSrc::doQuery(Query& q) {
|
|
|
// Can't query directly for RRSIG.
|
|
|
if (task->qtype == RRType::RRSIG()) {
|
|
|
m.setRcode(Rcode::REFUSED());
|
|
|
- if (logger.isWarnEnabled()) {
|
|
|
- logger.warn(DATASRC_QUERY_RRSIG, task->qname.toText().c_str());
|
|
|
- }
|
|
|
+ logger.warn(DATASRC_QUERY_RRSIG).arg(task->qname);
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -1028,7 +985,7 @@ DataSrc::doQuery(Query& q) {
|
|
|
result = doQueryTask(*task, zoneinfo, data);
|
|
|
if (result != SUCCESS) {
|
|
|
m.setRcode(Rcode::SERVFAIL());
|
|
|
- logger.error(DATASRC_QUERY_TASK_FAIL, unsigned(result));
|
|
|
+ logger.error(DATASRC_QUERY_TASK_FAIL).arg(result);
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -1080,8 +1037,7 @@ DataSrc::doQuery(Query& q) {
|
|
|
RRsetList auth;
|
|
|
if (!refQuery(q, Name(*zonename), zoneinfo, auth) ||
|
|
|
!findRRsetFromList(auth, RRType::NS())) {
|
|
|
- logger.error(DATASRC_QUERY_MISSING_NS,
|
|
|
- zonename->toText().c_str());
|
|
|
+ logger.error(DATASRC_QUERY_MISSING_NS).arg(*zonename);
|
|
|
isc_throw(DataSourceError,
|
|
|
"NS RR not found in " << *zonename << "/" <<
|
|
|
q.qclass());
|
|
@@ -1129,8 +1085,7 @@ DataSrc::doQuery(Query& q) {
|
|
|
m.setHeaderFlag(Message::HEADERFLAG_AA, false);
|
|
|
if (!refQuery(q, task->qname, zoneinfo, auth)) {
|
|
|
m.setRcode(Rcode::SERVFAIL());
|
|
|
- logger.error(DATASRC_QUERY_BAD_REFERRAL,
|
|
|
- task->qname.toText().c_str());
|
|
|
+ logger.error(DATASRC_QUERY_BAD_REFERRAL).arg(task->qname);
|
|
|
return;
|
|
|
}
|
|
|
BOOST_FOREACH (RRsetPtr rrset, auth) {
|
|
@@ -1162,8 +1117,7 @@ DataSrc::doQuery(Query& q) {
|
|
|
result = tryWildcard(q, task, zoneinfo, wildcard_found);
|
|
|
if (result != SUCCESS) {
|
|
|
m.setRcode(Rcode::SERVFAIL());
|
|
|
- logger.error(DATASRC_QUERY_WILDCARD_FAIL,
|
|
|
- task->qname.toText().c_str());
|
|
|
+ logger.error(DATASRC_QUERY_WILDCARD_FAIL).arg(task->qname);
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -1185,8 +1139,7 @@ DataSrc::doQuery(Query& q) {
|
|
|
|
|
|
result = addSOA(q, zoneinfo);
|
|
|
if (result != SUCCESS) {
|
|
|
- logger.error(DATASRC_QUERY_MISSING_SOA,
|
|
|
- zonename->toText().c_str());
|
|
|
+ logger.error(DATASRC_QUERY_MISSING_SOA).arg(*zonename);
|
|
|
isc_throw(DataSourceError,
|
|
|
"SOA RR not found in " << *zonename <<
|
|
|
"/" << q.qclass());
|
|
@@ -1203,8 +1156,7 @@ DataSrc::doQuery(Query& q) {
|
|
|
result = proveNX(q, task, zoneinfo, false);
|
|
|
if (result != DataSrc::SUCCESS) {
|
|
|
m.setRcode(Rcode::SERVFAIL());
|
|
|
- logger.error(DATASRC_QUERY_PROVENX_FAIL,
|
|
|
- task->qname.toText().c_str());
|
|
|
+ logger.error(DATASRC_QUERY_PROVENX_FAIL).arg(task->qname);
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
@@ -1311,9 +1263,8 @@ void
|
|
|
MetaDataSrc::addDataSrc(ConstDataSrcPtr data_src) {
|
|
|
logger.debug(DBG_TRACE_BASIC, DATASRC_META_ADD);
|
|
|
if (getClass() != RRClass::ANY() && data_src->getClass() != getClass()) {
|
|
|
- logger.error(DATASRC_META_ADD_CLASS_MISMATCH,
|
|
|
- data_src->getClass().toText().c_str(),
|
|
|
- getClass().toText().c_str());
|
|
|
+ logger.error(DATASRC_META_ADD_CLASS_MISMATCH).
|
|
|
+ arg(data_src->getClass()).arg(getClass());
|
|
|
isc_throw(Unexpected, "class mismatch");
|
|
|
}
|
|
|
|