Beispiel #1
0
 def run(self):
     while self.alive:
         p = select.poll()
         for af, sk in self.server.sockets:
             p.register(sk.fileno(), select.POLLIN)
         try:
             fds = p.poll(1000)
         except select.error, e:
             if e[0] == errno.EINTR:
                 continue
             raise
         for fd, event in fds:
             if event & select.POLLIN == 0:
                 continue
             for af, sk in self.server.sockets:
                 if sk.fileno() == fd:
                     break
             else:
                 continue
             req, addr = sk.recvfrom(65536)
             try:
                 pkt = proto.decodepacket(req)
             except proto.malformedpacket, inst:
                 resp = proto.packet(inst.qid, ["resp"])
                 resp.rescode = proto.FORMERR
                 sk.sendto(resp.encode(), addr)
             else:
                 logger.debug("got request (%04x) from %s", pkt.qid, addr[0])
                 pkt.addr = (af,) + addr
                 self.server.queuereq(pkt, dnsserver.socklistener.sender(addr, sk))
Beispiel #2
0
 def squery(self, name, rtype):
     packet = proto.packet()
     try:
         if self.nsrecurse: packet.setflags(["recurse"])
     except AttributeError: pass
     packet.addq(rec.rrhead(name, rtype))
     return self.resolve(packet)
Beispiel #3
0
 def squery(self, name, rtype):
     if type(name) == str:
         name = dn.fromstring(name)
     if not name.rooted:
         namelist = [name + prefix for prefix in self.prelist] + [name + dn.fromstring(".")]
     else:
         namelist = [name]
     for name in namelist:
         packet = proto.packet()
         packet.setflags(["recurse"])
         packet.addq(rec.rrhead(name, rtype))
         res = self.resolve(packet)
         if res.rescode == 0:
             break
     return res