From fbcaadb22e07be3f3fd1b56092cf1dcfd56363fc Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Wed, 27 Mar 2019 17:45:45 +0100 Subject: [PATCH] dnstap: if recursion is not available, log queries as AQ instead of CQ (cherry picked from commit 1f578cdb1252575f097a83a831bdfb59d346ef09) (cherry picked from commit f6c3b135222b5207d5bca4522dc938bf4d2e742e) --- bin/named/client.c | 8 +++++--- bin/tests/system/dnstap/tests.sh | 24 ++++++++++++------------ 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/bin/named/client.c b/bin/named/client.c index d425df27f0..d482da7121 100644 --- a/bin/named/client.c +++ b/bin/named/client.c @@ -2825,8 +2825,9 @@ client_request(isc_task_t *task, isc_event_t *event) { true) == ISC_R_SUCCESS) ra = true; - if (ra == true) + if (ra == true) { client->attributes |= NS_CLIENTATTR_RA; + } ns_client_log(client, DNS_LOGCATEGORY_SECURITY, NS_LOGMODULE_CLIENT, ISC_LOG_DEBUG(3), ra ? "recursion available" : @@ -2852,10 +2853,11 @@ client_request(isc_task_t *task, isc_event_t *event) { case dns_opcode_query: CTRACE("query"); #ifdef HAVE_DNSTAP - if ((client->message->flags & DNS_MESSAGEFLAG_RD) != 0) + if (ra && (client->message->flags & DNS_MESSAGEFLAG_RD) != 0) { dtmsgtype = DNS_DTTYPE_CQ; - else + } else { dtmsgtype = DNS_DTTYPE_AQ; + } dns_dt_send(view, dtmsgtype, &client->peeraddr, &client->destsockaddr, TCP_CLIENT(client), NULL, diff --git a/bin/tests/system/dnstap/tests.sh b/bin/tests/system/dnstap/tests.sh index b09284c766..3e3aaa918d 100644 --- a/bin/tests/system/dnstap/tests.sh +++ b/bin/tests/system/dnstap/tests.sh @@ -131,16 +131,16 @@ status=`expr $status + $ret` echo_i "checking AUTH_QUERY message counts" ret=0 -[ $aq1 -eq 2 ] || { - echo_i "ns1 $aq1 exepcted 2" +[ $aq1 -eq 3 ] || { + echo_i "ns1 $aq1 exepcted 3" ret=1 } -[ $aq2 -eq 1 ] || { - echo_i "ns2 $aq2 expected 1" +[ $aq2 -eq 2 ] || { + echo_i "ns2 $aq2 expected 2" ret=1 } -[ $aq3 -eq 0 ] || { - echo_i "ns3 $aq3 expected 0" +[ $aq3 -eq 1 ] || { + echo_i "ns3 $aq3 expected 1" ret=1 } if [ $ret != 0 ]; then echo_i "failed"; fi @@ -165,16 +165,16 @@ status=`expr $status + $ret` echo_i "checking CLIENT_QUERY message counts" ret=0 -[ $cq1 -eq 1 ] || { - echo_i "ns1 $cq1 expected 1" +[ $cq1 -eq 0 ] || { + echo_i "ns1 $cq1 expected 0" ret=1 } -[ $cq2 -eq 1 ] || { - echo_i "ns2 $cq2 expected 1" +[ $cq2 -eq 0 ] || { + echo_i "ns2 $cq2 expected 0" ret=1 } -[ $cq3 -eq 2 ] || { - echo_i "ns3 $cq3 expected 2" +[ $cq3 -eq 1 ] || { + echo_i "ns3 $cq3 expected 1" ret=1 } if [ $ret != 0 ]; then echo_i "failed"; fi