]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Fix crash when deleting deep delegate with others
authorRuben d'Arco <cyclops@prof-x.net>
Sun, 19 May 2013 14:04:36 +0000 (16:04 +0200)
committermind04 <mind04@monshouwer.org>
Fri, 12 Jul 2013 15:29:37 +0000 (17:29 +0200)
pdns/rfc2136handler.cc
regression-tests/1dyndns-update-deep-delegate/command [new file with mode: 0755]
regression-tests/1dyndns-update-deep-delegate/description [new file with mode: 0644]
regression-tests/1dyndns-update-deep-delegate/expected_result [new file with mode: 0644]
regression-tests/1dyndns-update-deep-delegate/expected_result.dnssec [new file with mode: 0644]
regression-tests/1dyndns-update-deep-delegate/expected_result.narrow [new file with mode: 0644]
regression-tests/1dyndns-update-deep-delegate/expected_result.nsec3 [new file with mode: 0644]
regression-tests/1dyndns-update-deep-delegate/skip.nodyndns [new file with mode: 0644]

index 2ae5e4fcb496d702fe32fc85c41dcd3f0410dead..ad228df8a989fd353e1bf186225c5a58b60852d1 100644 (file)
@@ -411,7 +411,7 @@ uint16_t PacketHandler::performUpdate(const string &msgPrefix, const DNSRecord *
         for(vector<string>::const_iterator belowOldDel=belowOldDelegate.begin(); belowOldDel!= belowOldDelegate.end(); belowOldDel++)
         {
           bool isBelowDelegate = false;
-          for(vector<string>::const_iterator ns=nsRecs.begin(); ns!= nsRecs.end(); belowOldDel++) {
+          for(vector<string>::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 (executable)
index 0000000..4781008
--- /dev/null
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+cleandig delegate1.test.dyndns ANY hidesoadetails
+mysqldiff
+
+cleannsupdate <<!
+server $nameserver $port
+zone test.dyndns
+update add delegate.test.dyndns 3600 NS ns1.delegate.test.dyndns
+update add ns1.delegate.test.dyndns 3600 A 127.0.0.1
+update add other.very.deep.delegate.test.dyndns 3600 NS ns1.other.very.deep.delegate.test.dyndns
+update add ns1.other.very.deep.delegate.test.dyndns 3600 A 127.0.0.1
+send
+answer
+!
+
+cleandig delegate.test.dyndns ANY
+cleandig other.very.deep.delegate.test.dyndns
+mysqldiff 1 "Check delegates added"
+
+cleannsupdate <<!
+server $nameserver $port
+zone test.dyndns
+update delete delegate.test.dyndns NS
+update delete ns1.delegate.test.dyndns A
+update delete other.very.deep.delegate.test.dyndns NS
+update delete ns1.other.very.deep.delegate.test.dyndns A
+send
+answer
+!
+
+cleandig delegate.test.dyndns ANY
+cleandig other.very.deep.delegate.test.dyndns
+mysqldiff 2 "Check delegates deleted"
\ No newline at end of file
diff --git a/regression-tests/1dyndns-update-deep-delegate/description b/regression-tests/1dyndns-update-deep-delegate/description
new file mode 100644 (file)
index 0000000..9978768
--- /dev/null
@@ -0,0 +1 @@
+This test adds a delegate and a delegate at a deeper level. It validates that ordername and auth are set correctly and no ENT's are inserted.
\ No newline at end of file
diff --git a/regression-tests/1dyndns-update-deep-delegate/expected_result b/regression-tests/1dyndns-update-deep-delegate/expected_result
new file mode 100644 (file)
index 0000000..c2abcc3
--- /dev/null
@@ -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
+> 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 (file)
index 0000000..a29481f
--- /dev/null
@@ -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 (file)
index 0000000..57e5d41
--- /dev/null
@@ -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 (file)
index 0000000..a42c96e
--- /dev/null
@@ -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 (file)
index 0000000..81c071b
--- /dev/null
@@ -0,0 +1 @@
+Skip this test if the backend does not support dyndns/rfc2136