mirror of
https://github.com/isc-projects/bind9.git
synced 2026-05-28 04:34:54 -04:00
[9.18] fix: dev: Add missing locks when returning addresses
Add missing locks in dns_zone_getxfrsource4 et al. Addresses CID 468706, 468708, 468741, 468742, 468785, and 468778. Cleanup dns_zone_setxfrsource4 et al to now return void. Remove double copies with dns_zone_getprimaryaddr and dns_zone_getsourceaddr. Closes #4933 Backport of MR !9485 Merge branch 'backport-4933-add-missing-locks-when-returning-addresses-9.18' into 'bind-9.18' See merge request isc-projects/bind9!10260
This commit is contained in:
commit
ae573fd9dc
3 changed files with 120 additions and 116 deletions
|
|
@ -1302,30 +1302,28 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
|||
obj = NULL;
|
||||
result = named_config_get(maps, "parental-source", &obj);
|
||||
INSIST(result == ISC_R_SUCCESS && obj != NULL);
|
||||
|
||||
CHECK(dns_zone_setparentalsrc4(zone, cfg_obj_assockaddr(obj)));
|
||||
dns_zone_setparentalsrc4(zone, cfg_obj_assockaddr(obj));
|
||||
named_add_reserved_dispatch(named_g_server,
|
||||
cfg_obj_assockaddr(obj));
|
||||
|
||||
obj = NULL;
|
||||
result = named_config_get(maps, "parental-source-v6", &obj);
|
||||
INSIST(result == ISC_R_SUCCESS && obj != NULL);
|
||||
|
||||
CHECK(dns_zone_setparentalsrc6(zone, cfg_obj_assockaddr(obj)));
|
||||
dns_zone_setparentalsrc6(zone, cfg_obj_assockaddr(obj));
|
||||
named_add_reserved_dispatch(named_g_server,
|
||||
cfg_obj_assockaddr(obj));
|
||||
|
||||
obj = NULL;
|
||||
result = named_config_get(maps, "notify-source", &obj);
|
||||
INSIST(result == ISC_R_SUCCESS && obj != NULL);
|
||||
CHECK(dns_zone_setnotifysrc4(zone, cfg_obj_assockaddr(obj)));
|
||||
dns_zone_setnotifysrc4(zone, cfg_obj_assockaddr(obj));
|
||||
named_add_reserved_dispatch(named_g_server,
|
||||
cfg_obj_assockaddr(obj));
|
||||
|
||||
obj = NULL;
|
||||
result = named_config_get(maps, "notify-source-v6", &obj);
|
||||
INSIST(result == ISC_R_SUCCESS && obj != NULL);
|
||||
CHECK(dns_zone_setnotifysrc6(zone, cfg_obj_assockaddr(obj)));
|
||||
dns_zone_setnotifysrc6(zone, cfg_obj_assockaddr(obj));
|
||||
named_add_reserved_dispatch(named_g_server,
|
||||
cfg_obj_assockaddr(obj));
|
||||
|
||||
|
|
@ -1956,29 +1954,26 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
|||
obj = NULL;
|
||||
result = named_config_get(maps, "transfer-source", &obj);
|
||||
INSIST(result == ISC_R_SUCCESS && obj != NULL);
|
||||
CHECK(dns_zone_setxfrsource4(mayberaw,
|
||||
cfg_obj_assockaddr(obj)));
|
||||
dns_zone_setxfrsource4(mayberaw, cfg_obj_assockaddr(obj));
|
||||
named_add_reserved_dispatch(named_g_server,
|
||||
cfg_obj_assockaddr(obj));
|
||||
|
||||
obj = NULL;
|
||||
result = named_config_get(maps, "transfer-source-v6", &obj);
|
||||
INSIST(result == ISC_R_SUCCESS && obj != NULL);
|
||||
CHECK(dns_zone_setxfrsource6(mayberaw,
|
||||
cfg_obj_assockaddr(obj)));
|
||||
dns_zone_setxfrsource6(mayberaw, cfg_obj_assockaddr(obj));
|
||||
named_add_reserved_dispatch(named_g_server,
|
||||
cfg_obj_assockaddr(obj));
|
||||
|
||||
obj = NULL;
|
||||
result = named_config_get(maps, "alt-transfer-source", &obj);
|
||||
INSIST(result == ISC_R_SUCCESS && obj != NULL);
|
||||
CHECK(dns_zone_setaltxfrsource4(mayberaw,
|
||||
cfg_obj_assockaddr(obj)));
|
||||
dns_zone_setaltxfrsource4(mayberaw, cfg_obj_assockaddr(obj));
|
||||
|
||||
obj = NULL;
|
||||
result = named_config_get(maps, "alt-transfer-source-v6", &obj);
|
||||
INSIST(result == ISC_R_SUCCESS && obj != NULL);
|
||||
CHECK(dns_zone_setaltxfrsource6(mayberaw,
|
||||
cfg_obj_assockaddr(obj)));
|
||||
dns_zone_setaltxfrsource6(mayberaw, cfg_obj_assockaddr(obj));
|
||||
obj = NULL;
|
||||
(void)named_config_get(maps, "use-alt-transfer-source", &obj);
|
||||
if (obj == NULL) {
|
||||
|
|
|
|||
|
|
@ -888,9 +888,9 @@ dns_zone_setmaxretrytime(dns_zone_t *zone, uint32_t val);
|
|||
* val > 0.
|
||||
*/
|
||||
|
||||
isc_result_t
|
||||
void
|
||||
dns_zone_setxfrsource4(dns_zone_t *zone, const isc_sockaddr_t *xfrsource);
|
||||
isc_result_t
|
||||
void
|
||||
dns_zone_setaltxfrsource4(dns_zone_t *zone, const isc_sockaddr_t *xfrsource);
|
||||
/*%<
|
||||
* Set the source address to be used in IPv4 zone transfers.
|
||||
|
|
@ -898,26 +898,24 @@ dns_zone_setaltxfrsource4(dns_zone_t *zone, const isc_sockaddr_t *xfrsource);
|
|||
* Require:
|
||||
*\li 'zone' to be a valid zone.
|
||||
*\li 'xfrsource' to contain the address.
|
||||
*
|
||||
* Returns:
|
||||
*\li #ISC_R_SUCCESS
|
||||
*/
|
||||
|
||||
isc_sockaddr_t *
|
||||
dns_zone_getxfrsource4(dns_zone_t *zone);
|
||||
isc_sockaddr_t *
|
||||
dns_zone_getaltxfrsource4(dns_zone_t *zone);
|
||||
void
|
||||
dns_zone_getxfrsource4(dns_zone_t *zone, isc_sockaddr_t *xfrsource);
|
||||
void
|
||||
dns_zone_getaltxfrsource4(dns_zone_t *zone, isc_sockaddr_t *xfrsource);
|
||||
/*%<
|
||||
* Returns the source address set by a previous dns_zone_setxfrsource4
|
||||
* call, or the default of inaddr_any, port 0.
|
||||
*
|
||||
* Require:
|
||||
*\li 'zone' to be a valid zone.
|
||||
*\li 'xfrsource' to not be NULL
|
||||
*/
|
||||
|
||||
isc_result_t
|
||||
void
|
||||
dns_zone_setxfrsource6(dns_zone_t *zone, const isc_sockaddr_t *xfrsource);
|
||||
isc_result_t
|
||||
void
|
||||
dns_zone_setaltxfrsource6(dns_zone_t *zone, const isc_sockaddr_t *xfrsource);
|
||||
/*%<
|
||||
* Set the source address to be used in IPv6 zone transfers.
|
||||
|
|
@ -925,24 +923,22 @@ dns_zone_setaltxfrsource6(dns_zone_t *zone, const isc_sockaddr_t *xfrsource);
|
|||
* Require:
|
||||
*\li 'zone' to be a valid zone.
|
||||
*\li 'xfrsource' to contain the address.
|
||||
*
|
||||
* Returns:
|
||||
*\li #ISC_R_SUCCESS
|
||||
*/
|
||||
|
||||
isc_sockaddr_t *
|
||||
dns_zone_getxfrsource6(dns_zone_t *zone);
|
||||
isc_sockaddr_t *
|
||||
dns_zone_getaltxfrsource6(dns_zone_t *zone);
|
||||
void
|
||||
dns_zone_getxfrsource6(dns_zone_t *zone, isc_sockaddr_t *xfrsource);
|
||||
void
|
||||
dns_zone_getaltxfrsource6(dns_zone_t *zone, isc_sockaddr_t *xfrsource);
|
||||
/*%<
|
||||
* Returns the source address set by a previous dns_zone_setxfrsource6
|
||||
* call, or the default of in6addr_any, port 0.
|
||||
*
|
||||
* Require:
|
||||
*\li 'zone' to be a valid zone.
|
||||
*\li 'xfrsource' to not be NULL
|
||||
*/
|
||||
|
||||
isc_result_t
|
||||
void
|
||||
dns_zone_setparentalsrc4(dns_zone_t *zone, const isc_sockaddr_t *parentalsrc);
|
||||
/*%<
|
||||
* Set the source address to be used with IPv4 parental DS queries.
|
||||
|
|
@ -950,22 +946,20 @@ dns_zone_setparentalsrc4(dns_zone_t *zone, const isc_sockaddr_t *parentalsrc);
|
|||
* Require:
|
||||
*\li 'zone' to be a valid zone.
|
||||
*\li 'parentalsrc' to contain the address.
|
||||
*
|
||||
* Returns:
|
||||
*\li #ISC_R_SUCCESS
|
||||
*/
|
||||
|
||||
isc_sockaddr_t *
|
||||
dns_zone_getparentalsrc4(dns_zone_t *zone);
|
||||
void
|
||||
dns_zone_getparentalsrc4(dns_zone_t *zone, isc_sockaddr_t *parentalsrc);
|
||||
/*%<
|
||||
* Returns the source address set by a previous dns_zone_setparentalsrc4
|
||||
* call, or the default of inaddr_any, port 0.
|
||||
*
|
||||
* Require:
|
||||
*\li 'zone' to be a valid zone.
|
||||
*\li 'parentalsrc' to be non NULL.
|
||||
*/
|
||||
|
||||
isc_result_t
|
||||
void
|
||||
dns_zone_setparentalsrc6(dns_zone_t *zone, const isc_sockaddr_t *parentalsrc);
|
||||
/*%<
|
||||
* Set the source address to be used with IPv6 parental DS queries.
|
||||
|
|
@ -973,22 +967,20 @@ dns_zone_setparentalsrc6(dns_zone_t *zone, const isc_sockaddr_t *parentalsrc);
|
|||
* Require:
|
||||
*\li 'zone' to be a valid zone.
|
||||
*\li 'parentalsrc' to contain the address.
|
||||
*
|
||||
* Returns:
|
||||
*\li #ISC_R_SUCCESS
|
||||
*/
|
||||
|
||||
isc_sockaddr_t *
|
||||
dns_zone_getparentalsrc6(dns_zone_t *zone);
|
||||
void
|
||||
dns_zone_getparentalsrc6(dns_zone_t *zone, isc_sockaddr_t *parentalsrc);
|
||||
/*%<
|
||||
* Returns the source address set by a previous dns_zone_setparentalsrc6
|
||||
* call, or the default of in6addr_any, port 0.
|
||||
*
|
||||
* Require:
|
||||
*\li 'zone' to be a valid zone.
|
||||
*\li 'parentalsrc' to be non NULL.
|
||||
*/
|
||||
|
||||
isc_result_t
|
||||
void
|
||||
dns_zone_setnotifysrc4(dns_zone_t *zone, const isc_sockaddr_t *notifysrc);
|
||||
/*%<
|
||||
* Set the source address to be used with IPv4 NOTIFY messages.
|
||||
|
|
@ -996,22 +988,20 @@ dns_zone_setnotifysrc4(dns_zone_t *zone, const isc_sockaddr_t *notifysrc);
|
|||
* Require:
|
||||
*\li 'zone' to be a valid zone.
|
||||
*\li 'notifysrc' to contain the address.
|
||||
*
|
||||
* Returns:
|
||||
*\li #ISC_R_SUCCESS
|
||||
*/
|
||||
|
||||
isc_sockaddr_t *
|
||||
dns_zone_getnotifysrc4(dns_zone_t *zone);
|
||||
void
|
||||
dns_zone_getnotifysrc4(dns_zone_t *zone, isc_sockaddr_t *notifysrc);
|
||||
/*%<
|
||||
* Returns the source address set by a previous dns_zone_setnotifysrc4
|
||||
* call, or the default of inaddr_any, port 0.
|
||||
*
|
||||
* Require:
|
||||
*\li 'zone' to be a valid zone.
|
||||
*\li 'notifysrc' to be non NULL.
|
||||
*/
|
||||
|
||||
isc_result_t
|
||||
void
|
||||
dns_zone_setnotifysrc6(dns_zone_t *zone, const isc_sockaddr_t *notifysrc);
|
||||
/*%<
|
||||
* Set the source address to be used with IPv6 NOTIFY messages.
|
||||
|
|
@ -1019,19 +1009,17 @@ dns_zone_setnotifysrc6(dns_zone_t *zone, const isc_sockaddr_t *notifysrc);
|
|||
* Require:
|
||||
*\li 'zone' to be a valid zone.
|
||||
*\li 'notifysrc' to contain the address.
|
||||
*
|
||||
* Returns:
|
||||
*\li #ISC_R_SUCCESS
|
||||
*/
|
||||
|
||||
isc_sockaddr_t *
|
||||
dns_zone_getnotifysrc6(dns_zone_t *zone);
|
||||
void
|
||||
dns_zone_getnotifysrc6(dns_zone_t *zone, isc_sockaddr_t *notifysrc);
|
||||
/*%<
|
||||
* Returns the source address set by a previous dns_zone_setnotifysrc6
|
||||
* call, or the default of in6addr_any, port 0.
|
||||
*
|
||||
* Require:
|
||||
*\li 'zone' to be a valid zone.
|
||||
*\li 'notifysrc' to be non NULL.
|
||||
*/
|
||||
|
||||
void
|
||||
|
|
|
|||
141
lib/dns/zone.c
141
lib/dns/zone.c
|
|
@ -5930,142 +5930,163 @@ dns_zone_getkeyopts(dns_zone_t *zone) {
|
|||
return atomic_load_relaxed(&zone->keyopts);
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
void
|
||||
dns_zone_setxfrsource4(dns_zone_t *zone, const isc_sockaddr_t *xfrsource) {
|
||||
REQUIRE(DNS_ZONE_VALID(zone));
|
||||
REQUIRE(xfrsource != NULL);
|
||||
|
||||
LOCK_ZONE(zone);
|
||||
zone->xfrsource4 = *xfrsource;
|
||||
UNLOCK_ZONE(zone);
|
||||
|
||||
return ISC_R_SUCCESS;
|
||||
}
|
||||
|
||||
isc_sockaddr_t *
|
||||
dns_zone_getxfrsource4(dns_zone_t *zone) {
|
||||
void
|
||||
dns_zone_getxfrsource4(dns_zone_t *zone, isc_sockaddr_t *xfrsource) {
|
||||
REQUIRE(DNS_ZONE_VALID(zone));
|
||||
return &zone->xfrsource4;
|
||||
REQUIRE(xfrsource != NULL);
|
||||
|
||||
LOCK_ZONE(zone);
|
||||
*xfrsource = zone->xfrsource4;
|
||||
UNLOCK_ZONE(zone);
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
void
|
||||
dns_zone_setxfrsource6(dns_zone_t *zone, const isc_sockaddr_t *xfrsource) {
|
||||
REQUIRE(DNS_ZONE_VALID(zone));
|
||||
REQUIRE(xfrsource != NULL);
|
||||
|
||||
LOCK_ZONE(zone);
|
||||
zone->xfrsource6 = *xfrsource;
|
||||
UNLOCK_ZONE(zone);
|
||||
|
||||
return ISC_R_SUCCESS;
|
||||
}
|
||||
|
||||
isc_sockaddr_t *
|
||||
dns_zone_getxfrsource6(dns_zone_t *zone) {
|
||||
REQUIRE(DNS_ZONE_VALID(zone));
|
||||
return &zone->xfrsource6;
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
dns_zone_setaltxfrsource4(dns_zone_t *zone,
|
||||
const isc_sockaddr_t *altxfrsource) {
|
||||
void
|
||||
dns_zone_getxfrsource6(dns_zone_t *zone, isc_sockaddr_t *xfrsource) {
|
||||
REQUIRE(DNS_ZONE_VALID(zone));
|
||||
REQUIRE(xfrsource != NULL);
|
||||
|
||||
LOCK_ZONE(zone);
|
||||
zone->altxfrsource4 = *altxfrsource;
|
||||
*xfrsource = zone->xfrsource6;
|
||||
UNLOCK_ZONE(zone);
|
||||
|
||||
return ISC_R_SUCCESS;
|
||||
}
|
||||
|
||||
isc_sockaddr_t *
|
||||
dns_zone_getaltxfrsource4(dns_zone_t *zone) {
|
||||
REQUIRE(DNS_ZONE_VALID(zone));
|
||||
return &zone->altxfrsource4;
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
dns_zone_setaltxfrsource6(dns_zone_t *zone,
|
||||
const isc_sockaddr_t *altxfrsource) {
|
||||
void
|
||||
dns_zone_setaltxfrsource4(dns_zone_t *zone, const isc_sockaddr_t *xfrsource) {
|
||||
REQUIRE(DNS_ZONE_VALID(zone));
|
||||
REQUIRE(xfrsource != NULL);
|
||||
|
||||
LOCK_ZONE(zone);
|
||||
zone->altxfrsource6 = *altxfrsource;
|
||||
zone->altxfrsource4 = *xfrsource;
|
||||
UNLOCK_ZONE(zone);
|
||||
|
||||
return ISC_R_SUCCESS;
|
||||
}
|
||||
|
||||
isc_sockaddr_t *
|
||||
dns_zone_getaltxfrsource6(dns_zone_t *zone) {
|
||||
void
|
||||
dns_zone_getaltxfrsource4(dns_zone_t *zone, isc_sockaddr_t *xfrsource) {
|
||||
REQUIRE(DNS_ZONE_VALID(zone));
|
||||
return &zone->altxfrsource6;
|
||||
REQUIRE(xfrsource != NULL);
|
||||
|
||||
LOCK_ZONE(zone);
|
||||
*xfrsource = zone->altxfrsource4;
|
||||
UNLOCK_ZONE(zone);
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
void
|
||||
dns_zone_setaltxfrsource6(dns_zone_t *zone, const isc_sockaddr_t *xfrsource) {
|
||||
REQUIRE(DNS_ZONE_VALID(zone));
|
||||
REQUIRE(xfrsource != NULL);
|
||||
|
||||
LOCK_ZONE(zone);
|
||||
zone->altxfrsource6 = *xfrsource;
|
||||
UNLOCK_ZONE(zone);
|
||||
}
|
||||
|
||||
void
|
||||
dns_zone_getaltxfrsource6(dns_zone_t *zone, isc_sockaddr_t *xfrsource) {
|
||||
REQUIRE(DNS_ZONE_VALID(zone));
|
||||
REQUIRE(xfrsource != NULL);
|
||||
|
||||
LOCK_ZONE(zone);
|
||||
*xfrsource = zone->altxfrsource6;
|
||||
UNLOCK_ZONE(zone);
|
||||
}
|
||||
|
||||
void
|
||||
dns_zone_setparentalsrc4(dns_zone_t *zone, const isc_sockaddr_t *parentalsrc) {
|
||||
REQUIRE(DNS_ZONE_VALID(zone));
|
||||
REQUIRE(parentalsrc != NULL);
|
||||
|
||||
LOCK_ZONE(zone);
|
||||
zone->parentalsrc4 = *parentalsrc;
|
||||
UNLOCK_ZONE(zone);
|
||||
|
||||
return ISC_R_SUCCESS;
|
||||
}
|
||||
|
||||
isc_sockaddr_t *
|
||||
dns_zone_getparentalsrc4(dns_zone_t *zone) {
|
||||
void
|
||||
dns_zone_getparentalsrc4(dns_zone_t *zone, isc_sockaddr_t *parentalsrc) {
|
||||
REQUIRE(DNS_ZONE_VALID(zone));
|
||||
return &zone->parentalsrc4;
|
||||
REQUIRE(parentalsrc != NULL);
|
||||
|
||||
LOCK_ZONE(zone);
|
||||
*parentalsrc = zone->parentalsrc4;
|
||||
UNLOCK_ZONE(zone);
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
void
|
||||
dns_zone_setparentalsrc6(dns_zone_t *zone, const isc_sockaddr_t *parentalsrc) {
|
||||
REQUIRE(DNS_ZONE_VALID(zone));
|
||||
|
||||
LOCK_ZONE(zone);
|
||||
zone->parentalsrc6 = *parentalsrc;
|
||||
UNLOCK_ZONE(zone);
|
||||
|
||||
return ISC_R_SUCCESS;
|
||||
}
|
||||
|
||||
isc_sockaddr_t *
|
||||
dns_zone_getparentalsrc6(dns_zone_t *zone) {
|
||||
void
|
||||
dns_zone_getparentalsrc6(dns_zone_t *zone, isc_sockaddr_t *parentalsrc) {
|
||||
REQUIRE(DNS_ZONE_VALID(zone));
|
||||
return &zone->parentalsrc6;
|
||||
REQUIRE(parentalsrc != NULL);
|
||||
|
||||
LOCK_ZONE(zone);
|
||||
*parentalsrc = zone->parentalsrc6;
|
||||
UNLOCK_ZONE(zone);
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
void
|
||||
dns_zone_setnotifysrc4(dns_zone_t *zone, const isc_sockaddr_t *notifysrc) {
|
||||
REQUIRE(DNS_ZONE_VALID(zone));
|
||||
REQUIRE(notifysrc != NULL);
|
||||
|
||||
LOCK_ZONE(zone);
|
||||
zone->notifysrc4 = *notifysrc;
|
||||
UNLOCK_ZONE(zone);
|
||||
|
||||
return ISC_R_SUCCESS;
|
||||
}
|
||||
|
||||
isc_sockaddr_t *
|
||||
dns_zone_getnotifysrc4(dns_zone_t *zone) {
|
||||
void
|
||||
dns_zone_getnotifysrc4(dns_zone_t *zone, isc_sockaddr_t *notifysrc) {
|
||||
REQUIRE(DNS_ZONE_VALID(zone));
|
||||
return &zone->notifysrc4;
|
||||
REQUIRE(notifysrc != NULL);
|
||||
|
||||
LOCK_ZONE(zone);
|
||||
*notifysrc = zone->notifysrc4;
|
||||
UNLOCK_ZONE(zone);
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
void
|
||||
dns_zone_setnotifysrc6(dns_zone_t *zone, const isc_sockaddr_t *notifysrc) {
|
||||
REQUIRE(DNS_ZONE_VALID(zone));
|
||||
REQUIRE(notifysrc != NULL);
|
||||
|
||||
LOCK_ZONE(zone);
|
||||
zone->notifysrc6 = *notifysrc;
|
||||
UNLOCK_ZONE(zone);
|
||||
|
||||
return ISC_R_SUCCESS;
|
||||
}
|
||||
|
||||
isc_sockaddr_t *
|
||||
dns_zone_getnotifysrc6(dns_zone_t *zone) {
|
||||
void
|
||||
dns_zone_getnotifysrc6(dns_zone_t *zone, isc_sockaddr_t *notifysrc) {
|
||||
REQUIRE(DNS_ZONE_VALID(zone));
|
||||
return &zone->notifysrc6;
|
||||
REQUIRE(notifysrc != NULL);
|
||||
|
||||
LOCK_ZONE(zone);
|
||||
*notifysrc = zone->notifysrc6;
|
||||
UNLOCK_ZONE(zone);
|
||||
}
|
||||
|
||||
static bool
|
||||
|
|
|
|||
Loading…
Reference in a new issue