]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Add SOA record to randombackend, closes #2596 2640/head
authorPieter Lexis <pieter.lexis@powerdns.com>
Mon, 15 Jun 2015 14:47:59 +0000 (16:47 +0200)
committerPieter Lexis <pieter.lexis@powerdns.com>
Tue, 14 Jul 2015 12:54:21 +0000 (14:54 +0200)
modules/randombackend/randombackend.cc

index e7b96b7d7ab05205b378f4e555066a6e3da087eb..7133ecc7f4fac84ccaab3fb98303804ed45ecbf6 100644 (file)
@@ -40,8 +40,8 @@ public:
   {
     setArgPrefix("random"+suffix);
     d_ourname=DNSName(getArg("hostname"));
-    d_want_A=false;
-    d_want_SOA=false;
+    d_ourdomain = d_ourname;
+    d_ourdomain.chopOff();
   }
 
   bool list(const DNSName &target, int id, bool include_disabled) {
@@ -50,55 +50,49 @@ public:
 
   void lookup(const QType &type, const DNSName &qdomain, DNSPacket *p, int zoneId)
   {
-    if(qdomain == d_ourname){
-        switch (type.getCode()) {
-          case QType::A:
-            d_want_A = true;
-            break;
-          case QType::SOA:
-            d_want_SOA = true;
-            break;
-          case QType::ANY:
-            d_want_A = true;
-            d_want_SOA = true;
-            break;
-        }
-    } else { // We know nothing
-      d_want_A = false;
-      d_want_SOA = false;
+    if(qdomain == d_ourdomain){
+      if(type.getCode() == QType::SOA || type.getCode() == QType::ANY) {
+        d_answer="ns1." + d_ourdomain.toString() + " hostmaster." + d_ourdomain.toString() + " 1234567890 86400 7200 604800 300";
+      } else {
+        d_answer="";
+      }
+    } else if (qdomain == d_ourname) {
+      if(type.getCode() == QType::A || type.getCode() == QType::ANY) {
+        ostringstream os;
+        os<<Utility::random()%256<<"."<<Utility::random()%256<<"."<<Utility::random()%256<<"."<<Utility::random()%256;
+        d_answer=os.str(); // our random ip address
+      } else {
+        d_answer="";
+      }
+    } else {
+      d_answer="";
     }
   }
 
   bool get(DNSResourceRecord &rr)
   {
-    // fill in details
-    rr.qname=d_ourname;
-    rr.ttl=5;   // 5 seconds
-    rr.auth=1;  // it may be random.. but it is auth!
-
-    if(d_want_A) {
-      rr.qtype=QType::A;
-      ostringstream os;
-      os<<Utility::random()%256<<"."<<Utility::random()%256<<"."<<Utility::random()%256<<"."<<Utility::random()%256;
-      rr.content=os.str();
-      d_want_A=false;
+    if(!d_answer.empty()) {
+      if(d_answer.find("ns1.") == 0){
+        rr.qname=d_ourdomain;
+        rr.qtype=QType::SOA;
+      } else {
+        rr.qname=d_ourname;
+        rr.qtype=QType::A;
+      }
+      rr.ttl=5;             // 5 seconds
+      rr.auth = 1;          // it may be random.. but it is auth!
+      rr.content=d_answer;
+
+      d_answer="";          // this was the last answer
       return true;
     }
-
-    if(d_want_SOA) {
-      rr.qtype=QType::SOA;
-      rr.content="ns1." + d_ourname.toString() + " hostmaster." + d_ourname.toString() + " 1234567890 86400 7200 604800 300";
-      d_want_SOA=false;
-      return true;
-    }
-
     return false;
   }
 
 private:
+  string d_answer;
   DNSName d_ourname;
-  bool d_want_A;
-  bool d_want_SOA;
+  DNSName d_ourdomain;
 };
 
 /* SECOND PART */