]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Move common flags logging to shared functions
authorPetr Menšík <pemensik@redhat.com>
Wed, 6 Oct 2021 11:53:33 +0000 (13:53 +0200)
committerMark Andrews <marka@isc.org>
Thu, 19 Sep 2024 21:44:06 +0000 (21:44 +0000)
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>
lib/ns/query.c

index e80a91f1ed66ab24819dd2f62e05be2b544f9efa..1cf20c00b36c7e41e1c1e856426304ecf1926959 100644 (file)
@@ -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