From: Aki Tuomi Date: Sat, 8 Feb 2014 20:56:04 +0000 (+0200) Subject: Implementation for gsql backends X-Git-Tag: rec-3.6.0-rc1~179^2~8 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=df0cc94147882c7404d06df7b59b4c70f191ecc9;p=thirdparty%2Fpdns.git Implementation for gsql backends --- diff --git a/pdns/backends/gsql/gsqlbackend.cc b/pdns/backends/gsql/gsqlbackend.cc index 8805e407d2..4813ccd44c 100644 --- a/pdns/backends/gsql/gsqlbackend.cc +++ b/pdns/backends/gsql/gsqlbackend.cc @@ -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 *ips) } } +bool GSQLBackend::getAllDomainMetadata(const string& name, std::map >& 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& meta) { if(!d_dnssecQueries) diff --git a/pdns/backends/gsql/gsqlbackend.hh b/pdns/backends/gsql/gsqlbackend.hh index 9049571c71..0a8c87b424 100644 --- a/pdns/backends/gsql/gsqlbackend.hh +++ b/pdns/backends/gsql/gsqlbackend.hh @@ -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& keys); + bool getAllDomainMetadata(const string& name, std::map >& meta); bool getDomainMetadata(const string& name, const std::string& kind, std::vector& meta); bool setDomainMetadata(const string& name, const std::string& kind, const std::vector& 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;