From: Aki Tuomi Date: Fri, 31 Jul 2015 20:28:44 +0000 (+0300) Subject: Add support for searchRecords to bind backend X-Git-Tag: dnsdist-1.0.0-alpha1~248^2~58^2~2^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=69abb9b6ac6d6976538eca20f3eeb3115ed6a6f8;p=thirdparty%2Fpdns.git Add support for searchRecords to bind backend --- diff --git a/modules/bindbackend/bindbackend2.cc b/modules/bindbackend/bindbackend2.cc index f23c239caf..80536026f1 100644 --- a/modules/bindbackend/bindbackend2.cc +++ b/modules/bindbackend/bindbackend2.cc @@ -1310,6 +1310,40 @@ bool Bind2Backend::createSlaveDomain(const string &ip, const DNSName& domain, co return true; } +bool Bind2Backend::searchRecords(const string &pattern, int maxResults, vector& result) +{ + SimpleMatch sm(pattern,true); + static bool mustlog=::arg().mustDo("query-logging"); + if(mustlog) + L<d_id, &h); + shared_ptr handle = h.d_records.get(); + + for(recordstorage_t::const_iterator ri = handle->begin(); result.size() < static_cast::size_type>(maxResults) && ri != handle->end(); ri++) { + DNSName name = ri->qname.empty() ? i->d_name : (ri->qname+i->d_name); + if (sm.match(name) || sm.match(ri->content)) { + DNSResourceRecord r; + r.qname=name; + r.domain_id=i->d_id; + r.content=ri->content; + r.qtype=ri->qtype; + r.ttl=ri->ttl; + r.auth = ri->auth; + result.push_back(r); + } + } + } + } + + return true; +} + class Bind2Factory : public BackendFactory { public: diff --git a/modules/bindbackend/bindbackend2.hh b/modules/bindbackend/bindbackend2.hh index 3794c091a9..131ba22d87 100644 --- a/modules/bindbackend/bindbackend2.hh +++ b/modules/bindbackend/bindbackend2.hh @@ -204,6 +204,7 @@ public: bool commitTransaction(); bool abortTransaction(); void alsoNotifies(const DNSName &domain, set *ips); + bool searchRecords(const string &pattern, int maxResults, vector& result); // the DNSSEC related (getDomainMetadata has broader uses too) virtual bool getAllDomainMetadata(const DNSName& name, std::map >& meta);