From 581451e531b91a05b363764e0d1053a25273158f Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Tue, 29 Jun 2021 17:17:20 +0200 Subject: [PATCH] dnsdist: Set the dnstap/protobuf transport to TCP for DoH queries --- pdns/dnsdist-lua-actions.cc | 4 ++-- pdns/dnsdist-protobuf.cc | 2 +- pdns/dnsdist.cc | 2 ++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/pdns/dnsdist-lua-actions.cc b/pdns/dnsdist-lua-actions.cc index 0cb97ec749..b710df3b8b 100644 --- a/pdns/dnsdist-lua-actions.cc +++ b/pdns/dnsdist-lua-actions.cc @@ -1056,7 +1056,7 @@ public: static thread_local std::string data; data.clear(); - DnstapMessage message(data, !dq->getHeader()->qr ? DnstapMessage::MessageType::client_query : DnstapMessage::MessageType::client_response, d_identity, dq->remote, dq->local, dq->tcp, reinterpret_cast(dq->getData().data()), dq->getData().size(), dq->queryTime, nullptr); + DnstapMessage message(data, !dq->getHeader()->qr ? DnstapMessage::MessageType::client_query : DnstapMessage::MessageType::client_response, d_identity, dq->remote, dq->local, dq->du != nullptr ? true : dq->tcp, reinterpret_cast(dq->getData().data()), dq->getData().size(), dq->queryTime, nullptr); { if (d_alterFunc) { std::lock_guard lock(g_luamutex); @@ -1189,7 +1189,7 @@ public: gettime(&now, true); data.clear(); - DnstapMessage message(data, DnstapMessage::MessageType::client_response, d_identity, dr->remote, dr->local, dr->tcp, reinterpret_cast(dr->getData().data()), dr->getData().size(), dr->queryTime, &now); + DnstapMessage message(data, DnstapMessage::MessageType::client_response, d_identity, dr->remote, dr->local, dr->du != nullptr ? true : dr->tcp, reinterpret_cast(dr->getData().data()), dr->getData().size(), dr->queryTime, &now); { if (d_alterFunc) { std::lock_guard lock(g_luamutex); diff --git a/pdns/dnsdist-protobuf.cc b/pdns/dnsdist-protobuf.cc index 1ceb86af72..ccc219e735 100644 --- a/pdns/dnsdist-protobuf.cc +++ b/pdns/dnsdist-protobuf.cc @@ -124,7 +124,7 @@ void DNSDistProtoBufMessage::serialize(std::string& data) const m.setTime(ts.tv_sec, ts.tv_nsec / 1000); } - m.setRequest(d_dq.uniqueId ? *d_dq.uniqueId : getUniqueID(), d_requestor ? *d_requestor : *d_dq.remote, d_responder ? *d_responder : *d_dq.local, d_question ? d_question->d_name : *d_dq.qname, d_question ? d_question->d_type : d_dq.qtype, d_question ? d_question->d_class : d_dq.qclass, d_dq.getHeader()->id, d_dq.tcp, d_bytes ? *d_bytes : d_dq.getData().size()); + m.setRequest(d_dq.uniqueId ? *d_dq.uniqueId : getUniqueID(), d_requestor ? *d_requestor : *d_dq.remote, d_responder ? *d_responder : *d_dq.local, d_question ? d_question->d_name : *d_dq.qname, d_question ? d_question->d_type : d_dq.qtype, d_question ? d_question->d_class : d_dq.qclass, d_dq.getHeader()->id, d_dq.du != nullptr ? true : d_dq.tcp, d_bytes ? *d_bytes : d_dq.getData().size()); if (d_serverIdentity) { m.setServerIdentity(*d_serverIdentity); diff --git a/pdns/dnsdist.cc b/pdns/dnsdist.cc index f474c79c91..97bd95d140 100644 --- a/pdns/dnsdist.cc +++ b/pdns/dnsdist.cc @@ -635,6 +635,7 @@ void responderThread(std::shared_ptr dss) dh->id = ids->origID; DNSResponse dr = makeDNSResponseFromIDState(*ids, response, false); + dr.du = du; if (dh->tc && g_truncateTC) { truncateTC(response, dr.getMaximumSize(), qnameWireLength); } @@ -646,6 +647,7 @@ void responderThread(std::shared_ptr dss) if (ids->cs && !ids->cs->muted) { if (du) { + dr.du = nullptr; #ifdef HAVE_DNS_OVER_HTTPS // DoH query du->response = std::move(response); -- 2.47.2