]> git.ipfire.org Git - thirdparty/pdns.git/blobdiff - contrib/ProtobufLogger.py
auth: Use the correct type while reading from the control channel
[thirdparty/pdns.git] / contrib / ProtobufLogger.py
index 5075e43f7d9f53adc3386359a8cc3185cc86bcd6..c88653ce799beee38ce4db2b032312970f9eb955 100644 (file)
@@ -66,6 +66,21 @@ class PDNSPBConnHandler(object):
                                               message.question.qType,
                                               message.question.qName))
 
+    @staticmethod
+    def getAppliedPolicyTypeAsString(polType):
+        if polType == dnsmessage_pb2.PBDNSMessage.UNKNOWN:
+            return 'Unknown'
+        elif polType == dnsmessage_pb2.PBDNSMessage.QNAME:
+            return 'QName'
+        elif polType == dnsmessage_pb2.PBDNSMessage.CLIENTIP:
+            return 'Client IP'
+        elif polType == dnsmessage_pb2.PBDNSMessage.RESPONSEIP:
+            return 'Response IP'
+        elif polType == dnsmessage_pb2.PBDNSMessage.NSDNAME:
+            return 'NS DName'
+        elif polType == dnsmessage_pb2.PBDNSMessage.NSIP:
+            return 'NS IP'
+
     def printResponse(self, message):
         if message.HasField('response'):
             response = message.response
@@ -79,6 +94,8 @@ class PDNSPBConnHandler(object):
             policystr = ''
             if response.HasField('appliedPolicy') and response.appliedPolicy:
                 policystr = ', Applied policy: ' + response.appliedPolicy
+                if response.HasField('appliedPolicyType'):
+                    policystr = policystr + ' (' + self.getAppliedPolicyTypeAsString(response.appliedPolicyType) + ')'
 
             tagsstr = ''
             if response.tags:
@@ -94,9 +111,12 @@ class PDNSPBConnHandler(object):
             for rr in response.rrs:
                 rrclass = 1
                 rdatastr = ''
+                rrudr = 0
                 if rr.HasField('class'):
                     rrclass = getattr(rr, 'class')
                 rrtype = rr.type
+                if rr.HasField('udr'):
+                    rrudr = rr.udr
                 if (rrclass == 1 or rrclass == 255) and rr.HasField('rdata'):
                     if rrtype == 1:
                         rdatastr = socket.inet_ntop(socket.AF_INET, rr.rdata)
@@ -105,11 +125,12 @@ class PDNSPBConnHandler(object):
                     elif rrtype == 28:
                         rdatastr = socket.inet_ntop(socket.AF_INET6, rr.rdata)
 
-                print("\t - %d, %d, %s, %d, %s" % (rrclass,
+                print("\t - %d, %d, %s, %d, %s, %d" % (rrclass,
                                                    rrtype,
                                                    rr.name,
                                                    rr.ttl,
-                                                   rdatastr))
+                                                   rdatastr,
+                                                   rrudr))
 
     def printSummary(self, msg, typestr):
         datestr = datetime.datetime.fromtimestamp(msg.timeSec).strftime('%Y-%m-%d %H:%M:%S')
@@ -135,25 +156,41 @@ class PDNSPBConnHandler(object):
             protostr = 'TCP'
 
         messageidstr = binascii.hexlify(bytearray(msg.messageId))
+
+        serveridstr = 'N/A'
+        if msg.HasField('serverIdentity'):
+            serveridstr = msg.serverIdentity
+
         initialrequestidstr = ''
         if msg.HasField('initialRequestId'):
-            initialrequestidstr = ', initial uuid: ' + binascii.hexlify(bytearray(msg.initialRequestId))
+            initialrequestidstr = ', initial uuid: %s ' % (binascii.hexlify(bytearray(msg.initialRequestId)))
 
         requestorstr = ''
         requestor = self.getRequestorSubnet(msg)
         if requestor:
             requestorstr = ' (' + requestor + ')'
 
-        print('[%s] %s of size %d: %s%s -> %s (%s), id: %d, uuid: %s%s' % (datestr,
-                                                                           typestr,
-                                                                           msg.inBytes,
-                                                                           ipfromstr,
-                                                                           requestorstr,
-                                                                           iptostr,
-                                                                           protostr,
-                                                                           msg.id,
-                                                                           messageidstr,
-                                                                           initialrequestidstr))
+        deviceId = binascii.hexlify(bytearray(msg.deviceId))
+        requestorId = msg.requestorId
+        nod = 0
+        if (msg.HasField('newlyObservedDomain')):
+            nod = msg.newlyObservedDomain
+
+        print('[%s] %s of size %d: %s%s -> %s (%s), id: %d, uuid: %s%s '
+                  'requestorid: %s deviceid: %s serverid: %s nod: %d' % (datestr,
+                                                    typestr,
+                                                    msg.inBytes,
+                                                    ipfromstr,
+                                                    requestorstr,
+                                                    iptostr,
+                                                    protostr,
+                                                    msg.id,
+                                                    messageidstr,
+                                                    initialrequestidstr,
+                                                    requestorId,
+                                                    deviceId,
+                                                    serveridstr,
+                                                    nod))
 
     def getRequestorSubnet(self, msg):
         requestorstr = None