]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
tinydns snap
authorPeter van Dijk <peter.van.dijk@netherlabs.nl>
Mon, 1 Jun 2015 11:40:49 +0000 (13:40 +0200)
committermind04 <mind04@monshouwer.org>
Tue, 30 Jun 2015 06:12:43 +0000 (08:12 +0200)
modules/tinydnsbackend/tinydnsbackend.cc
modules/tinydnsbackend/tinydnsbackend.hh
pdns/dnsname.cc
pdns/dnsname.hh
pdns/dnsparser.cc

index b04dd5b2231a81ccc8d6d2bd3ed9d3f7c6a2e424..642e1a24048e843c96cf35a8851fad75be209437 100644 (file)
@@ -155,20 +155,20 @@ void TinyDNSBackend::getAllDomains(vector<DomainInfo> *domains, bool include_dis
        }
 }
 
-bool TinyDNSBackend::list(const string &target, int domain_id, bool include_disabled) {
+bool TinyDNSBackend::list(const DNSName &target, int domain_id, bool include_disabled) {
        d_isAxfr=true;
-       string key = simpleCompress(target);
+       string key = simpleCompress(target.toString()); // FIXME bug: no lowercase here? or do we promise lowercase from core now?
        d_cdbReader=new CDB(getArg("dbfile"));
        return d_cdbReader->searchSuffix(key);
 }
 
-void TinyDNSBackend::lookup(const QType &qtype, const string &qdomain, DNSPacket *pkt_p, int zoneId) {
+void TinyDNSBackend::lookup(const QType &qtype, const DNSName &qdomain, DNSPacket *pkt_p, int zoneId) {
        d_isAxfr = false;
-       string queryDomain = toLowerCanonic(qdomain);
+       string queryDomain = toLowerCanonic(qdomain.toString());
 
        string key=simpleCompress(queryDomain);
 
-       DLOG(L<<Logger::Debug<<backendname<<"[lookup] query for qtype ["<<qtype.getName()<<"] qdomain ["<<qdomain<<"]"<<endl);
+       DLOG(L<<Logger::Debug<<backendname<<"[lookup] query for qtype ["<<qtype.getName()<<"] qdomain ["<<qdomain.toString()<<"]"<<endl);
        DLOG(L<<Logger::Debug<<"[lookup] key ["<<makeHexDump(key)<<"]"<<endl);
 
        d_isWildcardQuery = false;
@@ -253,8 +253,7 @@ bool TinyDNSBackend::get(DNSResourceRecord &rr)
                                key.insert(0, 1, '\001');
                        }
                        rr.qname.clear(); 
-                       simpleExpandTo(key, 0, rr.qname);
-                       rr.qname = stripDot(rr.qname); // strip the last dot, packethandler needs this.
+                       rr.qname=key;
                        rr.domain_id=-1;
                        // 11:13.21 <@ahu> IT IS ALWAYS AUTH --- well not really because we are just a backend :-)
                        // We could actually do NSEC3-NARROW DNSSEC according to Habbie, if we do, we need to change something ehre. 
index 4dde2c29ac6990e0d2c16eceb40b51dee611f3e8..a77fea4e581422c9cf67e04433a422ba07cd1d01 100644 (file)
@@ -21,7 +21,7 @@ using namespace ::boost::multi_index;
 struct TinyDomainInfo {
        uint32_t id;
        uint32_t notified_serial;
-       string zone;
+       DNSName zone;
 
        bool operator<(const TinyDomainInfo& tdi) const
        {
@@ -47,8 +47,8 @@ class TinyDNSBackend : public DNSBackend
 public:
        // Methods for simple operation
        TinyDNSBackend(const string &suffix);
-       void lookup(const QType &qtype, const string &qdomain, DNSPacket *pkt_p=0, int zoneId=-1);
-       bool list(const string &target, int domain_id, bool include_disabled=false);
+       void lookup(const QType &qtype, const DNSName &qdomain, DNSPacket *pkt_p=0, int zoneId=-1);
+       bool list(const DNSName &target, int domain_id, bool include_disabled=false);
        bool get(DNSResourceRecord &rr);
        void getAllDomains(vector<DomainInfo> *domains, bool include_disabled=false);
 
@@ -64,7 +64,7 @@ private:
        typedef multi_index_container<
                TinyDomainInfo,
                indexed_by<
-                       hashed_unique<tag<tag_zone>, member<TinyDomainInfo, string, &TinyDomainInfo::zone> >,
+                       hashed_unique<tag<tag_zone>, member<TinyDomainInfo, DNSName, &TinyDomainInfo::zone> >,
                        hashed_unique<tag<tag_domainid>, member<TinyDomainInfo, uint32_t, &TinyDomainInfo::id> >
                >
        > TDI_t;
index 3a39b6c6e7893c4a0a4561bf1b09603a28718edc..2c11810fc1528e19b2a890abef03c8125b7cec7c 100644 (file)
@@ -4,6 +4,9 @@
 
 #include "dnswriter.hh"
 #include "logger.hh"
+#include "misc.hh"
+
+#include <boost/functional/hash.hpp>
 
 /* raw storage
    in DNS label format, without trailing 0. So the root is of length 0.
@@ -188,6 +191,12 @@ bool DNSName::operator==(const DNSName& rhs) const
   return true;
 }
 
+size_t hash_value(DNSName const& d)
+{
+  boost::hash<string> hasher;
+  return hasher(toLower(d.toString())); // FIXME HACK
+}
+
 string DNSName::escapeLabel(const std::string& label)
 {
   string ret;
index b067a11b2e04a554ac8aef10bcb956147f0566e3..f75bad92767855e3ec826de3915ba2340642698e 100644 (file)
@@ -87,6 +87,7 @@ struct CanonDNSNameCompare: public std::binary_function<DNSName, DNSName, bool>
     return a.canonCompare(b);
   }
 };
+size_t hash_value(DNSName const& d);
 
 inline DNSName operator+(const DNSName& lhs, const DNSName& rhs)
 {
index d533771597edb71872952d2aa5a38ea8690b3106..a02cc45f81e2295a9ae43b88ff7df5b602a42685 100644 (file)
@@ -483,6 +483,7 @@ void PacketReader::xfrHexBlob(string& blob, bool keepReading)
   xfrBlob(blob);
 }
 
+//FIXME remove this method completely
 string simpleCompress(const string& elabel, const string& root)
 {
   string label=elabel;
@@ -511,6 +512,7 @@ string simpleCompress(const string& elabel, const string& root)
 }
 
 
+// FIXME this function needs to go
 void simpleExpandTo(const string& label, unsigned int frompos, string& ret)
 {
   unsigned int labellen=0;