예제 #1
0
 def dnsapi_getdomainmetadata(self, qname, qkind):
     """pdns getDomainMetadata api"""
     self.QueryCounter.labels('getDomainMetadata').inc()
     log.debug('QUERY: %s %s', qname, qkind)
     if qkind == 'SOA-EDIT':
         # http://jpmens.net/2013/01/18/understanding-powerdns-soa-edit/
         return dnsresponse(['EPOCH'])
     else:
         return dnsresponse(False)
예제 #2
0
def dnsresponse(data):
    """Construct a response for the PowerDNS remote backend.

    Remote api docs:
        https://doc.powerdns.com/md/authoritative/backend-remote/
    """
    resp = {'result': list(data or [])}
    log.debug('DNS response: %s', resp)
    return resp
예제 #3
0
 def dnsapi_lookup(self, qname, qtype):
     """pdns lookup api"""
     log.debug('QUERY: %s %s', qname, qtype)
     self.QueryCounter.labels('lookup').inc()
     self.LookupCounter.labels('qtype').inc()
     # TODO: better ANY handling (what's even correct here?)
     with self.LookupTimer.labels(qtype).time():
         if qtype == 'ANY':
             return dnsresponse(itertools.chain(
                 self.a_lookup(qname),
                 self.ns_lookup(qname),
                 self.soa_lookup(qname),
                 self.srv_lookup(qname)))
         elif qtype == 'A':
             return dnsresponse(self.a_lookup(qname))
         elif qtype == 'NS':
             return dnsresponse(self.ns_lookup(qname))
         elif qtype == 'SOA':
             return dnsresponse(self.soa_lookup(qname))
         elif qtype == 'SRV':
             return dnsresponse(self.srv_lookup(qname))
         else:
             return dnsresponse(False)