]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
reject duplicate RRsets in patchZone
authorPeter van Dijk <peter.van.dijk@powerdns.com>
Mon, 21 May 2018 08:37:39 +0000 (10:37 +0200)
committerPeter van Dijk <peter.van.dijk@powerdns.com>
Mon, 21 May 2018 08:53:26 +0000 (10:53 +0200)
pdns/ws-auth.cc

index 63214bddb7bc80dd78ffd12991d2e407ec4f0f96..14a1b5fc819ee171bd2f430939493a57e02f546e 100644 (file)
@@ -1634,12 +1634,19 @@ static void patchZone(HttpRequest* req, HttpResponse* resp) {
     di.backend->getDomainMetadataOne(zonename, "SOA-EDIT", soa_edit_kind);
     bool soa_edit_done = false;
 
+    set<pair<DNSName, QType>> seen;
+
     for (const auto& rrset : rrsets.array_items()) {
       string changetype = toUpper(stringFromJson(rrset, "changetype"));
       DNSName qname = apiNameToDNSName(stringFromJson(rrset, "name"));
       apiCheckQNameAllowedCharacters(qname.toString());
       QType qtype;
       qtype = stringFromJson(rrset, "type");
+      if(seen.count({qname, qtype}))
+      {
+        throw ApiException("Duplicate RRset "+qname.toString()+" IN "+stringFromJson(rrset, "type"));
+      }
+      seen.insert({qname, qtype});
       if (qtype.getCode() == 0) {
         throw ApiException("RRset "+qname.toString()+" IN "+stringFromJson(rrset, "type")+": unknown type given");
       }