Ejemplo n.º 1
0
 def getcached(self, name, rtype = proto.QTANY):
     self.cachelock.acquire()
     try:
         if name not in self.cache:
             return []
         now = int(time.time())
         if isinstance(self.cache[name], nxdmark):
             if self.cache[name].expire < now:
                 self.cache[name] = []
                 return []
             return self.cache[name]
         ret = []
         if rtype == proto.QTANY:
             cond = lambda rt: True
         elif type(rtype) == int:
             cond = lambda rt: rtype == rt
         elif type(rtype) == str:
             rtid = rec.rtypebyname(rtype)
             cond = lambda rt: rtid == rt
         else:
             rtset = set([((type(rtid) == str) and rec.rtypebyname(rtid)) or rtid for rtid in rtype])
             cond = lambda rt: rt in rtset
         for exp, trd, data, auth in self.cache[name]:
             if exp > now and cond(trd):
                 ret += [(rec.rr((name, trd), exp - now, data), auth)]
         return ret
     finally:
         self.cachelock.release()
Ejemplo n.º 2
0
 def decoderecord(self, name, record):
     set = pickle.loads(record)
     rrset = []
     for cur in set:
         head = rec.rrhead(name, cur[0])
         data = cur[2]
         newrr = rec.rr(head, cur[1], data)
         newrr.setflags(cur[3])
         rrset += [newrr]
     return rrset
Ejemplo n.º 3
0
def tsigsign(pkt, key, stime = None, fudge = 300, error = 0, other = "", ctx = None):
    if stime is None: stime = int(time.time())
    msg = ""
    if ctx is not None:
        if key is None:
            key = ctx.key
        msg += struct.pack(">H", len(ctx.prevmac)) + ctx.prevmac
    msg += pkt.encode()
    msg += key.name.canonwire()
    msg += struct.pack(">HL", rec.CLASSANY, 0)
    msg += key.algo.cname.canonwire()
    msg += struct.pack(">Q", stime)[-6:]
    msg += struct.pack(">3H", fudge, error, len(other))
    msg += other
    digest = key.sign(msg)
    pkt.addad(rec.rr((key.name, "TSIG", rec.CLASSANY), 0, rec.rrdata("TSIG", key.algo.cname, stime, fudge, digest, pkt.qid, error, other)))
    pkt.signed = True