]> granicus.if.org Git - pdns/commitdiff
Implementation for gsql backends
authorAki Tuomi <cmouse@desteem.org>
Sat, 8 Feb 2014 20:56:04 +0000 (22:56 +0200)
committerAki Tuomi <cmouse@desteem.org>
Sat, 8 Feb 2014 20:56:04 +0000 (22:56 +0200)
pdns/backends/gsql/gsqlbackend.cc
pdns/backends/gsql/gsqlbackend.hh

index 8805e407d236c99ac60b76f3bb8ae56edec834dd..4813ccd44c46b063a5867854e9bd81c6736b0ff7 100644 (file)
@@ -329,7 +329,8 @@ GSQLBackend::GSQLBackend(const string &mode, const string &suffix)
     d_AddDomainKeyQuery = getArg("add-domain-key-query");
     d_ListDomainKeysQuery = getArg("list-domain-keys-query");
     d_ClearDomainAllKeysQuery = getArg("clear-domain-all-keys-query");
-    
+  
+    d_GetAllDomainMetadataQuery = getArg("get-all-domain-metadata-query");  
     d_GetDomainMetadataQuery = getArg("get-domain-metadata-query");
     d_ClearDomainMetadataQuery = getArg("clear-domain-metadata-query");
     d_ClearDomainAllMetadataQuery = getArg("clear-domain-all-metadata-query");
@@ -734,6 +735,31 @@ void GSQLBackend::alsoNotifies(const string &domain, set<string> *ips)
   }
 }
 
+bool GSQLBackend::getAllDomainMetadata(const string& name, std::map<std::string, std::vector<std::string> >& meta)
+{
+  if(!d_dnssecQueries)
+    return false;
+
+  char output[1024];
+  snprintf(output,sizeof(output)-1,d_GetAllDomainMetadataQuery.c_str(), sqlEscape(name).c_str());
+
+  try {
+    d_db->doQuery(output);
+  }
+  catch (SSqlException &e) {
+    throw PDNSException("GSQLBackend unable to list metadata: "+e.txtReason());
+  }
+
+  SSql::row_t row;
+
+  while(d_db->getRow(row)) {
+    meta[row[0]].push_back(row[1]);
+  }
+
+  return true;
+}
+
+
 bool GSQLBackend::getDomainMetadata(const string& name, const std::string& kind, std::vector<std::string>& meta)
 {
   if(!d_dnssecQueries)
index 9049571c7119b5ed2596e4b2e9785b3214bfd1f6..0a8c87b42466de2e814888bfdb68ea58159920e9 100644 (file)
@@ -66,6 +66,7 @@ public:
   bool listSubZone(const string &zone, int domain_id);
   int addDomainKey(const string& name, const KeyData& key);
   bool getDomainKeys(const string& name, unsigned int kind, std::vector<KeyData>& keys);
+  bool getAllDomainMetadata(const string& name, std::map<std::string, std::vector<std::string> >& meta);
   bool getDomainMetadata(const string& name, const std::string& kind, std::vector<std::string>& meta);
   bool setDomainMetadata(const string& name, const std::string& kind, const std::vector<std::string>& meta);
   bool clearDomainAllMetadata(const string& domain);
@@ -135,6 +136,7 @@ private:
 
   string d_AddDomainKeyQuery;
   string d_ListDomainKeysQuery;
+  string d_GetAllDomainMetadataQuery;
   string d_GetDomainMetadataQuery;
   string d_ClearDomainMetadataQuery;
   string d_ClearDomainAllMetadataQuery;