2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-09-03 08:05:21 +00:00

Remove extra copies and stray members from ns_client_t

The ns_client_t is always attached to ns_clientmgr_t which has
associated memory context, server context, task and threadid.  Use those
directly from the ns_clientmgr_t instead of attaching it to an extra
copy in ns_client_t to make the ns_client_t more sleek and lean.

Additionally, remove some stray ns_client_t struct members that were not
used anywhere.
This commit is contained in:
Ondřej Surý
2022-03-23 13:57:15 +01:00
parent dab22a54df
commit 23195f18bc
6 changed files with 209 additions and 225 deletions

View File

@@ -152,7 +152,7 @@ ns_client_killoldestquery(ns_client_t *client) {
if (oldest != NULL) { if (oldest != NULL) {
ISC_LIST_UNLINK(client->manager->recursing, oldest, rlink); ISC_LIST_UNLINK(client->manager->recursing, oldest, rlink);
ns_query_cancel(oldest); ns_query_cancel(oldest);
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_reclimitdropped); ns_statscounter_reclimitdropped);
} }
UNLOCK(&client->manager->reclock); UNLOCK(&client->manager->reclock);
@@ -170,8 +170,9 @@ client_extendederror_reset(ns_client_t *client) {
if (client->ede == NULL) { if (client->ede == NULL) {
return; return;
} }
isc_mem_put(client->mctx, client->ede->value, client->ede->length); isc_mem_put(client->manager->mctx, client->ede->value,
isc_mem_put(client->mctx, client->ede, sizeof(dns_ednsopt_t)); client->ede->length);
isc_mem_put(client->manager->mctx, client->ede, sizeof(dns_ednsopt_t));
client->ede = NULL; client->ede = NULL;
} }
@@ -208,10 +209,10 @@ ns_client_extendederror(ns_client_t *client, uint16_t code, const char *text) {
} }
} }
client->ede = isc_mem_get(client->mctx, sizeof(dns_ednsopt_t)); client->ede = isc_mem_get(client->manager->mctx, sizeof(dns_ednsopt_t));
client->ede->code = DNS_OPT_EDE; client->ede->code = DNS_OPT_EDE;
client->ede->length = len; client->ede->length = len;
client->ede->value = isc_mem_get(client->mctx, len); client->ede->value = isc_mem_get(client->manager->mctx, len);
memmove(client->ede->value, ede, len); memmove(client->ede->value, ede, len);
}; };
@@ -239,7 +240,7 @@ ns_client_endrequest(ns_client_t *client) {
if (client->view != NULL) { if (client->view != NULL) {
#ifdef ENABLE_AFL #ifdef ENABLE_AFL
if (client->sctx->fuzztype == isc_fuzz_resolver) { if (client->manager->sctx->fuzztype == isc_fuzz_resolver) {
dns_cache_clean(client->view->cache, INT_MAX); dns_cache_clean(client->view->cache, INT_MAX);
dns_adb_flush(client->view->adb); dns_adb_flush(client->view->adb);
} }
@@ -269,7 +270,7 @@ ns_client_endrequest(ns_client_t *client) {
if (client->recursionquota != NULL) { if (client->recursionquota != NULL) {
isc_quota_detach(&client->recursionquota); isc_quota_detach(&client->recursionquota);
if (client->query.prefetch == NULL) { if (client->query.prefetch == NULL) {
ns_stats_decrement(client->sctx->nsstats, ns_stats_decrement(client->manager->sctx->nsstats,
ns_statscounter_recursclients); ns_statscounter_recursclients);
} }
} }
@@ -279,12 +280,12 @@ ns_client_endrequest(ns_client_t *client) {
*/ */
client->attributes = 0; client->attributes = 0;
#ifdef ENABLE_AFL #ifdef ENABLE_AFL
if (client->sctx->fuzznotify != NULL && if (client->manager->sctx->fuzznotify != NULL &&
(client->sctx->fuzztype == isc_fuzz_client || (client->manager->sctx->fuzztype == isc_fuzz_client ||
client->sctx->fuzztype == isc_fuzz_tcpclient || client->manager->sctx->fuzztype == isc_fuzz_tcpclient ||
client->sctx->fuzztype == isc_fuzz_resolver)) client->manager->sctx->fuzztype == isc_fuzz_resolver))
{ {
client->sctx->fuzznotify(); client->manager->sctx->fuzznotify();
} }
#endif /* ENABLE_AFL */ #endif /* ENABLE_AFL */
} }
@@ -349,7 +350,7 @@ client_allocsendbuf(ns_client_t *client, isc_buffer_t *buffer,
if (TCP_CLIENT(client)) { if (TCP_CLIENT(client)) {
INSIST(client->tcpbuf == NULL); INSIST(client->tcpbuf == NULL);
client->tcpbuf = isc_mem_get(client->mctx, client->tcpbuf = isc_mem_get(client->manager->mctx,
NS_CLIENT_TCP_BUFFER_SIZE); NS_CLIENT_TCP_BUFFER_SIZE);
data = client->tcpbuf; data = client->tcpbuf;
isc_buffer_init(buffer, data, NS_CLIENT_TCP_BUFFER_SIZE); isc_buffer_init(buffer, data, NS_CLIENT_TCP_BUFFER_SIZE);
@@ -453,7 +454,7 @@ ns_client_sendraw(ns_client_t *client, dns_message_t *message) {
return; return;
done: done:
if (client->tcpbuf != NULL) { if (client->tcpbuf != NULL) {
isc_mem_put(client->mctx, client->tcpbuf, isc_mem_put(client->manager->mctx, client->tcpbuf,
NS_CLIENT_TCP_BUFFER_SIZE); NS_CLIENT_TCP_BUFFER_SIZE);
client->tcpbuf = NULL; client->tcpbuf = NULL;
} }
@@ -536,7 +537,7 @@ ns_client_send(ns_client_t *client) {
client_allocsendbuf(client, &buffer, &data); client_allocsendbuf(client, &buffer, &data);
result = dns_compress_init(&cctx, -1, client->mctx); result = dns_compress_init(&cctx, -1, client->manager->mctx);
if (result != ISC_R_SUCCESS) { if (result != ISC_R_SUCCESS) {
goto cleanup; goto cleanup;
} }
@@ -670,11 +671,11 @@ renderend:
switch (isc_sockaddr_pf(&client->peeraddr)) { switch (isc_sockaddr_pf(&client->peeraddr)) {
case AF_INET: case AF_INET:
isc_stats_increment(client->sctx->tcpoutstats4, isc_stats_increment(client->manager->sctx->tcpoutstats4,
ISC_MIN((int)respsize / 16, 256)); ISC_MIN((int)respsize / 16, 256));
break; break;
case AF_INET6: case AF_INET6:
isc_stats_increment(client->sctx->tcpoutstats6, isc_stats_increment(client->manager->sctx->tcpoutstats6,
ISC_MIN((int)respsize / 16, 256)); ISC_MIN((int)respsize / 16, 256));
break; break;
default: default:
@@ -699,11 +700,11 @@ renderend:
switch (isc_sockaddr_pf(&client->peeraddr)) { switch (isc_sockaddr_pf(&client->peeraddr)) {
case AF_INET: case AF_INET:
isc_stats_increment(client->sctx->udpoutstats4, isc_stats_increment(client->manager->sctx->udpoutstats4,
ISC_MIN((int)respsize / 16, 256)); ISC_MIN((int)respsize / 16, 256));
break; break;
case AF_INET6: case AF_INET6:
isc_stats_increment(client->sctx->udpoutstats6, isc_stats_increment(client->manager->sctx->udpoutstats6,
ISC_MIN((int)respsize / 16, 256)); ISC_MIN((int)respsize / 16, 256));
break; break;
default: default:
@@ -712,24 +713,25 @@ renderend:
} }
/* update statistics (XXXJT: is it okay to access message->xxxkey?) */ /* update statistics (XXXJT: is it okay to access message->xxxkey?) */
ns_stats_increment(client->sctx->nsstats, ns_statscounter_response); ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_response);
dns_rcodestats_increment(client->sctx->rcodestats, dns_rcodestats_increment(client->manager->sctx->rcodestats,
client->message->rcode); client->message->rcode);
if (opt_included) { if (opt_included) {
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_edns0out); ns_statscounter_edns0out);
} }
if (client->message->tsigkey != NULL) { if (client->message->tsigkey != NULL) {
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_tsigout); ns_statscounter_tsigout);
} }
if (client->message->sig0key != NULL) { if (client->message->sig0key != NULL) {
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_sig0out); ns_statscounter_sig0out);
} }
if ((client->message->flags & DNS_MESSAGEFLAG_TC) != 0) { if ((client->message->flags & DNS_MESSAGEFLAG_TC) != 0) {
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_truncatedresp); ns_statscounter_truncatedresp);
} }
@@ -739,7 +741,7 @@ renderend:
cleanup: cleanup:
if (client->tcpbuf != NULL) { if (client->tcpbuf != NULL) {
isc_mem_put(client->mctx, client->tcpbuf, isc_mem_put(client->manager->mctx, client->tcpbuf,
NS_CLIENT_TCP_BUFFER_SIZE); NS_CLIENT_TCP_BUFFER_SIZE);
client->tcpbuf = NULL; client->tcpbuf = NULL;
} }
@@ -832,7 +834,8 @@ ns_client_error(ns_client_t *client, isc_result_t result) {
dns_rrl_result_t rrl_result; dns_rrl_result_t rrl_result;
int loglevel; int loglevel;
if ((client->sctx->options & NS_SERVER_LOGQUERIES) != 0) { if ((client->manager->sctx->options & NS_SERVER_LOGQUERIES) !=
0) {
loglevel = DNS_RRL_LOG_DROP; loglevel = DNS_RRL_LOG_DROP;
} else { } else {
loglevel = ISC_LOG_DEBUG(1); loglevel = ISC_LOG_DEBUG(1);
@@ -860,10 +863,12 @@ ns_client_error(ns_client_t *client, isc_result_t result) {
* so don't try to slip any error responses. * so don't try to slip any error responses.
*/ */
if (!client->view->rrl->log_only) { if (!client->view->rrl->log_only) {
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(
ns_statscounter_ratedropped); client->manager->sctx->nsstats,
ns_stats_increment(client->sctx->nsstats, ns_statscounter_ratedropped);
ns_statscounter_dropped); ns_stats_increment(
client->manager->sctx->nsstats,
ns_statscounter_dropped);
ns_client_drop(client, DNS_R_DROP); ns_client_drop(client, DNS_R_DROP);
return; return;
} }
@@ -981,17 +986,18 @@ ns_client_addopt(ns_client_t *client, dns_message_t *message,
if (resolver != NULL) { if (resolver != NULL) {
udpsize = dns_resolver_getudpsize(resolver); udpsize = dns_resolver_getudpsize(resolver);
} else { } else {
udpsize = client->sctx->udpsize; udpsize = client->manager->sctx->udpsize;
} }
flags = client->extflags & DNS_MESSAGEEXTFLAG_REPLYPRESERVE; flags = client->extflags & DNS_MESSAGEEXTFLAG_REPLYPRESERVE;
/* Set EDNS options if applicable */ /* Set EDNS options if applicable */
if (WANTNSID(client)) { if (WANTNSID(client)) {
if (client->sctx->server_id != NULL) { if (client->manager->sctx->server_id != NULL) {
nsidp = client->sctx->server_id; nsidp = client->manager->sctx->server_id;
} else if (client->sctx->gethostname != NULL) { } else if (client->manager->sctx->gethostname != NULL) {
result = client->sctx->gethostname(nsid, sizeof(nsid)); result = client->manager->sctx->gethostname(
nsid, sizeof(nsid));
if (result != ISC_R_SUCCESS) { if (result != ISC_R_SUCCESS) {
goto no_nsid; goto no_nsid;
} }
@@ -1017,7 +1023,8 @@ no_nsid:
isc_random_buf(&nonce, sizeof(nonce)); isc_random_buf(&nonce, sizeof(nonce));
compute_cookie(client, now, nonce, client->sctx->secret, &buf); compute_cookie(client, now, nonce,
client->manager->sctx->secret, &buf);
INSIST(count < DNS_EDNSOPTIONS); INSIST(count < DNS_EDNSOPTIONS);
ednsopts[count].code = DNS_OPT_COOKIE; ednsopts[count].code = DNS_OPT_COOKIE;
@@ -1162,7 +1169,7 @@ compute_cookie(ns_client_t *client, uint32_t when, uint32_t nonce,
"digest " "digest "
"buffer."); "buffer.");
switch (client->sctx->cookiealg) { switch (client->manager->sctx->cookiealg) {
case ns_cookiealg_siphash24: { case ns_cookiealg_siphash24: {
unsigned char input[16 + 16] ISC_NONSTRING = { 0 }; unsigned char input[16 + 16] ISC_NONSTRING = { 0 };
size_t inputlen = 0; size_t inputlen = 0;
@@ -1227,8 +1234,8 @@ compute_cookie(ns_client_t *client, uint32_t when, uint32_t nonce,
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++) {
input[i + 8] = digest[i] ^ digest[i + 8]; input[i + 8] = digest[i] ^ digest[i + 8];
} }
isc_aes128_crypt(client->sctx->secret, input + 8, isc_aes128_crypt(client->manager->sctx->secret,
digest); input + 8, digest);
break; break;
default: default:
UNREACHABLE(); UNREACHABLE();
@@ -1258,7 +1265,7 @@ process_cookie(ns_client_t *client, isc_buffer_t *buf, size_t optlen) {
/* /*
* If we have already seen a cookie option skip this cookie option. * If we have already seen a cookie option skip this cookie option.
*/ */
if ((!client->sctx->answercookie) || if ((!client->manager->sctx->answercookie) ||
(client->attributes & NS_CLIENTATTR_WANTCOOKIE) != 0) (client->attributes & NS_CLIENTATTR_WANTCOOKIE) != 0)
{ {
isc_buffer_forward(buf, (unsigned int)optlen); isc_buffer_forward(buf, (unsigned int)optlen);
@@ -1267,7 +1274,8 @@ process_cookie(ns_client_t *client, isc_buffer_t *buf, size_t optlen) {
client->attributes |= NS_CLIENTATTR_WANTCOOKIE; client->attributes |= NS_CLIENTATTR_WANTCOOKIE;
ns_stats_increment(client->sctx->nsstats, ns_statscounter_cookiein); ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_cookiein);
if (optlen != COOKIE_SIZE) { if (optlen != COOKIE_SIZE) {
/* /*
@@ -1278,10 +1286,10 @@ process_cookie(ns_client_t *client, isc_buffer_t *buf, size_t optlen) {
isc_buffer_forward(buf, (unsigned int)optlen); isc_buffer_forward(buf, (unsigned int)optlen);
if (optlen == 8U) { if (optlen == 8U) {
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_cookienew); ns_statscounter_cookienew);
} else { } else {
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_cookiebadsize); ns_statscounter_cookiebadsize);
} }
return; return;
@@ -1305,35 +1313,35 @@ process_cookie(ns_client_t *client, isc_buffer_t *buf, size_t optlen) {
if (isc_serial_gt(when, (now + 300)) || /* In the future. */ if (isc_serial_gt(when, (now + 300)) || /* In the future. */
isc_serial_lt(when, (now - 3600))) isc_serial_lt(when, (now - 3600)))
{ /* In the past. */ { /* In the past. */
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_cookiebadtime); ns_statscounter_cookiebadtime);
return; return;
} }
isc_buffer_init(&db, dbuf, sizeof(dbuf)); isc_buffer_init(&db, dbuf, sizeof(dbuf));
compute_cookie(client, when, nonce, client->sctx->secret, &db); compute_cookie(client, when, nonce, client->manager->sctx->secret, &db);
if (isc_safe_memequal(old, dbuf, COOKIE_SIZE)) { if (isc_safe_memequal(old, dbuf, COOKIE_SIZE)) {
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_cookiematch); ns_statscounter_cookiematch);
client->attributes |= NS_CLIENTATTR_HAVECOOKIE; client->attributes |= NS_CLIENTATTR_HAVECOOKIE;
return; return;
} }
for (altsecret = ISC_LIST_HEAD(client->sctx->altsecrets); for (altsecret = ISC_LIST_HEAD(client->manager->sctx->altsecrets);
altsecret != NULL; altsecret = ISC_LIST_NEXT(altsecret, link)) altsecret != NULL; altsecret = ISC_LIST_NEXT(altsecret, link))
{ {
isc_buffer_init(&db, dbuf, sizeof(dbuf)); isc_buffer_init(&db, dbuf, sizeof(dbuf));
compute_cookie(client, when, nonce, altsecret->secret, &db); compute_cookie(client, when, nonce, altsecret->secret, &db);
if (isc_safe_memequal(old, dbuf, COOKIE_SIZE)) { if (isc_safe_memequal(old, dbuf, COOKIE_SIZE)) {
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_cookiematch); ns_statscounter_cookiematch);
client->attributes |= NS_CLIENTATTR_HAVECOOKIE; client->attributes |= NS_CLIENTATTR_HAVECOOKIE;
return; return;
} }
} }
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_cookienomatch); ns_statscounter_cookienomatch);
} }
@@ -1469,7 +1477,7 @@ process_keytag(ns_client_t *client, isc_buffer_t *buf, size_t optlen) {
return (ISC_R_SUCCESS); return (ISC_R_SUCCESS);
} }
client->keytag = isc_mem_get(client->mctx, optlen); client->keytag = isc_mem_get(client->manager->mctx, optlen);
{ {
client->keytag_len = (uint16_t)optlen; client->keytag_len = (uint16_t)optlen;
memmove(client->keytag, isc_buffer_current(buf), optlen); memmove(client->keytag, isc_buffer_current(buf), optlen);
@@ -1511,7 +1519,7 @@ process_opt(ns_client_t *client, dns_rdataset_t *opt) {
*/ */
client->ednsversion = (opt->ttl & 0x00FF0000) >> 16; client->ednsversion = (opt->ttl & 0x00FF0000) >> 16;
if (client->ednsversion > DNS_EDNS_VERSION) { if (client->ednsversion > DNS_EDNS_VERSION) {
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_badednsver); ns_statscounter_badednsver);
result = ns_client_addopt(client, client->message, result = ns_client_addopt(client, client->message,
&client->opt); &client->opt);
@@ -1536,7 +1544,7 @@ process_opt(ns_client_t *client, dns_rdataset_t *opt) {
case DNS_OPT_NSID: case DNS_OPT_NSID:
if (!WANTNSID(client)) { if (!WANTNSID(client)) {
ns_stats_increment( ns_stats_increment(
client->sctx->nsstats, client->manager->sctx->nsstats,
ns_statscounter_nsidopt); ns_statscounter_nsidopt);
} }
client->attributes |= NS_CLIENTATTR_WANTNSID; client->attributes |= NS_CLIENTATTR_WANTNSID;
@@ -1548,7 +1556,7 @@ process_opt(ns_client_t *client, dns_rdataset_t *opt) {
case DNS_OPT_EXPIRE: case DNS_OPT_EXPIRE:
if (!WANTEXPIRE(client)) { if (!WANTEXPIRE(client)) {
ns_stats_increment( ns_stats_increment(
client->sctx->nsstats, client->manager->sctx->nsstats,
ns_statscounter_expireopt); ns_statscounter_expireopt);
} }
client->attributes |= NS_CLIENTATTR_WANTEXPIRE; client->attributes |= NS_CLIENTATTR_WANTEXPIRE;
@@ -1560,13 +1568,14 @@ process_opt(ns_client_t *client, dns_rdataset_t *opt) {
ns_client_error(client, result); ns_client_error(client, result);
return (result); return (result);
} }
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(
ns_statscounter_ecsopt); client->manager->sctx->nsstats,
ns_statscounter_ecsopt);
break; break;
case DNS_OPT_TCP_KEEPALIVE: case DNS_OPT_TCP_KEEPALIVE:
if (!USEKEEPALIVE(client)) { if (!USEKEEPALIVE(client)) {
ns_stats_increment( ns_stats_increment(
client->sctx->nsstats, client->manager->sctx->nsstats,
ns_statscounter_keepaliveopt); ns_statscounter_keepaliveopt);
} }
client->attributes |= client->attributes |=
@@ -1576,8 +1585,9 @@ process_opt(ns_client_t *client, dns_rdataset_t *opt) {
break; break;
case DNS_OPT_PAD: case DNS_OPT_PAD:
client->attributes |= NS_CLIENTATTR_WANTPAD; client->attributes |= NS_CLIENTATTR_WANTPAD;
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(
ns_statscounter_padopt); client->manager->sctx->nsstats,
ns_statscounter_padopt);
isc_buffer_forward(&optbuf, optlen); isc_buffer_forward(&optbuf, optlen);
break; break;
case DNS_OPT_KEY_TAG: case DNS_OPT_KEY_TAG:
@@ -1587,19 +1597,22 @@ process_opt(ns_client_t *client, dns_rdataset_t *opt) {
ns_client_error(client, result); ns_client_error(client, result);
return (result); return (result);
} }
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(
ns_statscounter_keytagopt); client->manager->sctx->nsstats,
ns_statscounter_keytagopt);
break; break;
default: default:
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(
ns_statscounter_otheropt); client->manager->sctx->nsstats,
ns_statscounter_otheropt);
isc_buffer_forward(&optbuf, optlen); isc_buffer_forward(&optbuf, optlen);
break; break;
} }
} }
} }
ns_stats_increment(client->sctx->nsstats, ns_statscounter_edns0in); ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_edns0in);
client->attributes |= NS_CLIENTATTR_WANTOPT; client->attributes |= NS_CLIENTATTR_WANTOPT;
return (result); return (result);
@@ -1622,12 +1635,13 @@ ns__client_reset_cb(void *client0) {
ns_client_endrequest(client); ns_client_endrequest(client);
if (client->tcpbuf != NULL) { if (client->tcpbuf != NULL) {
isc_mem_put(client->mctx, client->tcpbuf, isc_mem_put(client->manager->mctx, client->tcpbuf,
NS_CLIENT_TCP_BUFFER_SIZE); NS_CLIENT_TCP_BUFFER_SIZE);
} }
if (client->keytag != NULL) { if (client->keytag != NULL) {
isc_mem_put(client->mctx, client->keytag, client->keytag_len); isc_mem_put(client->manager->mctx, client->keytag,
client->keytag_len);
client->keytag_len = 0; client->keytag_len = 0;
} }
@@ -1654,7 +1668,8 @@ ns__client_put_cb(void *client0) {
client->magic = 0; client->magic = 0;
client->shuttingdown = true; client->shuttingdown = true;
isc_mem_put(client->mctx, client->sendbuf, NS_CLIENT_SEND_BUFFER_SIZE); isc_mem_put(client->manager->mctx, client->sendbuf,
NS_CLIENT_SEND_BUFFER_SIZE);
if (client->opt != NULL) { if (client->opt != NULL) {
INSIST(dns_rdataset_isassociated(client->opt)); INSIST(dns_rdataset_isassociated(client->opt));
dns_rdataset_disassociate(client->opt); dns_rdataset_disassociate(client->opt);
@@ -1668,26 +1683,11 @@ ns__client_put_cb(void *client0) {
clientmgr_detach(&client->manager); clientmgr_detach(&client->manager);
} }
/*
* Detaching the task must be done after unlinking from
* the manager's lists because the manager accesses
* client->task.
*/
if (client->task != NULL) {
isc_task_detach(&client->task);
}
/* /*
* Destroy the fetchlock mutex that was created in * Destroy the fetchlock mutex that was created in
* ns_query_init(). * ns_query_init().
*/ */
isc_mutex_destroy(&client->query.fetchlock); isc_mutex_destroy(&client->query.fetchlock);
if (client->sctx != NULL) {
ns_server_detach(&client->sctx);
}
isc_mem_detach(&client->mctx);
} }
/* /*
@@ -1794,9 +1794,9 @@ ns__client_request(isc_nmhandle_t *handle, isc_result_t eresult,
#endif /* if NS_CLIENT_DROPPORT */ #endif /* if NS_CLIENT_DROPPORT */
env = client->manager->aclenv; env = client->manager->aclenv;
if (client->sctx->blackholeacl != NULL && if (client->manager->sctx->blackholeacl != NULL &&
(dns_acl_match(&netaddr, NULL, client->sctx->blackholeacl, env, (dns_acl_match(&netaddr, NULL, client->manager->sctx->blackholeacl,
&match, NULL) == ISC_R_SUCCESS) && env, &match, NULL) == ISC_R_SUCCESS) &&
match > 0) match > 0)
{ {
ns_client_log(client, DNS_LOGCATEGORY_SECURITY, ns_client_log(client, DNS_LOGCATEGORY_SECURITY,
@@ -1846,22 +1846,22 @@ ns__client_request(isc_nmhandle_t *handle, isc_result_t eresult,
* Update some statistics counters. Don't count responses. * Update some statistics counters. Don't count responses.
*/ */
if (isc_sockaddr_pf(&client->peeraddr) == PF_INET) { if (isc_sockaddr_pf(&client->peeraddr) == PF_INET) {
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_requestv4); ns_statscounter_requestv4);
} else { } else {
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_requestv6); ns_statscounter_requestv6);
} }
if (TCP_CLIENT(client)) { if (TCP_CLIENT(client)) {
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_requesttcp); ns_statscounter_requesttcp);
switch (isc_sockaddr_pf(&client->peeraddr)) { switch (isc_sockaddr_pf(&client->peeraddr)) {
case AF_INET: case AF_INET:
isc_stats_increment(client->sctx->tcpinstats4, isc_stats_increment(client->manager->sctx->tcpinstats4,
ISC_MIN((int)reqsize / 16, 18)); ISC_MIN((int)reqsize / 16, 18));
break; break;
case AF_INET6: case AF_INET6:
isc_stats_increment(client->sctx->tcpinstats6, isc_stats_increment(client->manager->sctx->tcpinstats6,
ISC_MIN((int)reqsize / 16, 18)); ISC_MIN((int)reqsize / 16, 18));
break; break;
default: default:
@@ -1870,11 +1870,11 @@ ns__client_request(isc_nmhandle_t *handle, isc_result_t eresult,
} else { } else {
switch (isc_sockaddr_pf(&client->peeraddr)) { switch (isc_sockaddr_pf(&client->peeraddr)) {
case AF_INET: case AF_INET:
isc_stats_increment(client->sctx->udpinstats4, isc_stats_increment(client->manager->sctx->udpinstats4,
ISC_MIN((int)reqsize / 16, 18)); ISC_MIN((int)reqsize / 16, 18));
break; break;
case AF_INET6: case AF_INET6:
isc_stats_increment(client->sctx->udpinstats6, isc_stats_increment(client->manager->sctx->udpinstats6,
ISC_MIN((int)reqsize / 16, 18)); ISC_MIN((int)reqsize / 16, 18));
break; break;
default: default:
@@ -1907,7 +1907,7 @@ ns__client_request(isc_nmhandle_t *handle, isc_result_t eresult,
return; return;
} }
dns_opcodestats_increment(client->sctx->opcodestats, dns_opcodestats_increment(client->manager->sctx->opcodestats,
client->message->opcode); client->message->opcode);
switch (client->message->opcode) { switch (client->message->opcode) {
case dns_opcode_query: case dns_opcode_query:
@@ -1927,7 +1927,7 @@ ns__client_request(isc_nmhandle_t *handle, isc_result_t eresult,
/* /*
* Deal with EDNS. * Deal with EDNS.
*/ */
if ((client->sctx->options & NS_SERVER_NOEDNS) != 0) { if ((client->manager->sctx->options & NS_SERVER_NOEDNS) != 0) {
opt = NULL; opt = NULL;
} else { } else {
opt = dns_message_getopt(client->message); opt = dns_message_getopt(client->message);
@@ -1941,7 +1941,8 @@ ns__client_request(isc_nmhandle_t *handle, isc_result_t eresult,
* Are returning FORMERR to all EDNS queries? * Are returning FORMERR to all EDNS queries?
* Simulate a STD13 compliant server. * Simulate a STD13 compliant server.
*/ */
if ((client->sctx->options & NS_SERVER_EDNSFORMERR) != 0) { if ((client->manager->sctx->options & NS_SERVER_EDNSFORMERR) !=
0) {
ns_client_error(client, DNS_R_FORMERR); ns_client_error(client, DNS_R_FORMERR);
return; return;
} }
@@ -1949,7 +1950,8 @@ ns__client_request(isc_nmhandle_t *handle, isc_result_t eresult,
/* /*
* Are returning NOTIMP to all EDNS queries? * Are returning NOTIMP to all EDNS queries?
*/ */
if ((client->sctx->options & NS_SERVER_EDNSNOTIMP) != 0) { if ((client->manager->sctx->options & NS_SERVER_EDNSNOTIMP) !=
0) {
ns_client_error(client, DNS_R_NOTIMP); ns_client_error(client, DNS_R_NOTIMP);
return; return;
} }
@@ -1957,7 +1959,8 @@ ns__client_request(isc_nmhandle_t *handle, isc_result_t eresult,
/* /*
* Are returning REFUSED to all EDNS queries? * Are returning REFUSED to all EDNS queries?
*/ */
if ((client->sctx->options & NS_SERVER_EDNSREFUSED) != 0) { if ((client->manager->sctx->options & NS_SERVER_EDNSREFUSED) !=
0) {
ns_client_error(client, DNS_R_REFUSED); ns_client_error(client, DNS_R_REFUSED);
return; return;
} }
@@ -1965,7 +1968,8 @@ ns__client_request(isc_nmhandle_t *handle, isc_result_t eresult,
/* /*
* Are we dropping all EDNS queries? * Are we dropping all EDNS queries?
*/ */
if ((client->sctx->options & NS_SERVER_DROPEDNS) != 0) { if ((client->manager->sctx->options & NS_SERVER_DROPEDNS) != 0)
{
ns_client_drop(client, ISC_R_SUCCESS); ns_client_drop(client, ISC_R_SUCCESS);
return; return;
} }
@@ -2009,9 +2013,9 @@ ns__client_request(isc_nmhandle_t *handle, isc_result_t eresult,
isc_sockaddr_fromnetaddr(&client->destsockaddr, &client->destaddr, 0); isc_sockaddr_fromnetaddr(&client->destsockaddr, &client->destaddr, 0);
result = client->sctx->matchingview(&netaddr, &client->destaddr, result = client->manager->sctx->matchingview(
client->message, env, &sigresult, &netaddr, &client->destaddr, client->message, env, &sigresult,
&client->view); &client->view);
if (result != ISC_R_SUCCESS) { if (result != ISC_R_SUCCESS) {
char classname[DNS_RDATACLASS_FORMATSIZE]; char classname[DNS_RDATACLASS_FORMATSIZE];
@@ -2056,10 +2060,10 @@ ns__client_request(isc_nmhandle_t *handle, isc_result_t eresult,
if (result != ISC_R_NOTFOUND) { if (result != ISC_R_NOTFOUND) {
signame = NULL; signame = NULL;
if (dns_message_gettsig(client->message, &signame) != NULL) { if (dns_message_gettsig(client->message, &signame) != NULL) {
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_tsigin); ns_statscounter_tsigin);
} else { } else {
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_sig0in); ns_statscounter_sig0in);
} }
} }
@@ -2085,7 +2089,7 @@ ns__client_request(isc_nmhandle_t *handle, isc_result_t eresult,
isc_result_t tresult; isc_result_t tresult;
/* There is a signature, but it is bad. */ /* There is a signature, but it is bad. */
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_invalidsig); ns_statscounter_invalidsig);
signame = NULL; signame = NULL;
if (dns_message_gettsig(client->message, &signame) != NULL) { if (dns_message_gettsig(client->message, &signame) != NULL) {
@@ -2285,17 +2289,14 @@ ns__client_setup(ns_client_t *client, ns_clientmgr_t *mgr, bool new) {
REQUIRE(client != NULL); REQUIRE(client != NULL);
REQUIRE(mgr->tid == isc_nm_tid()); REQUIRE(mgr->tid == isc_nm_tid());
*client = (ns_client_t){ .magic = 0, .tid = mgr->tid }; *client = (ns_client_t){ .magic = 0 };
isc_mem_attach(mgr->mctx, &client->mctx);
clientmgr_attach(mgr, &client->manager); clientmgr_attach(mgr, &client->manager);
ns_server_attach(mgr->sctx, &client->sctx);
isc_task_attach(mgr->task, &client->task);
dns_message_create(client->mctx, DNS_MESSAGE_INTENTPARSE, dns_message_create(client->manager->mctx,
&client->message); DNS_MESSAGE_INTENTPARSE, &client->message);
client->sendbuf = isc_mem_get(client->mctx, client->sendbuf = isc_mem_get(client->manager->mctx,
NS_CLIENT_SEND_BUFFER_SIZE); NS_CLIENT_SEND_BUFFER_SIZE);
/* /*
* Set magic earlier than usual because ns_query_init() * Set magic earlier than usual because ns_query_init()
@@ -2308,30 +2309,19 @@ ns__client_setup(ns_client_t *client, ns_clientmgr_t *mgr, bool new) {
} }
} else { } else {
REQUIRE(NS_CLIENT_VALID(client)); REQUIRE(NS_CLIENT_VALID(client));
REQUIRE(client->tid == isc_nm_tid()); REQUIRE(client->manager->tid == isc_nm_tid());
ns_clientmgr_t *oldmgr = client->manager;
ns_server_t *sctx = client->sctx;
isc_task_t *task = client->task;
unsigned char *sendbuf = client->sendbuf;
dns_message_t *message = client->message;
isc_mem_t *oldmctx = client->mctx;
ns_query_t query = client->query;
int tid = client->tid;
/* /*
* Retain these values from the existing client, but * Retain these values from the existing client, but
* zero every thing else. * zero every thing else.
*/ */
*client = (ns_client_t){ .magic = 0, *client = (ns_client_t){
.mctx = oldmctx, .magic = 0,
.manager = oldmgr, .manager = client->manager,
.sctx = sctx, .sendbuf = client->sendbuf,
.task = task, .message = client->message,
.sendbuf = sendbuf, .query = client->query,
.message = message, };
.query = query,
.tid = tid };
} }
client->query.attributes &= ~NS_QUERYATTR_ANSWERED; client->query.attributes &= ~NS_QUERYATTR_ANSWERED;
@@ -2354,7 +2344,7 @@ ns__client_setup(ns_client_t *client, ns_clientmgr_t *mgr, bool new) {
cleanup: cleanup:
if (client->sendbuf != NULL) { if (client->sendbuf != NULL) {
isc_mem_put(client->mctx, client->sendbuf, isc_mem_put(client->manager->mctx, client->sendbuf,
NS_CLIENT_SEND_BUFFER_SIZE); NS_CLIENT_SEND_BUFFER_SIZE);
} }
@@ -2362,17 +2352,9 @@ cleanup:
dns_message_detach(&client->message); dns_message_detach(&client->message);
} }
if (client->task != NULL) {
isc_task_detach(&client->task);
}
if (client->manager != NULL) { if (client->manager != NULL) {
clientmgr_detach(&client->manager); clientmgr_detach(&client->manager);
} }
isc_mem_detach(&client->mctx);
if (client->sctx != NULL) {
ns_server_detach(&client->sctx);
}
return (result); return (result);
} }
@@ -2709,12 +2691,12 @@ ns_client_dumpmessage(ns_client_t *client, const char *reason) {
*/ */
do { do {
buf = isc_mem_get(client->mctx, len); buf = isc_mem_get(client->manager->mctx, len);
isc_buffer_init(&buffer, buf, len); isc_buffer_init(&buffer, buf, len);
result = dns_message_totext( result = dns_message_totext(
client->message, &dns_master_style_debug, 0, &buffer); client->message, &dns_master_style_debug, 0, &buffer);
if (result == ISC_R_NOSPACE) { if (result == ISC_R_NOSPACE) {
isc_mem_put(client->mctx, buf, len); isc_mem_put(client->manager->mctx, buf, len);
len += 1024; len += 1024;
} else if (result == ISC_R_SUCCESS) { } else if (result == ISC_R_SUCCESS) {
ns_client_log(client, NS_LOGCATEGORY_CLIENT, ns_client_log(client, NS_LOGCATEGORY_CLIENT,
@@ -2725,7 +2707,7 @@ ns_client_dumpmessage(ns_client_t *client, const char *reason) {
} while (result == ISC_R_NOSPACE); } while (result == ISC_R_NOSPACE);
if (buf != NULL) { if (buf != NULL) {
isc_mem_put(client->mctx, buf, len); isc_mem_put(client->manager->mctx, buf, len);
} }
} }
@@ -2863,7 +2845,7 @@ ns_client_newnamebuf(ns_client_t *client) {
CTRACE("ns_client_newnamebuf"); CTRACE("ns_client_newnamebuf");
isc_buffer_allocate(client->mctx, &dbuf, 1024); isc_buffer_allocate(client->manager->mctx, &dbuf, 1024);
ISC_LIST_APPEND(client->query.namebufs, dbuf, link); ISC_LIST_APPEND(client->query.namebufs, dbuf, link);
CTRACE("ns_client_newnamebuf: done"); CTRACE("ns_client_newnamebuf: done");
@@ -2962,7 +2944,8 @@ ns_client_newdbversion(ns_client_t *client, unsigned int n) {
ns_dbversion_t *dbversion = NULL; ns_dbversion_t *dbversion = NULL;
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
dbversion = isc_mem_get(client->mctx, sizeof(*dbversion)); dbversion = isc_mem_get(client->manager->mctx,
sizeof(*dbversion));
*dbversion = (ns_dbversion_t){ 0 }; *dbversion = (ns_dbversion_t){ 0 };
ISC_LIST_INITANDAPPEND(client->query.freeversions, dbversion, ISC_LIST_INITANDAPPEND(client->query.freeversions, dbversion,
link); link);

View File

@@ -168,17 +168,12 @@ struct ns_clientmgr {
/*% nameserver client structure */ /*% nameserver client structure */
struct ns_client { struct ns_client {
unsigned int magic; unsigned int magic;
isc_mem_t *mctx;
int tid;
bool allocated; /* Do we need to free it? */
ns_server_t *sctx;
ns_clientmgr_t *manager; ns_clientmgr_t *manager;
ns_clientstate_t state; ns_clientstate_t state;
int nupdates; int nupdates;
bool nodetach; bool nodetach;
bool shuttingdown; bool shuttingdown;
unsigned int attributes; unsigned int attributes;
isc_task_t *task;
dns_view_t *view; dns_view_t *view;
dns_dispatch_t *dispatch; dns_dispatch_t *dispatch;
isc_nmhandle_t *handle; /* Permanent pointer to handle */ isc_nmhandle_t *handle; /* Permanent pointer to handle */
@@ -204,7 +199,6 @@ struct ns_client {
isc_time_t tnow; isc_time_t tnow;
dns_name_t signername; /*%< [T]SIG key name */ dns_name_t signername; /*%< [T]SIG key name */
dns_name_t *signer; /*%< NULL if not valid sig */ dns_name_t *signer; /*%< NULL if not valid sig */
bool mortal; /*%< Die after handling request */
isc_quota_t *recursionquota; isc_quota_t *recursionquota;
isc_sockaddr_t peeraddr; isc_sockaddr_t peeraddr;
@@ -214,8 +208,6 @@ struct ns_client {
dns_ecs_t ecs; /*%< EDNS client subnet sent by client */ dns_ecs_t ecs; /*%< EDNS client subnet sent by client */
struct in6_pktinfo pktinfo;
isc_dscp_t dscp;
/*% /*%
* Information about recent FORMERR response(s), for * Information about recent FORMERR response(s), for
* FORMERR loop avoidance. This is separate for each * FORMERR loop avoidance. This is separate for each

View File

@@ -520,7 +520,7 @@ inc_stats(ns_client_t *client, isc_statscounter_t counter) {
isc_stats_t *zonestats; isc_stats_t *zonestats;
dns_stats_t *querystats = NULL; dns_stats_t *querystats = NULL;
ns_stats_increment(client->sctx->nsstats, counter); ns_stats_increment(client->manager->sctx->nsstats, counter);
if (zone == NULL) { if (zone == NULL) {
return; return;
@@ -604,7 +604,7 @@ query_error(ns_client_t *client, isc_result_t result, int line) {
break; break;
} }
if ((client->sctx->options & NS_SERVER_LOGQUERIES) != 0) { if ((client->manager->sctx->options & NS_SERVER_LOGQUERIES) != 0) {
loglevel = ISC_LOG_INFO; loglevel = ISC_LOG_INFO;
} }
@@ -649,7 +649,7 @@ query_freefreeversions(ns_client_t *client, bool everything) {
if (i > 3 || everything) { if (i > 3 || everything) {
ISC_LIST_UNLINK(client->query.freeversions, dbversion, ISC_LIST_UNLINK(client->query.freeversions, dbversion,
link); link);
isc_mem_put(client->mctx, dbversion, isc_mem_put(client->manager->mctx, dbversion,
sizeof(*dbversion)); sizeof(*dbversion));
} }
} }
@@ -716,7 +716,7 @@ query_reset(ns_client_t *client, bool everything) {
ns_client_putrdataset(client, &client->query.dns64_sigaaaa); ns_client_putrdataset(client, &client->query.dns64_sigaaaa);
} }
if (client->query.dns64_aaaaok != NULL) { if (client->query.dns64_aaaaok != NULL) {
isc_mem_put(client->mctx, client->query.dns64_aaaaok, isc_mem_put(client->manager->mctx, client->query.dns64_aaaaok,
client->query.dns64_aaaaoklen * sizeof(bool)); client->query.dns64_aaaaoklen * sizeof(bool));
client->query.dns64_aaaaok = NULL; client->query.dns64_aaaaok = NULL;
client->query.dns64_aaaaoklen = 0; client->query.dns64_aaaaoklen = 0;
@@ -762,7 +762,7 @@ query_reset(ns_client_t *client, bool everything) {
rpz_st_clear(client); rpz_st_clear(client);
if (everything) { if (everything) {
INSIST(client->query.rpz_st->rpsdb == NULL); INSIST(client->query.rpz_st->rpsdb == NULL);
isc_mem_put(client->mctx, client->query.rpz_st, isc_mem_put(client->manager->mctx, client->query.rpz_st,
sizeof(*client->query.rpz_st)); sizeof(*client->query.rpz_st));
client->query.rpz_st = NULL; client->query.rpz_st = NULL;
} }
@@ -1174,7 +1174,7 @@ rpz_log_rewrite(ns_client_t *client, bool disabled, dns_rpz_policy_t policy,
* Count both enabled and disabled rewrites for each zone. * Count both enabled and disabled rewrites for each zone.
*/ */
if (!disabled && policy != DNS_RPZ_POLICY_PASSTHRU) { if (!disabled && policy != DNS_RPZ_POLICY_PASSTHRU) {
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_rpz_rewrites); ns_statscounter_rpz_rewrites);
} }
if (p_zone != NULL) { if (p_zone != NULL) {
@@ -2357,7 +2357,7 @@ get_key(ns_client_t *client, dns_db_t *db, dns_rdata_rrsig_t *rrsig,
isc_buffer_init(&b, rdata.data, rdata.length); isc_buffer_init(&b, rdata.data, rdata.length);
isc_buffer_add(&b, rdata.length); isc_buffer_add(&b, rdata.length);
result = dst_key_fromdns(&rrsig->signer, rdata.rdclass, &b, result = dst_key_fromdns(&rrsig->signer, rdata.rdclass, &b,
client->mctx, keyp); client->manager->mctx, keyp);
if (result != ISC_R_SUCCESS) { if (result != ISC_R_SUCCESS) {
continue; continue;
} }
@@ -2384,8 +2384,8 @@ verify(dst_key_t *key, dns_name_t *name, dns_rdataset_t *rdataset,
again: again:
result = dns_dnssec_verify(name, rdataset, key, ignore, result = dns_dnssec_verify(name, rdataset, key, ignore,
client->view->maxbits, client->mctx, rdata, client->view->maxbits, client->manager->mctx,
NULL); rdata, NULL);
if (result == DNS_R_SIGEXPIRED && client->view->acceptexpired) { if (result == DNS_R_SIGEXPIRED && client->view->acceptexpired) {
ignore = true; ignore = true;
goto again; goto again;
@@ -2514,7 +2514,7 @@ prefetch_done(isc_task_t *task, isc_event_t *event) {
REQUIRE(event->ev_type == DNS_EVENT_FETCHDONE); REQUIRE(event->ev_type == DNS_EVENT_FETCHDONE);
client = devent->ev_arg; client = devent->ev_arg;
REQUIRE(NS_CLIENT_VALID(client)); REQUIRE(NS_CLIENT_VALID(client));
REQUIRE(task == client->task); REQUIRE(task == client->manager->task);
CTRACE(ISC_LOG_DEBUG(3), "prefetch_done"); CTRACE(ISC_LOG_DEBUG(3), "prefetch_done");
@@ -2530,7 +2530,7 @@ prefetch_done(isc_task_t *task, isc_event_t *event) {
*/ */
if (client->recursionquota != NULL) { if (client->recursionquota != NULL) {
isc_quota_detach(&client->recursionquota); isc_quota_detach(&client->recursionquota);
ns_stats_decrement(client->sctx->nsstats, ns_stats_decrement(client->manager->sctx->nsstats,
ns_statscounter_recursclients); ns_statscounter_recursclients);
} }
@@ -2557,11 +2557,12 @@ query_prefetch(ns_client_t *client, dns_name_t *qname,
} }
if (client->recursionquota == NULL) { if (client->recursionquota == NULL) {
result = isc_quota_attach(&client->sctx->recursionquota, result =
&client->recursionquota); isc_quota_attach(&client->manager->sctx->recursionquota,
&client->recursionquota);
switch (result) { switch (result) {
case ISC_R_SUCCESS: case ISC_R_SUCCESS:
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_recursclients); ns_statscounter_recursclients);
break; break;
case ISC_R_SOFTQUOTA: case ISC_R_SOFTQUOTA:
@@ -2587,8 +2588,8 @@ query_prefetch(ns_client_t *client, dns_name_t *qname,
options = client->query.fetchoptions | DNS_FETCHOPT_PREFETCH; options = client->query.fetchoptions | DNS_FETCHOPT_PREFETCH;
result = dns_resolver_createfetch( result = dns_resolver_createfetch(
client->view->resolver, qname, rdataset->type, NULL, NULL, NULL, client->view->resolver, qname, rdataset->type, NULL, NULL, NULL,
peeraddr, client->message->id, options, 0, NULL, client->task, peeraddr, client->message->id, options, 0, NULL,
prefetch_done, client, tmprdataset, NULL, client->manager->task, prefetch_done, client, tmprdataset, NULL,
&client->query.prefetch); &client->query.prefetch);
if (result != ISC_R_SUCCESS) { if (result != ISC_R_SUCCESS) {
ns_client_putrdataset(client, &tmprdataset); ns_client_putrdataset(client, &tmprdataset);
@@ -2596,7 +2597,8 @@ query_prefetch(ns_client_t *client, dns_name_t *qname,
} }
dns_rdataset_clearprefetch(rdataset); dns_rdataset_clearprefetch(rdataset);
ns_stats_increment(client->sctx->nsstats, ns_statscounter_prefetch); ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_prefetch);
} }
static void static void
@@ -2774,11 +2776,12 @@ query_rpzfetch(ns_client_t *client, dns_name_t *qname, dns_rdatatype_t type) {
} }
if (client->recursionquota == NULL) { if (client->recursionquota == NULL) {
result = isc_quota_attach(&client->sctx->recursionquota, result =
&client->recursionquota); isc_quota_attach(&client->manager->sctx->recursionquota,
&client->recursionquota);
switch (result) { switch (result) {
case ISC_R_SUCCESS: case ISC_R_SUCCESS:
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_recursclients); ns_statscounter_recursclients);
break; break;
case ISC_R_SOFTQUOTA: case ISC_R_SOFTQUOTA:
@@ -2804,7 +2807,7 @@ query_rpzfetch(ns_client_t *client, dns_name_t *qname, dns_rdatatype_t type) {
isc_nmhandle_attach(client->handle, &client->prefetchhandle); isc_nmhandle_attach(client->handle, &client->prefetchhandle);
result = dns_resolver_createfetch( result = dns_resolver_createfetch(
client->view->resolver, qname, type, NULL, NULL, NULL, peeraddr, client->view->resolver, qname, type, NULL, NULL, NULL, peeraddr,
client->message->id, options, 0, NULL, client->task, client->message->id, options, 0, NULL, client->manager->task,
prefetch_done, client, tmprdataset, NULL, prefetch_done, client, tmprdataset, NULL,
&client->query.prefetch); &client->query.prefetch);
if (result != ISC_R_SUCCESS) { if (result != ISC_R_SUCCESS) {
@@ -4019,7 +4022,7 @@ rpz_rewrite(ns_client_t *client, dns_rdatatype_t qtype, isc_result_t qresult,
#endif /* ifndef USE_DNSRPS */ #endif /* ifndef USE_DNSRPS */
if (st == NULL) { if (st == NULL) {
st = isc_mem_get(client->mctx, sizeof(*st)); st = isc_mem_get(client->manager->mctx, sizeof(*st));
st->state = 0; st->state = 0;
st->rpsdb = NULL; st->rpsdb = NULL;
} }
@@ -4045,7 +4048,7 @@ rpz_rewrite(ns_client_t *client, dns_rdatatype_t qtype, isc_result_t qresult,
} }
result = dns_dnsrps_rewrite_init( result = dns_dnsrps_rewrite_init(
&emsg, st, rpzs, client->query.qname, &emsg, st, rpzs, client->query.qname,
client->mctx, RECURSIONOK(client)); client->manager->mctx, RECURSIONOK(client));
if (result != ISC_R_SUCCESS) { if (result != ISC_R_SUCCESS) {
rpz_log_fail(client, DNS_RPZ_ERROR_LEVEL, NULL, rpz_log_fail(client, DNS_RPZ_ERROR_LEVEL, NULL,
DNS_RPZ_TYPE_QNAME, emsg.c, DNS_RPZ_TYPE_QNAME, emsg.c,
@@ -4779,7 +4782,7 @@ dns64_aaaaok(ns_client_t *client, dns_rdataset_t *rdataset,
} }
count = dns_rdataset_count(rdataset); count = dns_rdataset_count(rdataset);
aaaaok = isc_mem_get(client->mctx, sizeof(bool) * count); aaaaok = isc_mem_get(client->manager->mctx, sizeof(bool) * count);
isc_netaddr_fromsockaddr(&netaddr, &client->peeraddr); isc_netaddr_fromsockaddr(&netaddr, &client->peeraddr);
if (dns_dns64_aaaaok(dns64, &netaddr, client->signer, env, flags, if (dns_dns64_aaaaok(dns64, &netaddr, client->signer, env, flags,
@@ -4793,12 +4796,14 @@ dns64_aaaaok(ns_client_t *client, dns_rdataset_t *rdataset,
} }
} }
if (aaaaok != NULL) { if (aaaaok != NULL) {
isc_mem_put(client->mctx, aaaaok, sizeof(bool) * count); isc_mem_put(client->manager->mctx, aaaaok,
sizeof(bool) * count);
} }
return (true); return (true);
} }
if (aaaaok != NULL) { if (aaaaok != NULL) {
isc_mem_put(client->mctx, aaaaok, sizeof(bool) * count); isc_mem_put(client->manager->mctx, aaaaok,
sizeof(bool) * count);
} }
return (false); return (false);
} }
@@ -6130,7 +6135,7 @@ fetch_callback(isc_task_t *task, isc_event_t *event) {
client = devent->ev_arg; client = devent->ev_arg;
REQUIRE(NS_CLIENT_VALID(client)); REQUIRE(NS_CLIENT_VALID(client));
REQUIRE(task == client->task); REQUIRE(task == client->manager->task);
REQUIRE(RECURSING(client)); REQUIRE(RECURSING(client));
CTRACE(ISC_LOG_DEBUG(3), "fetch_callback"); CTRACE(ISC_LOG_DEBUG(3), "fetch_callback");
@@ -6191,7 +6196,7 @@ fetch_callback(isc_task_t *task, isc_event_t *event) {
if (client->recursionquota != NULL) { if (client->recursionquota != NULL) {
isc_quota_detach(&client->recursionquota); isc_quota_detach(&client->recursionquota);
ns_stats_decrement(client->sctx->nsstats, ns_stats_decrement(client->manager->sctx->nsstats,
ns_statscounter_recursclients); ns_statscounter_recursclients);
} }
@@ -6326,10 +6331,11 @@ check_recursionquota(ns_client_t *client) {
* connection was accepted (if allowed by the TCP quota). * connection was accepted (if allowed by the TCP quota).
*/ */
if (client->recursionquota == NULL) { if (client->recursionquota == NULL) {
result = isc_quota_attach(&client->sctx->recursionquota, result =
&client->recursionquota); isc_quota_attach(&client->manager->sctx->recursionquota,
&client->recursionquota);
if (result == ISC_R_SUCCESS || result == ISC_R_SOFTQUOTA) { if (result == ISC_R_SUCCESS || result == ISC_R_SOFTQUOTA) {
ns_stats_increment(client->sctx->nsstats, ns_stats_increment(client->manager->sctx->nsstats,
ns_statscounter_recursclients); ns_statscounter_recursclients);
} }
@@ -6357,7 +6363,7 @@ check_recursionquota(ns_client_t *client) {
isc_stdtime_t now; isc_stdtime_t now;
isc_stdtime_get(&now); isc_stdtime_get(&now);
if (now != atomic_load_relaxed(&last_hard)) { if (now != atomic_load_relaxed(&last_hard)) {
ns_server_t *sctx = client->sctx; ns_server_t *sctx = client->manager->sctx;
atomic_store_relaxed(&last_hard, now); atomic_store_relaxed(&last_hard, now);
ns_client_log( ns_client_log(
client, NS_LOGCATEGORY_CLIENT, client, NS_LOGCATEGORY_CLIENT,
@@ -6455,8 +6461,8 @@ ns_query_recurse(ns_client_t *client, dns_rdatatype_t qtype, dns_name_t *qname,
result = dns_resolver_createfetch( result = dns_resolver_createfetch(
client->view->resolver, qname, qtype, qdomain, nameservers, client->view->resolver, qname, qtype, qdomain, nameservers,
NULL, peeraddr, client->message->id, client->query.fetchoptions, NULL, peeraddr, client->message->id, client->query.fetchoptions,
0, NULL, client->task, fetch_callback, client, rdataset, 0, NULL, client->manager->task, fetch_callback, client,
sigrdataset, &client->query.fetch); rdataset, sigrdataset, &client->query.fetch);
if (result != ISC_R_SUCCESS) { if (result != ISC_R_SUCCESS) {
isc_nmhandle_detach(&client->fetchhandle); isc_nmhandle_detach(&client->fetchhandle);
ns_client_putrdataset(client, &rdataset); ns_client_putrdataset(client, &rdataset);
@@ -6688,7 +6694,7 @@ query_hookresume(isc_task_t *task, isc_event_t *event) {
CTRACE(ISC_LOG_DEBUG(3), "query_hookresume"); CTRACE(ISC_LOG_DEBUG(3), "query_hookresume");
REQUIRE(NS_CLIENT_VALID(client)); REQUIRE(NS_CLIENT_VALID(client));
REQUIRE(task == client->task); REQUIRE(task == client->manager->task);
REQUIRE(event->ev_type == NS_EVENT_HOOKASYNCDONE); REQUIRE(event->ev_type == NS_EVENT_HOOKASYNCDONE);
LOCK(&client->query.fetchlock); LOCK(&client->query.fetchlock);
@@ -6705,7 +6711,7 @@ query_hookresume(isc_task_t *task, isc_event_t *event) {
if (client->recursionquota != NULL) { if (client->recursionquota != NULL) {
isc_quota_detach(&client->recursionquota); isc_quota_detach(&client->recursionquota);
ns_stats_decrement(client->sctx->nsstats, ns_stats_decrement(client->manager->sctx->nsstats,
ns_statscounter_recursclients); ns_statscounter_recursclients);
} }
@@ -6822,7 +6828,7 @@ query_hookresume(isc_task_t *task, isc_event_t *event) {
hctx->destroy(&hctx); hctx->destroy(&hctx);
qctx_destroy(qctx); qctx_destroy(qctx);
isc_mem_put(client->mctx, qctx, sizeof(*qctx)); isc_mem_put(client->manager->mctx, qctx, sizeof(*qctx));
isc_event_free(&event); isc_event_free(&event);
} }
@@ -6844,10 +6850,11 @@ ns_query_hookasync(query_ctx_t *qctx, ns_query_starthookasync_t runasync,
goto cleanup; goto cleanup;
} }
saved_qctx = isc_mem_get(client->mctx, sizeof(*saved_qctx)); saved_qctx = isc_mem_get(client->manager->mctx, sizeof(*saved_qctx));
qctx_save(qctx, saved_qctx); qctx_save(qctx, saved_qctx);
result = runasync(saved_qctx, client->mctx, arg, client->task, result = runasync(saved_qctx, client->manager->mctx, arg,
query_hookresume, client, &client->query.hookactx); client->manager->task, query_hookresume, client,
&client->query.hookactx);
if (result != ISC_R_SUCCESS) { if (result != ISC_R_SUCCESS) {
goto cleanup; goto cleanup;
} }
@@ -6885,7 +6892,8 @@ cleanup:
qctx_clean(saved_qctx); qctx_clean(saved_qctx);
qctx_freedata(saved_qctx); qctx_freedata(saved_qctx);
qctx_destroy(saved_qctx); qctx_destroy(saved_qctx);
isc_mem_put(client->mctx, saved_qctx, sizeof(*saved_qctx)); isc_mem_put(client->manager->mctx, saved_qctx,
sizeof(*saved_qctx));
} }
qctx->detach_client = true; qctx->detach_client = true;
return (result); return (result);
@@ -6912,7 +6920,7 @@ ns__query_sfcache(query_ctx_t *qctx) {
flags = 0; flags = 0;
#ifdef ENABLE_AFL #ifdef ENABLE_AFL
if (qctx->client->sctx->fuzztype == isc_fuzz_resolver) { if (qctx->client->manager->sctx->fuzztype == isc_fuzz_resolver) {
failcache = false; failcache = false;
} else { } else {
failcache = dns_badcache_find( failcache = dns_badcache_find(
@@ -8279,7 +8287,7 @@ query_dns64(query_ctx_t *qctx) {
isc_netaddr_fromsockaddr(&netaddr, &client->peeraddr); isc_netaddr_fromsockaddr(&netaddr, &client->peeraddr);
isc_buffer_allocate(client->mctx, &buffer, isc_buffer_allocate(client->manager->mctx, &buffer,
view->dns64cnt * 16 * view->dns64cnt * 16 *
dns_rdataset_count(qctx->rdataset)); dns_rdataset_count(qctx->rdataset));
result = dns_message_gettemprdataset(client->message, &dns64_rdataset); result = dns_message_gettemprdataset(client->message, &dns64_rdataset);
@@ -8459,7 +8467,7 @@ query_filter64(query_ctx_t *qctx) {
client->query.attributes &= ~NS_QUERYATTR_SECURE; client->query.attributes &= ~NS_QUERYATTR_SECURE;
} }
isc_buffer_allocate(client->mctx, &buffer, isc_buffer_allocate(client->manager->mctx, &buffer,
16 * dns_rdataset_count(qctx->rdataset)); 16 * dns_rdataset_count(qctx->rdataset));
result = dns_message_gettemprdataset(client->message, &myrdataset); result = dns_message_gettemprdataset(client->message, &myrdataset);
if (result != ISC_R_SUCCESS) { if (result != ISC_R_SUCCESS) {
@@ -9271,7 +9279,7 @@ query_sign_nodata(query_ctx_t *qctx) {
*/ */
if (dns_rdataset_isassociated(qctx->rdataset) && if (dns_rdataset_isassociated(qctx->rdataset) &&
!dns_name_equal(qname, found) && !dns_name_equal(qname, found) &&
(((qctx->client->sctx->options & (((qctx->client->manager->sctx->options &
NS_SERVER_NONEAREST) == 0) || NS_SERVER_NONEAREST) == 0) ||
qctx->qtype == dns_rdatatype_ds)) qctx->qtype == dns_rdatatype_ds))
{ {
@@ -10779,7 +10787,7 @@ query_addsoa(query_ctx_t *qctx, unsigned int override_ttl,
/* /*
* Don't add the SOA record for test which set "-T nosoa". * Don't add the SOA record for test which set "-T nosoa".
*/ */
if (((client->sctx->options & NS_SERVER_NOSOA) != 0) && if (((client->manager->sctx->options & NS_SERVER_NOSOA) != 0) &&
(!WANTDNSSEC(client) || !dns_rdataset_isassociated(qctx->rdataset))) (!WANTDNSSEC(client) || !dns_rdataset_isassociated(qctx->rdataset)))
{ {
return (ISC_R_SUCCESS); return (ISC_R_SUCCESS);
@@ -11800,7 +11808,7 @@ log_tat(ns_client_t *client) {
if (client->query.qtype == dns_rdatatype_dnskey) { if (client->query.qtype == dns_rdatatype_dnskey) {
uint16_t keytags = client->keytag_len / 2; uint16_t keytags = client->keytag_len / 2;
size_t len = taglen = sizeof("65000") * keytags + 1; size_t len = taglen = sizeof("65000") * keytags + 1;
char *cp = tags = isc_mem_get(client->mctx, taglen); char *cp = tags = isc_mem_get(client->manager->mctx, taglen);
int i = 0; int i = 0;
INSIST(client->keytag != NULL); INSIST(client->keytag != NULL);
@@ -11826,7 +11834,7 @@ log_tat(ns_client_t *client) {
ISC_LOG_INFO, "trust-anchor-telemetry '%s/%s' from %s%s", ISC_LOG_INFO, "trust-anchor-telemetry '%s/%s' from %s%s",
namebuf, classbuf, clientbuf, tags != NULL ? tags : ""); namebuf, classbuf, clientbuf, tags != NULL ? tags : "");
if (tags != NULL) { if (tags != NULL) {
isc_mem_put(client->mctx, tags, taglen); isc_mem_put(client->manager->mctx, tags, taglen);
} }
} }
@@ -12025,7 +12033,7 @@ ns_query_start(ns_client_t *client, isc_nmhandle_t *handle) {
return; return;
} }
if ((client->sctx->options & NS_SERVER_LOGQUERIES) != 0) { if ((client->manager->sctx->options & NS_SERVER_LOGQUERIES) != 0) {
log_query(client, saved_flags, saved_extflags); log_query(client, saved_flags, saved_extflags);
} }
@@ -12035,7 +12043,8 @@ ns_query_start(ns_client_t *client, isc_nmhandle_t *handle) {
rdataset = ISC_LIST_HEAD(client->query.qname->list); rdataset = ISC_LIST_HEAD(client->query.qname->list);
INSIST(rdataset != NULL); INSIST(rdataset != NULL);
client->query.qtype = qtype = rdataset->type; client->query.qtype = qtype = rdataset->type;
dns_rdatatypestats_increment(client->sctx->rcvquerystats, qtype); dns_rdatatypestats_increment(client->manager->sctx->rcvquerystats,
qtype);
log_tat(client); log_tat(client);
@@ -12084,7 +12093,7 @@ ns_query_start(ns_client_t *client, isc_nmhandle_t *handle) {
return; return;
case dns_rdatatype_tkey: case dns_rdatatype_tkey:
result = dns_tkey_processquery( result = dns_tkey_processquery(
client->message, client->sctx->tkeyctx, client->message, client->manager->sctx->tkeyctx,
client->view->dynamickeys); client->view->dynamickeys);
if (result == ISC_R_SUCCESS) { if (result == ISC_R_SUCCESS) {
query_send(client); query_send(client);
@@ -12190,7 +12199,7 @@ ns_query_start(ns_client_t *client, isc_nmhandle_t *handle) {
* If "-T noaa" has been set on the command line don't set * If "-T noaa" has been set on the command line don't set
* AA on authoritative answers. * AA on authoritative answers.
*/ */
if ((client->sctx->options & NS_SERVER_NOAA) == 0) { if ((client->manager->sctx->options & NS_SERVER_NOAA) == 0) {
message->flags |= DNS_MESSAGEFLAG_AA; message->flags |= DNS_MESSAGEFLAG_AA;
} }

View File

@@ -933,7 +933,7 @@ run_hookasync_test(const ns__query_hookasync_test_params_t *test) {
} }
/* Remember SERVFAIL counter */ /* Remember SERVFAIL counter */
srvfail_cnt = ns_stats_get_counter(qctx->client->sctx->nsstats, srvfail_cnt = ns_stats_get_counter(qctx->client->manager->sctx->nsstats,
ns_statscounter_servfail); ns_statscounter_servfail);
/* /*
@@ -983,9 +983,9 @@ run_hookasync_test(const ns__query_hookasync_test_params_t *test) {
INSIST(qctx->client->query.hookactx == NULL); INSIST(qctx->client->query.hookactx == NULL);
INSIST(qctx->client->state == NS_CLIENTSTATE_WORKING); INSIST(qctx->client->state == NS_CLIENTSTATE_WORKING);
INSIST(qctx->client->recursionquota == NULL); INSIST(qctx->client->recursionquota == NULL);
INSIST(ns_stats_get_counter(qctx->client->sctx->nsstats, INSIST(ns_stats_get_counter(
ns_statscounter_recursclients) == qctx->client->manager->sctx->nsstats,
0); ns_statscounter_recursclients) == 0);
INSIST(!ISC_LINK_LINKED(qctx->client, rlink)); INSIST(!ISC_LINK_LINKED(qctx->client, rlink));
if (!test->do_cancel) { if (!test->do_cancel) {
/* /*
@@ -1005,9 +1005,9 @@ run_hookasync_test(const ns__query_hookasync_test_params_t *test) {
* Also, the last-generated qctx should have detach_client being true. * Also, the last-generated qctx should have detach_client being true.
*/ */
if (expect_servfail) { if (expect_servfail) {
INSIST(ns_stats_get_counter(qctx->client->sctx->nsstats, INSIST(ns_stats_get_counter(
ns_statscounter_servfail) == qctx->client->manager->sctx->nsstats,
srvfail_cnt + 1); ns_statscounter_servfail) == srvfail_cnt + 1);
if (test->do_cancel) { if (test->do_cancel) {
/* qctx was created on resume and copied in hook */ /* qctx was created on resume and copied in hook */
INSIST(asdata.qctx.detach_client); INSIST(asdata.qctx.detach_client);

View File

@@ -323,7 +323,7 @@ update_log_cb(void *arg, dns_zone_t *zone, int level, const char *message) {
*/ */
static void static void
inc_stats(ns_client_t *client, dns_zone_t *zone, isc_statscounter_t counter) { inc_stats(ns_client_t *client, dns_zone_t *zone, isc_statscounter_t counter) {
ns_stats_increment(client->sctx->nsstats, counter); ns_stats_increment(client->manager->sctx->nsstats, counter);
if (zone != NULL) { if (zone != NULL) {
isc_stats_t *zonestats = dns_zone_getrequeststats(zone); isc_stats_t *zonestats = dns_zone_getrequeststats(zone);
@@ -1642,8 +1642,8 @@ send_update_event(ns_client_t *client, dns_zone_t *zone) {
isc_task_t *zonetask = NULL; isc_task_t *zonetask = NULL;
event = (update_event_t *)isc_event_allocate( event = (update_event_t *)isc_event_allocate(
client->mctx, client, DNS_EVENT_UPDATE, update_action, NULL, client->manager->mctx, client, DNS_EVENT_UPDATE, update_action,
sizeof(*event)); NULL, sizeof(*event));
event->zone = zone; event->zone = zone;
event->result = ISC_R_SUCCESS; event->result = ISC_R_SUCCESS;
@@ -2651,7 +2651,7 @@ update_action(isc_task_t *task, isc_event_t *event) {
dns_diff_t diff; /* Pending updates. */ dns_diff_t diff; /* Pending updates. */
dns_diff_t temp; /* Pending RR existence assertions. */ dns_diff_t temp; /* Pending RR existence assertions. */
bool soa_serial_changed = false; bool soa_serial_changed = false;
isc_mem_t *mctx = client->mctx; isc_mem_t *mctx = client->manager->mctx;
dns_rdatatype_t covers; dns_rdatatype_t covers;
dns_message_t *request = client->message; dns_message_t *request = client->message;
dns_rdataclass_t zoneclass; dns_rdataclass_t zoneclass;
@@ -3646,7 +3646,7 @@ common:
uev->ev_type = DNS_EVENT_UPDATEDONE; uev->ev_type = DNS_EVENT_UPDATEDONE;
uev->ev_action = updatedone_action; uev->ev_action = updatedone_action;
isc_task_send(client->task, &event); isc_task_send(client->manager->task, &event);
INSIST(ver == NULL); INSIST(ver == NULL);
INSIST(event == NULL); INSIST(event == NULL);
@@ -3660,7 +3660,7 @@ updatedone_action(isc_task_t *task, isc_event_t *event) {
UNUSED(task); UNUSED(task);
REQUIRE(event->ev_type == DNS_EVENT_UPDATEDONE); REQUIRE(event->ev_type == DNS_EVENT_UPDATEDONE);
REQUIRE(task == client->task); REQUIRE(task == client->manager->task);
REQUIRE(client->updatehandle == client->handle); REQUIRE(client->updatehandle == client->handle);
INSIST(client->nupdates > 0); INSIST(client->nupdates > 0);
@@ -3721,7 +3721,7 @@ forward_callback(void *arg, isc_result_t result, dns_message_t *answer) {
inc_stats(client, zone, ns_statscounter_updaterespfwd); inc_stats(client, zone, ns_statscounter_updaterespfwd);
} }
isc_task_send(client->task, ISC_EVENT_PTR(&uev)); isc_task_send(client->manager->task, ISC_EVENT_PTR(&uev));
dns_zone_detach(&zone); dns_zone_detach(&zone);
} }
@@ -3752,7 +3752,7 @@ forward_action(isc_task_t *task, isc_event_t *event) {
if (result != ISC_R_SUCCESS) { if (result != ISC_R_SUCCESS) {
uev->ev_type = DNS_EVENT_UPDATEDONE; uev->ev_type = DNS_EVENT_UPDATEDONE;
uev->ev_action = forward_fail; uev->ev_action = forward_fail;
isc_task_send(client->task, &event); isc_task_send(client->manager->task, &event);
inc_stats(client, zone, ns_statscounter_updatefwdfail); inc_stats(client, zone, ns_statscounter_updatefwdfail);
dns_zone_detach(&zone); dns_zone_detach(&zone);
} else { } else {
@@ -3771,8 +3771,8 @@ send_forward_event(ns_client_t *client, dns_zone_t *zone) {
isc_task_t *zonetask = NULL; isc_task_t *zonetask = NULL;
event = (update_event_t *)isc_event_allocate( event = (update_event_t *)isc_event_allocate(
client->mctx, client, DNS_EVENT_UPDATE, forward_action, NULL, client->manager->mctx, client, DNS_EVENT_UPDATE, forward_action,
sizeof(*event)); NULL, sizeof(*event));
event->zone = zone; event->zone = zone;
event->result = ISC_R_SUCCESS; event->result = ISC_R_SUCCESS;

View File

@@ -110,7 +110,7 @@
static void static void
inc_stats(ns_client_t *client, dns_zone_t *zone, isc_statscounter_t counter) { inc_stats(ns_client_t *client, dns_zone_t *zone, isc_statscounter_t counter) {
ns_stats_increment(client->sctx->nsstats, counter); ns_stats_increment(client->manager->sctx->nsstats, counter);
if (zone != NULL) { if (zone != NULL) {
isc_stats_t *zonestats = dns_zone_getrequeststats(zone); isc_stats_t *zonestats = dns_zone_getrequeststats(zone);
if (zonestats != NULL) { if (zonestats != NULL) {
@@ -733,7 +733,7 @@ ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) {
dns_rdata_t soa_rdata = DNS_RDATA_INIT; dns_rdata_t soa_rdata = DNS_RDATA_INIT;
bool have_soa = false; bool have_soa = false;
const char *mnemonic = NULL; const char *mnemonic = NULL;
isc_mem_t *mctx = client->mctx; isc_mem_t *mctx = client->manager->mctx;
dns_message_t *request = client->message; dns_message_t *request = client->message;
xfrout_ctx_t *xfr = NULL; xfrout_ctx_t *xfr = NULL;
isc_quota_t *quota = NULL; isc_quota_t *quota = NULL;
@@ -766,7 +766,7 @@ ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) {
/* /*
* Apply quota. * Apply quota.
*/ */
result = isc_quota_attach(&client->sctx->xfroutquota, &quota); result = isc_quota_attach(&client->manager->sctx->xfroutquota, &quota);
if (result != ISC_R_SUCCESS) { if (result != ISC_R_SUCCESS) {
isc_log_write(XFROUT_COMMON_LOGARGS, ISC_LOG_WARNING, isc_log_write(XFROUT_COMMON_LOGARGS, ISC_LOG_WARNING,
"%s request denied: %s", mnemonic, "%s request denied: %s", mnemonic,
@@ -1535,7 +1535,7 @@ sendstream(xfrout_ctx_t *xfr) {
* here (TCP only). * here (TCP only).
*/ */
if ((isc_buffer_usedlength(&xfr->buf) >= if ((isc_buffer_usedlength(&xfr->buf) >=
xfr->client->sctx->transfer_tcp_message_size) && xfr->client->manager->sctx->transfer_tcp_message_size) &&
is_tcp) is_tcp)
{ {
break; break;