diff --git a/sshuttle/assembler.py b/sshuttle/assembler.py index 31900ee..de5730f 100644 --- a/sshuttle/assembler.py +++ b/sshuttle/assembler.py @@ -7,8 +7,11 @@ z = zlib.decompressobj() while 1: name = sys.stdin.readline().strip() if name: - name = name.decode("ASCII") - + # python2 compat: in python2 sys.stdin.readline().strip() -> str + # in python3 sys.stdin.readline().strip() -> bytes + # (see #481) + if sys.version_info >= (3, 0): + name = name.decode("ASCII") nbytes = int(sys.stdin.readline()) if verbosity >= 2: sys.stderr.write('server: assembling %r (%d bytes)\n' diff --git a/sshuttle/server.py b/sshuttle/server.py index 7bcd193..fa07b29 100644 --- a/sshuttle/server.py +++ b/sshuttle/server.py @@ -6,7 +6,24 @@ import time import sys import os import platform -from shutil import which + +if sys.version_info >= (3, 0): + from shutil import which +else: + # python2 compat: shutil.which is not available so we provide our own which command + def which(file, mode=os.F_OK | os.X_OK, path=None): + if path is not None: + search_paths = [path] + elif "PATH" in os.environ: + search_paths = os.environ["PATH"].split(os.pathsep) + else: + search_paths = os.defpath.split(os.pathsep) + + for path in search_paths: + filepath = os.path.join(path, file) + if os.path.exists(filepath) and os.access(filepath, mode): + return filepath + return None import sshuttle.ssnet as ssnet import sshuttle.helpers as helpers