From: Petr Menšík Date: Wed, 6 Oct 2021 11:53:33 +0000 (+0200) Subject: Move common flags logging to shared functions X-Git-Tag: v9.21.2~28^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e6b19af2dd3e923c9e378011297fe745fcaacba4;p=thirdparty%2Fbind9.git 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 --- diff --git a/lib/ns/query.c b/lib/ns/query.c index e80a91f1ed6..1cf20c00b36 100644 --- a/lib/ns/query.c +++ b/lib/ns/query.c @@ -546,6 +546,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]; @@ -553,11 +598,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(level)) @@ -572,34 +615,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); } @@ -11504,8 +11531,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; @@ -11520,28 +11547,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