From cfc5b5c0d05f1a0d13120c2c2bc6087323a214de Mon Sep 17 00:00:00 2001 From: Aki Tuomi Date: Thu, 16 Feb 2017 15:20:15 +0200 Subject: [PATCH] mydnsbackend: Add getAllDomains --- modules/mydnsbackend/mydnsbackend.cc | 36 +++++++++++++++++++++++++++- modules/mydnsbackend/mydnsbackend.hh | 3 ++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/modules/mydnsbackend/mydnsbackend.cc b/modules/mydnsbackend/mydnsbackend.cc index 8a2cf7c98..0d405e417 100644 --- a/modules/mydnsbackend/mydnsbackend.cc +++ b/modules/mydnsbackend/mydnsbackend.cc @@ -72,6 +72,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"), @@ -105,17 +106,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 = ?)"; @@ -158,6 +162,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); } @@ -437,6 +443,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 fc5b4d362..28c56e3cd 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 */ -- 2.50.0