浏览代码

use prepared env for calling BORG_PASSCOMMAND, fixes #3050

Thomas Waldmann 7 年之前
父节点
当前提交
6a6fd31804
共有 1 个文件被更改,包括 4 次插入1 次删除
  1. 4 1
      src/borg/crypto/key.py

+ 4 - 1
src/borg/crypto/key.py

@@ -23,6 +23,7 @@ from ..helpers import yes
 from ..helpers import get_keys_dir, get_security_dir
 from ..helpers import get_limited_unpacker
 from ..helpers import bin_to_hex
+from ..helpers import prepare_subprocess_env
 from ..item import Key, EncryptedKey
 from ..platform import SaveFile
 
@@ -425,8 +426,10 @@ class Passphrase(str):
     def env_passcommand(cls, default=None):
         passcommand = os.environ.get('BORG_PASSCOMMAND', None)
         if passcommand is not None:
+            # passcommand is a system command (not inside pyinstaller env)
+            env = prepare_subprocess_env(system=True)
             try:
-                passphrase = subprocess.check_output(shlex.split(passcommand), universal_newlines=True)
+                passphrase = subprocess.check_output(shlex.split(passcommand), universal_newlines=True, env=env)
             except (subprocess.CalledProcessError, FileNotFoundError) as e:
                 raise PasscommandFailure(e)
             return cls(passphrase.rstrip('\n'))