mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-08 07:12:05 -04:00
Make responselog flags similar to querylog
Remove answer flag from log, log instead count of records for each message section. Include EDNS version and few flags of response. Add also status of result. Still does not include body of responses rrset.
This commit is contained in:
parent
c4b7dce376
commit
6f879aba65
1 changed files with 41 additions and 8 deletions
|
|
@ -552,7 +552,12 @@ log_response(ns_client_t *client, dns_rcode_t rcode) {
|
|||
char typebuf[DNS_RDATATYPE_FORMATSIZE];
|
||||
char classbuf[DNS_RDATACLASS_FORMATSIZE];
|
||||
char rcodebuf[20];
|
||||
char onbuf[ISC_NETADDR_FORMATSIZE];
|
||||
char ecsbuf[DNS_ECS_FORMATSIZE + sizeof(" [ECS ]") - 1] = { 0 };
|
||||
char ednsbuf[sizeof("E(65535)")] = { 0 };
|
||||
isc_buffer_t b;
|
||||
uint16_t extflags;
|
||||
unsigned int flags;
|
||||
int level = ISC_LOG_INFO;
|
||||
|
||||
if (!isc_log_wouldlog(level))
|
||||
|
|
@ -564,10 +569,38 @@ log_response(ns_client_t *client, dns_rcode_t rcode) {
|
|||
dns_rdatatype_format(client->query.qtype, typebuf, sizeof(typebuf));
|
||||
isc_buffer_init(&b, rcodebuf, sizeof(rcodebuf));
|
||||
dns_rcode_totext(rcode, &b);
|
||||
isc_buffer_putuint8(&b, 0);
|
||||
isc_netaddr_format(&client->destaddr, onbuf, sizeof(onbuf));
|
||||
|
||||
ns_client_log(client, NS_LOGCATEGORY_QUERIES, NS_LOGMODULE_QUERY, level,
|
||||
"response: %s %s %s %.*s", namebuf, classbuf, typebuf,
|
||||
(int)isc_buffer_usedlength(&b), rcodebuf);
|
||||
if (client->ednsversion >= 0) {
|
||||
snprintf(ednsbuf, sizeof(ednsbuf), "E(%hd)",
|
||||
client->ednsversion);
|
||||
}
|
||||
|
||||
if (HAVEECS(client)) {
|
||||
strlcpy(ecsbuf, " [ECS ", sizeof(ecsbuf));
|
||||
dns_ecs_format(&client->ecs, ecsbuf + 6, sizeof(ecsbuf) - 6);
|
||||
strlcat(ecsbuf, "]", sizeof(ecsbuf));
|
||||
}
|
||||
|
||||
extflags = client->extflags;
|
||||
flags = client->message->flags;
|
||||
ns_client_log(client, NS_LOGCATEGORY_RESPONSES, NS_LOGMODULE_QUERY,
|
||||
level,
|
||||
"response: %s %s %s %s %d %d %d %s%s%s%s%s%s%s (%s)%s",
|
||||
namebuf, classbuf, typebuf, rcodebuf,
|
||||
client->message->counts[DNS_SECTION_ANSWER],
|
||||
client->message->counts[DNS_SECTION_AUTHORITY],
|
||||
client->message->counts[DNS_SECTION_ADDITIONAL],
|
||||
RECURSIONOK(client) ? "+" : "-",
|
||||
(client->signer != NULL) ? "S" : "", ednsbuf,
|
||||
TCP(client) ? "T" : "",
|
||||
((extflags & DNS_MESSAGEEXTFLAG_DO) != 0) ? "D" : "",
|
||||
((flags & DNS_MESSAGEFLAG_CD) != 0) ? "C" : "",
|
||||
HAVECOOKIE(client) ? "V"
|
||||
: WANTCOOKIE(client) ? "K"
|
||||
: "",
|
||||
onbuf, ecsbuf);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -599,13 +632,13 @@ query_send(ns_client_t *client) {
|
|||
counter = ns_statscounter_failure;
|
||||
}
|
||||
|
||||
inc_stats(client, counter);
|
||||
ns_client_send(client);
|
||||
|
||||
if ((client->manager->sctx->options & NS_SERVER_LOGRESPONSES) != 0) {
|
||||
log_response(client, client->message->rcode);
|
||||
}
|
||||
|
||||
inc_stats(client, counter);
|
||||
ns_client_send(client);
|
||||
|
||||
if (!client->nodetach) {
|
||||
isc_nmhandle_detach(&client->reqhandle);
|
||||
}
|
||||
|
|
@ -636,14 +669,14 @@ query_error(ns_client_t *client, isc_result_t result, int line) {
|
|||
|
||||
log_queryerror(client, result, line, loglevel);
|
||||
|
||||
ns_client_error(client, result);
|
||||
|
||||
if (client->query.origqname != NULL &&
|
||||
(client->manager->sctx->options & NS_SERVER_LOGRESPONSES) != 0)
|
||||
{
|
||||
log_response(client, rcode);
|
||||
}
|
||||
|
||||
ns_client_error(client, result);
|
||||
|
||||
if (!client->nodetach) {
|
||||
isc_nmhandle_detach(&client->reqhandle);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue