From 52e0309542f1c7dbb1bfbf6a64d17c310c8a4ab3 Mon Sep 17 00:00:00 2001 From: Otto Moerbeek Date: Wed, 12 Jun 2024 10:39:19 +0200 Subject: [PATCH] rec: do not add UDR field to outgoingProtobuf answer messages --- contrib/ProtobufLogger.py | 19 +++++++++---------- pdns/recursordist/lwres.cc | 2 +- pdns/recursordist/rec-protozero.cc | 14 ++++++++------ pdns/recursordist/rec-protozero.hh | 2 +- 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/contrib/ProtobufLogger.py b/contrib/ProtobufLogger.py index 0f7c080415..760f82ed50 100644 --- a/contrib/ProtobufLogger.py +++ b/contrib/ProtobufLogger.py @@ -139,7 +139,7 @@ class PDNSPBConnHandler(object): if response.HasField('queryTimeSec'): datestr = datetime.datetime.fromtimestamp(response.queryTimeSec).strftime('%Y-%m-%d %H:%M:%S') if response.HasField('queryTimeUsec'): - datestr = datestr + '.' + str(response.queryTimeUsec) + datestr = datestr + '.' + ("%06d" % response.queryTimeUsec) print("- Query time: %s" % (datestr)) policystr = '' @@ -166,12 +166,12 @@ class PDNSPBConnHandler(object): for rr in response.rrs: rrclass = 1 rdatastr = '' - rrudr = 0 + rrudr = 'N/A' if rr.HasField('class'): rrclass = getattr(rr, 'class') rrtype = rr.type if rr.HasField('udr'): - rrudr = rr.udr + rrudr = str(rr.udr) if (rrclass == 1 or rrclass == 255) and rr.HasField('rdata'): if rrtype == 1: rdatastr = socket.inet_ntop(socket.AF_INET, rr.rdata) @@ -180,7 +180,7 @@ class PDNSPBConnHandler(object): elif rrtype == 28: rdatastr = socket.inet_ntop(socket.AF_INET6, rr.rdata) - print("\t - %d, %d, %s, %d, %s, %d" % (rrclass, + print("\t - %d, %d, %s, %d, %s, %s" % (rrclass, rrtype, rr.name, rr.ttl, @@ -190,7 +190,7 @@ class PDNSPBConnHandler(object): def printSummary(self, msg, typestr): datestr = datetime.datetime.fromtimestamp(msg.timeSec).strftime('%Y-%m-%d %H:%M:%S') if msg.HasField('timeUsec'): - datestr = datestr + '.' + str(msg.timeUsec) + datestr = datestr + '.' + ("%06d" % msg.timeUsec) ipfromstr = 'N/A' iptostr = 'N/A' toportstr = '' @@ -241,14 +241,14 @@ class PDNSPBConnHandler(object): if msg.HasField('requestorId'): requestorId = msg.requestorId - nod = 0 + nod = 'N/A'; if msg.HasField('newlyObservedDomain'): - nod = msg.newlyObservedDomain + nod = str(msg.newlyObservedDomain) workerId = 'N/A' if msg.HasField('workerId'): workerId = str(msg.workerId) - + pcCacheHit = 'N/A' if msg.HasField('packetCacheHit'): pcCacheHit = str(msg.packetCacheHit) @@ -256,10 +256,9 @@ class PDNSPBConnHandler(object): outgoingQs = 'N/A' if msg.HasField('outgoingQueries'): outgoingQs = str(msg.outgoingQueries) - print('[%s] %s of size %d: %s%s%s -> %s%s(%s) id: %d uuid: %s%s ' - 'requestorid: %s deviceid: %s devicename: %s serverid: %s nod: %d workerId: %s pcCacheHit: %s outgoingQueries: %s' % (datestr, + 'requestorid: %s deviceid: %s devicename: %s serverid: %s nod: %s workerId: %s pcCacheHit: %s outgoingQueries: %s' % (datestr, typestr, msg.inBytes, ipfromstr, diff --git a/pdns/recursordist/lwres.cc b/pdns/recursordist/lwres.cc index 5a7182d6b5..95f3dca2a2 100644 --- a/pdns/recursordist/lwres.cc +++ b/pdns/recursordist/lwres.cc @@ -270,7 +270,7 @@ static void logIncomingResponse(const std::shared_ptr -void pdns::ProtoZero::RecMessage::addRR(const DNSRecord& record, const std::set& exportTypes, [[maybe_unused]] bool udr) +void pdns::ProtoZero::RecMessage::addRR(const DNSRecord& record, const std::set& exportTypes, [[maybe_unused]] std::optional udr) { if (record.d_place != DNSResourceRecord::ANSWER || record.d_class != QClass::IN) { return; @@ -150,12 +150,14 @@ void pdns::ProtoZero::RecMessage::addRR(const DNSRecord& record, const std::set< break; } #ifdef NOD_ENABLED - pbf_rr.add_bool(static_cast(pdns::ProtoZero::Message::RRField::udr), udr); - pbf_rr.commit(); + if (udr) { + pbf_rr.add_bool(static_cast(pdns::ProtoZero::Message::RRField::udr), *udr); + pbf_rr.commit(); - // Save the offset of the byte containing the just added bool. We can do this since - // we know a bit about how protobuf's encoding works. - offsets.push_back(d_rspbuf.length() - 1); + // Save the offset of the byte containing the just added bool. We can do this since + // we know a bit about how protobuf's encoding works. + offsets.push_back(d_rspbuf.length() - 1); + } #endif } diff --git a/pdns/recursordist/rec-protozero.hh b/pdns/recursordist/rec-protozero.hh index 926982a20c..7655b3c0c3 100644 --- a/pdns/recursordist/rec-protozero.hh +++ b/pdns/recursordist/rec-protozero.hh @@ -109,7 +109,7 @@ namespace ProtoZero // DNSResponse related fields below - void addRR(const DNSRecord& record, const std::set& exportTypes, bool udr); + void addRR(const DNSRecord& record, const std::set& exportTypes, std::optional udr); void setAppliedPolicyType(const DNSFilterEngine::PolicyType type) { -- 2.47.2