]> granicus.if.org Git - pdns/commitdiff
make it possible to consume AXFR as DNSRecords too
authorbert hubert <bert.hubert@netherlabs.nl>
Sat, 24 Oct 2015 07:53:14 +0000 (09:53 +0200)
committerbert hubert <bert.hubert@netherlabs.nl>
Sat, 24 Oct 2015 07:57:06 +0000 (09:57 +0200)
pdns/resolver.cc
pdns/resolver.hh

index df8ea6ba6c52e7d723dd8c22566aaca167e4682e..99d0b17fe515281a7eadaf3cea23908193a97665 100644 (file)
@@ -438,7 +438,7 @@ AXFRRetriever::~AXFRRetriever()
 
 
 
-int AXFRRetriever::getChunk(Resolver::res_t &res) // Implementation is making sure RFC2845 4.4 is followed.
+int AXFRRetriever::getChunk(Resolver::res_t &res, vector<DNSRecord>* records) // Implementation is making sure RFC2845 4.4 is followed.
 {
   if(d_soacount > 1)
     return false;
@@ -451,7 +451,16 @@ int AXFRRetriever::getChunk(Resolver::res_t &res) // Implementation is making su
   timeoutReadn(len); 
   MOADNSParser mdp(d_buf.get(), len);
 
-  int err = parseResult(mdp, DNSName(), 0, 0, &res);
+  int err;
+  if(!records)
+    err=parseResult(mdp, DNSName(), 0, 0, &res);
+  else {
+    records->clear();
+    for(const auto& r: mdp.d_answers)
+      records->push_back(r.first);
+    err = mdp.d_header.rcode;
+  }
+  
   if(err) 
     throw ResolverException("AXFR chunk error: " + RCode::to_s(err));
 
index d54faa823815208b700358d183166e6dc75d2056..fd416f05d0f876cbb17454446cabb6619db20d71 100644 (file)
@@ -90,7 +90,7 @@ class AXFRRetriever : public boost::noncopyable
         const string& tsigsecret=string(),
         const ComboAddress* laddr = NULL);
        ~AXFRRetriever();
-    int getChunk(Resolver::res_t &res);  
+    int getChunk(Resolver::res_t &res, vector<DNSRecord>* records=0);  
   
   private:
     void connect();