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 $
|
# $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]))
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user