X-Git-Url: https://git.distorted.org.uk/~mdw/tripe/blobdiff_plain/508294eabafbbf8d898ac2a94fa05262ad244dcf..11ab0da64ef849cf3d035ecaa08dd581144f1ad7:/svc/conntrack.in diff --git a/svc/conntrack.in b/svc/conntrack.in index 1b9f5819..061d6d76 100644 --- a/svc/conntrack.in +++ b/svc/conntrack.in @@ -94,6 +94,9 @@ def toposort(cmp, things): if done: break +def parse_address(addrstr): + return unpack('>L', S.inet_aton(addrstr))[0] + ###-------------------------------------------------------------------------- ### Parse the configuration file. @@ -170,12 +173,12 @@ class Config (object): ## and MASK is either a dotted-quad or a single integer N indicating ## a mask with N leading ones followed by trailing zeroes. slash = net.index('/') - addr, = unpack('>L', S.inet_aton(net[:slash])) + addr = parse_address(net[:slash]) if net[slash + 1:].isdigit(): n = int(net[slash + 1:], 10) mask = (1 << 32) - (1 << 32 - n) else: - mask, = unpack('>L', S.inet_aton(net[slash + 1:])) + mask = parse_address(net[slash + 1:]) pats.append((tag, peer, addr & mask, mask)) ## Annoyingly, RawConfigParser doesn't preserve the order of options. @@ -197,7 +200,7 @@ CF = None def straddr(a): return a is None and '#' or S.inet_ntoa(pack('>L', a)) def strmask(m): for i in xrange(33): - if m == 0xffffffff ^ ((1 << (32 - i)) - 1): return i + if m == 0xffffffff ^ ((1 << (32 - i)) - 1): return str(i) return straddr(m) def cmd_showconfig(): @@ -229,7 +232,7 @@ def localaddr(peer): try: sk.connect((peer, 1)) addr, _ = sk.getsockname() - addr, = unpack('>L', S.inet_aton(addr)) + addr = parse_address(addr) return addr except S.error: return None