BIND 10 trac1483, updated. 90c77658e79a21c3a60da992f22eb2f2660db667 [1483] Port the rest to new interface
BIND 10 source code commits
bind10-changes at lists.isc.org
Mon Dec 12 12:20:47 UTC 2011
The branch, trac1483 has been updated
via 90c77658e79a21c3a60da992f22eb2f2660db667 (commit)
from 8e93f114a93671c4eda46f420c81e1101fc16e05 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 90c77658e79a21c3a60da992f22eb2f2660db667
Author: Michal 'vorner' Vaner <michal.vaner at nic.cz>
Date: Mon Dec 12 13:20:32 2011 +0100
[1483] Port the rest to new interface
-----------------------------------------------------------------------
Summary of changes:
src/bin/auth/query.cc | 36 +++++++++++++++----------
src/bin/auth/tests/query_unittest.cc | 38 +++++++++++++++++---------
src/lib/python/isc/datasrc/finder_python.cc | 2 +-
3 files changed, 48 insertions(+), 28 deletions(-)
-----------------------------------------------------------------------
diff --git a/src/bin/auth/query.cc b/src/bin/auth/query.cc
index f159262..ef7653f 100644
--- a/src/bin/auth/query.cc
+++ b/src/bin/auth/query.cc
@@ -15,6 +15,8 @@
#include <algorithm> // for std::max
#include <vector>
#include <boost/foreach.hpp>
+#include <boost/bind.hpp>
+#include <boost/function.hpp>
#include <dns/message.h>
#include <dns/rcode.h>
@@ -67,7 +69,7 @@ Query::addAdditionalAddrs(ZoneFinder& zone, const Name& qname,
// Find A rrset
if (qname_ != qname || qtype_ != RRType::A()) {
- ZoneFinder::FindResult a_result = zone.find(qname, RRType::A(), NULL,
+ ZoneFinder::FindResult a_result = zone.find(qname, RRType::A(),
options | dnssec_opt_);
if (a_result.code == ZoneFinder::SUCCESS) {
response_.addRRset(Message::SECTION_ADDITIONAL,
@@ -78,7 +80,7 @@ Query::addAdditionalAddrs(ZoneFinder& zone, const Name& qname,
// Find AAAA rrset
if (qname_ != qname || qtype_ != RRType::AAAA()) {
ZoneFinder::FindResult aaaa_result =
- zone.find(qname, RRType::AAAA(), NULL, options | dnssec_opt_);
+ zone.find(qname, RRType::AAAA(), options | dnssec_opt_);
if (aaaa_result.code == ZoneFinder::SUCCESS) {
response_.addRRset(Message::SECTION_ADDITIONAL,
boost::const_pointer_cast<RRset>(aaaa_result.rrset),
@@ -90,7 +92,7 @@ Query::addAdditionalAddrs(ZoneFinder& zone, const Name& qname,
void
Query::addSOA(ZoneFinder& finder) {
ZoneFinder::FindResult soa_result(finder.find(finder.getOrigin(),
- RRType::SOA(), NULL, dnssec_opt_));
+ RRType::SOA(), dnssec_opt_));
if (soa_result.code != ZoneFinder::SUCCESS) {
isc_throw(NoSOA, "There's no SOA record in zone " <<
finder.getOrigin().toText());
@@ -146,7 +148,7 @@ Query::addNXDOMAINProof(ZoneFinder& finder, ConstRRsetPtr nsec) {
// otherwise we shouldn't have got NXDOMAIN for the original query in
// the first place).
const ZoneFinder::FindResult fresult = finder.find(wildname,
- RRType::NSEC(), NULL,
+ RRType::NSEC(),
dnssec_opt_);
if (fresult.code != ZoneFinder::NXDOMAIN || !fresult.rrset ||
fresult.rrset->getRdataCount() == 0) {
@@ -171,7 +173,7 @@ Query::addWildcardProof(ZoneFinder& finder) {
// substitution. Confirm that by specifying NO_WILDCARD. It should result
// in NXDOMAIN and an NSEC RR that proves it should be returned.
const ZoneFinder::FindResult fresult =
- finder.find(qname_, RRType::NSEC(), NULL,
+ finder.find(qname_, RRType::NSEC(),
dnssec_opt_ | ZoneFinder::NO_WILDCARD);
if (fresult.code != ZoneFinder::NXDOMAIN || !fresult.rrset ||
fresult.rrset->getRdataCount() == 0) {
@@ -194,7 +196,7 @@ Query::addWildcardNXRRSETProof(ZoneFinder& finder, ConstRRsetPtr nsec) {
boost::const_pointer_cast<RRset>(nsec), dnssec_);
const ZoneFinder::FindResult fresult =
- finder.find(qname_, RRType::NSEC(), NULL,
+ finder.find(qname_, RRType::NSEC(),
dnssec_opt_ | ZoneFinder::NO_WILDCARD);
if (fresult.code != ZoneFinder::NXDOMAIN || !fresult.rrset ||
fresult.rrset->getRdataCount() == 0) {
@@ -213,8 +215,7 @@ void
Query::addAuthAdditional(ZoneFinder& finder) {
// Fill in authority and addtional sections.
ZoneFinder::FindResult ns_result = finder.find(finder.getOrigin(),
- RRType::NS(), NULL,
- dnssec_opt_);
+ RRType::NS(), dnssec_opt_);
// zone origin name should have NS records
if (ns_result.code != ZoneFinder::SUCCESS) {
isc_throw(NoApexNS, "There's no apex NS records in zone " <<
@@ -253,9 +254,16 @@ Query::process() {
response_.setRcode(Rcode::NOERROR());
while (keep_doing) {
keep_doing = false;
- std::auto_ptr<RRsetList> target(qtype_is_any ? new RRsetList : NULL);
- const ZoneFinder::FindResult db_result(
- zfinder.find(qname_, qtype_, target.get(), dnssec_opt_));
+ std::vector<ConstRRsetPtr> target;
+ boost::function0<ZoneFinder::FindResult> find;
+ if (qtype_is_any) {
+ find = boost::bind(&ZoneFinder::findAll, &zfinder, qname_,
+ boost::ref(target), dnssec_opt_);
+ } else {
+ find = boost::bind(&ZoneFinder::find, &zfinder, qname_, qtype_,
+ dnssec_opt_);
+ }
+ ZoneFinder::FindResult db_result(find());
switch (db_result.code) {
case ZoneFinder::DNAME: {
// First, put the dname into the answer
@@ -326,9 +334,9 @@ Query::process() {
if (qtype_is_any) {
// If quety type is ANY, insert all RRs under the domain
// into answer section.
- BOOST_FOREACH(RRsetPtr rrset, *target) {
- response_.addRRset(Message::SECTION_ANSWER, rrset,
- dnssec_);
+ BOOST_FOREACH(ConstRRsetPtr rrset, target) {
+ response_.addRRset(Message::SECTION_ANSWER,
+ boost::const_pointer_cast<RRset>(rrset), dnssec_);
// Handle additional for answer section
addAdditional(*result.zone_finder, *rrset.get());
}
diff --git a/src/bin/auth/tests/query_unittest.cc b/src/bin/auth/tests/query_unittest.cc
index 14067ab..858759e 100644
--- a/src/bin/auth/tests/query_unittest.cc
+++ b/src/bin/auth/tests/query_unittest.cc
@@ -211,8 +211,10 @@ public:
virtual isc::dns::RRClass getClass() const { return (rrclass_); }
virtual FindResult find(const isc::dns::Name& name,
const isc::dns::RRType& type,
- RRsetList* target = NULL,
const FindOptions options = FIND_DEFAULT);
+ virtual FindResult findAll(const isc::dns::Name& name,
+ std::vector<ConstRRsetPtr>& target,
+ const FindOptions options = FIND_DEFAULT);
// If false is passed, it makes the zone broken as if it didn't have the
// SOA.
@@ -305,8 +307,29 @@ substituteWild(const RRset& wild_rrset, const Name& real_name) {
}
ZoneFinder::FindResult
+MockZoneFinder::findAll(const Name& name, std::vector<ConstRRsetPtr>& target,
+ const FindOptions options)
+{
+ ZoneFinder::FindResult result(find(name, RRType::ANY(), options));
+ if (result.code == NXRRSET) {
+ const Domains::const_iterator found_domain = domains_.find(name);
+ if (!found_domain->second.empty()) {
+ for (RRsetStore::const_iterator found_rrset =
+ found_domain->second.begin();
+ found_rrset != found_domain->second.end(); ++found_rrset) {
+ // Insert RRs under the domain name into target
+ target.push_back(found_rrset->second);
+ }
+ return (FindResult(SUCCESS, RRsetPtr()));
+ }
+ }
+
+ return (result);
+}
+
+ZoneFinder::FindResult
MockZoneFinder::find(const Name& name, const RRType& type,
- RRsetList* target, const FindOptions options)
+ const FindOptions options)
{
// Emulating a broken zone: mandatory apex RRs are missing if specifically
// configured so (which are rare cases).
@@ -358,17 +381,6 @@ MockZoneFinder::find(const Name& name, const RRType& type,
return (FindResult(SUCCESS, rrset));
}
- // If not found but we have a target, fill it with all RRsets here
- if (!found_domain->second.empty() && target != NULL) {
- for (found_rrset = found_domain->second.begin();
- found_rrset != found_domain->second.end(); ++found_rrset) {
- // Insert RRs under the domain name into target
- target->addRRset(
- boost::const_pointer_cast<RRset>(found_rrset->second));
- }
- return (FindResult(SUCCESS, found_domain->second.begin()->second));
- }
-
// Otherwise, if this domain name has CNAME, return it.
found_rrset = found_domain->second.find(RRType::CNAME());
if (found_rrset != found_domain->second.end()) {
diff --git a/src/lib/python/isc/datasrc/finder_python.cc b/src/lib/python/isc/datasrc/finder_python.cc
index 7f74133..5aa9c3e 100644
--- a/src/lib/python/isc/datasrc/finder_python.cc
+++ b/src/lib/python/isc/datasrc/finder_python.cc
@@ -74,7 +74,7 @@ PyObject* ZoneFinder_helper(ZoneFinder* finder, PyObject* args) {
static_cast<ZoneFinder::FindOptions>(options_int);
const ZoneFinder::FindResult find_result(
finder->find(PyName_ToName(name), PyRRType_ToRRType(rrtype),
- NULL, options));
+ options));
const ZoneFinder::Result r = find_result.code;
isc::dns::ConstRRsetPtr rrsp = find_result.rrset;
if (rrsp) {
More information about the bind10-changes
mailing list