Move common flags logging to shared functions

Query and response log shares the same flags. Move flags logging out of
log_query to share it with log_response. Use buffer instead of snprintf
to fill flags a bit faster.

Signed-off-by: Petr Menšík <pemensik@redhat.com>
(cherry picked from commit e6b19af2dd)
This commit is contained in:
Petr Menšík
2021-10-06 13:53:33 +02:00
committed by Mark Andrews
parent d9d50f6274
commit 59770f281c

View File

@@ -548,6 +548,51 @@ inc_stats(ns_client_t *client, isc_statscounter_t counter) {
}
}
#define NS_CLIENT_FLAGS_FORMATSIZE sizeof("+E(255)STDCV")
static inline void
ns_client_log_flags(ns_client_t *client, unsigned int flags,
unsigned int extflags, char *buf, size_t len) {
isc_buffer_t b;
isc_buffer_init(&b, buf, len);
isc_buffer_putuint8(&b, WANTRECURSION(client) ? '+' : '-');
if (client->ednsversion >= 0) {
char ednsbuf[sizeof("E(255)")] = { 0 };
snprintf(ednsbuf, sizeof(ednsbuf), "E(%hhu)",
(unsigned char)client->ednsversion);
isc_buffer_putstr(&b, ednsbuf);
}
if (client->signer != NULL) {
isc_buffer_putuint8(&b, 'S');
}
if (TCP(client)) {
isc_buffer_putuint8(&b, 'T');
}
if ((extflags & DNS_MESSAGEEXTFLAG_DO) != 0) {
isc_buffer_putuint8(&b, 'D');
}
if ((flags & DNS_MESSAGEFLAG_CD) != 0) {
isc_buffer_putuint8(&b, 'C');
}
if (HAVECOOKIE(client)) {
isc_buffer_putuint8(&b, 'V');
} else if (WANTCOOKIE(client)) {
isc_buffer_putuint8(&b, 'K');
}
isc_buffer_putuint8(&b, 0);
}
#define NS_CLIENT_ECS_FORMATSIZE (DNS_ECS_FORMATSIZE + sizeof(" [ECS ]") - 1)
static inline void
ns_client_log_ecs(ns_client_t *client, char *ecsbuf, size_t len) {
strlcpy(ecsbuf, " [ECS ", len);
dns_ecs_format(&client->ecs, ecsbuf + 6, len - 6);
strlcat(ecsbuf, "]", len);
}
static inline void
log_response(ns_client_t *client, dns_rcode_t rcode) {
char namebuf[DNS_NAME_FORMATSIZE];
@@ -555,11 +600,9 @@ log_response(ns_client_t *client, dns_rcode_t rcode) {
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 };
char ecsbuf[NS_CLIENT_ECS_FORMATSIZE] = { 0 };
char flagsbuf[NS_CLIENT_FLAGS_FORMATSIZE] = { 0 };
isc_buffer_t b;
uint16_t extflags;
unsigned int flags;
int level = ISC_LOG_INFO;
if (!isc_log_wouldlog(ns_lctx, level))
@@ -574,34 +617,18 @@ log_response(ns_client_t *client, dns_rcode_t rcode) {
isc_buffer_putuint8(&b, 0);
isc_netaddr_format(&client->destaddr, onbuf, sizeof(onbuf));
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));
ns_client_log_ecs(client, ecsbuf, sizeof(ecsbuf));
}
extflags = client->extflags;
flags = client->message->flags;
ns_client_log_flags(client, client->message->flags, client->extflags,
flagsbuf, sizeof(flagsbuf));
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",
level, "response: %s %s %s %s %u %u %u %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"
: "",
client->message->counts[DNS_SECTION_ADDITIONAL], flagsbuf,
onbuf, ecsbuf);
}
@@ -11859,8 +11886,8 @@ log_query(ns_client_t *client, unsigned int flags, unsigned int extflags) {
char typebuf[DNS_RDATATYPE_FORMATSIZE];
char classbuf[DNS_RDATACLASS_FORMATSIZE];
char onbuf[ISC_NETADDR_FORMATSIZE];
char ecsbuf[DNS_ECS_FORMATSIZE + sizeof(" [ECS ]") - 1] = { 0 };
char ednsbuf[sizeof("E(65535)")] = { 0 };
char ecsbuf[NS_CLIENT_ECS_FORMATSIZE] = { 0 };
char flagsbuf[NS_CLIENT_FLAGS_FORMATSIZE] = { 0 };
dns_rdataset_t *rdataset;
int level = ISC_LOG_INFO;
@@ -11875,28 +11902,15 @@ log_query(ns_client_t *client, unsigned int flags, unsigned int extflags) {
dns_rdatatype_format(rdataset->type, typebuf, sizeof(typebuf));
isc_netaddr_format(&client->destaddr, onbuf, sizeof(onbuf));
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));
ns_client_log_ecs(client, ecsbuf, sizeof(ecsbuf));
}
ns_client_log_flags(client, flags, extflags, flagsbuf,
sizeof(flagsbuf));
ns_client_log(client, NS_LOGCATEGORY_QUERIES, NS_LOGMODULE_QUERY, level,
"query: %s %s %s %s%s%s%s%s%s%s (%s)%s", namebuf,
classbuf, typebuf, WANTRECURSION(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);
"query: %s %s %s %s (%s)%s", namebuf, classbuf, typebuf,
flagsbuf, onbuf, ecsbuf);
}
static void