]> 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:59:04 +0000 (17:59 +1100)
ns_client_sendraw() is currently only used to relay UPDATE
responses back to the client.  dns_dt_send() is called with
this assumption.

(cherry picked from commit b09727a765edddf5604f1d0be9501a9cc04c7756)

lib/ns/client.c

index 1ca126eb47241e066951cb873dfc54420a10fd11..7068531777857b27e1be46dea2aa59a8fce76a9f 100644 (file)
@@ -369,6 +369,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;