]> granicus.if.org Git - pdns/commitdiff
geoipbackend: Allow mixing static and service lookup.
authorAki Tuomi <cmouse@cmouse.fi>
Mon, 24 Jul 2017 06:34:09 +0000 (09:34 +0300)
committerAki Tuomi <cmouse@cmouse.fi>
Mon, 24 Jul 2017 06:34:09 +0000 (09:34 +0300)
This allows using service records at apex level.

Closes #3747

modules/geoipbackend/geoipbackend.cc

index b10a54b639bba3c1dfbcb90585d0ce1ef9e855c0..929f5345b37117591e3cefa5671d7f12dcd71b36 100644 (file)
@@ -368,8 +368,7 @@ void GeoIPBackend::lookup(const QType &qtype, const DNSName& qdomain, DNSPacket
 
   gl.netmask = 0;
 
-  if (this->lookup_static(dom, search, qtype, qdomain, ip, gl, v6))
-    return;
+  (void)this->lookup_static(dom, search, qtype, qdomain, ip, gl, v6);
 
   auto target = dom.services.find(search);
   if (target == dom.services.end()) return; // no hit
@@ -389,6 +388,15 @@ void GeoIPBackend::lookup(const QType &qtype, const DNSName& qdomain, DNSPacket
       return;
   }
 
+  if (!d_result.empty()) {
+    L<<Logger::Error<<
+       "Cannot have static record and CNAME at the same time" <<
+       "Please fix your configuration for \"" << qdomain << "\", so that" <<
+       "it can be resolved by GeoIP backend directly."<< std::endl;
+    d_result.clear();
+    return;
+  }
+
   // we need this line since we otherwise claim to have NS records etc
   if (!(qtype == QType::ANY || qtype == QType::CNAME)) return;