From: Aki Tuomi Date: Fri, 31 Jul 2015 20:28:44 +0000 (+0300) Subject: Add support for searchRecords to bind backend X-Git-Tag: auth-3.4.6~10^2~5 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0dc3324e2cf238b843227f862fea6984c26aca6a;p=pdns Add support for searchRecords to bind backend --- diff --git a/modules/bindbackend/bindbackend2.cc b/modules/bindbackend/bindbackend2.cc index 39abbd30c..9c072ce49 100644 --- a/modules/bindbackend/bindbackend2.cc +++ b/modules/bindbackend/bindbackend2.cc @@ -1321,6 +1321,40 @@ bool Bind2Backend::createSlaveDomain(const string &ip, const string &domain, con 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++) { + string 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 8666a702a..79d7d8337 100644 --- a/modules/bindbackend/bindbackend2.hh +++ b/modules/bindbackend/bindbackend2.hh @@ -201,6 +201,7 @@ public: bool commitTransaction(); bool abortTransaction(); void alsoNotifies(const string &domain, set *ips); + bool searchRecords(const string &pattern, int maxResults, vector& result); // the DNSSEC related (getDomainMetadata has broader uses too) virtual bool getAllDomainMetadata(const string& name, std::map >& meta);