]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Add add-delete-ds test and minor fix
authorRuben d'Arco <cyclops@prof-x.net>
Mon, 20 May 2013 21:46:59 +0000 (23:46 +0200)
committermind04 <mind04@monshouwer.org>
Fri, 12 Jul 2013 15:29:37 +0000 (17:29 +0200)
pdns/rfc2136handler.cc
regression-tests/1dyndns-update-add-delete-ds/command [new file with mode: 0755]
regression-tests/1dyndns-update-add-delete-ds/description [new file with mode: 0644]
regression-tests/1dyndns-update-add-delete-ds/expected_result [new file with mode: 0644]
regression-tests/1dyndns-update-add-delete-ds/expected_result.dnssec [new file with mode: 0644]
regression-tests/1dyndns-update-add-delete-ds/expected_result.narrow [new file with mode: 0644]
regression-tests/1dyndns-update-add-delete-ds/expected_result.nsec3 [new file with mode: 0644]
regression-tests/1dyndns-update-add-delete-ds/skip.nodyndns [new file with mode: 0644]

index ad228df8a989fd353e1bf186225c5a58b60852d1..0ce727d343ca58f536e9a9c321c9ea75c86f716b 100644 (file)
@@ -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 (executable)
index 0000000..5641a2d
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+mysqldiff
+
+# add a delegate + ds
+cleannsupdate <<!
+server $nameserver $port
+zone test.dyndns
+update add ns1.del.test.dyndns. 3600 A 127.0.0.1
+update add del.test.dyndns. 3600 NS ns1.del.test.dyndns
+update add del.test.dyndns. 3600 DS 39274 8 2 8E8A8CFB40FD0C30BFA82E53752E1C257DAFB7B6206D12B9EDA43AF3 EAB2157D
+send
+answer
+!
+
+# check if the record was added
+mysqldiff 1 "Check delegate and DS added correctly"
+
+# delete the just added record
+cleannsupdate <<!
+server $nameserver $port
+zone test.dyndns
+update delete ns1.del.test.dyndns. A
+update delete del.test.dyndns. NS
+update delete del.test.dyndns. DS
+send
+answer
+!
+
+# check if the record was deleted
+mysqldiff 2 "Check if record is gone"
\ No newline at end of file
diff --git a/regression-tests/1dyndns-update-add-delete-ds/description b/regression-tests/1dyndns-update-add-delete-ds/description
new file mode 100644 (file)
index 0000000..bfc22f8
--- /dev/null
@@ -0,0 +1 @@
+This test performs a simple add and delete of an A-record using RFC2136.
diff --git a/regression-tests/1dyndns-update-add-delete-ds/expected_result b/regression-tests/1dyndns-update-add-delete-ds/expected_result
new file mode 100644 (file)
index 0000000..1c19eaf
--- /dev/null
@@ -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.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 (file)
index 0000000..30a2b13
--- /dev/null
@@ -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 (file)
index 0000000..22a64c0
--- /dev/null
@@ -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 (file)
index 0000000..6c68ba9
--- /dev/null
@@ -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 (file)
index 0000000..81c071b
--- /dev/null
@@ -0,0 +1 @@
+Skip this test if the backend does not support dyndns/rfc2136