]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
mydnsbackend builds
authorRuben d'Arco <cyclops@prof-x.net>
Thu, 4 Jun 2015 14:29:33 +0000 (16:29 +0200)
committermind04 <mind04@monshouwer.org>
Tue, 30 Jun 2015 06:12:45 +0000 (08:12 +0200)
modules/mydnsbackend/mydnsbackend.cc
modules/mydnsbackend/mydnsbackend.hh
pdns/Makefile.am
pdns/dnsname.cc
pdns/dnsname.hh

index c06e2d884ca0f2699c2441a5b37d1e5b6b82523d..75259fff96fba705b3644571df3b2d916fffaef2 100644 (file)
@@ -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<<Logger::Debug<<"MyDNSBackend::lookup(" << qtype.getName() << "," << qname << ",p," << zoneId << ")" << endl);
 
-  sname = qname;
+  sname = qname.toString();
   sname += ".";
 
   if (zoneId < 0) {
@@ -265,7 +265,7 @@ void MyDNSBackend::lookup(const QType &qtype, const string &qname, DNSPacket *p,
           reset();
       }
       catch (SSqlException &e) {
-        throw PDNSException("MyDNSBackend unable to lookup "+qname+": "+e.txtReason());
+        throw PDNSException("MyDNSBackend unable to lookup "+qname.toString()+": "+e.txtReason());
       }
 
       if (d_result.empty() == false) {
@@ -292,7 +292,7 @@ void MyDNSBackend::lookup(const QType &qtype, const string &qname, DNSPacket *p,
         reset();
     }
     catch (SSqlException &e) {
-      throw PDNSException("MyDNSBackend unable to lookup "+qname+": "+e.txtReason());
+      throw PDNSException("MyDNSBackend unable to lookup "+qname.toString()+": "+e.txtReason());
     }
 
     if(d_result.empty()) {
@@ -321,12 +321,12 @@ void MyDNSBackend::lookup(const QType &qtype, const string &qname, DNSPacket *p,
     if (qname.length() == d_origin.length())
       host = "";
     else
-      host = qname.substr(0, (qname.length() - d_origin.length())-1);
+      host = qname.toString().substr(0, (qname.length() - d_origin.length())-1);
 
     try {
 
       if (qtype.getCode()==QType::ANY) {
-        string dotqname = qname+".";
+        string dotqname = qname.toString()+".";
         d_query_stmt = d_anyQuery_stmt;
         d_query_stmt->
           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);
   }
 
index b0be17350ec65973b449372ab2a4078a042bed0f..0c28203d9a851c5d37fd542ded78a7f27d385dfe 100644 (file)
 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
index d14bd525763d4b66daf67ec9c3ac3cd8822fd792..c9f2ce8b610fff1d96de1dc21d667602b3ba4c59 100644 (file)
@@ -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
index b13c899d31e0a51fbb660ba291dd6437395bd0cd..3b290c6de42b61ee522b1954c043b3b0f2fb8264 100644 (file)
@@ -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
 {
index 3939fa9e098e95a6cef1773a9af9cfd419768c4f..aa26fb7736cb56726e74e1dfa2cf0c8529f9056b 100644 (file)
@@ -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)