X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=bup.git;a=blobdiff_plain;f=lib%2Fbup%2Fssh.py;h=ae560908fc7439c8dd11eb16284d5974dd523745;hp=de0448d003467f248572311b81b861e6d3560e46;hb=6a097ab641b0a7584a15982e48b34e0882db4cb2;hpb=c9227455fdbd6605c04075aa2ae0faad9aacbc62 diff --git a/lib/bup/ssh.py b/lib/bup/ssh.py index de0448d..ae56090 100644 --- a/lib/bup/ssh.py +++ b/lib/bup/ssh.py @@ -11,45 +11,26 @@ from bup.compat import environ def connect(rhost, port, subcmd, stderr=None): """Connect to 'rhost' and execute the bup subcommand 'subcmd' on it.""" assert not re.search(br'[^\w-]', subcmd) - nicedir = re.sub(b':', b'_', path.exedir()) - if rhost == b'-': - rhost = None - if not rhost: - argv = [b'bup', subcmd] + if rhost is None or rhost == b'-': + argv = [path.exe(), subcmd] else: - # WARNING: shell quoting security holes are possible here, so we - # have to be super careful. We have to use 'sh -c' because - # csh-derived shells can't handle PATH= notation. We can't - # set PATH in advance, because ssh probably replaces it. We - # can't exec *safely* using argv, because *both* ssh and 'sh -c' - # allow shellquoting. So we end up having to double-shellquote - # stuff here. - escapedir = re.sub(br'([^\w/])', br'\\\\\\\1', nicedir) buglvl = helpers.atoi(environ.get(b'BUP_DEBUG')) force_tty = helpers.atoi(environ.get(b'BUP_FORCE_TTY')) cmd = b""" - sh -c PATH=%s:'$PATH BUP_DEBUG=%s BUP_FORCE_TTY=%s bup %s' - """ % (escapedir, buglvl, force_tty, subcmd) + sh -c 'BUP_DEBUG=%d BUP_FORCE_TTY=%d bup %s' + """ % (buglvl, force_tty, subcmd) argv = [b'ssh'] if port: argv.extend((b'-p', port)) argv.extend((rhost, b'--', cmd.strip())) #helpers.log('argv is: %r\n' % argv) - if rhost: - env = environ - else: - envpath = environ.get(b'PATH') - env = environ.copy() - env[b'PATH'] = nicedir if not envpath else nicedir + b':' + envpath if sys.version_info[0] < 3: return subprocess.Popen(argv, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=stderr, - env=env, preexec_fn=lambda: os.setsid()) else: return subprocess.Popen(argv, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=stderr, - env=env, start_new_session=True)