From: Ruben d'Arco Date: Thu, 4 Jun 2015 14:29:33 +0000 (+0200) Subject: mydnsbackend builds X-Git-Tag: dnsdist-1.0.0-alpha1~248^2~58^2~21^2~5^2~58 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5fb96fa14ea46f45950a0d68e006ebd9959e1104;p=thirdparty%2Fpdns.git mydnsbackend builds --- diff --git a/modules/mydnsbackend/mydnsbackend.cc b/modules/mydnsbackend/mydnsbackend.cc index c06e2d884c..75259fff96 100644 --- a/modules/mydnsbackend/mydnsbackend.cc +++ b/modules/mydnsbackend/mydnsbackend.cc @@ -142,7 +142,7 @@ MyDNSBackend::~MyDNSBackend() { } -bool MyDNSBackend::list(const string &target, int zoneId, bool include_disabled) { +bool MyDNSBackend::list(const DNSName &target, int zoneId, bool include_disabled) { string query; string sname; SSqlStatement::row_t rrow; @@ -184,14 +184,14 @@ bool MyDNSBackend::list(const string &target, int zoneId, bool include_disabled) return true; } -bool MyDNSBackend::getSOA(const string& name, SOAData& soadata, DNSPacket*) { +bool MyDNSBackend::getSOA(const DNSName& name, SOAData& soadata, DNSPacket*) { string query; SSqlStatement::row_t rrow; if (name.empty()) return false; - string dotname = name+"."; + string dotname = name.toString()+"."; try { d_soaQuery_stmt-> @@ -201,7 +201,7 @@ bool MyDNSBackend::getSOA(const string& name, SOAData& soadata, DNSPacket*) { reset(); } catch (SSqlException &e) { - throw PDNSException("MyDNSBackend unable to get soa for domain "+name+": "+e.txtReason()); + throw PDNSException("MyDNSBackend unable to get soa for domain "+name.toString()+": "+e.txtReason()); } if (d_result.empty()) return false; @@ -230,7 +230,7 @@ bool MyDNSBackend::getSOA(const string& name, SOAData& soadata, DNSPacket*) { return true; } -void MyDNSBackend::lookup(const QType &qtype, const string &qname, DNSPacket *p, int zoneId) { +void MyDNSBackend::lookup(const QType &qtype, const DNSName &qname, DNSPacket *p, int zoneId) { string query; string sname; string zoneIdStr = itoa(zoneId); @@ -244,7 +244,7 @@ void MyDNSBackend::lookup(const QType &qtype, const string &qname, DNSPacket *p, DLOG(L< bind("domain_id", zoneId)-> @@ -347,10 +347,10 @@ void MyDNSBackend::lookup(const QType &qtype, const string &qname, DNSPacket *p, } } catch (SSqlException &e) { - throw PDNSException("MyDNSBackend unable to lookup "+qname+": "+e.txtReason()); + throw PDNSException("MyDNSBackend unable to lookup "+qname.toString()+": "+e.txtReason()); } - d_qname = qname; + d_qname = qname.toString(); } } @@ -384,14 +384,18 @@ bool MyDNSBackend::get(DNSResourceRecord &rr) { // use this to distinguish between select with 'name' field (list()) and one without rr.qname=d_qname; } else { - rr.qname=rrow[5]; - if (!rr.qname.empty() && rr.qname[rr.qname.length()-1] == '.') { - rr.qname.erase(rr.qname.length()-1); // Fully qualified, nuke the last . + string tmpQname = rrow[5]; + + //TODO: Refactor + if (!tmpQname.empty() && tmpQname[tmpQname.length()-1] == '.') { + tmpQname.erase(tmpQname.length()-1); // Fully qualified, nuke the last . } else { - if (!rr.qname.empty()) - rr.qname += "."; - rr.qname += d_origin; // Not fully qualified + if (!tmpQname.empty()) { + tmpQname += "."; + } + tmpQname += d_origin; // Not fully qualified } + rr.qname = DNSName(tmpQname); } if (rr.qtype.getCode() == QType::NS || rr.qtype.getCode()==QType::MX || @@ -451,7 +455,7 @@ public: declare(suffix,"use-minimal-ttl","Setting this to 'yes' will make the backend behave like MyDNS on the TTL values. Setting it to 'no' will make it ignore the minimal-ttl of the zone.","yes"); } - MyDNSBackend *make(const string &suffix = "") { + DNSBackend *make(const string &suffix="") { return new MyDNSBackend(suffix); } diff --git a/modules/mydnsbackend/mydnsbackend.hh b/modules/mydnsbackend/mydnsbackend.hh index b0be17350e..0c28203d9a 100644 --- a/modules/mydnsbackend/mydnsbackend.hh +++ b/modules/mydnsbackend/mydnsbackend.hh @@ -11,13 +11,13 @@ class MyDNSBackend : public DNSBackend { public: - MyDNSBackend(const string &suffix=""); + MyDNSBackend(const string &suffix); ~MyDNSBackend(); - void lookup(const QType &, const string &qdomain, DNSPacket *p=0, int zoneId=-1); - bool list(const string &target, int domain_id, bool include_disabled=false); + void lookup(const QType &, const DNSName &qdomain, DNSPacket *p=0, int zoneId=-1); + bool list(const DNSName &target, int domain_id, bool include_disabled=false); bool get(DNSResourceRecord &r); - bool getSOA(const string& name, SOAData& soadata, DNSPacket*); + bool getSOA(const DNSName& name, SOAData& soadata, DNSPacket*); private: SMySQL *d_db; @@ -37,4 +37,5 @@ private: SSqlStatement* d_basicQuery_stmt; SSqlStatement* d_anyQuery_stmt; }; -#endif /* MYDNSBACKEND_HH */ + +#endif /* MYDNSBACKEND_HH */ \ No newline at end of file diff --git a/pdns/Makefile.am b/pdns/Makefile.am index d14bd52576..c9f2ce8b61 100644 --- a/pdns/Makefile.am +++ b/pdns/Makefile.am @@ -1108,7 +1108,9 @@ pdns_control_SOURCES = \ misc.cc \ qtype.cc \ statbag.cc \ - unix_utility.cc + unix_utility.cc \ + dnsname.cc \ + dnslabeltext.cc if UNIT_TESTS diff --git a/pdns/dnsname.cc b/pdns/dnsname.cc index b13c899d31..3b290c6de4 100644 --- a/pdns/dnsname.cc +++ b/pdns/dnsname.cc @@ -93,6 +93,10 @@ const char* DNSName::toCString() const { return this->toString().c_str(); } +size_t DNSName::length() const { + return this->toString().length(); +} + // are WE part of parent bool DNSName::isPartOf(const DNSName& parent) const { diff --git a/pdns/dnsname.hh b/pdns/dnsname.hh index 3939fa9e09..aa26fb7736 100644 --- a/pdns/dnsname.hh +++ b/pdns/dnsname.hh @@ -45,6 +45,7 @@ public: bool isWildcard() const; unsigned int countLabels() const; bool empty() const { return countLabels()==0; } // FIXME remove me? + size_t length() const; void clear() { trimToLabels(0); } // FIXME remove me? void trimToLabels(unsigned int); DNSName& operator+=(const DNSName& rhs)