]> granicus.if.org Git - pdns/commitdiff
Return result directly if available
authorAki Tuomi <cmouse@desteem.org>
Fri, 11 Sep 2015 08:18:14 +0000 (11:18 +0300)
committerAki Tuomi <cmouse@desteem.org>
Fri, 11 Sep 2015 08:18:35 +0000 (11:18 +0300)
modules/geoipbackend/geoipbackend.cc

index 2e7d2acc728b61098356ce71f969d27439b705c9..d4bf173fbb1ade57cfc2f4a793db425f262c4dca 100644 (file)
@@ -180,8 +180,6 @@ void GeoIPBackend::lookup(const QType &qtype, const DNSName& qdomain, DNSPacket
     return;
   }
 
-  if (!(qtype == QType::ANY || qtype == QType::CNAME)) return;
-
   string ip = "0.0.0.0";
   bool v6 = false;
   if (pkt_p != NULL) {
@@ -195,6 +193,20 @@ void GeoIPBackend::lookup(const QType &qtype, const DNSName& qdomain, DNSPacket
   
   format = format2str(format, ip, v6);
 
+  // see if the record can be found
+  if (dom.records.count(format)) { // return static value
+    map<DNSName, vector<DNSResourceRecord> >::iterator i = dom.records.find(format);
+    BOOST_FOREACH(DNSResourceRecord rr, i->second) {
+      if (qtype == QType::ANY || rr.qtype == qtype) {
+        d_result.push_back(rr);
+        d_result.back().qname = qdomain;
+      }
+    }
+    return;
+  }
+
+  if (!(qtype == QType::ANY || qtype == QType::CNAME)) return;
+
   DNSResourceRecord rr;
   rr.domain_id = dom.id;
   rr.qtype = QType::CNAME;