mirror of
https://github.com/isc-projects/bind9.git
synced 2026-03-17 08:03:44 -04:00
Merge branch 'master' of ssh://repo.isc.org/proj/git/prod/bind9
This commit is contained in:
commit
0d350daefc
12 changed files with 81 additions and 29 deletions
3
CHANGES
3
CHANGES
|
|
@ -1,3 +1,6 @@
|
|||
3429. [bug] dns_zone_getserial2 could a return success without
|
||||
returning a valid serial. [RT #32007]
|
||||
|
||||
3428. [cleanup] dig: Add timezone to date output. [RT #2269]
|
||||
|
||||
3427. [bug] dig +trace incorrectly displayed name server
|
||||
|
|
|
|||
|
|
@ -259,7 +259,7 @@ received(int bytes, isc_sockaddr_t *from, dig_query_t *query) {
|
|||
time(&tnow);
|
||||
tmnow = *localtime(&tnow);
|
||||
if (strftime(time_str, sizeof(time_str),
|
||||
"%a %b %d %T %Z %Y", &tmnow) > 0)
|
||||
"%a %b %d %T %Z %Y", &tmnow) > 0U)
|
||||
printf(";; WHEN: %s\n", time_str);
|
||||
if (query->lookup->doing_xfr) {
|
||||
printf(";; XFR size: %u records (messages %u, "
|
||||
|
|
|
|||
|
|
@ -2594,10 +2594,10 @@ ns_clientmgr_create(isc_mem_t *mctx, isc_taskmgr_t *taskmgr,
|
|||
return (ISC_R_SUCCESS);
|
||||
|
||||
cleanup_listlock:
|
||||
isc_mutex_destroy(&manager->listlock);
|
||||
(void) isc_mutex_destroy(&manager->listlock);
|
||||
|
||||
cleanup_lock:
|
||||
isc_mutex_destroy(&manager->lock);
|
||||
(void) isc_mutex_destroy(&manager->lock);
|
||||
|
||||
cleanup_manager:
|
||||
isc_mem_put(manager->mctx, manager, sizeof(*manager));
|
||||
|
|
|
|||
|
|
@ -4243,6 +4243,8 @@ rpz_find(ns_client_t *client, dns_rdatatype_t qtype, dns_name_t *qnamef,
|
|||
dns_clientinfomethods_t cm;
|
||||
dns_clientinfo_t ci;
|
||||
|
||||
REQUIRE(nodep != NULL);
|
||||
|
||||
dns_clientinfomethods_init(&cm, ns_client_sourceip);
|
||||
dns_clientinfo_init(&ci, client);
|
||||
|
||||
|
|
|
|||
2
configure
vendored
2
configure
vendored
|
|
@ -18992,7 +18992,7 @@ case "$docbook_path" in
|
|||
auto)
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: auto" >&5
|
||||
$as_echo "auto" >&6; }
|
||||
docbook_xsl_trees="/usr/pkg/share/xsl/docbook /usr/local/share/xsl/docbook /usr/share/xsl/docbook /opt/local/share/xsl/docbook-xsl/"
|
||||
docbook_xsl_trees="/usr/pkg/share/xsl/docbook /usr/local/share/xsl/docbook /usr/share/xsl/docbook /opt/local/share/xsl/docbook-xsl"
|
||||
;;
|
||||
*)
|
||||
docbook_xsl_trees="$withval"
|
||||
|
|
|
|||
|
|
@ -3086,7 +3086,7 @@ AC_ARG_WITH(docbook-xsl,
|
|||
case "$docbook_path" in
|
||||
auto)
|
||||
AC_MSG_RESULT(auto)
|
||||
docbook_xsl_trees="/usr/pkg/share/xsl/docbook /usr/local/share/xsl/docbook /usr/share/xsl/docbook /opt/local/share/xsl/docbook-xsl/"
|
||||
docbook_xsl_trees="/usr/pkg/share/xsl/docbook /usr/local/share/xsl/docbook /usr/share/xsl/docbook /opt/local/share/xsl/docbook-xsl"
|
||||
;;
|
||||
*)
|
||||
docbook_xsl_trees="$withval"
|
||||
|
|
|
|||
|
|
@ -739,7 +739,7 @@ destroy_disp(isc_task_t *task, isc_event_t *event) {
|
|||
|
||||
if (disp->sepool != NULL) {
|
||||
isc_mempool_destroy(&disp->sepool);
|
||||
isc_mutex_destroy(&disp->sepool_lock);
|
||||
(void)isc_mutex_destroy(&disp->sepool_lock);
|
||||
}
|
||||
|
||||
if (disp->socket != NULL)
|
||||
|
|
|
|||
|
|
@ -2065,6 +2065,8 @@ rehash(dns_rbt_t *rbt) {
|
|||
return;
|
||||
}
|
||||
|
||||
INSIST(rbt->hashsize > 0);
|
||||
|
||||
for (i = 0; i < rbt->hashsize; i++)
|
||||
rbt->hashtable[i] = NULL;
|
||||
|
||||
|
|
@ -2475,6 +2477,7 @@ deletefromlevel(dns_rbtnode_t *delete, dns_rbtnode_t **rootp) {
|
|||
|
||||
COLOR(sibling) = COLOR(parent);
|
||||
MAKE_BLACK(parent);
|
||||
INSIST(RIGHT(sibling) != NULL);
|
||||
MAKE_BLACK(RIGHT(sibling));
|
||||
rotate_left(parent, rootp);
|
||||
child = *rootp;
|
||||
|
|
@ -2512,6 +2515,7 @@ deletefromlevel(dns_rbtnode_t *delete, dns_rbtnode_t **rootp) {
|
|||
|
||||
COLOR(sibling) = COLOR(parent);
|
||||
MAKE_BLACK(parent);
|
||||
INSIST(LEFT(sibling) != NULL);
|
||||
MAKE_BLACK(LEFT(sibling));
|
||||
rotate_right(parent, rootp);
|
||||
child = *rootp;
|
||||
|
|
|
|||
|
|
@ -6345,6 +6345,7 @@ add(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode, rbtdb_version_t *rbtversion,
|
|||
* will do it on the LRU side, so memory
|
||||
* will not leak... for long.
|
||||
*/
|
||||
INSIST(rbtdb->heaps != NULL);
|
||||
isc_heap_insert(rbtdb->heaps[idx], newheader);
|
||||
} else if (RESIGN(newheader))
|
||||
resign_insert(rbtdb, idx, newheader);
|
||||
|
|
|
|||
|
|
@ -974,6 +974,11 @@ dns_tsig_sign(dns_message_t *msg) {
|
|||
if (ret != ISC_R_SUCCESS)
|
||||
goto cleanup_context;
|
||||
}
|
||||
#if defined(__clang__) && \
|
||||
( __clang_major__ < 4 || (__clang_major__ == 4 && __clang_minor__ < 2))
|
||||
/* false positive: http://llvm.org/bugs/show_bug.cgi?id=14461 */
|
||||
else memset(&querytsig, 0, sizeof(querytsig));
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Digest the header.
|
||||
|
|
@ -1229,6 +1234,11 @@ dns_tsig_verify(isc_buffer_t *source, dns_message_t *msg,
|
|||
if (ret != ISC_R_SUCCESS)
|
||||
return (ret);
|
||||
}
|
||||
#if defined(__clang__) && \
|
||||
( __clang_major__ < 4 || (__clang_major__ == 4 && __clang_minor__ < 2))
|
||||
/* false positive: http://llvm.org/bugs/show_bug.cgi?id=14461 */
|
||||
else memset(&querytsig, 0, sizeof(querytsig));
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Do the key name and algorithm match that of the query?
|
||||
|
|
|
|||
|
|
@ -1155,6 +1155,7 @@ dns_zone_setnotifytype(dns_zone_t *zone, dns_notifytype_t notifytype) {
|
|||
isc_result_t
|
||||
dns_zone_getserial2(dns_zone_t *zone, isc_uint32_t *serialp) {
|
||||
isc_result_t result;
|
||||
unsigned int soacount;
|
||||
|
||||
REQUIRE(DNS_ZONE_VALID(zone));
|
||||
REQUIRE(serialp != NULL);
|
||||
|
|
@ -1162,8 +1163,11 @@ dns_zone_getserial2(dns_zone_t *zone, isc_uint32_t *serialp) {
|
|||
LOCK_ZONE(zone);
|
||||
ZONEDB_LOCK(&zone->dblock, isc_rwlocktype_read);
|
||||
if (zone->db != NULL) {
|
||||
result = zone_get_from_db(zone, zone->db, NULL, NULL, serialp,
|
||||
NULL, NULL, NULL, NULL, NULL);
|
||||
result = zone_get_from_db(zone, zone->db, NULL, &soacount,
|
||||
serialp, NULL, NULL, NULL, NULL,
|
||||
NULL);
|
||||
if (result == ISC_R_SUCCESS && soacount == 0)
|
||||
result = ISC_R_FAILURE;
|
||||
} else
|
||||
result = DNS_R_NOTLOADED;
|
||||
ZONEDB_UNLOCK(&zone->dblock, isc_rwlocktype_read);
|
||||
|
|
@ -1915,14 +1919,15 @@ zone_gotreadhandle(isc_task_t *task, isc_event_t *event) {
|
|||
static void
|
||||
get_raw_serial(dns_zone_t *raw, dns_masterrawheader_t *rawdata) {
|
||||
isc_result_t result;
|
||||
unsigned int soacount;
|
||||
|
||||
LOCK(&raw->lock);
|
||||
if (raw->db != NULL) {
|
||||
result = zone_get_from_db(raw, raw->db, NULL, NULL,
|
||||
result = zone_get_from_db(raw, raw->db, NULL, &soacount,
|
||||
&rawdata->sourceserial,
|
||||
NULL, NULL, NULL, NULL,
|
||||
NULL);
|
||||
if (result == ISC_R_SUCCESS)
|
||||
if (result == ISC_R_SUCCESS && soacount > 0U)
|
||||
rawdata->flags |= DNS_MASTERRAW_SOURCESERIALSET;
|
||||
}
|
||||
UNLOCK(&raw->lock);
|
||||
|
|
@ -3669,10 +3674,12 @@ maybe_send_secure(dns_zone_t *zone) {
|
|||
if (zone->raw->db != NULL) {
|
||||
if (zone->db != NULL) {
|
||||
isc_uint32_t serial;
|
||||
unsigned int soacount;
|
||||
|
||||
result = zone_get_from_db(zone->raw, zone->raw->db,
|
||||
NULL, NULL, &serial, NULL,
|
||||
NULL, &soacount, &serial, NULL,
|
||||
NULL, NULL, NULL, NULL);
|
||||
if (result == ISC_R_SUCCESS)
|
||||
if (result == ISC_R_SUCCESS && soacount > 0U)
|
||||
zone_send_secureserial(zone->raw, ISC_TRUE, serial);
|
||||
} else
|
||||
zone_send_securedb(zone->raw, ISC_TRUE, zone->raw->db);
|
||||
|
|
@ -3914,14 +3921,18 @@ zone_postload(dns_zone_t *zone, dns_db_t *db, isc_time_t loadtime,
|
|||
}
|
||||
|
||||
if (zone->db != NULL) {
|
||||
unsigned int oldsoacount;
|
||||
|
||||
/*
|
||||
* This is checked in zone_replacedb() for slave zones
|
||||
* as they don't reload from disk.
|
||||
*/
|
||||
result = zone_get_from_db(zone, zone->db, NULL, NULL,
|
||||
&oldserial, NULL, NULL, NULL,
|
||||
NULL, NULL);
|
||||
result = zone_get_from_db(zone, zone->db, NULL,
|
||||
&oldsoacount, &oldserial,
|
||||
NULL, NULL, NULL, NULL,
|
||||
NULL);
|
||||
RUNTIME_CHECK(result == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(soacount > 0U);
|
||||
if (DNS_ZONE_OPTION(zone, DNS_ZONEOPT_IXFRFROMDIFFS) &&
|
||||
!isc_serial_gt(serial, oldserial)) {
|
||||
isc_uint32_t serialmin, serialmax;
|
||||
|
|
@ -4364,6 +4375,19 @@ zone_load_soa_rr(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
|
|||
*expire = soa.expire;
|
||||
if (minimum != NULL)
|
||||
*minimum = soa.minimum;
|
||||
} else {
|
||||
if (soacount != NULL)
|
||||
*soacount = 0;
|
||||
if (serial != NULL)
|
||||
*serial = 0;
|
||||
if (refresh != NULL)
|
||||
*refresh = 0;
|
||||
if (retry != NULL)
|
||||
*retry = 0;
|
||||
if (expire != NULL)
|
||||
*expire = 0;
|
||||
if (minimum != NULL)
|
||||
*minimum = 0;
|
||||
}
|
||||
|
||||
result = ISC_R_SUCCESS;
|
||||
|
|
@ -8727,16 +8751,18 @@ dns_zone_markdirty(dns_zone_t *zone) {
|
|||
LOCK_ZONE(zone);
|
||||
if (zone->type == dns_zone_master) {
|
||||
if (inline_raw(zone)) {
|
||||
unsigned int soacount;
|
||||
|
||||
ZONEDB_LOCK(&zone->dblock, isc_rwlocktype_read);
|
||||
if (zone->db != NULL) {
|
||||
result = zone_get_from_db(zone, zone->db, NULL,
|
||||
NULL, &serial, NULL,
|
||||
&soacount, &serial,
|
||||
NULL, NULL, NULL,
|
||||
NULL);
|
||||
NULL, NULL);
|
||||
} else
|
||||
result = DNS_R_NOTLOADED;
|
||||
ZONEDB_UNLOCK(&zone->dblock, isc_rwlocktype_read);
|
||||
if (result == ISC_R_SUCCESS)
|
||||
if (result == ISC_R_SUCCESS && soacount > 0U)
|
||||
zone_send_secureserial(zone, ISC_FALSE, serial);
|
||||
}
|
||||
|
||||
|
|
@ -9950,7 +9976,7 @@ stub_callback(isc_task_t *task, isc_event_t *event) {
|
|||
isc_time_t now;
|
||||
isc_boolean_t exiting = ISC_FALSE;
|
||||
isc_interval_t i;
|
||||
unsigned int j;
|
||||
unsigned int j, soacount;
|
||||
|
||||
stub = revent->ev_arg;
|
||||
INSIST(DNS_STUB_VALID(stub));
|
||||
|
|
@ -10093,9 +10119,9 @@ stub_callback(isc_task_t *task, isc_event_t *event) {
|
|||
ZONEDB_LOCK(&zone->dblock, isc_rwlocktype_write);
|
||||
if (zone->db == NULL)
|
||||
zone_attachdb(zone, stub->db);
|
||||
result = zone_get_from_db(zone, zone->db, NULL, NULL, NULL, &refresh,
|
||||
&retry, &expire, NULL, NULL);
|
||||
if (result == ISC_R_SUCCESS) {
|
||||
result = zone_get_from_db(zone, zone->db, NULL, &soacount, NULL,
|
||||
&refresh, &retry, &expire, NULL, NULL);
|
||||
if (result == ISC_R_SUCCESS && soacount > 0U) {
|
||||
zone->refresh = RANGE(refresh, zone->minrefresh,
|
||||
zone->maxrefresh);
|
||||
zone->retry = RANGE(retry, zone->minretry, zone->maxretry);
|
||||
|
|
@ -10434,10 +10460,12 @@ refresh_callback(isc_task_t *task, isc_event_t *event) {
|
|||
|
||||
serial = soa.serial;
|
||||
if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_LOADED)) {
|
||||
result = zone_get_from_db(zone, zone->db, NULL, NULL,
|
||||
unsigned int soacount;
|
||||
result = zone_get_from_db(zone, zone->db, NULL, &soacount,
|
||||
&oldserial, NULL, NULL, NULL, NULL,
|
||||
NULL);
|
||||
RUNTIME_CHECK(result == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(soacount > 0U);
|
||||
zone_debuglog(zone, me, 1, "serial: new %u, old %u",
|
||||
serial, oldserial);
|
||||
} else
|
||||
|
|
@ -11690,6 +11718,7 @@ dns_zone_notifyreceive(dns_zone_t *zone, isc_sockaddr_t *from,
|
|||
result = dns_rdataset_first(rdataset);
|
||||
if (result == ISC_R_SUCCESS) {
|
||||
isc_uint32_t serial = 0, oldserial;
|
||||
unsigned int soacount;
|
||||
|
||||
dns_rdataset_current(rdataset, &rdata);
|
||||
result = dns_rdata_tostruct(&rdata, &soa, NULL);
|
||||
|
|
@ -11699,10 +11728,11 @@ dns_zone_notifyreceive(dns_zone_t *zone, isc_sockaddr_t *from,
|
|||
* The following should safely be performed without DB
|
||||
* lock and succeed in this context.
|
||||
*/
|
||||
result = zone_get_from_db(zone, zone->db, NULL, NULL,
|
||||
&oldserial, NULL, NULL, NULL,
|
||||
NULL, NULL);
|
||||
result = zone_get_from_db(zone, zone->db, NULL,
|
||||
&soacount, &oldserial, NULL,
|
||||
NULL, NULL, NULL, NULL);
|
||||
RUNTIME_CHECK(result == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(soacount > 0U);
|
||||
if (isc_serial_le(serial, oldserial)) {
|
||||
dns_zone_log(zone,
|
||||
ISC_LOG_INFO,
|
||||
|
|
@ -12964,6 +12994,7 @@ zone_replacedb(dns_zone_t *zone, dns_db_t *db, isc_boolean_t dump) {
|
|||
!DNS_ZONE_FLAG(zone, DNS_ZONEFLG_FORCEXFER))
|
||||
{
|
||||
isc_uint32_t serial, oldserial;
|
||||
unsigned int soacount;
|
||||
|
||||
dns_zone_log(zone, ISC_LOG_DEBUG(3), "generating diffs");
|
||||
|
||||
|
|
@ -12978,10 +13009,11 @@ zone_replacedb(dns_zone_t *zone, dns_db_t *db, isc_boolean_t dump) {
|
|||
/*
|
||||
* This is checked in zone_postload() for master zones.
|
||||
*/
|
||||
result = zone_get_from_db(zone, zone->db, NULL, NULL,
|
||||
result = zone_get_from_db(zone, zone->db, NULL, &soacount,
|
||||
&oldserial, NULL, NULL, NULL, NULL,
|
||||
NULL);
|
||||
RUNTIME_CHECK(result == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(soacount > 0U);
|
||||
if ((zone->type == dns_zone_slave ||
|
||||
(zone->type == dns_zone_redirect &&
|
||||
zone->masters != NULL))
|
||||
|
|
|
|||
|
|
@ -61,8 +61,8 @@
|
|||
#define ISC_QUEUE_DESTROY(queue) \
|
||||
do { \
|
||||
ISC_QLINK_INSIST(ISC_QUEUE_EMPTY(queue)); \
|
||||
isc_mutex_destroy(&(queue).taillock); \
|
||||
isc_mutex_destroy(&(queue).headlock); \
|
||||
(void) isc_mutex_destroy(&(queue).taillock); \
|
||||
(void) isc_mutex_destroy(&(queue).headlock); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in a new issue