mirror of
https://github.com/openai/codex.git
synced 2026-09-20 12:47:38 +00:00
Preserve the provisioned macOS CLI's code-signing identity (#46495)
## Why Existing login-keychain access rules identify the CLI as `codex`. Packaging it in an app bundle must preserve that code-signing identifier independently of the bundle identifier and provisioned App ID. ## What changed - Sign the provisioned CLI with the identifier `codex`, retaining `com.openai.codex.cli` as its bundle identifier. - Require the expected signing identifier and team during signature verification, and reject unexpected bundle identifiers, executable names, or package types. - Document the identity distinction and keychain compatibility limits. ## Testing Extend signing-driver tests to check the signing identifier, verification requirement, bundle metadata, and provisioned entitlements, and to reject altered bundle identity fields. These tests use generated credentials and stubbed native tools; they do not verify runtime keychain access or credential recovery. GitOrigin-RevId: ab00072e48189551adb0e70008210fee6d36241d
This commit is contained in:
@@ -13,6 +13,9 @@ from datetime import datetime, timezone
|
||||
from pathlib import Path
|
||||
|
||||
BUNDLE_ID = "com.openai.codex.cli"
|
||||
# Existing login-keychain ACLs identify the CLI by its code-signing identifier.
|
||||
# Keep this stable independently of the bundle and provisioned App ID.
|
||||
CODE_SIGNING_ID = "codex"
|
||||
APP = Path("CodexCLI.app")
|
||||
EXECUTABLE = APP / "Contents/MacOS/codex"
|
||||
SIGNING = Path(__file__).resolve().parent
|
||||
@@ -156,6 +159,13 @@ def prepare(package, reports, configuration: ProfileConfiguration):
|
||||
def verify(package, reports, expected_target, configuration: ProfileConfiguration):
|
||||
"""Check profile and certificate pins; the signing driver verifies code."""
|
||||
load_profile(configuration)
|
||||
info = plistlib.loads((package / APP / "Contents/Info.plist").read_bytes())
|
||||
if (
|
||||
info.get("CFBundleIdentifier") != BUNDLE_ID
|
||||
or info.get("CFBundleExecutable") != EXECUTABLE.name
|
||||
or info.get("CFBundlePackageType") != "APPL"
|
||||
):
|
||||
raise ValueError("Unexpected provisioned CLI bundle identity or executable")
|
||||
if (
|
||||
package / APP / "Contents/embedded.provisionprofile"
|
||||
).read_bytes() != configuration.profile.read_bytes():
|
||||
|
||||
Reference in New Issue
Block a user