new
This commit is contained in:
@ -7,6 +7,7 @@ import dns.rdtypes.IN.A
|
|||||||
import dns.tsigkeyring
|
import dns.tsigkeyring
|
||||||
import dns.rcode
|
import dns.rcode
|
||||||
import threading
|
import threading
|
||||||
|
import time
|
||||||
from logger import Logger
|
from logger import Logger
|
||||||
|
|
||||||
class LocalDnsHandlerException(Exception):
|
class LocalDnsHandlerException(Exception):
|
||||||
@ -14,14 +15,20 @@ class LocalDnsHandlerException(Exception):
|
|||||||
Exception.__init__(self, msg)
|
Exception.__init__(self, msg)
|
||||||
|
|
||||||
class DnsHandler(threading.Thread):
|
class DnsHandler(threading.Thread):
|
||||||
def __init__(self, msgQueue, tsigKey, nsAddress, ttl):
|
def __init__(self, msgQueue, dnsDummy, tsigKey, nsAddress, ttl, actionlogDir):
|
||||||
threading.Thread.__init__(self)
|
threading.Thread.__init__(self)
|
||||||
self.msgQueue = msgQueue
|
self.msgQueue = msgQueue
|
||||||
|
self.dnsDummy = dnsDummy
|
||||||
self.nsAddress = nsAddress
|
self.nsAddress = nsAddress
|
||||||
self.ttl = ttl
|
self.ttl = ttl
|
||||||
self.keyring = dns.tsigkeyring.from_text(tsigKey)
|
self.keyring = dns.tsigkeyring.from_text(tsigKey)
|
||||||
|
self.actionlogDir = actionlogDir
|
||||||
self.setDaemon(True)
|
self.setDaemon(True)
|
||||||
|
|
||||||
|
def writeActionlog(self, dynid, name, zone, oldAddr, newAddr):
|
||||||
|
f = open("%s/%s" % (self.actionlogDir, dynid), 'a')
|
||||||
|
f.write("%d %s.%s %s %s\n" % (time.time(), name, zone, oldAddr, newAddr))
|
||||||
|
f.close()
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
while(True):
|
while(True):
|
||||||
@ -31,6 +38,7 @@ class DnsHandler(threading.Thread):
|
|||||||
try:
|
try:
|
||||||
self.deleteARR(msg.dynid, msg.name, msg.zone)
|
self.deleteARR(msg.dynid, msg.name, msg.zone)
|
||||||
self.insertARR(msg.dynid, msg.name, msg.zone, msg.address)
|
self.insertARR(msg.dynid, msg.name, msg.zone, msg.address)
|
||||||
|
self.writeActionlog(msg.dynid, msg.name, msg.zone, msg.addressInDns, msg.address)
|
||||||
Logger.log("Update: %s, %s.%s, %s -> %s" %
|
Logger.log("Update: %s, %s.%s, %s -> %s" %
|
||||||
(msg.dynid, msg.name, msg.zone, msg.addressInDns, msg.address))
|
(msg.dynid, msg.name, msg.zone, msg.addressInDns, msg.address))
|
||||||
msg.addressInDns = msg.address
|
msg.addressInDns = msg.address
|
||||||
@ -39,6 +47,8 @@ class DnsHandler(threading.Thread):
|
|||||||
|
|
||||||
|
|
||||||
def insertARR(self, dynid, name, zone, address):
|
def insertARR(self, dynid, name, zone, address):
|
||||||
|
if self.dnsDummy:
|
||||||
|
return
|
||||||
# send A-RR insertion for ip to DNS server
|
# send A-RR insertion for ip to DNS server
|
||||||
rr = dns.rdtypes.IN.A.A(dns.rdataclass.IN, dns.rdatatype.A, address)
|
rr = dns.rdtypes.IN.A.A(dns.rdataclass.IN, dns.rdatatype.A, address)
|
||||||
u = dns.update.Update(zone, keyring=self.keyring)
|
u = dns.update.Update(zone, keyring=self.keyring)
|
||||||
@ -51,6 +61,8 @@ class DnsHandler(threading.Thread):
|
|||||||
|
|
||||||
|
|
||||||
def deleteARR(self, dynid, name, zone):
|
def deleteARR(self, dynid, name, zone):
|
||||||
|
if self.dnsDummy:
|
||||||
|
return
|
||||||
# send A-RR deletion for ip to DNS server
|
# send A-RR deletion for ip to DNS server
|
||||||
u = dns.update.Update(zone, keyring=self.keyring)
|
u = dns.update.Update(zone, keyring=self.keyring)
|
||||||
u.delete(name)
|
u.delete(name)
|
||||||
|
33
server/XmlRpcReceiver.py
Normal file
33
server/XmlRpcReceiver.py
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
import threading
|
||||||
|
import time
|
||||||
|
import Event
|
||||||
|
from logger import Logger
|
||||||
|
|
||||||
|
|
||||||
|
class MathServer(SimpleXMLRPCServer):
|
||||||
|
def _dispatch(self, method, params):
|
||||||
|
try:
|
||||||
|
# We are forcing the 'export_' prefix on methods that are
|
||||||
|
# callable through XML-RPC to prevent potential security
|
||||||
|
# problems
|
||||||
|
func = getattr(self, 'export_' + method)
|
||||||
|
except AttributeError:
|
||||||
|
raise Exception('method "%s" is not supported' % method)
|
||||||
|
else:
|
||||||
|
return func(*params)
|
||||||
|
|
||||||
|
def export_add(self, x, y):
|
||||||
|
return x + y
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class XmlRpcReceiver(threading.Thread):
|
||||||
|
def __init__(self, xmlRpcRecvAddr):
|
||||||
|
threading.Thread.__init__(self)
|
||||||
|
self.xmlRpcRecvAddr = xmlRpcRecvAddr
|
||||||
|
self.setDaemon(True)
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
server = MathServer(self.xmlRpcAddr)
|
||||||
|
server.serve_forever()
|
||||||
|
|
12
server/yadyn
12
server/yadyn
@ -18,17 +18,18 @@ import Event
|
|||||||
|
|
||||||
|
|
||||||
MSG_TIME_CORRIDOR = 120
|
MSG_TIME_CORRIDOR = 120
|
||||||
EVENT_LIFE_TIME = 300
|
EVENT_LIFE_TIME = 5
|
||||||
NULL_ADDRESS = '0.0.0.0'
|
NULL_ADDRESS = '0.0.0.0'
|
||||||
TTL = 120
|
TTL = 120
|
||||||
EXPIRY_PERIOD = 300
|
EXPIRY_PERIOD = 10
|
||||||
NAMESERVER = '88.198.170.2'
|
NAMESERVER = '88.198.170.2'
|
||||||
TSIGKEY = { "monitoring." : "+xLH8GuZnEgBljuIEM/iDA==" }
|
TSIGKEY = { "monitoring." : "+xLH8GuZnEgBljuIEM/iDA==" }
|
||||||
PID_FILE = "/var/db/yadyn/yadyn.pid"
|
PID_FILE = "/var/db/yadyn/yadyn.pid"
|
||||||
ENTRIES_FILE = "/var/db/yadyn/entries"
|
ENTRIES_FILE = "/var/db/yadyn/entries"
|
||||||
STATUSMAP_FILE = "/var/db/yadyn/statusMap"
|
ACTIONLOG_DIR = "/var/db/yadyn/actionlog"
|
||||||
ADMIN_PWD = 'test123'
|
ADMIN_PWD = 'test123'
|
||||||
DEBUG = False
|
DNS_DUMMY = True
|
||||||
|
DEBUG = True
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -65,7 +66,7 @@ try:
|
|||||||
dynHandler.start()
|
dynHandler.start()
|
||||||
Logger.debug("DynHandler started")
|
Logger.debug("DynHandler started")
|
||||||
|
|
||||||
dnsHandler = DnsHandler.DnsHandler(dnsq, TSIGKEY, NAMESERVER, TTL)
|
dnsHandler = DnsHandler.DnsHandler(dnsq, DNS_DUMMY, TSIGKEY, NAMESERVER, TTL, ACTIONLOG_DIR)
|
||||||
dnsHandler.start()
|
dnsHandler.start()
|
||||||
Logger.debug("DnsHandler started")
|
Logger.debug("DnsHandler started")
|
||||||
|
|
||||||
@ -87,6 +88,5 @@ try:
|
|||||||
time.sleep(10)
|
time.sleep(10)
|
||||||
finally:
|
finally:
|
||||||
entries.close()
|
entries.close()
|
||||||
statusMap.close()
|
|
||||||
Logger.debug("Shelves closed")
|
Logger.debug("Shelves closed")
|
||||||
Logger.log("yadyn terminating")
|
Logger.log("yadyn terminating")
|
||||||
|
Reference in New Issue
Block a user