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:
271
lib/ns/client.c
271
lib/ns/client.c
@@ -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);
|
||||||
|
@@ -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
|
||||||
|
113
lib/ns/query.c
113
lib/ns/query.c
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
|
@@ -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, "a);
|
result = isc_quota_attach(&client->manager->sctx->xfroutquota, "a);
|
||||||
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;
|
||||||
|
Reference in New Issue
Block a user