mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-08 20:32:06 -04:00
fix: usr: Report client transport in 'rndc recursing'
When `rndc recursing` is used to dump the list of recursing clients, it now indicates whether a query was sent via UDP, TCP, TLS, or HTTP. Closes #4971 Merge branch '4971-recursing-show-client-transport' into 'main' See merge request isc-projects/bind9!9590
This commit is contained in:
commit
87ec2ce498
8 changed files with 98 additions and 8 deletions
|
|
@ -429,8 +429,10 @@ Currently supported commands are:
|
|||
|
||||
The first list includes all unique clients that are waiting for
|
||||
recursion to complete, including the query that is awaiting a
|
||||
response and the timestamp (seconds since the Unix epoch) of
|
||||
when named started processing this client query.
|
||||
response, the timestamp (seconds since the Unix epoch) of
|
||||
when named started processing this client query, the client's
|
||||
address, and the transport over which the the query was received
|
||||
(UDP, TCP, TLS, or HTTP).
|
||||
|
||||
The second list comprises of domains for which there are active
|
||||
(or recently active) fetches in progress. It reports the number
|
||||
|
|
|
|||
|
|
@ -28,4 +28,4 @@ rm -f curl.out.*
|
|||
rm -f stats*out
|
||||
rm -f ns*/managed-keys.bind*
|
||||
rm -f xsltproc.out.*
|
||||
rm -f named.stats.* ns*/named.stats.*
|
||||
rm -f named.stats.* ns*/named.stats.* ns*/named.recursing
|
||||
|
|
|
|||
|
|
@ -98,6 +98,10 @@ getstats() {
|
|||
grep "2 recursing clients" $last_stats >/dev/null || return 1
|
||||
}
|
||||
retry_quiet 5 getstats || ret=1
|
||||
# confirm agreement with 'rndc recursing'
|
||||
$RNDCCMD -s 10.53.0.3 recursing || ret=1
|
||||
lines=$(grep -c "; client .*(tcp)" ns3/named.recursing || true)
|
||||
[ "$lines" -eq 2 ] || ret=1
|
||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
status=$((status + ret))
|
||||
n=$((n + 1))
|
||||
|
|
|
|||
|
|
@ -204,3 +204,9 @@ dns_transport_list_detach(dns_transport_list_t **listp);
|
|||
*\li 'listp' is not NULL.
|
||||
*\li '*listp' is a valid transport list.
|
||||
*/
|
||||
|
||||
const char *
|
||||
dns_transport_totext(dns_transport_type_t type);
|
||||
/*%<
|
||||
* Convert a transport type value into a string.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -772,3 +772,19 @@ dns_transport_list_detach(dns_transport_list_t **listp) {
|
|||
transport_list_destroy(list);
|
||||
}
|
||||
}
|
||||
|
||||
const char *
|
||||
dns_transport_totext(dns_transport_type_t type) {
|
||||
switch (type) {
|
||||
case DNS_TRANSPORT_UDP:
|
||||
return ("udp");
|
||||
case DNS_TRANSPORT_TCP:
|
||||
return ("tcp");
|
||||
case DNS_TRANSPORT_TLS:
|
||||
return ("tls");
|
||||
case DNS_TRANSPORT_HTTP:
|
||||
return ("https");
|
||||
default:
|
||||
UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -141,7 +141,6 @@ static void
|
|||
compute_cookie(ns_client_t *client, uint32_t when, const unsigned char *secret,
|
||||
isc_buffer_t *buf);
|
||||
|
||||
#ifdef HAVE_DNSTAP
|
||||
static dns_transport_type_t
|
||||
ns_client_transport_type(const ns_client_t *client) {
|
||||
/*
|
||||
|
|
@ -186,7 +185,6 @@ ns_client_transport_type(const ns_client_t *client) {
|
|||
|
||||
return DNS_TRANSPORT_UDP;
|
||||
}
|
||||
#endif /* HAVE_DNSTAP */
|
||||
|
||||
void
|
||||
ns_client_recursing(ns_client_t *client) {
|
||||
|
|
@ -2921,10 +2919,12 @@ ns_client_dumprecursing(FILE *f, ns_clientmgr_t *manager) {
|
|||
}
|
||||
UNLOCK(&client->query.fetchlock);
|
||||
fprintf(f,
|
||||
"; client %s%s%s: id %u '%s/%s/%s'%s%s "
|
||||
"; client %s (%s)%s%s: id %u '%s/%s/%s'%s%s "
|
||||
"requesttime %u\n",
|
||||
peerbuf, sep, name, client->message->id, namebuf,
|
||||
typebuf, classbuf, origfor, original,
|
||||
peerbuf,
|
||||
dns_transport_totext(ns_client_transport_type(client)),
|
||||
sep, name, client->message->id, namebuf, typebuf,
|
||||
classbuf, origfor, original,
|
||||
isc_time_seconds(&client->requesttime));
|
||||
client = ISC_LIST_NEXT(client, rlink);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ check_PROGRAMS = \
|
|||
sigs_test \
|
||||
skr_test \
|
||||
time_test \
|
||||
transport_test \
|
||||
tsig_test \
|
||||
update_test \
|
||||
zonemgr_test \
|
||||
|
|
|
|||
61
tests/dns/transport_test.c
Normal file
61
tests/dns/transport_test.c
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
|
||||
*
|
||||
* SPDX-License-Identifier: MPL-2.0
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*
|
||||
* See the COPYRIGHT file distributed with this work for additional
|
||||
* information regarding copyright ownership.
|
||||
*/
|
||||
|
||||
#include <inttypes.h>
|
||||
#include <sched.h> /* IWYU pragma: keep */
|
||||
#include <setjmp.h>
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#define UNIT_TESTING
|
||||
#include <cmocka.h>
|
||||
|
||||
#include <isc/string.h>
|
||||
#include <isc/util.h>
|
||||
|
||||
#include <dns/transport.h>
|
||||
|
||||
#include <tests/dns.h>
|
||||
|
||||
ISC_RUN_TEST_IMPL(dns_transport_totext) {
|
||||
dns_transport_t *udp = NULL, *tcp = NULL;
|
||||
dns_transport_t *tls = NULL, *http = NULL;
|
||||
dns_transport_list_t *tlist = NULL;
|
||||
|
||||
tlist = dns_transport_list_new(mctx);
|
||||
udp = dns_transport_new(dns_rootname, DNS_TRANSPORT_UDP, tlist);
|
||||
tcp = dns_transport_new(dns_rootname, DNS_TRANSPORT_TCP, tlist);
|
||||
tls = dns_transport_new(dns_rootname, DNS_TRANSPORT_TLS, tlist);
|
||||
http = dns_transport_new(dns_rootname, DNS_TRANSPORT_HTTP, tlist);
|
||||
|
||||
assert_string_equal(dns_transport_totext(dns_transport_get_type(udp)),
|
||||
"udp");
|
||||
assert_string_equal(dns_transport_totext(dns_transport_get_type(tcp)),
|
||||
"tcp");
|
||||
assert_string_equal(dns_transport_totext(dns_transport_get_type(tls)),
|
||||
"tls");
|
||||
assert_string_equal(dns_transport_totext(dns_transport_get_type(http)),
|
||||
"https");
|
||||
|
||||
dns_transport_list_detach(&tlist);
|
||||
}
|
||||
|
||||
ISC_TEST_LIST_START
|
||||
ISC_TEST_ENTRY(dns_transport_totext)
|
||||
ISC_TEST_LIST_END
|
||||
|
||||
ISC_TEST_MAIN
|
||||
Loading…
Reference in a new issue