changes
This commit is contained in:
@ -4,41 +4,38 @@ import dns.update
|
||||
import dns.rdataclass
|
||||
import dns.rdatatype
|
||||
import dns.rdtypes.IN.A
|
||||
import dns.tsigkeyring
|
||||
import dns.tsigkeyring
|
||||
import dns.rcode
|
||||
import threading
|
||||
from logger import Logger
|
||||
|
||||
class LocalDnsHandlerException(Exception):
|
||||
def __init__(self, msg):
|
||||
Exception.__init__(self, msg)
|
||||
|
||||
class DnsHandler(threading.Thread):
|
||||
def __init__(self, msgQueue, tsigKey, nsAddress, ttl, statusMap):
|
||||
def __init__(self, msgQueue, tsigKey, nsAddress, ttl):
|
||||
threading.Thread.__init__(self)
|
||||
self.msgQueue = msgQueue
|
||||
self.nsAddress = nsAddress
|
||||
self.ttl = ttl
|
||||
self.keyring = dns.tsigkeyring.from_text(tsigKey)
|
||||
self.statusMap = statusMap
|
||||
self.setDaemon(True)
|
||||
self.setDaemon(True)
|
||||
|
||||
|
||||
def run(self):
|
||||
while(True):
|
||||
msg = self.msgQueue.get()
|
||||
|
||||
dynid = msg.dynid
|
||||
name = msg.name
|
||||
zone = msg.zone
|
||||
address = msg.address
|
||||
|
||||
fullName = name + '.' + zone
|
||||
|
||||
if self.statusMap.has_key(fullName):
|
||||
if self.statusMap[fullName] != address:
|
||||
self.deleteARR(dynid, name, zone, self.statusMap[fullName])
|
||||
self.insertARR(dynid, name, zone, address)
|
||||
self.statusMap[fullName] = address
|
||||
else:
|
||||
self.insertARR(dynid, name, zone, address)
|
||||
self.statusMap[fullName] = address
|
||||
if msg.address != msg.addressInDns:
|
||||
try:
|
||||
self.deleteARR(msg.dynid, msg.name, msg.zone, msg.addressInDns)
|
||||
self.insertARR(msg.dynid, msg.name, msg.zone, msg.address)
|
||||
Logger.log("Update: %s, %s.%s, %s -> %s" %
|
||||
(msg.dynid, msg.name, msg.zone, msg.addressInDns, msg.address))
|
||||
msg.addressInDns = msg.address
|
||||
except Exception, e:
|
||||
Logger.log("Failure for %s when updating DNS: %s" % (str(msg), str(e)))
|
||||
|
||||
|
||||
def insertARR(self, dynid, name, zone, address):
|
||||
@ -48,14 +45,9 @@ class DnsHandler(threading.Thread):
|
||||
u.add(name, self.ttl, rr)
|
||||
r = dns.query.tcp(u, self.nsAddress)
|
||||
|
||||
if r.rcode() != 0:
|
||||
# failure
|
||||
Logger.log("failure for %s when inserting A-RR %s -> %s into %s" %
|
||||
(dynid, name, address, zone))
|
||||
else:
|
||||
# success
|
||||
Logger.log("insert for %s ARR %s -> %s into %s" %
|
||||
(dynid, name, address, zone))
|
||||
rc = r.rcode()
|
||||
if rc != 0:
|
||||
raise LocalDnsHandlerException("failure when inserting: %d, %s" % (rc, dns.rcode.to_text(rc)))
|
||||
|
||||
|
||||
def deleteARR(self, dynid, name, zone, address):
|
||||
@ -65,14 +57,7 @@ class DnsHandler(threading.Thread):
|
||||
u.delete(name, rr)
|
||||
r = dns.query.tcp(u, self.nsAddress)
|
||||
|
||||
if r.rcode() != 0:
|
||||
# failure
|
||||
Logger.log("failure for %s when deleting A-RR %s -> %s from %s" %
|
||||
(dynid, name, address, zone))
|
||||
else:
|
||||
# success
|
||||
Logger.log("delete for %s ARR %s -> %s from %s" %
|
||||
(dynid, name, address, zone))
|
||||
|
||||
|
||||
rc = r.rcode()
|
||||
if rc != 0:
|
||||
raise LocalDnsHandlerException("failure when deleting: %d, %s" % (rc, dns.rcode.to_text(rc)))
|
||||
|
||||
|
Reference in New Issue
Block a user