diff --git a/hbc b/hbc index 21d13ae..ef4b1fb 100755 --- a/hbc +++ b/hbc @@ -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])) diff --git a/hbd b/hbd index 8e3d5a8..192a7bc 100755 --- a/hbd +++ b/hbd @@ -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: