update dns ina thread

This commit is contained in:
2016-01-12 21:37:27 +01:00
parent ce489af512
commit e12b524c0c
+22 -6
View File
@@ -21,6 +21,7 @@ import traceback
import urllib
import httplib
import threading
import Queue
from subprocess import Popen, STDOUT, PIPE
@@ -200,7 +201,7 @@ def pushover(msg):
# nsupdate: set the DNS A record for a fqdn
# return: None if ok, else error text
def nsupdate(hostname, newip):
u = {}
D = {}
D['domain'] = 'dy.wapanafa.org'
D['fqdn'] = '%s.dy.wapanafa.org' % hostname
D['dnsttl'] = '5'
@@ -318,6 +319,19 @@ def log(m, service="heartbeat"):
pickleit()
def dnsupdatethread():
while True:
name, addr = dnsQ.get()
m = "%s changed address to %s" % (name, addr)
err = nsupdate(name, addr)
if err:
m += ", DNS failed: %s" % err
email("error: nsupdate failed", m)
else:
m += ", DNS updated."
dnsQ.task_done()
log(m)
#
#
def fromaddr(name, addr, boot, interval, acks):
@@ -337,12 +351,8 @@ def fromaddr(name, addr, boot, interval, acks):
htab[addr] = name
m = "%s changed address to %s" % (host.name, addr)
if name in dyndnshosts and not ":" in addr: # don't try and cat ptr to IPv6 addr
err = nsupdate(name, addr)
if err:
m += ", DNS failed: %s" % err
email("error: nsupdate failed", m)
dnsQ.put((name, addr))
else:
m += ", DNS updated."
log(m)
if name in watchhosts:
email("address change", m)
@@ -837,6 +847,7 @@ ilist.append(sock6)
serv = HttpServer((hbd_host, hbd_port), HttpHandler)
servthread = threading.Thread(target=serv.serve_forever)
servthread.daemon = True
servthread.start()
#ilist.append(serv.fileno())
@@ -859,6 +870,11 @@ if not forground:
os.setsid()
os.umask(0)
dnsQ = Queue.Queue()
dnsT = threading.Thread(target=dnsupdatethread)
dnsT.daemon = True
dnsT.start()
running = True
sig = 0
#signal.signal(signal.SIGTERM, handler)