From 62839b6fa08c05613fe5fe3a2fe0d88ec2ab1f89 Mon Sep 17 00:00:00 2001 From: Qubasa Date: Tue, 25 Jun 2024 12:03:40 +0200 Subject: [PATCH] clan-cli: Better env jailing in temporary_home --- pkgs/clan-cli/tests/temporary_dir.py | 42 +++++++++++++++------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/pkgs/clan-cli/tests/temporary_dir.py b/pkgs/clan-cli/tests/temporary_dir.py index bdbb0b97..6b519c91 100644 --- a/pkgs/clan-cli/tests/temporary_dir.py +++ b/pkgs/clan-cli/tests/temporary_dir.py @@ -11,26 +11,28 @@ log = logging.getLogger(__name__) @pytest.fixture def temporary_home(monkeypatch: pytest.MonkeyPatch) -> Iterator[Path]: - env_dir = os.getenv("TEST_TEMPORARY_DIR") - if env_dir is not None: - path = Path(env_dir).resolve() - log.debug("Temp HOME directory: %s", str(path)) - monkeypatch.setenv("HOME", str(path)) - monkeypatch.setenv("XDG_CONFIG_HOME", str(path / ".config")) - runtime_dir = path / "xdg-runtime-dir" + with tempfile.TemporaryDirectory(prefix="pytest-") as dirpath: + xdg_runtime_dir = os.getenv("XDG_RUNTIME_DIR") + monkeypatch.setenv("HOME", str(dirpath)) + monkeypatch.setenv("XDG_CONFIG_HOME", str(Path(dirpath) / ".config")) + + runtime_dir = Path(dirpath) / "xdg-runtime-dir" runtime_dir.mkdir() runtime_dir.chmod(0o700) + + gpgdir = runtime_dir / "gpgagent" + gpgdir.mkdir() + gpgdir.chmod(0o700) + monkeypatch.setenv("GPG_AGENT_INFO", str(gpgdir)) + + # Iterate over all environment variables + for key, value in os.environ.items(): + if xdg_runtime_dir and value.startswith(xdg_runtime_dir): + monkeypatch.setenv( + key, value.replace(xdg_runtime_dir, str(runtime_dir)) + ) + monkeypatch.setenv("XDG_RUNTIME_DIR", str(runtime_dir)) - monkeypatch.chdir(str(path)) - yield path - else: - with tempfile.TemporaryDirectory(prefix="pytest-") as dirpath: - monkeypatch.setenv("HOME", str(dirpath)) - monkeypatch.setenv("XDG_CONFIG_HOME", str(Path(dirpath) / ".config")) - runtime_dir = Path(dirpath) / "xdg-runtime-dir" - runtime_dir.mkdir() - runtime_dir.chmod(0o700) - monkeypatch.setenv("XDG_RUNTIME_DIR", str(runtime_dir)) - monkeypatch.chdir(str(dirpath)) - log.debug("Temp HOME directory: %s", str(dirpath)) - yield Path(dirpath) + monkeypatch.chdir(str(dirpath)) + log.debug("Temp HOME directory: %s", str(dirpath)) + yield Path(dirpath)