From: Peter van Dijk Date: Wed, 9 Jan 2013 13:19:21 +0000 (+0000) Subject: remotebackend: fix http connector to use C style post content generation X-Git-Tag: auth-3.2~24 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c880a71d73821b652068eee36a6540dcf6d7363d;p=thirdparty%2Fpdns.git remotebackend: fix http connector to use C style post content generation git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@3031 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- diff --git a/modules/remotebackend/httpconnector.cc b/modules/remotebackend/httpconnector.cc index 4ab9deec30..7edd2b8fe7 100644 --- a/modules/remotebackend/httpconnector.cc +++ b/modules/remotebackend/httpconnector.cc @@ -96,15 +96,17 @@ void HTTPConnector::requestbuilder(const std::string &method, const rapidjson::V curl_easy_setopt(d_c, CURLOPT_POSTFIELDSIZE, 0); } else if (method == "addDomainKey") { // create post with keydata - std::stringstream ss2; - const rapidjson::Value& param = parameters["key"]; - ss2 << "flags=" << param["flags"].GetUint() << "&active=" << (param["active"].GetBool() ? 1 : 0) << "&content="; + char *postfields; + int nsize; + const rapidjson::Value& param = parameters["key"]; tmpstr = curl_easy_escape(d_c, param["content"].GetString(), 0); - ss2 << tmpstr; - sparam = ss2.str(); - curl_easy_setopt(d_c, CURLOPT_POSTFIELDSIZE, sparam.size()); - curl_easy_setopt(d_c, CURLOPT_COPYPOSTFIELDS, sparam.c_str()); + nsize = 35 + strlen(tmpstr); + postfields = new char[nsize]; + nsize = snprintf(postfields, nsize, "flags=%u&active=%d&content=%s", param["flags"].GetUint(), (param["active"].GetBool() ? 1 : 0), tmpstr); + curl_easy_setopt(d_c, CURLOPT_POSTFIELDSIZE, nsize); + curl_easy_setopt(d_c, CURLOPT_COPYPOSTFIELDS, postfields); curl_free(tmpstr); + delete postfields; } else if (method == "setDomainMetadata") { int n=0; // copy all metadata values into post diff --git a/modules/remotebackend/regression-tests/dnsbackend.rb b/modules/remotebackend/regression-tests/dnsbackend.rb index 0bd9f45704..dbf9e95835 100644 --- a/modules/remotebackend/regression-tests/dnsbackend.rb +++ b/modules/remotebackend/regression-tests/dnsbackend.rb @@ -48,6 +48,8 @@ class DNSBackendHandler < WEBrick::HTTPServlet::AbstractServlet end def do_GET(req,res) + req.continue + tmp = req.path[/dns\/(.*)/,1] return 400, "Bad request" if (tmp.nil?)