Merge branch 'master' of git.wrede.ca:andreas/heartbeat
sequence
This commit is contained in:
@@ -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]))
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user