Merge branch 'master' of git.wrede.ca:andreas/heartbeat

sequence
This commit is contained in:
2020-02-04 08:17:13 -05:00
2 changed files with 24 additions and 16 deletions
+11 -10
View File
@@ -1,4 +1,4 @@
#!/usr/bin/env python #!/usr/bin/env python3
# $Id: hbc,v 1.9 2012/03/29 02:08:36 andreas Exp $ # $Id: hbc,v 1.9 2012/03/29 02:08:36 andreas Exp $
# NEW # NEW
import sys import sys
@@ -16,15 +16,14 @@ import shutil
import zlib import zlib
import subprocess import subprocess
import syslog import syslog
import codecs
import syslog
PORT = 50003 PORT = 50003
INTERVAL = 10 INTERVAL = 10
REOPENC = 6 REOPENC = 6
PIDFILE = '/tmp/hbc.pid' PIDFILE = '/tmp/hbc.pid'
VER = 5 VER = 6
MAXRECV = 32767 MAXRECV = 32767
running = True running = True
@@ -151,8 +150,10 @@ def stodict(msg):
d[k] = None d[k] = None
else: else:
v = vr[1].strip() v = vr[1].strip()
if v[0].isdigit(): try:
v = eval(v) v = eval(v)
except:
pass
d[k] = v d[k] = v
if verbose: print("msg is %s" % d) if verbose: print("msg is %s" % d)
return d return d
@@ -241,7 +242,7 @@ def doexec(conn, data):
def doupdate(conn, msgDict): def doupdate(conn, msgDict):
fail = None fail = None
try: try:
code = msgDict['code'].decode('base64') code = codecs.decode(msgDict['code'],'base64').decode()
csum = msgDict['csum'] csum = msgDict['csum']
except: except:
fail = "csum/code missing" fail = "csum/code missing"
@@ -258,8 +259,8 @@ def doupdate(conn, msgDict):
def doupdateone(code, csum): def doupdateone(code, csum):
m = md5.new() m = md5()
m.update(code) m.update(code.encode())
icsum = m.hexdigest() icsum = m.hexdigest()
if icsum != csum: if icsum != csum:
return "checksum error" return "checksum error"
@@ -330,11 +331,11 @@ def process():
for rfh in r[0]: for rfh in r[0]:
conn = conIds[rfh] conn = conIds[rfh]
data, addr = ifiles[rfh].recvfrom(MAXRECV) data, addr = ifiles[rfh].recvfrom(MAXRECV)
# if verbose: print("sock.recvfrom: %s (%s) %s" % (addr, len(data), data[:4])) if verbose: print("sock.recvfrom: %s (%s) %s" % (addr, len(data), data[:4]))
try: try:
msgDict = stodict(data) msgDict = stodict(data)
except Exception as e: except Exception as e:
print("failed to parse incoming data from %s: " % (addr, data)) print("failed to parse incoming data from %s: %s (%s)" % (addr, data, e))
continue continue
if verbose: print("sock.recvfrom: %s (%s) %s" % (addr, len(data), str(msgDict)[:80])) if verbose: print("sock.recvfrom: %s (%s) %s" % (addr, len(data), str(msgDict)[:80]))
+13 -6
View File
@@ -26,6 +26,7 @@ import queue
from hashlib import md5 from hashlib import md5
import json import json
import zlib import zlib
import codecs
from subprocess import Popen, STDOUT, PIPE from subprocess import Popen, STDOUT, PIPE
@@ -33,6 +34,8 @@ from subprocess import Popen, STDOUT, PIPE
import hbdclass import hbdclass
NSUPDATE_BIN = "/usr/local/bin/nsupdate" # override in .hbrc possible
SEND_EMAIL=False SEND_EMAIL=False
SEND_PUSHOVER=True SEND_PUSHOVER=True
@@ -240,7 +243,7 @@ answer
""" % D """ % D
if DEBUG > 0: log(None, "DBG: nsup %s" % nsup) if DEBUG > 0: log(None, "DBG: nsup %s" % nsup)
cmd = ["/usr/local/bin/nsupdate", "-k", "/etc/dhcpc/K%(domain)s.+157+00000." % D, "-v"] cmd = [nsupdate_bin, "-k", "/etc/dhcpc/K%(domain)s.+157+00000." % D, "-v"]
if DEBUG > 0: log(None, "DBG: cmd %s" % cmd) if DEBUG > 0: log(None, "DBG: cmd %s" % cmd)
try: try:
p = Popen(cmd, shell=False, bufsize=1, stdin=PIPE, stdout=PIPE, stderr=STDOUT) p = Popen(cmd, shell=False, bufsize=1, stdin=PIPE, stdout=PIPE, stderr=STDOUT)
@@ -250,9 +253,9 @@ answer
return "nsupdate: some error occured" return "nsupdate: some error occured"
(output, err) = p.communicate(nsup.encode()) (output, err) = p.communicate(nsup.encode())
if output.find('status: NOERROR') >= 0: if output.decode().find('status: NOERROR') >= 0:
return None return None
return output return output.decode()
# #
@@ -501,10 +504,11 @@ def updatecode(ucode, uname):
except Exception as e: except Exception as e:
fail = "cannot read new code: %s" % e fail = "cannot read new code: %s" % e
if not fail: if not fail:
m = md5.new() m = md5()
m.update(new_code) new_codeE = new_code.encode()
m.update(new_codeE)
icsum = m.hexdigest() icsum = m.hexdigest()
rmsg = {'csum': icsum, 'code': new_code.encode('base64','strict') } rmsg = {'csum': icsum, 'code': codecs.encode(new_codeE, 'base64') }
hbdclass.Host.hosts[uname].cmds.append(('UPD',rmsg)) hbdclass.Host.hosts[uname].cmds.append(('UPD',rmsg))
return fail return fail
@@ -824,6 +828,7 @@ grace = GRACE
watchhosts = [] watchhosts = []
dyndnshosts = [] dyndnshosts = []
drophosts = [] drophosts = []
nsupdate_bin = NSUPDATE_BIN
try: try:
f = open(configfile, "r") f = open(configfile, "r")
@@ -872,6 +877,8 @@ if f:
dyndnshosts = a dyndnshosts = a
elif o == 'drophosts': elif o == 'drophosts':
drophosts = a drophosts = a
elif o == 'nsupdate_bin':
nsupdate_bin = a
f.close() f.close()
if len(args) != 0: if len(args) != 0: