From: Peter van Dijk Date: Mon, 21 May 2018 08:37:39 +0000 (+0200) Subject: reject duplicate RRsets in patchZone X-Git-Tag: dnsdist-1.3.1~71^2~2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2b048cc755da90457a7829f355bda1b0f7a5896e;p=pdns reject duplicate RRsets in patchZone --- diff --git a/pdns/ws-auth.cc b/pdns/ws-auth.cc index 63214bddb..14a1b5fc8 100644 --- a/pdns/ws-auth.cc +++ b/pdns/ws-auth.cc @@ -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> 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"); }