From: Ruben d'Arco Date: Sun, 19 May 2013 14:04:36 +0000 (+0200) Subject: Fix crash when deleting deep delegate with others X-Git-Tag: rec-3.6.0-rc1~556^2~3^2~16 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=88bffddaecead42f09d41fa0f9190178ac6c15f9;p=thirdparty%2Fpdns.git Fix crash when deleting deep delegate with others --- diff --git a/pdns/rfc2136handler.cc b/pdns/rfc2136handler.cc index 2ae5e4fcb4..ad228df8a9 100644 --- a/pdns/rfc2136handler.cc +++ b/pdns/rfc2136handler.cc @@ -411,7 +411,7 @@ uint16_t PacketHandler::performUpdate(const string &msgPrefix, const DNSRecord * for(vector::const_iterator belowOldDel=belowOldDelegate.begin(); belowOldDel!= belowOldDelegate.end(); belowOldDel++) { bool isBelowDelegate = false; - for(vector::const_iterator ns=nsRecs.begin(); ns!= nsRecs.end(); belowOldDel++) { + for(vector::const_iterator ns=nsRecs.begin(); ns!= nsRecs.end(); ns++) { if (endsOn(*ns, *belowOldDel)) { isBelowDelegate=true; break; diff --git a/regression-tests/1dyndns-update-deep-delegate/command b/regression-tests/1dyndns-update-deep-delegate/command new file mode 100755 index 0000000000..4781008bae --- /dev/null +++ b/regression-tests/1dyndns-update-deep-delegate/command @@ -0,0 +1,34 @@ +#!/bin/sh + +cleandig delegate1.test.dyndns ANY hidesoadetails +mysqldiff + +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 + +1 delegate.test.dyndns. IN NS 3600 ns1.delegate.test.dyndns. +2 ns1.delegate.test.dyndns. IN A 3600 127.0.0.1 +Rcode: 0, RD: 0, QR: 1, TC: 0, AA: 0, opcode: 0 +Reply to question for qname='delegate.test.dyndns.', qtype=ANY +Check delegates added +--- Start: diff start step.1 --- +> delegate.test.dyndns NS 0 ns1.delegate.test.dyndns 3600 +> ns1.delegate.test.dyndns A 0 127.0.0.1 3600 +> ns1.other.very.deep.delegate.test.dyndns A 0 127.0.0.1 3600 +> other.very.deep.delegate.test.dyndns NS 0 ns1.other.very.deep.delegate.test.dyndns 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 + +1 test.dyndns. IN SOA 3600 ns1.test.dyndns. ahu.example.dyndns. 2013051902 28800 7200 604800 86400 +Rcode: 3, RD: 0, QR: 1, TC: 0, AA: 1, opcode: 0 +Reply to question for qname='delegate.test.dyndns.', qtype=ANY +Check delegates deleted +--- Start: diff start step.2 --- +no difference +--- End: diff start step.2 --- + diff --git a/regression-tests/1dyndns-update-deep-delegate/expected_result.dnssec b/regression-tests/1dyndns-update-deep-delegate/expected_result.dnssec new file mode 100644 index 0000000000..a29481f7d5 --- /dev/null +++ b/regression-tests/1dyndns-update-deep-delegate/expected_result.dnssec @@ -0,0 +1,35 @@ +1 test.dyndns. IN SOA 3600 ns1.test.dyndns. ahu.example.dyndns. [serial] 28800 7200 604800 86400 +Rcode: 3, RD: 0, QR: 1, TC: 0, AA: 1, opcode: 0 +Reply to question for qname='delegate1.test.dyndns.', qtype=ANY +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 + +1 delegate.test.dyndns. IN NS 3600 ns1.delegate.test.dyndns. +2 ns1.delegate.test.dyndns. IN A 3600 127.0.0.1 +Rcode: 0, RD: 0, QR: 1, TC: 0, AA: 0, opcode: 0 +Reply to question for qname='delegate.test.dyndns.', qtype=ANY +Check delegates added +--- Start: diff start step.1 --- +> delegate.test.dyndns NS 0 ns1.delegate.test.dyndns 3600 'delegate' 0 +> ns1.delegate.test.dyndns A 0 127.0.0.1 3600 NULL 0 +> ns1.other.very.deep.delegate.test.dyndns A 0 127.0.0.1 3600 NULL 0 +> other.very.deep.delegate.test.dyndns NS 0 ns1.other.very.deep.delegate.test.dyndns 3600 'delegate deep very other' 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 + +1 test.dyndns. IN SOA 3600 ns1.test.dyndns. ahu.example.dyndns. 2013051902 28800 7200 604800 86400 +Rcode: 3, RD: 0, QR: 1, TC: 0, AA: 1, opcode: 0 +Reply to question for qname='delegate.test.dyndns.', qtype=ANY +Check delegates deleted +--- Start: diff start step.2 --- +no difference +--- End: diff start step.2 --- + diff --git a/regression-tests/1dyndns-update-deep-delegate/expected_result.narrow b/regression-tests/1dyndns-update-deep-delegate/expected_result.narrow new file mode 100644 index 0000000000..57e5d41dd9 --- /dev/null +++ b/regression-tests/1dyndns-update-deep-delegate/expected_result.narrow @@ -0,0 +1,35 @@ +1 test.dyndns. IN SOA 3600 ns1.test.dyndns. ahu.example.dyndns. [serial] 28800 7200 604800 86400 +Rcode: 3, RD: 0, QR: 1, TC: 0, AA: 1, opcode: 0 +Reply to question for qname='delegate1.test.dyndns.', qtype=ANY +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 + +1 delegate.test.dyndns. IN NS 3600 ns1.delegate.test.dyndns. +2 ns1.delegate.test.dyndns. IN A 3600 127.0.0.1 +Rcode: 0, RD: 0, QR: 1, TC: 0, AA: 0, opcode: 0 +Reply to question for qname='delegate.test.dyndns.', qtype=ANY +Check delegates added +--- Start: diff start step.1 --- +> delegate.test.dyndns NS 0 ns1.delegate.test.dyndns 3600 NULL 0 +> ns1.delegate.test.dyndns A 0 127.0.0.1 3600 NULL 0 +> ns1.other.very.deep.delegate.test.dyndns A 0 127.0.0.1 3600 NULL 0 +> other.very.deep.delegate.test.dyndns NS 0 ns1.other.very.deep.delegate.test.dyndns 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 + +1 test.dyndns. IN SOA 3600 ns1.test.dyndns. ahu.example.dyndns. 2013051902 28800 7200 604800 86400 +Rcode: 3, RD: 0, QR: 1, TC: 0, AA: 1, opcode: 0 +Reply to question for qname='delegate.test.dyndns.', qtype=ANY +Check delegates deleted +--- Start: diff start step.2 --- +no difference +--- End: diff start step.2 --- + diff --git a/regression-tests/1dyndns-update-deep-delegate/expected_result.nsec3 b/regression-tests/1dyndns-update-deep-delegate/expected_result.nsec3 new file mode 100644 index 0000000000..a42c96e2fe --- /dev/null +++ b/regression-tests/1dyndns-update-deep-delegate/expected_result.nsec3 @@ -0,0 +1,35 @@ +1 test.dyndns. IN SOA 3600 ns1.test.dyndns. ahu.example.dyndns. [serial] 28800 7200 604800 86400 +Rcode: 3, RD: 0, QR: 1, TC: 0, AA: 1, opcode: 0 +Reply to question for qname='delegate1.test.dyndns.', qtype=ANY +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 + +1 delegate.test.dyndns. IN NS 3600 ns1.delegate.test.dyndns. +2 ns1.delegate.test.dyndns. IN A 3600 127.0.0.1 +Rcode: 0, RD: 0, QR: 1, TC: 0, AA: 0, opcode: 0 +Reply to question for qname='delegate.test.dyndns.', qtype=ANY +Check delegates added +--- Start: diff start step.1 --- +> delegate.test.dyndns NS 0 ns1.delegate.test.dyndns 3600 'vg1uvfh5go60po37nof33f260sno3bnc' 0 +> ns1.delegate.test.dyndns A 0 127.0.0.1 3600 NULL 0 +> ns1.other.very.deep.delegate.test.dyndns A 0 127.0.0.1 3600 NULL 0 +> other.very.deep.delegate.test.dyndns NS 0 ns1.other.very.deep.delegate.test.dyndns 3600 'rq5u80q2c0mimv20s384e05v13h5oiss' 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 + +1 test.dyndns. IN SOA 3600 ns1.test.dyndns. ahu.example.dyndns. 2013051902 28800 7200 604800 86400 +Rcode: 3, RD: 0, QR: 1, TC: 0, AA: 1, opcode: 0 +Reply to question for qname='delegate.test.dyndns.', qtype=ANY +Check delegates deleted +--- Start: diff start step.2 --- +no difference +--- End: diff start step.2 --- + diff --git a/regression-tests/1dyndns-update-deep-delegate/skip.nodyndns b/regression-tests/1dyndns-update-deep-delegate/skip.nodyndns new file mode 100644 index 0000000000..81c071b810 --- /dev/null +++ b/regression-tests/1dyndns-update-deep-delegate/skip.nodyndns @@ -0,0 +1 @@ +Skip this test if the backend does not support dyndns/rfc2136