]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
bind backend slave zone export
authorKees Monshouwer <mind04@monshouwer.org>
Wed, 24 Jun 2015 08:51:03 +0000 (10:51 +0200)
committermind04 <mind04@monshouwer.org>
Tue, 30 Jun 2015 06:12:51 +0000 (08:12 +0200)
modules/bindbackend/bindbackend2.cc
modules/bindbackend/bindbackend2.hh

index e64fa8cae2a3436383c090d26fcf46c5fa4fd1c7..97d87e64402b4796be069e806c2c7e521c541d77 100644 (file)
@@ -252,36 +252,30 @@ bool Bind2Backend::abortTransaction()
   return true;
 }
 
-bool Bind2Backend::feedRecord(const DNSResourceRecord &r, string *ordername)
+bool Bind2Backend::feedRecord(const DNSResourceRecord &rr, string *ordername)
 {
-  DNSName qname=r.qname;
-
   BB2DomainInfo bbd;
   safeGetBBDomainInfo(d_transaction_id, &bbd);
 
-  DNSName domain = bbd.d_name;
+  string name=bbd.d_name.toStringNoDot();
+  string qname=rr.qname.toStringNoDot();
 
-  qname = qname.makeRelative(domain);
-  if(qname.empty())
-    throw DBException("out-of-zone data '"+r.qname.toStringNoDot()+"' during AXFR of zone '"+domain.toStringNoDot()+"'");
+  if(!stripDomainSuffix(&qname, name))
+    throw DBException("out-of-zone data '"+qname+".' during AXFR of zone '"+name+".'");
 
-  string content=r.content;
+  string content=rr.content;
 
   // SOA needs stripping too! XXX FIXME - also, this should not be here I think
-  switch(r.qtype.getCode()) {
+  switch(rr.qtype.getCode()) {
   case QType::MX:
   case QType::SRV:
   case QType::CNAME:
-  case QType::NS: {
-      DNSName content2 = DNSName(content).makeRelative(domain);
-      if (content2.empty())
-        content2=content;
-      *d_of<<qname.toString()<<"\t"<<r.ttl<<"\t"<<r.qtype.getName()<<"\t"<<content2.toString()<<endl;
-      break;
-    }
+  case QType::NS:
+    if(!stripDomainSuffix(&content, name))
+      content=stripDot(content)+".";
+    // falltrough
   default:
-    *d_of<<qname.toString()<<"\t"<<r.ttl<<"\t"<<r.qtype.getName()<<"\t"<<r.content<<endl;
-    break;
+    *d_of<<qname<<"\t"<<rr.ttl<<"\t"<<rr.qtype.getName()<<"\t"<<content<<endl;
   }
   return true;
 }
index b60d76125253c65f69d5b07f052817f3a2a7f82d..55df152a3e4119c190a4d5fd74db71fd51054c9d 100644 (file)
@@ -198,7 +198,7 @@ public:
   void setFresh(uint32_t domain_id);
   void setNotified(uint32_t id, uint32_t serial);
   bool startTransaction(const DNSName &qname, int id);
-  bool feedRecord(const DNSResourceRecord &r, string *ordername=0);
+  bool feedRecord(const DNSResourceRecord &rr, string *ordername=0);
   bool commitTransaction();
   bool abortTransaction();
   void alsoNotifies(const DNSName &domain, set<string> *ips);