update dns ina thread
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user