From: Shawn Routhier Date: Tue, 9 Oct 2012 20:28:14 +0000 (-0700) Subject: [master] X-Git-Tag: v4_3_0a1~66 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=74977c9456ba633f4f6a7e7533e5548b06c8a876;p=thirdparty%2Fdhcp.git [master] Relax the requirements for deleting an A or AAAA record. Previously the DDNS removal code required both the A or AAAA record and the TXT record to exist. This requirement could cause problems if something interrupted the removal leaving the TXT record alone. This relaxation was codified in RFC 4703. [ISC-Bugs #30734] --- diff --git a/RELNOTES b/RELNOTES index 400b6dca8..7d70f1163 100644 --- a/RELNOTES +++ b/RELNOTES @@ -120,6 +120,13 @@ work on other platforms. Please report any problems and suggested fixes to - Update the memory leakage debug code to work with v6. [ISC-Bugs #30297] +- Relax the requirements for deleting an A or AAAA record. + Previously the DDNS removal code required both the A or AAAA + record and the TXT record to exist. This requirement could + cause problems if something interrupted the removal leaving + the TXT record alone. This relaxation was codified in RFC 4703. + [ISC-Bugs #30734] + Changes since 4.2.3 ! Add a check for a null pointer before calling the regexec function. diff --git a/common/dns.c b/common/dns.c index 53e85a4f2..cd73eeb11 100644 --- a/common/dns.c +++ b/common/dns.c @@ -1186,9 +1186,12 @@ ddns_modify_fwd_add2(dhcp_ddns_cb_t *ddns_cb, * expired or been released. * -- "Interaction between DHCP and DNS" * + * RFC 4703 has relaxed the prereqisites to only checking the DHCID RR + * and we have adopted that to minizmie problems due to interruptions + * when doing a deletion. + * * First try has: * DHCID RR exists, and matches client identity. - * A RR matches the expiring lease. * Delete appropriate A RR. */ @@ -1212,17 +1215,6 @@ ddns_modify_fwd_rem1(dhcp_ddns_cb_t *ddns_cb, ISC_LIST_APPEND(pname->list, &dataspace->rdataset, link); dataspace++; - /* The A RR matches the expiring lease */ - result = make_dns_dataset(dns_rdataclass_in, ddns_cb->address_type, - dataspace, - (unsigned char *)ddns_cb->address.iabuf, - ddns_cb->address.len, 0); - if (result != ISC_R_SUCCESS) { - return(result); - } - ISC_LIST_APPEND(pname->list, &dataspace->rdataset, link); - dataspace++; - /* Construct the update list */ /* Delete A RRset */ result = make_dns_dataset(dns_rdataclass_none, ddns_cb->address_type,