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;
insnonterm.insert(shorter);
else
break; // if we find a shorter record, we can stop searching
- }
+ } while(chopOff(shorter));
}
if(*haveNSEC3)
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");
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");
+ }
}
}
--- /dev/null
+#!/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
--- /dev/null
+This test performs a simple add and delete of an A-record using RFC2136.
--- /dev/null
+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 ---
+
--- /dev/null
+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 ---
+
--- /dev/null
+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 ---
+
--- /dev/null
+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 ---
+
--- /dev/null
+Skip this test if the backend does not support dyndns/rfc2136