mirror of
https://github.com/openai/codex.git
synced 2026-09-20 12:47:38 +00:00
## Why MXC is a sandbox implementation, not a restricted-token sandbox level. Executor requests need to represent that choice separately from `WindowsSandboxLevel`. ## What changed - Introduce `WindowsSandboxSelection` for executor sandbox contexts and remove `Mxc` from `WindowsSandboxLevel`. - Preserve the `windowsSandboxLevel` wire field and its serialized values for compatibility. - Share sandbox selection between executor process launches and filesystem helpers, and use the new selection in capability discovery and skill reads. - Disable Windows sandbox selection for executor paths that do not use Windows path conventions. ## Testing Extend coverage for MXC wire serialization, Windows skill-read sandbox checks, and capability discovery with distinct permissions. Exercise remote filesystem write restrictions with both restricted-token and MXC sandboxes, including rejection when native MXC is unavailable. GitOrigin-RevId: 266211377bcb138a0dc75861e9ff2225fa37a53d
31 lines
1.3 KiB
Rust
31 lines
1.3 KiB
Rust
//! Resolves an executor sandbox context to a concrete local sandbox implementation.
|
|
|
|
use codex_file_system::FileSystemSandboxContext;
|
|
use codex_file_system::WindowsSandboxSelection;
|
|
use codex_protocol::config_types::WindowsSandboxLevel;
|
|
use codex_protocol::models::PermissionProfile;
|
|
use codex_sandboxing::SandboxManager;
|
|
use codex_sandboxing::SandboxType;
|
|
use codex_sandboxing::SandboxablePreference;
|
|
|
|
pub(crate) fn select_sandbox(
|
|
manager: &SandboxManager,
|
|
permission_profile: &PermissionProfile,
|
|
sandbox_context: &FileSystemSandboxContext,
|
|
has_managed_network_requirements: bool,
|
|
) -> (SandboxType, Option<WindowsSandboxLevel>) {
|
|
let windows_sandbox_level = match sandbox_context.windows_sandbox_selection {
|
|
WindowsSandboxSelection::Disabled => WindowsSandboxLevel::Disabled,
|
|
WindowsSandboxSelection::RestrictedToken => WindowsSandboxLevel::RestrictedToken,
|
|
WindowsSandboxSelection::Elevated => WindowsSandboxLevel::Elevated,
|
|
WindowsSandboxSelection::Mxc => return (SandboxType::WindowsMxc, None),
|
|
};
|
|
let sandbox_type = manager.select_initial(
|
|
permission_profile,
|
|
SandboxablePreference::Require,
|
|
windows_sandbox_level,
|
|
has_managed_network_requirements,
|
|
);
|
|
(sandbox_type, Some(windows_sandbox_level))
|
|
}
|