From: Aki Tuomi Date: Tue, 30 Jun 2015 06:20:08 +0000 (+0300) Subject: Implement directBackendCmd in remotebackend X-Git-Tag: dnsdist-1.0.0-alpha1~248^2~77^2~3^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e8ac9c39eaf17fd42fc9acabb5215a39d692f0d3;p=thirdparty%2Fpdns.git Implement directBackendCmd in remotebackend --- diff --git a/modules/remotebackend/httpconnector.cc b/modules/remotebackend/httpconnector.cc index e4c97e9935..d2d6cb7866 100644 --- a/modules/remotebackend/httpconnector.cc +++ b/modules/remotebackend/httpconnector.cc @@ -240,6 +240,11 @@ void HTTPConnector::restful_requestbuilder(const std::string &method, const rapi req.POST()["serial"] = sparam; req.preparePost(); verb = "PATCH"; + } else if (method == "directBackendCmd") { + json2string(parameters["query"],sparam); + req.POST()["query"] = sparam; + req.preparePost(); + verb = "POST"; } else { // perform normal get verb = "GET"; diff --git a/modules/remotebackend/remotebackend.cc b/modules/remotebackend/remotebackend.cc index f89ad6b89b..d0b6160766 100644 --- a/modules/remotebackend/remotebackend.cc +++ b/modules/remotebackend/remotebackend.cc @@ -938,6 +938,22 @@ bool RemoteBackend::calculateSOASerial(const string& domain, const SOAData& sd, return true; } +string RemoteBackend::directBackendCmd(const string& querystr) { + rapidjson::Document query,answer; + rapidjson::Value parameters; + + query.SetObject(); + JSON_ADD_MEMBER(query, "method", "directBackendCmd", query.GetAllocator()); + parameters.SetObject(); + JSON_ADD_MEMBER(parameters, "query", querystr.c_str(), query.GetAllocator()); + query.AddMember("parameters", parameters, query.GetAllocator()); + + if (this->send(query) == false || this->recv(answer) == false) + return "backend command failed"; + + return getString(answer["result"]); +} + // some rapidjson helpers bool RemoteBackend::getBool(rapidjson::Value &value) { if (value.IsNull()) return false; diff --git a/modules/remotebackend/remotebackend.hh b/modules/remotebackend/remotebackend.hh index 76a1d0ec67..9651865155 100644 --- a/modules/remotebackend/remotebackend.hh +++ b/modules/remotebackend/remotebackend.hh @@ -162,6 +162,7 @@ class RemoteBackend : public DNSBackend virtual bool setTSIGKey(const string& name, const string& algorithm, const string& content); virtual bool deleteTSIGKey(const string& name); virtual bool getTSIGKeys(std::vector< struct TSIGKey > &keys); + virtual string directBackendCmd(const string& querystr); static DNSBackend *maker();