From: Ruben d'Arco Date: Mon, 20 May 2013 21:46:59 +0000 (+0200) Subject: Add add-delete-ds test and minor fix X-Git-Tag: rec-3.6.0-rc1~556^2~3^2~14 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=929eee6b059da31d0d7aa84d56d00e7e006157c5;p=thirdparty%2Fpdns.git Add add-delete-ds test and minor fix --- diff --git a/pdns/rfc2136handler.cc b/pdns/rfc2136handler.cc index ad228df8a9..0ce727d343 100644 --- a/pdns/rfc2136handler.cc +++ b/pdns/rfc2136handler.cc @@ -247,8 +247,8 @@ uint16_t PacketHandler::performUpdate(const string &msgPrefix, const DNSRecord * string shorter(rrLabel); bool auth=newRec.auth; - if (shorter != di->zone && rrType != QType::DS) { - while(chopOff(shorter)) { + if (shorter != di->zone) { + do{ if (shorter == di->zone) break; bool foundShorter = false; @@ -262,7 +262,7 @@ uint16_t PacketHandler::performUpdate(const string &msgPrefix, const DNSRecord * insnonterm.insert(shorter); else break; // if we find a shorter record, we can stop searching - } + } while(chopOff(shorter)); } if(*haveNSEC3) @@ -272,7 +272,9 @@ uint16_t PacketHandler::performUpdate(const string &msgPrefix, const DNSRecord * hashed=toLower(toBase32Hex(hashQNameWithSalt(ns3pr->d_iterations, ns3pr->d_salt, rrLabel))); di->backend->updateDNSSECOrderAndAuthAbsolute(di->id, rrLabel, hashed, auth); - if(!auth || rrType == QType::DS) + if (rrType == QType::DS) + di->backend->setDNSSECAuthOnDsRecord(di->id, rrLabel); + if(!auth) { if (ns3pr->d_flags) di->backend->nullifyDNSSECOrderNameAndAuth(di->id, rrLabel, "NS"); @@ -283,10 +285,14 @@ uint16_t PacketHandler::performUpdate(const string &msgPrefix, const DNSRecord * else // NSEC { di->backend->updateDNSSECOrderAndAuth(di->id, di->zone, rrLabel, auth); - if(!auth || rrType == QType::DS) - { - di->backend->nullifyDNSSECOrderNameAndAuth(di->id, rrLabel, "A"); - di->backend->nullifyDNSSECOrderNameAndAuth(di->id, rrLabel, "AAAA"); + if (rrType == QType::DS) + di->backend->setDNSSECAuthOnDsRecord(di->id, rrLabel); + else { + if(!auth) + { + di->backend->nullifyDNSSECOrderNameAndAuth(di->id, rrLabel, "A"); + di->backend->nullifyDNSSECOrderNameAndAuth(di->id, rrLabel, "AAAA"); + } } } diff --git a/regression-tests/1dyndns-update-add-delete-ds/command b/regression-tests/1dyndns-update-add-delete-ds/command new file mode 100755 index 0000000000..5641a2dd98 --- /dev/null +++ b/regression-tests/1dyndns-update-add-delete-ds/command @@ -0,0 +1,31 @@ +#!/bin/sh + +mysqldiff + +# add a delegate + ds +cleannsupdate <>HEADER<<- opcode: UPDATE, status: NOERROR, id: [id] +;; flags: qr aa; ZONE: 1, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0 +;; ZONE SECTION: +;test.dyndns. IN SOA + +Check delegate and DS added correctly +--- Start: diff start step.1 --- +> del.test.dyndns DS 0 39274 8 2 8e8a8cfb40fd0c30bfa82e53752e1c257dafb7b6206d12b9eda43af3eab2157d 3600 +> del.test.dyndns NS 0 ns1.del.test.dyndns 3600 +> ns1.del.test.dyndns A 0 127.0.0.1 3600 +--- End: diff start step.1 --- + +Answer: +;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: [id] +;; flags: qr aa; ZONE: 1, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0 +;; ZONE SECTION: +;test.dyndns. IN SOA + +Check if record is gone +--- Start: diff start step.2 --- +no difference +--- End: diff start step.2 --- + diff --git a/regression-tests/1dyndns-update-add-delete-ds/expected_result.dnssec b/regression-tests/1dyndns-update-add-delete-ds/expected_result.dnssec new file mode 100644 index 0000000000..30a2b13131 --- /dev/null +++ b/regression-tests/1dyndns-update-add-delete-ds/expected_result.dnssec @@ -0,0 +1,24 @@ +Answer: +;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: [id] +;; flags: qr aa; ZONE: 1, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0 +;; ZONE SECTION: +;test.dyndns. IN SOA + +Check delegate and DS added correctly +--- Start: diff start step.1 --- +> del.test.dyndns DS 0 39274 8 2 8e8a8cfb40fd0c30bfa82e53752e1c257dafb7b6206d12b9eda43af3eab2157d 3600 'del' 1 +> del.test.dyndns NS 0 ns1.del.test.dyndns 3600 'del' 0 +> ns1.del.test.dyndns A 0 127.0.0.1 3600 NULL 0 +--- End: diff start step.1 --- + +Answer: +;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: [id] +;; flags: qr aa; ZONE: 1, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0 +;; ZONE SECTION: +;test.dyndns. IN SOA + +Check if record is gone +--- Start: diff start step.2 --- +no difference +--- End: diff start step.2 --- + diff --git a/regression-tests/1dyndns-update-add-delete-ds/expected_result.narrow b/regression-tests/1dyndns-update-add-delete-ds/expected_result.narrow new file mode 100644 index 0000000000..22a64c0f4e --- /dev/null +++ b/regression-tests/1dyndns-update-add-delete-ds/expected_result.narrow @@ -0,0 +1,22 @@ +Answer: +;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: [id] +;; flags: qr aa; ZONE: 1, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0 +;; ZONE SECTION: +;test.dyndns. IN SOA + +Check if add-delete.test.dyndns. 3600 A 127.0.0.108 exists +--- Start: diff start step.1 --- +> add-delete.test.dyndns A 0 127.0.0.108 3600 '' 1 +--- End: diff start step.1 --- + +Answer: +;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: [id] +;; flags: qr aa; ZONE: 1, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0 +;; ZONE SECTION: +;test.dyndns. IN SOA + +Check if record is gone +--- Start: diff step.1 step.2 --- +< add-delete.test.dyndns A 0 127.0.0.108 3600 '' 1 +--- End: diff step.1 step.2 --- + diff --git a/regression-tests/1dyndns-update-add-delete-ds/expected_result.nsec3 b/regression-tests/1dyndns-update-add-delete-ds/expected_result.nsec3 new file mode 100644 index 0000000000..6c68ba9de8 --- /dev/null +++ b/regression-tests/1dyndns-update-add-delete-ds/expected_result.nsec3 @@ -0,0 +1,22 @@ +Answer: +;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: [id] +;; flags: qr aa; ZONE: 1, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0 +;; ZONE SECTION: +;test.dyndns. IN SOA + +Check if add-delete.test.dyndns. 3600 A 127.0.0.108 exists +--- Start: diff start step.1 --- +> add-delete.test.dyndns A 0 127.0.0.108 3600 'gkhs0ms64101fs1dj19h7no8vn2tp4fk' 1 +--- End: diff start step.1 --- + +Answer: +;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: [id] +;; flags: qr aa; ZONE: 1, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0 +;; ZONE SECTION: +;test.dyndns. IN SOA + +Check if record is gone +--- Start: diff step.1 step.2 --- +< add-delete.test.dyndns A 0 127.0.0.108 3600 'gkhs0ms64101fs1dj19h7no8vn2tp4fk' 1 +--- End: diff step.1 step.2 --- + diff --git a/regression-tests/1dyndns-update-add-delete-ds/skip.nodyndns b/regression-tests/1dyndns-update-add-delete-ds/skip.nodyndns new file mode 100644 index 0000000000..81c071b810 --- /dev/null +++ b/regression-tests/1dyndns-update-add-delete-ds/skip.nodyndns @@ -0,0 +1 @@ +Skip this test if the backend does not support dyndns/rfc2136