From: Mark Zealey Date: Tue, 14 Jan 2014 08:57:07 +0000 (+0200) Subject: change best_match_len to -1 to allow for 0-length (ie root) entries to be looked... X-Git-Tag: rec-3.6.0-rc1~242 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d33578f85c27f7f661a3f6858a6216a4fe8f0d3c;p=pdns change best_match_len to -1 to allow for 0-length (ie root) entries to be looked up correctly --- diff --git a/pdns/dnsbackend.cc b/pdns/dnsbackend.cc index 115190951..d3b96e87b 100644 --- a/pdns/dnsbackend.cc +++ b/pdns/dnsbackend.cc @@ -44,12 +44,12 @@ bool DNSBackend::getRemote(DNSPacket *p, struct sockaddr *sa, Utility::socklen_t return true; } -bool DNSBackend::getAuth(DNSPacket *p, SOAData *sd, const string &target, int *zoneId, const size_t best_match_len) +bool DNSBackend::getAuth(DNSPacket *p, SOAData *sd, const string &target, int *zoneId, const int best_match_len) { bool found=false; string subdomain(target); do { - if( best_match_len >= subdomain.length() ) + if( best_match_len >= (int)subdomain.length() ) break; if( this->getSOA( subdomain, *sd, p ) ) { @@ -415,7 +415,7 @@ bool _add_to_negcache( const string &zone ) { return false; } -inline int DNSReversedBackend::_getAuth(DNSPacket *p, SOAData *soa, const string &inZone, int *zoneId, const string &querykey, const size_t best_match_len) { +inline int DNSReversedBackend::_getAuth(DNSPacket *p, SOAData *soa, const string &inZone, int *zoneId, const string &querykey, const int best_match_len) { static int negqueryttl=::arg().asNum("negquery-cache-ttl"); DLOG(L<= querykey.length() ) { + if( best_match_len >= (int)querykey.length() ) { DLOG(L<= diff_point ) { + if( best_match_len && best_match_len >= (int)diff_point ) { DLOG(L< *domains) { } /** Determines if we are authoritative for a zone, and at what level */ - virtual bool getAuth(DNSPacket *p, SOAData *sd, const string &target, int *zoneId, const size_t best_match_len); + virtual bool getAuth(DNSPacket *p, SOAData *sd, const string &target, int *zoneId, const int best_match_len); struct KeyData { unsigned int id; @@ -354,8 +354,8 @@ class DNSReversedBackend : public DNSBackend { * */ virtual bool getAuthData( SOAData &soa, DNSPacket *p=0) { return false; }; // Must be overridden - bool getAuth(DNSPacket *p, SOAData *soa, const string &inZone, int *zoneId, const size_t best_match_len); - inline int _getAuth(DNSPacket *p, SOAData *soa, const string &inZone, int *zoneId, const string &querykey, const size_t best_match_len); + bool getAuth(DNSPacket *p, SOAData *soa, const string &inZone, int *zoneId, const int best_match_len); + inline int _getAuth(DNSPacket *p, SOAData *soa, const string &inZone, int *zoneId, const string &querykey, const int best_match_len); /* Only called for stuff like signing or AXFR transfers */ bool _getSOA(const string &rev_zone, SOAData &soa, DNSPacket *p); diff --git a/pdns/ueberbackend.cc b/pdns/ueberbackend.cc index ddd541c53..420693163 100644 --- a/pdns/ueberbackend.cc +++ b/pdns/ueberbackend.cc @@ -302,7 +302,7 @@ void UeberBackend::check_op_requests() bool UeberBackend::getAuth(DNSPacket *p, SOAData *sd, const string &target, int *zoneId) { - size_t best_match_len = 0; + int best_match_len = -1; bool from_cache = false; // Was this result fetched from the cache? check_op_requests(); @@ -349,11 +349,11 @@ bool UeberBackend::getAuth(DNSPacket *p, SOAData *sd, const string &target, int // Shortcut for the case that we got a direct hit - no need to go // through the other backends then. - if( best_match_len == target.length() ) + if( best_match_len == (int)target.length() ) goto auth_found; } - if( best_match_len == 0 ) + if( best_match_len == -1 ) return false; auth_found: