mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-09-01 06:55:30 +00:00
RFC 5011 client can crash. [RT #20903]
This commit is contained in:
2
CHANGES
2
CHANGES
@@ -1,3 +1,5 @@
|
|||||||
|
2845. [bug] RFC 5011 client can crash. [RT #20903]
|
||||||
|
|
||||||
2844. [doc] notify-delay default in ARM was wrong. It should have
|
2844. [doc] notify-delay default in ARM was wrong. It should have
|
||||||
been five (5) seconds.
|
been five (5) seconds.
|
||||||
|
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
* PERFORMANCE OF THIS SOFTWARE.
|
* PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: zone.c,v 1.556 2010/01/22 01:46:20 each Exp $ */
|
/* $Id: zone.c,v 1.557 2010/01/26 23:33:10 fdupont Exp $ */
|
||||||
|
|
||||||
/*! \file */
|
/*! \file */
|
||||||
|
|
||||||
@@ -7179,6 +7179,7 @@ keyfetch_done(isc_task_t *task, isc_event_t *event) {
|
|||||||
dns_fetchevent_t *devent;
|
dns_fetchevent_t *devent;
|
||||||
dns_keyfetch_t *kfetch;
|
dns_keyfetch_t *kfetch;
|
||||||
dns_zone_t *zone;
|
dns_zone_t *zone;
|
||||||
|
isc_mem_t *mctx;
|
||||||
dns_keytable_t *secroots = NULL;
|
dns_keytable_t *secroots = NULL;
|
||||||
dns_dbversion_t *ver = NULL;
|
dns_dbversion_t *ver = NULL;
|
||||||
dns_diff_t diff;
|
dns_diff_t diff;
|
||||||
@@ -7205,6 +7206,7 @@ keyfetch_done(isc_task_t *task, isc_event_t *event) {
|
|||||||
|
|
||||||
kfetch = event->ev_arg;
|
kfetch = event->ev_arg;
|
||||||
zone = kfetch->zone;
|
zone = kfetch->zone;
|
||||||
|
mctx = zone->mctx;
|
||||||
keyname = dns_fixedname_name(&kfetch->name);
|
keyname = dns_fixedname_name(&kfetch->name);
|
||||||
|
|
||||||
devent = (dns_fetchevent_t *) event;
|
devent = (dns_fetchevent_t *) event;
|
||||||
@@ -7226,7 +7228,7 @@ keyfetch_done(isc_task_t *task, isc_event_t *event) {
|
|||||||
|
|
||||||
LOCK_ZONE(zone);
|
LOCK_ZONE(zone);
|
||||||
dns_db_newversion(kfetch->db, &ver);
|
dns_db_newversion(kfetch->db, &ver);
|
||||||
dns_diff_init(zone->mctx, &diff);
|
dns_diff_init(mctx, &diff);
|
||||||
|
|
||||||
/* Fetch failed */
|
/* Fetch failed */
|
||||||
if (eresult != ISC_R_SUCCESS ||
|
if (eresult != ISC_R_SUCCESS ||
|
||||||
@@ -7459,8 +7461,7 @@ keyfetch_done(isc_task_t *task, isc_event_t *event) {
|
|||||||
|
|
||||||
/* Remove from secroots */
|
/* Remove from secroots */
|
||||||
untrust_key(zone->view->viewlist,
|
untrust_key(zone->view->viewlist,
|
||||||
keyname, zone->mctx,
|
keyname, mctx, &dnskey);
|
||||||
&dnskey);
|
|
||||||
|
|
||||||
/* If initializing, delete now */
|
/* If initializing, delete now */
|
||||||
if (keydata.addhd == 0)
|
if (keydata.addhd == 0)
|
||||||
@@ -7506,7 +7507,7 @@ keyfetch_done(isc_task_t *task, isc_event_t *event) {
|
|||||||
if (initializing) {
|
if (initializing) {
|
||||||
dns_keytag_t tag = 0;
|
dns_keytag_t tag = 0;
|
||||||
CHECK(compute_tag(keyname, &dnskey,
|
CHECK(compute_tag(keyname, &dnskey,
|
||||||
zone->mctx, &tag));
|
mctx, &tag));
|
||||||
dns_zone_log(zone, ISC_LOG_WARNING,
|
dns_zone_log(zone, ISC_LOG_WARNING,
|
||||||
"Initializing automatic trust "
|
"Initializing automatic trust "
|
||||||
"anchor management for zone '%s'; "
|
"anchor management for zone '%s'; "
|
||||||
@@ -7564,7 +7565,7 @@ keyfetch_done(isc_task_t *task, isc_event_t *event) {
|
|||||||
/* Trust this key in all views */
|
/* Trust this key in all views */
|
||||||
dns_rdata_tostruct(&dnskeyrr, &dnskey, NULL);
|
dns_rdata_tostruct(&dnskeyrr, &dnskey, NULL);
|
||||||
trust_key(zone->view->viewlist, keyname, &dnskey,
|
trust_key(zone->view->viewlist, keyname, &dnskey,
|
||||||
zone->mctx);
|
mctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!deletekey)
|
if (!deletekey)
|
||||||
@@ -7599,8 +7600,7 @@ keyfetch_done(isc_task_t *task, isc_event_t *event) {
|
|||||||
|
|
||||||
/* Write changes to journal file. */
|
/* Write changes to journal file. */
|
||||||
if (alldone) {
|
if (alldone) {
|
||||||
result = increment_soa_serial(kfetch->db, ver, &diff,
|
result = increment_soa_serial(kfetch->db, ver, &diff, mctx);
|
||||||
zone->mctx);
|
|
||||||
if (result == ISC_R_SUCCESS)
|
if (result == ISC_R_SUCCESS)
|
||||||
zone_journal(zone, &diff, "keyfetch_done");
|
zone_journal(zone, &diff, "keyfetch_done");
|
||||||
}
|
}
|
||||||
@@ -7608,6 +7608,7 @@ keyfetch_done(isc_task_t *task, isc_event_t *event) {
|
|||||||
dns_diff_clear(&diff);
|
dns_diff_clear(&diff);
|
||||||
dns_db_closeversion(kfetch->db, &ver, changed);
|
dns_db_closeversion(kfetch->db, &ver, changed);
|
||||||
dns_db_detach(&kfetch->db);
|
dns_db_detach(&kfetch->db);
|
||||||
|
dns_zone_detach(&kfetch->zone);
|
||||||
|
|
||||||
if (dns_rdataset_isassociated(&kfetch->keydataset))
|
if (dns_rdataset_isassociated(&kfetch->keydataset))
|
||||||
dns_rdataset_disassociate(&kfetch->keydataset);
|
dns_rdataset_disassociate(&kfetch->keydataset);
|
||||||
@@ -7616,8 +7617,8 @@ keyfetch_done(isc_task_t *task, isc_event_t *event) {
|
|||||||
if (dns_rdataset_isassociated(&kfetch->dnskeysigset))
|
if (dns_rdataset_isassociated(&kfetch->dnskeysigset))
|
||||||
dns_rdataset_disassociate(&kfetch->dnskeysigset);
|
dns_rdataset_disassociate(&kfetch->dnskeysigset);
|
||||||
|
|
||||||
dns_name_free(keyname, zone->mctx);
|
dns_name_free(keyname, mctx);
|
||||||
isc_mem_put(zone->mctx, kfetch, sizeof(dns_keyfetch_t));
|
isc_mem_put(mctx, kfetch, sizeof(dns_keyfetch_t));
|
||||||
|
|
||||||
if (secroots != NULL)
|
if (secroots != NULL)
|
||||||
dns_keytable_detach(&secroots);
|
dns_keytable_detach(&secroots);
|
||||||
@@ -7706,7 +7707,8 @@ zone_refreshkeys(dns_zone_t *zone) {
|
|||||||
zone->refreshkeycount++;
|
zone->refreshkeycount++;
|
||||||
|
|
||||||
kfetch = isc_mem_get(zone->mctx, sizeof(dns_keyfetch_t));
|
kfetch = isc_mem_get(zone->mctx, sizeof(dns_keyfetch_t));
|
||||||
kfetch->zone = zone;
|
kfetch->zone = NULL;
|
||||||
|
dns_zone_attach(zone, &kfetch->zone);
|
||||||
dns_fixedname_init(&kfetch->name);
|
dns_fixedname_init(&kfetch->name);
|
||||||
dns_name_dup(name, zone->mctx,
|
dns_name_dup(name, zone->mctx,
|
||||||
dns_fixedname_name(&kfetch->name));
|
dns_fixedname_name(&kfetch->name));
|
||||||
|
Reference in New Issue
Block a user