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 $
# NEW
import sys
@@ -16,15 +16,14 @@ import shutil
import zlib
import subprocess
import syslog
import syslog
import codecs
PORT = 50003
INTERVAL = 10
REOPENC = 6
PIDFILE = '/tmp/hbc.pid'
VER = 5
VER = 6
MAXRECV = 32767
running = True
@@ -151,8 +150,10 @@ def stodict(msg):
d[k] = None
else:
v = vr[1].strip()
if v[0].isdigit():
try:
v = eval(v)
except:
pass
d[k] = v
if verbose: print("msg is %s" % d)
return d
@@ -241,7 +242,7 @@ def doexec(conn, data):
def doupdate(conn, msgDict):
fail = None
try:
code = msgDict['code'].decode('base64')
code = codecs.decode(msgDict['code'],'base64').decode()
csum = msgDict['csum']
except:
fail = "csum/code missing"
@@ -258,8 +259,8 @@ def doupdate(conn, msgDict):
def doupdateone(code, csum):
m = md5.new()
m.update(code)
m = md5()
m.update(code.encode())
icsum = m.hexdigest()
if icsum != csum:
return "checksum error"
@@ -330,11 +331,11 @@ def process():
for rfh in r[0]:
conn = conIds[rfh]
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:
msgDict = stodict(data)
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
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
import json
import zlib
import codecs
from subprocess import Popen, STDOUT, PIPE
@@ -33,6 +34,8 @@ from subprocess import Popen, STDOUT, PIPE
import hbdclass
NSUPDATE_BIN = "/usr/local/bin/nsupdate" # override in .hbrc possible
SEND_EMAIL=False
SEND_PUSHOVER=True
@@ -240,7 +243,7 @@ answer
""" % D
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)
try:
p = Popen(cmd, shell=False, bufsize=1, stdin=PIPE, stdout=PIPE, stderr=STDOUT)
@@ -250,9 +253,9 @@ answer
return "nsupdate: some error occured"
(output, err) = p.communicate(nsup.encode())
if output.find('status: NOERROR') >= 0:
if output.decode().find('status: NOERROR') >= 0:
return None
return output
return output.decode()
#
@@ -501,10 +504,11 @@ def updatecode(ucode, uname):
except Exception as e:
fail = "cannot read new code: %s" % e
if not fail:
m = md5.new()
m.update(new_code)
m = md5()
new_codeE = new_code.encode()
m.update(new_codeE)
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))
return fail
@@ -824,6 +828,7 @@ grace = GRACE
watchhosts = []
dyndnshosts = []
drophosts = []
nsupdate_bin = NSUPDATE_BIN
try:
f = open(configfile, "r")
@@ -872,6 +877,8 @@ if f:
dyndnshosts = a
elif o == 'drophosts':
drophosts = a
elif o == 'nsupdate_bin':
nsupdate_bin = a
f.close()
if len(args) != 0: