]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Set the dnstap/protobuf transport to TCP for DoH queries 10538/head
authorRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 29 Jun 2021 15:17:20 +0000 (17:17 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 29 Jun 2021 15:20:00 +0000 (17:20 +0200)
pdns/dnsdist-lua-actions.cc
pdns/dnsdist-protobuf.cc
pdns/dnsdist.cc

index 0cb97ec7494fc162ae20086bf6f94758270a60dd..b710df3b8b7538cfd7132691ff3d241de84432b7 100644 (file)
@@ -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<const char*>(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<const char*>(dq->getData().data()), dq->getData().size(), dq->queryTime, nullptr);
     {
       if (d_alterFunc) {
         std::lock_guard<std::mutex> 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<const char*>(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<const char*>(dr->getData().data()), dr->getData().size(), dr->queryTime, &now);
     {
       if (d_alterFunc) {
         std::lock_guard<std::mutex> lock(g_luamutex);
index 1ceb86af72763fc500fdb071732ea20b43ae9f8c..ccc219e7352d809a7b563893b92675f6d7132f4d 100644 (file)
@@ -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);
index f474c79c91e52ac449b40c4d06c11e47ba59ccc8..97bd95d1408f727c1c7c3055b30c48e4a543d56c 100644 (file)
@@ -635,6 +635,7 @@ void responderThread(std::shared_ptr<DownstreamState> 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<DownstreamState> dss)
 
         if (ids->cs && !ids->cs->muted) {
           if (du) {
+            dr.du = nullptr;
 #ifdef HAVE_DNS_OVER_HTTPS
             // DoH query
             du->response = std::move(response);