@@ -6716,7 +6716,10 @@ SCRIPT
67166716import importlib.util
67176717import os
67186718import pathlib
6719+ import stat
67196720import sys
6721+ from types import SimpleNamespace
6722+ from unittest import mock
67206723
67216724spec = importlib.util.spec_from_file_location("cli_launch_path", pathlib.Path(sys.argv[1]))
67226725module = importlib.util.module_from_spec(spec)
@@ -6727,6 +6730,31 @@ untrusted_uid = 2 if euid == 1 else 1
67276730assert module.trusted_owner(euid)
67286731assert module.trusted_owner(0)
67296732assert not module.trusted_owner(untrusted_uid)
6733+
6734+ trusted_ancestors = {
6735+ pathlib.Path("/"): SimpleNamespace(st_mode=stat.S_IFDIR | 0o755, st_uid=0),
6736+ pathlib.Path("/nix"): SimpleNamespace(st_mode=stat.S_IFDIR | 0o755, st_uid=0),
6737+ pathlib.Path("/nix/store"): SimpleNamespace(st_mode=stat.S_IFDIR | stat.S_ISVTX | 0o775, st_uid=0),
6738+ pathlib.Path("/nix/store/example"): SimpleNamespace(st_mode=stat.S_IFDIR | 0o555, st_uid=0),
6739+ pathlib.Path("/nix/store/example/bin"): SimpleNamespace(st_mode=stat.S_IFDIR | 0o555, st_uid=0),
6740+ }
6741+ with mock.patch.object(pathlib.Path, "lstat", autospec=True, side_effect=trusted_ancestors.__getitem__):
6742+ module.validate_parent_chain(
6743+ pathlib.Path("/nix/store/example/bin/codex"),
6744+ "Selected Codex CLI target",
6745+ )
6746+
6747+ trusted_ancestors[pathlib.Path("/nix/store")].st_mode = stat.S_IFDIR | 0o775
6748+ with mock.patch.object(pathlib.Path, "lstat", autospec=True, side_effect=trusted_ancestors.__getitem__):
6749+ try:
6750+ module.validate_parent_chain(
6751+ pathlib.Path("/nix/store/example/bin/codex"),
6752+ "Selected Codex CLI target",
6753+ )
6754+ except module.TrustError:
6755+ pass
6756+ else:
6757+ raise AssertionError("root-owned group-writable ancestors without sticky must remain untrusted")
67306758PY
67316759
67326760 rm "$visible_cli"
0 commit comments