From: Aki Tuomi Date: Thu, 16 Feb 2017 13:20:15 +0000 (+0200) Subject: mydnsbackend: Add getAllDomains X-Git-Tag: auth-4.0.5~1^2~26^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c887f6741f315265d35db40641e4caccf69f4fdc;p=thirdparty%2Fpdns.git mydnsbackend: Add getAllDomains (cherry picked from commit cfc5b5c0d05f1a0d13120c2c2bc6087323a214de) --- diff --git a/modules/mydnsbackend/mydnsbackend.cc b/modules/mydnsbackend/mydnsbackend.cc index fff37784af..e69fa7d9b0 100644 --- a/modules/mydnsbackend/mydnsbackend.cc +++ b/modules/mydnsbackend/mydnsbackend.cc @@ -73,6 +73,7 @@ MyDNSBackend::MyDNSBackend(const string &suffix) { d_basicQuery_stmt = NULL; d_anyQuery_stmt = NULL; d_query_stmt = NULL; + d_allDomainsQuery_stmt = NULL; try { d_db = new SMySQL(getArg("dbname"), @@ -106,17 +107,20 @@ MyDNSBackend::MyDNSBackend(const string &suffix) { string domainIdQuery = "SELECT origin, minimum FROM `"+soatable+"` WHERE id = ?"; string domainNoIdQuery = "SELECT id, origin, minimum FROM `"+soatable+"` WHERE origin = ?"; string soaQuery = "SELECT id, mbox, serial, ns, refresh, retry, expire, minimum, ttl FROM `"+soatable+"` WHERE origin = ?"; + string allDomainsQuery = "SELECT id, origin, serial FROM `"+soatable+"`"; if (!soawhere.empty()) { domainIdQuery += " AND " + soawhere; domainNoIdQuery += " AND " + soawhere; soaQuery += " AND "+soawhere; + allDomainsQuery += " WHERE "+soawhere; } d_domainIdQuery_stmt = d_db->prepare(domainIdQuery, 1); d_domainNoIdQuery_stmt = d_db->prepare(domainNoIdQuery, 1); d_soaQuery_stmt = d_db->prepare(soaQuery, 1); - + d_allDomainsQuery_stmt = d_db->prepare(allDomainsQuery, 0); + string listQuery = "SELECT type, data, aux, ttl, zone, name FROM `"+rrtable+"` WHERE zone = ?"; string basicQuery = "SELECT type, data, aux, ttl, zone FROM `"+rrtable+"` WHERE zone = ? AND (name = ? OR name = ?) AND type = ?"; string anyQuery = "(SELECT type, data, aux, ttl, zone FROM `"+rrtable+"` WHERE zone = ? AND (name = ? OR name = ?)"; @@ -159,6 +163,8 @@ MyDNSBackend::~MyDNSBackend() { d_basicQuery_stmt = NULL; delete d_anyQuery_stmt; d_anyQuery_stmt = NULL; + delete d_allDomainsQuery_stmt; + d_allDomainsQuery_stmt = NULL; delete(d_db); } @@ -438,6 +444,34 @@ bool MyDNSBackend::get(DNSResourceRecord &rr) { return false; } +void MyDNSBackend::getAllDomains(vector *domains, bool include_disabled) { + /* include_disabled is unfortunately ignored here */ + try { + d_allDomainsQuery_stmt-> + execute(); + + while(d_allDomainsQuery_stmt->hasNextRow()) { + SSqlStatement::row_t row; + DomainInfo di; + d_allDomainsQuery_stmt->nextRow(row); + + di.id = pdns_stou(row[0]); + di.zone = DNSName(row[1]); + di.serial = pdns_stou(row[2]); + di.kind = DomainInfo::Native; + di.backend = this; + + domains->push_back(di); + } + + d_allDomainsQuery_stmt-> + reset(); + } + catch (SSqlException &e) { + throw PDNSException("MyDNSBackend unable to list all domains: "+e.txtReason()); + } +} + class MyDNSFactory : public BackendFactory { public: diff --git a/modules/mydnsbackend/mydnsbackend.hh b/modules/mydnsbackend/mydnsbackend.hh index fc5b4d362f..28c56e3cd2 100644 --- a/modules/mydnsbackend/mydnsbackend.hh +++ b/modules/mydnsbackend/mydnsbackend.hh @@ -40,7 +40,7 @@ public: bool list(const DNSName &target, int domain_id, bool include_disabled=false); bool get(DNSResourceRecord &r); bool getSOA(const DNSName& name, SOAData& soadata, DNSPacket*); - + void getAllDomains(vector *domains, bool include_disabled=false); private: SMySQL *d_db; @@ -58,6 +58,7 @@ private: SSqlStatement* d_soaQuery_stmt; SSqlStatement* d_basicQuery_stmt; SSqlStatement* d_anyQuery_stmt; + SSqlStatement* d_allDomainsQuery_stmt; }; #endif /* MYDNSBACKEND_HH */