]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Implement directBackendCmd in remotebackend
authorAki Tuomi <cmouse@cmouse.fi>
Tue, 30 Jun 2015 06:20:08 +0000 (09:20 +0300)
committerPeter van Dijk <peter.van.dijk@netherlabs.nl>
Tue, 30 Jun 2015 10:37:43 +0000 (12:37 +0200)
modules/remotebackend/httpconnector.cc
modules/remotebackend/remotebackend.cc
modules/remotebackend/remotebackend.hh

index e4c97e9935f8a99b93a6010c479760d4e9158477..d2d6cb78665411fe9b85ab1771c6837373b23aa4 100644 (file)
@@ -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";
index f89ad6b89b24bf957fd4e0277b95168b0a96a8e3..d0b6160766375dccbd2da43c906700de42e3c145 100644 (file)
@@ -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;
index 76a1d0ec6739c1a082f3b4b899bc810ea29c5004..965186515575a366c8a5a057bfb5485525d0fa16 100644 (file)
@@ -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();