|
@@ -29,6 +29,7 @@ from .helpers import replace_placeholders
|
|
from .helpers import sysinfo
|
|
from .helpers import sysinfo
|
|
from .helpers import format_file_size
|
|
from .helpers import format_file_size
|
|
from .helpers import truncate_and_unlink
|
|
from .helpers import truncate_and_unlink
|
|
|
|
+from .helpers import prepare_subprocess_env
|
|
from .logger import create_logger, setup_logging
|
|
from .logger import create_logger, setup_logging
|
|
from .repository import Repository
|
|
from .repository import Repository
|
|
from .version import parse_version, format_version
|
|
from .version import parse_version, format_version
|
|
@@ -530,21 +531,12 @@ class RemoteRepository:
|
|
self.server_version = parse_version('1.0.8') # fallback version if server is too old to send version information
|
|
self.server_version = parse_version('1.0.8') # fallback version if server is too old to send version information
|
|
self.p = None
|
|
self.p = None
|
|
testing = location.host == '__testsuite__'
|
|
testing = location.host == '__testsuite__'
|
|
|
|
+ # when testing, we invoke and talk to a borg process directly (no ssh).
|
|
|
|
+ # when not testing, we invoke the system-installed ssh binary to talk to a remote borg.
|
|
|
|
+ env = prepare_subprocess_env(system=not testing)
|
|
borg_cmd = self.borg_cmd(args, testing)
|
|
borg_cmd = self.borg_cmd(args, testing)
|
|
- env = dict(os.environ)
|
|
|
|
if not testing:
|
|
if not testing:
|
|
borg_cmd = self.ssh_cmd(location) + borg_cmd
|
|
borg_cmd = self.ssh_cmd(location) + borg_cmd
|
|
- # pyinstaller binary modifies LD_LIBRARY_PATH=/tmp/_ME... but we do not want
|
|
|
|
- # that the system's ssh binary picks up (non-matching) libraries from there.
|
|
|
|
- # thus we install the original LDLP, before pyinstaller has modified it:
|
|
|
|
- lp_key = 'LD_LIBRARY_PATH'
|
|
|
|
- lp_orig = env.get(lp_key + '_ORIG') # pyinstaller >= 20160820 has this
|
|
|
|
- if lp_orig is not None:
|
|
|
|
- env[lp_key] = lp_orig
|
|
|
|
- else:
|
|
|
|
- env.pop(lp_key, None)
|
|
|
|
- env.pop('BORG_PASSPHRASE', None) # security: do not give secrets to subprocess
|
|
|
|
- env['BORG_VERSION'] = __version__
|
|
|
|
logger.debug('SSH command line: %s', borg_cmd)
|
|
logger.debug('SSH command line: %s', borg_cmd)
|
|
self.p = Popen(borg_cmd, bufsize=0, stdin=PIPE, stdout=PIPE, stderr=PIPE, env=env)
|
|
self.p = Popen(borg_cmd, bufsize=0, stdin=PIPE, stdout=PIPE, stderr=PIPE, env=env)
|
|
self.stdin_fd = self.p.stdin.fileno()
|
|
self.stdin_fd = self.p.stdin.fileno()
|