mirror of
https://github.com/isc-projects/bind9.git
synced 2026-03-15 15:12:56 -04:00
424 [bug] notify_createmessage could trigger a REQUIRE failure
w/ two SOA records for the zone (illegal). [RT #279]
This commit is contained in:
parent
1ed3e846a2
commit
05fff5d905
2 changed files with 25 additions and 17 deletions
2
CHANGES
2
CHANGES
|
|
@ -1,3 +1,5 @@
|
|||
424 [bug] notify_createmessage could trigger a REQUIRE failure
|
||||
w/ two SOA records for the zone (illegal). [RT #279]
|
||||
|
||||
423. [bug] When responding to a recusive query, errors that occur
|
||||
after following a CNAME should cause the query to fail.
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: zone.c,v 1.201 2000/09/05 03:35:19 marka Exp $ */
|
||||
/* $Id: zone.c,v 1.202 2000/09/07 01:06:45 marka Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
|
|
@ -3405,23 +3405,23 @@ notify_createmessage(dns_zone_t *zone, unsigned int flags,
|
|||
|
||||
result = dns_message_gettempname(message, &tempname);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
goto done;
|
||||
goto soa_cleanup;
|
||||
result = dns_message_gettemprdata(message, &temprdata);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
goto done;
|
||||
goto soa_cleanup;
|
||||
result = dns_message_gettemprdataset(message, &temprdataset);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
goto done;
|
||||
goto soa_cleanup;
|
||||
result = dns_message_gettemprdatalist(message, &temprdatalist);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
goto done;
|
||||
goto soa_cleanup;
|
||||
|
||||
dns_name_init(tempname, NULL);
|
||||
dns_name_clone(&zone->origin, tempname);
|
||||
dns_db_currentversion(zone->db, &version);
|
||||
result = dns_db_findnode(zone->db, tempname, ISC_FALSE, &node);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
goto done;
|
||||
goto soa_cleanup;
|
||||
|
||||
dns_rdataset_init(&rdataset);
|
||||
result = dns_db_findrdataset(zone->db, node, version,
|
||||
|
|
@ -3429,16 +3429,16 @@ notify_createmessage(dns_zone_t *zone, unsigned int flags,
|
|||
dns_rdatatype_none, 0, &rdataset,
|
||||
NULL);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
goto done;
|
||||
goto soa_cleanup;
|
||||
result = dns_rdataset_first(&rdataset);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
goto done;
|
||||
goto soa_cleanup;
|
||||
dns_rdata_init(&rdata);
|
||||
dns_rdataset_current(&rdataset, &rdata);
|
||||
dns_rdata_toregion(&rdata, &r);
|
||||
result = isc_buffer_allocate(zone->mctx, &b, r.length);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
goto done;
|
||||
goto soa_cleanup;
|
||||
isc_buffer_putmem(b, r.base, r.length);
|
||||
isc_buffer_usedregion(b, &r);
|
||||
dns_rdata_init(temprdata);
|
||||
|
|
@ -3447,7 +3447,7 @@ notify_createmessage(dns_zone_t *zone, unsigned int flags,
|
|||
result = dns_rdataset_next(&rdataset);
|
||||
dns_rdataset_disassociate(&rdataset);
|
||||
if (result != ISC_R_NOMORE)
|
||||
goto done;
|
||||
goto soa_cleanup;
|
||||
temprdatalist->rdclass = rdata.rdclass;
|
||||
temprdatalist->type = rdata.type;
|
||||
temprdatalist->covers = 0;
|
||||
|
|
@ -3458,7 +3458,7 @@ notify_createmessage(dns_zone_t *zone, unsigned int flags,
|
|||
dns_rdataset_init(temprdataset);
|
||||
result = dns_rdatalist_tordataset(temprdatalist, temprdataset);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
goto done;
|
||||
goto soa_cleanup;
|
||||
|
||||
ISC_LIST_APPEND(tempname->list, temprdataset, link);
|
||||
dns_message_addname(message, tempname, DNS_SECTION_ANSWER);
|
||||
|
|
@ -3467,12 +3467,7 @@ notify_createmessage(dns_zone_t *zone, unsigned int flags,
|
|||
temprdata = NULL;
|
||||
tempname = NULL;
|
||||
|
||||
done:
|
||||
*messagep = message;
|
||||
message = NULL;
|
||||
result = ISC_R_SUCCESS;
|
||||
|
||||
cleanup:
|
||||
soa_cleanup:
|
||||
if (node != NULL)
|
||||
dns_db_detachnode(zone->db, &node);
|
||||
if (version != NULL)
|
||||
|
|
@ -3485,6 +3480,17 @@ notify_createmessage(dns_zone_t *zone, unsigned int flags,
|
|||
dns_message_puttemprdataset(message, &temprdataset);
|
||||
if (temprdatalist != NULL)
|
||||
dns_message_puttemprdatalist(message, &temprdatalist);
|
||||
|
||||
done:
|
||||
*messagep = message;
|
||||
message = NULL;
|
||||
result = ISC_R_SUCCESS;
|
||||
|
||||
cleanup:
|
||||
if (tempname != NULL)
|
||||
dns_message_puttempname(message, &tempname);
|
||||
if (temprdataset != NULL)
|
||||
dns_message_puttemprdataset(message, &temprdataset);
|
||||
if (message != NULL)
|
||||
dns_message_destroy(&message);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue