]> granicus.if.org Git - pdns/commitdiff
Implementation for bind backend
authorAki Tuomi <cmouse@desteem.org>
Sat, 8 Feb 2014 20:56:30 +0000 (22:56 +0200)
committerAki Tuomi <cmouse@desteem.org>
Sat, 8 Feb 2014 20:56:30 +0000 (22:56 +0200)
modules/bindbackend/bindbackend2.hh
modules/bindbackend/binddnssec.cc

index 0c7eba68f784bfc071e33d24b63318e39178b2b4..c0e1de79617a9de54f78226c2786f682f47865e0 100644 (file)
@@ -151,6 +151,7 @@ public:
   void alsoNotifies(const string &domain, set<string> *ips);
 
 // the DNSSEC related (getDomainMetadata has broader uses too)
+  virtual bool getAllDomainMetadata(const string& name, std::map<std::string, std::vector<std::string> >& meta);
   virtual bool getDomainMetadata(const string& name, const std::string& kind, std::vector<std::string>& meta);
   virtual bool setDomainMetadata(const string& name, const std::string& kind, const std::vector<std::string>& meta);
   virtual bool getDomainKeys(const string& name, unsigned int kind, std::vector<KeyData>& keys);
index f17c0d6fbc3a25a4a303f2fedfeb7d29d58039a4..bc50a3283ff2d63cc13ce05ede801a4268edbe4b 100644 (file)
@@ -39,6 +39,9 @@ bool Bind2Backend::doesDNSSEC()
 bool Bind2Backend::getNSEC3PARAM(const std::string& zname, NSEC3PARAMRecordContent* ns3p)
 { return false; }
 
+bool Bind2Backend::getAllDomainMetadata(const string& name, std::map<std::string, std::vector<std::string> >& meta)
+{ return false; }
+
 bool Bind2Backend::getDomainMetadata(const string& name, const std::string& kind, std::vector<std::string>& meta)
 { return false; }
 
@@ -115,6 +118,28 @@ bool Bind2Backend::getNSEC3PARAM(const std::string& zname, NSEC3PARAMRecordConte
   return true;
 }
 
+bool Bind2Backend::getAllDomainMetadata(const string& name, std::map<std::string, std::vector<std::string> >& meta)
+{
+  if(!d_dnssecdb)
+    return false;
+
+  // cerr<<"Asked to get metadata for zone '"<<name<<"'|"<<kind<<"\n";
+
+  boost::format fmt("select kind, content from domainmetadata where domain='%s'");
+  try {
+    d_dnssecdb->doQuery((fmt % d_dnssecdb->escape(name)).str());
+
+    vector<string> row;
+    while(d_dnssecdb->getRow(row)) {
+      meta[row[0]].push_back(row[1]);
+    }
+  }
+  catch(SSqlException& se) {
+    throw PDNSException("Error accessing DNSSEC database in BIND backend: "+se.txtReason());
+  }
+  return true;
+}
+
 bool Bind2Backend::getDomainMetadata(const string& name, const std::string& kind, std::vector<std::string>& meta)
 {
   if(!d_dnssecdb)