3 Commits

  • [codex] Restore setup helper UAC manifest (#25949)
    ## Why
    
    #23764 removed Windows resource stamping from `codex-windows-sandbox`,
    but it also removed the setup helper's UAC manifest. That manifest was
    doing more than cosmetic version metadata: Microsoft documents
    `requestedExecutionLevel level="asInvoker"` as the setting that makes an
    executable run at the same permission level as the process that started
    it:
    https://learn.microsoft.com/en-us/windows/win32/sbscs/application-manifests#trustinfo
    
    In the reported session, `codex-windows-sandbox-setup.exe` was launched
    for a non-elevated setup refresh and `CreateProcess` failed with `os
    error 740` (`The requested operation requires elevation`). Restoring an
    explicit `asInvoker` manifest records the helper's intended default
    launch contract: normal launches inherit the caller's token, and
    elevation only happens through the code paths that request it
    explicitly.
    
    The setup helper has two launch modes:
    
    - setup refresh uses a normal `Command::new(...)` spawn and should never
    trigger UAC
    - full setup explicitly uses `ShellExecuteExW` with the `runas` verb
    when elevation is required
    
    Restoring `asInvoker` keeps refresh non-elevated by default while
    preserving the explicit elevated path for full setup.
    
    ## What changed
    
    - Restored a minimal `codex-windows-sandbox-setup.manifest` containing
    only `requestedExecutionLevel level="asInvoker"`.
    - Added a small build script that passes setup-helper-scoped manifest
    linker args for MSVC and the Windows GNU/LLVM target used by Bazel.
    - Wired the manifest into Bazel build-script data.
    
    This does not restore `winres`, `FileDescription`, `ProductName`, or
    package-wide resource stamping, so other Codex binaries that link
    `codex-windows-sandbox` do not inherit metadata from this package.
    
    ## Verification
    
    - `cargo fmt -p codex-windows-sandbox`
    - `cargo build -p codex-windows-sandbox --bin
    codex-windows-sandbox-setup`
    - `cargo build -p codex-windows-sandbox --bin codex-command-runner`
    - `cargo build -p codex-windows-sandbox --lib`
    - Build-script output simulation for `CARGO_CFG_TARGET_ENV=msvc` emits
    `/MANIFEST:EMBED` and `/MANIFESTINPUT:<manifest>`.
    - Build-script output simulation for `CARGO_CFG_TARGET_ENV=gnu` +
    `CARGO_CFG_TARGET_ABI=llvm` emits `-Wl,-Xlink=/manifest:embed` and
    `-Wl,-Xlink=/manifestinput:<manifest>`.
    - Inspected the built binaries and confirmed:
    - `codex-windows-sandbox-setup.exe` contains `requestedExecutionLevel` /
    `asInvoker`
      - `codex-command-runner.exe` does not contain those manifest strings
    - Windows `VersionInfo` remains blank for `FileDescription` /
    `ProductName`
    - `just test -p codex-windows-sandbox` ran through Nextest, with 114
    passing, 2 skipped, and 1 existing Windows sandbox failure:
    `unified_exec::tests::legacy_non_tty_cmd_emits_output` fails with
    `CreateRestrictedToken failed: 87`.
  • Remove Windows sandbox resource stamping (#23764)
    ## Why
    
    The `codex-windows-sandbox` crate was embedding Windows resource
    metadata through a package-level `build.rs`. Because that package also
    exposes the `codex_windows_sandbox` library, downstream binaries that
    link the library could inherit `FileDescription` / `ProductName` values
    of `codex-windows-sandbox`.
    
    That made ordinary Codex binaries, including the long-lived `codex.exe`
    app-server sidecar, appear as `codex-windows-sandbox` in Windows UI
    surfaces such as Task Manager / file properties.
    
    We do not rely on this metadata enough to justify a larger bin-only
    resource split, so this removes the resource stamping entirely.
    
    ## What changed
    
    - Removed the `windows-sandbox-rs` build script that invoked `winres`.
    - Removed the setup manifest that was only consumed by that build
    script.
    - Removed the `winres` build dependency and corresponding `Cargo.lock` /
    `MODULE.bazel.lock` entries.
    - Removed the now-unused Bazel build-script data.
    
    ## Verification
    
    - `cargo build -p codex-windows-sandbox --bins`
    - `cargo build -p codex-cli --bin codex`
    - `bazel mod deps --lockfile_mode=update` via Bazelisk, with local
    remote-cache-disabling flags because `bazel` is not installed on PATH
    here
    - `bazel mod deps --lockfile_mode=error` via Bazelisk, with the same
    local flags
    - Verified rebuilt `codex.exe`, `codex-command-runner.exe`, and
    `codex-windows-sandbox-setup.exe` now have blank `FileDescription` /
    `ProductName` fields.
    - `cargo test -p codex-windows-sandbox` still fails on two legacy
    Windows sandbox tests with `CreateRestrictedToken failed: 87` and the
    follow-on poisoned test lock; 85 passed, 2 ignored.
  • Elevated Sandbox 2 (#7792)
    - DPAPI helpers for storing Sandbox user passwords securely
    - creation of Offline/Online sandbox users
    - ACL setup for sandbox users
    - firewall rule setup