]> git.ipfire.org Git - thirdparty/pdns.git/blobdiff - pdns/communicator.hh
rec: ensure correct service user on debian
[thirdparty/pdns.git] / pdns / communicator.hh
index 5413e4dacf2335f9a5af69276536204d776719ae..c63534dc232b5fa709eba136905c9bfcde208645 100644 (file)
@@ -251,18 +251,32 @@ private:
 class FindNS
 {
 public:
-  vector<string> lookup(const DNSName &name, UeberBackend *b)
+  vector<string> lookup(const DNSName &name, UeberBackend *b, const DNSName& zone)
   {
     vector<string> addresses;
 
     this->resolve_name(&addresses, name);
     
     if(b) {
-        b->lookup(QType(QType::ANY),name);
-        DNSZoneRecord rr;
-        while(b->get(rr))
-          if(rr.dr.d_type == QType::A || rr.dr.d_type==QType::AAAA)
+      b->lookup(QType(QType::ANY),name);
+      while (true) {
+        try {
+          DNSZoneRecord rr;
+          if (!b->get(rr))
+            break;
+          if (rr.dr.d_type == QType::A || rr.dr.d_type == QType::AAAA)
             addresses.push_back(rr.dr.d_content->getZoneRepresentation());   // SOL if you have a CNAME for an NS
+        }
+        // After an exception, b can be inconsistent so break
+        catch (PDNSException &ae) {
+          g_log << Logger::Error << "Could not lookup address for nameserver " << name << " in zone " << zone << ", cannot notify: " << ae.reason << endl;
+          break;
+        }
+        catch (std::exception &e) {
+          g_log << Logger::Error << "Could not lookup address for nameserver " << name << " in zone " << zone << ", cannot notify: " << e.what() << endl;
+          break;
+        }
+      }
     }
     return addresses;
   }