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);
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; }
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)