2025-12-02 15:05:27 -05:00
|
|
|
pub mod amend;
|
2025-11-19 19:14:10 -08:00
|
|
|
pub mod decision;
|
|
|
|
|
pub mod error;
|
2025-11-20 16:44:31 -05:00
|
|
|
pub mod execpolicycheck;
|
execpolicy: add host_executable() path mappings (#12964)
## Why
`execpolicy` currently keys `prefix_rule()` matching off the literal
first token. That works for rules like `["/usr/bin/git"]`, but it means
shared basename rules such as `["git"]` do not help when a caller passes
an absolute executable path like `/usr/bin/git`.
This PR lays the groundwork for basename-aware matching without changing
existing callers yet. It adds typed host-executable metadata and an
opt-in resolution path in `codex-execpolicy`, so a follow-up PR can
adopt the new behavior in `unix_escalation.rs` and other call sites
without having to redesign the policy layer first.
## What Changed
- added `host_executable(name = ..., paths = [...])` to the execpolicy
parser and validated it with `AbsolutePathBuf`
- stored host executable mappings separately from prefix rules inside
`Policy`
- added `MatchOptions` and opt-in `*_with_options()` APIs that preserve
existing behavior by default
- implemented exact-first matching with optional basename fallback,
gated by `host_executable()` allowlists when present
- normalized executable names for cross-platform matching so Windows
paths like `git.exe` can satisfy `host_executable(name = "git", ...)`
- updated `match` / `not_match` example validation to exercise the
host-executable resolution path instead of only raw prefix-rule matching
- preserved source locations for deferred example-validation errors so
policy load failures still point at the right file and line
- surfaced `resolvedProgram` on `RuleMatch` so callers can tell when a
basename rule matched an absolute executable path
- preserved host executable metadata when requirements policies overlay
file-based policies in `core/src/exec_policy.rs`
- documented the new rule shape and CLI behavior in
`execpolicy/README.md`
## Verification
- `cargo test -p codex-execpolicy`
- added coverage in `execpolicy/tests/basic.rs` for parsing, precedence,
empty allowlists, basename fallback, exact-match precedence, and
host-executable-backed `match` / `not_match` examples
- added a regression test in `core/src/exec_policy.rs` to verify
requirements overlays preserve `host_executable()` metadata
- verified `cargo test -p codex-core --lib`, including source-rendering
coverage for deferred validation errors
2026-02-27 12:59:24 -08:00
|
|
|
mod executable_name;
|
2025-11-19 19:14:10 -08:00
|
|
|
pub mod parser;
|
|
|
|
|
pub mod policy;
|
|
|
|
|
pub mod rule;
|
2025-04-24 17:14:47 -07:00
|
|
|
|
2025-12-02 15:05:27 -05:00
|
|
|
pub use amend::AmendError;
|
|
|
|
|
pub use amend::blocking_append_allow_prefix_rule;
|
2026-02-23 21:37:46 -08:00
|
|
|
pub use amend::blocking_append_network_rule;
|
2025-11-19 19:14:10 -08:00
|
|
|
pub use decision::Decision;
|
2025-04-24 17:14:47 -07:00
|
|
|
pub use error::Error;
|
2026-01-23 20:11:09 -08:00
|
|
|
pub use error::ErrorLocation;
|
2025-04-24 17:14:47 -07:00
|
|
|
pub use error::Result;
|
2026-01-23 20:11:09 -08:00
|
|
|
pub use error::TextPosition;
|
|
|
|
|
pub use error::TextRange;
|
2025-11-20 16:44:31 -05:00
|
|
|
pub use execpolicycheck::ExecPolicyCheckCommand;
|
2025-11-19 19:14:10 -08:00
|
|
|
pub use parser::PolicyParser;
|
|
|
|
|
pub use policy::Evaluation;
|
execpolicy: add host_executable() path mappings (#12964)
## Why
`execpolicy` currently keys `prefix_rule()` matching off the literal
first token. That works for rules like `["/usr/bin/git"]`, but it means
shared basename rules such as `["git"]` do not help when a caller passes
an absolute executable path like `/usr/bin/git`.
This PR lays the groundwork for basename-aware matching without changing
existing callers yet. It adds typed host-executable metadata and an
opt-in resolution path in `codex-execpolicy`, so a follow-up PR can
adopt the new behavior in `unix_escalation.rs` and other call sites
without having to redesign the policy layer first.
## What Changed
- added `host_executable(name = ..., paths = [...])` to the execpolicy
parser and validated it with `AbsolutePathBuf`
- stored host executable mappings separately from prefix rules inside
`Policy`
- added `MatchOptions` and opt-in `*_with_options()` APIs that preserve
existing behavior by default
- implemented exact-first matching with optional basename fallback,
gated by `host_executable()` allowlists when present
- normalized executable names for cross-platform matching so Windows
paths like `git.exe` can satisfy `host_executable(name = "git", ...)`
- updated `match` / `not_match` example validation to exercise the
host-executable resolution path instead of only raw prefix-rule matching
- preserved source locations for deferred example-validation errors so
policy load failures still point at the right file and line
- surfaced `resolvedProgram` on `RuleMatch` so callers can tell when a
basename rule matched an absolute executable path
- preserved host executable metadata when requirements policies overlay
file-based policies in `core/src/exec_policy.rs`
- documented the new rule shape and CLI behavior in
`execpolicy/README.md`
## Verification
- `cargo test -p codex-execpolicy`
- added coverage in `execpolicy/tests/basic.rs` for parsing, precedence,
empty allowlists, basename fallback, exact-match precedence, and
host-executable-backed `match` / `not_match` examples
- added a regression test in `core/src/exec_policy.rs` to verify
requirements overlays preserve `host_executable()` metadata
- verified `cargo test -p codex-core --lib`, including source-rendering
coverage for deferred validation errors
2026-02-27 12:59:24 -08:00
|
|
|
pub use policy::MatchOptions;
|
2025-04-24 17:14:47 -07:00
|
|
|
pub use policy::Policy;
|
2026-02-23 21:37:46 -08:00
|
|
|
pub use rule::NetworkRuleProtocol;
|
2025-11-19 19:14:10 -08:00
|
|
|
pub use rule::Rule;
|
|
|
|
|
pub use rule::RuleMatch;
|
|
|
|
|
pub use rule::RuleRef;
|