]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Implement DNSTAP support in ns_client_sendraw()
authorMark Andrews <marka@isc.org>
Mon, 9 Nov 2020 02:44:22 +0000 (13:44 +1100)
committerMark Andrews <marka@isc.org>
Tue, 10 Nov 2020 06:15:46 +0000 (06:15 +0000)
ns_client_sendraw() is currently only used to relay UPDATE
responses back to the client.  dns_dt_send() is called with
this assumption.

lib/ns/client.c

index cf9f5dc1375adaa7a197596d6f96a5255e15b117..da3ca14e0bd90f2d987bad510ca4951d59b89412 100644 (file)
@@ -370,6 +370,23 @@ ns_client_sendraw(ns_client_t *client, dns_message_t *message) {
        r.base[0] = (client->message->id >> 8) & 0xff;
        r.base[1] = client->message->id & 0xff;
 
+#ifdef HAVE_DNSTAP
+       if (client->view != NULL) {
+               bool tcp = TCP_CLIENT(client);
+               dns_dtmsgtype_t dtmsgtype;
+               if (client->message->opcode == dns_opcode_update) {
+                       dtmsgtype = DNS_DTTYPE_UR;
+               } else if ((client->message->flags & DNS_MESSAGEFLAG_RD) != 0) {
+                       dtmsgtype = DNS_DTTYPE_CR;
+               } else {
+                       dtmsgtype = DNS_DTTYPE_AR;
+               }
+               dns_dt_send(client->view, dtmsgtype, &client->peeraddr,
+                           &client->destsockaddr, tcp, NULL,
+                           &client->requesttime, NULL, &buffer);
+       }
+#endif
+
        client_sendpkg(client, &buffer);
 
        return;