]> granicus.if.org Git - pdns/commitdiff
prevent recursor from adding a SOA for intermediate steps in a CNAME chain
authorPeter van Dijk <peter.van.dijk@netherlabs.nl>
Wed, 20 Jun 2012 15:32:49 +0000 (15:32 +0000)
committerPeter van Dijk <peter.van.dijk@netherlabs.nl>
Wed, 20 Jun 2012 15:32:49 +0000 (15:32 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@2633 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/syncres.cc

index 2075d1b42be8d44bc8c71720fa96bfbd121dfc76..67fb3bd825ebf106bb80c32ddc484e219efaf05b 100644 (file)
@@ -1025,10 +1025,11 @@ int SyncRes::doResolveAt(set<string, CIStringCompare> nameservers, string auth,
       for(LWResult::res_t::iterator i=lwr.d_result.begin();i!=lwr.d_result.end();++i) {
         if(i->d_place==DNSResourceRecord::AUTHORITY && i->qtype.getCode()==QType::SOA && 
            lwr.d_rcode==RCode::NXDomain && dottedEndsOn(qname,i->qname) && dottedEndsOn(i->qname, auth)) {
-          LOG<<prefix<<qname<<": got negative caching indication for RECORD '"<<qname+"' (accept="<<dottedEndsOn(i->qname, auth)<<")"<<endl;
+          LOG<<prefix<<qname<<": got negative caching indication for RECORD '"<<qname+"' (accept="<<dottedEndsOn(i->qname, auth)<<"), newtarget='"<<newtarget<<"'"<<endl;
           
           i->ttl = min(i->ttl, s_maxnegttl);
-          ret.push_back(*i);
+          if(!newtarget.length()) // only add a SOA if we're not going anywhere after this
+            ret.push_back(*i);
 
           NegCacheEntry ne;