]> granicus.if.org Git - pdns/commitdiff
auth api: return new serial in header after PATCH
authorKonrad Wojas <github@m.wojas.nl>
Fri, 15 Sep 2017 05:56:38 +0000 (13:56 +0800)
committerKonrad Wojas <github@m.wojas.nl>
Fri, 15 Sep 2017 05:56:38 +0000 (13:56 +0800)
For zone PATCH requests, this adds a new `X-PDNS-Zone-Serial` response
header with the new zone serial.

Ideally this would be returned in a response JSON object, but this API
currently return 204 No Content and I did not want to break any clients
that might rely on this.

docs/http-api/endpoint-zones.rst
pdns/ws-auth.cc

index 4e82e1f0f3a103b671f8952aaca60d9a5d6c3ad7..6c3627b534f3009b95aacad16c2cee0276b1d6ae 100644 (file)
@@ -42,6 +42,8 @@ Zones endpoint
 
   Modifies present RRsets and comments. Returns ``204 No Content`` on success.
 
+  The new zone serial will be returned in an `X-PDNS-Zone-Serial` header (auth 4.1+).
+
   :param server_id: The name of the server
   :param zone_id: The id number of the :json:object:`Zone`
 
index dc567135b5cf54326f622af99c9cf4d723356622..cfad4fc9c61894bd94a0d22c1c7f771a1990cec4 100644 (file)
@@ -1499,6 +1499,10 @@ static void patchZone(HttpRequest* req, HttpResponse* resp) {
       if (!di.backend->replaceRRSet(di.id, rr.qname, rr.qtype, vector<DNSResourceRecord>(1, rr))) {
         throw ApiException("Hosting backend does not support editing records.");
       }
+
+      // return new serial in a header
+      fillSOAData(rr.content, sd);
+      resp->headers["X-PDNS-Zone-Serial"] = std::to_string(sd.serial);
     }
 
   } catch(...) {