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: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2b048cc755da90457a7829f355bda1b0f7a5896e;p=thirdparty%2Fpdns.git reject duplicate RRsets in patchZone --- diff --git a/pdns/ws-auth.cc b/pdns/ws-auth.cc index 63214bddb7..14a1b5fc81 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"); }