diff --git a/src/warden/proxy.py b/src/warden/proxy.py index 1fd3e2a..65e4455 100644 --- a/src/warden/proxy.py +++ b/src/warden/proxy.py @@ -403,6 +403,10 @@ def proxy_attended_login_exec( root, session, root_created = _prepare_attended_login_home() helper = session / _TOKEN_HELPER_NAME env = _caller_env() + if not env.get("WARDEN_CONFIG"): + caller_config = Path.home() / ".config" / "warden" / "warden.yaml" + if caller_config.is_file(): + env["WARDEN_CONFIG"] = str(caller_config) env["HOME"] = str(session) env.pop("BAO_TOKEN", None) env.pop("VAULT_TOKEN", None) diff --git a/tests/test_proxy.py b/tests/test_proxy.py index e049b16..b67b122 100644 --- a/tests/test_proxy.py +++ b/tests/test_proxy.py @@ -427,6 +427,34 @@ def test_attended_login_contained_success_output_never_escapes(monkeypatch, tmp_ assert not (tmp_path / ".warden-attended-login").exists() +def test_attended_login_preserves_caller_warden_config_for_reviewed_child( + monkeypatch, tmp_path +): + monkeypatch.setattr(Path, "home", lambda: tmp_path) + monkeypatch.delenv("WARDEN_CONFIG", raising=False) + caller_config = tmp_path / ".config" / "warden" / "warden.yaml" + caller_config.parent.mkdir(parents=True) + caller_config.write_text("backend: local\n") + seen_config = None + + def fake_run(argv, **kw): + nonlocal seen_config + helper = Path(kw["env"]["HOME"]) / ".vault-token" + if argv[:2] == ["bao", "login"]: + helper.write_text("non-production-test-double") + helper.chmod(0o600) + if argv == ["reviewed-child"]: + seen_config = kw["env"].get("WARDEN_CONFIG") + return subprocess.CompletedProcess(argv, 0, stdout=b"", stderr=b"") + + monkeypatch.setattr("warden.proxy.subprocess.run", fake_run) + assert proxy_attended_login_exec( + ResolvedFetch(argv=["bao", "login", "-no-print"]), + child_argv=["reviewed-child"], + ) == 0 + assert seen_config == str(caller_config) + + def test_real_catalog_login_entry_is_login_lane(): from warden.routing import load_catalog e = load_catalog(_repo_catalog()).get("key-cape-oidc-login")