]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Correctly identify forwarded queries with DNSTAP
authorMark Andrews <marka@isc.org>
Fri, 30 Jan 2026 02:45:39 +0000 (13:45 +1100)
committerMark Andrews <marka@isc.org>
Tue, 17 Feb 2026 02:17:43 +0000 (13:17 +1100)
Queries using forwarders where not being correctly identified
when using dnstap.

lib/dns/resolver.c

index f09b502ba67200d6c2bcbd508641fc873434230b..38e4411820eb64216c8136186fda72f4114d0086 100644 (file)
@@ -2862,7 +2862,7 @@ resquery_send(resquery_t *query) {
        /*
         * Log the outgoing query via dnstap.
         */
-       if ((fctx->qmessage->flags & DNS_MESSAGEFLAG_RD) != 0) {
+       if (ISFORWARDER(query->addrinfo)) {
                dtmsgtype = DNS_DTTYPE_FQ;
        } else {
                dtmsgtype = DNS_DTTYPE_RQ;
@@ -9421,7 +9421,13 @@ rctx_logpacket(respctx_t *rctx) {
        }
        dns_compress_invalidate(&cctx);
 
-       if ((fctx->qmessage->flags & DNS_MESSAGEFLAG_RD) != 0) {
+       /*
+        * Check if the response came from a forwarder to correctly
+        * classify as Forward Response (FR) vs Recursive Response (RR)
+        * for DNSTAP logging. This is more accurate than using the RD
+        * flag which only indicates the original query intent.
+        */
+       if (ISFORWARDER(rctx->query->addrinfo)) {
                dtmsgtype = DNS_DTTYPE_FR;
        } else {
                dtmsgtype = DNS_DTTYPE_RR;