{"record":{"id":"755cae2a989a4153","repo":"openai/codex","slug":"refusing-to-use-symlink-lock-file","errorCode":null,"errorMessage":"refusing to use symlink lock file {}","messagePattern":"refusing to use symlink lock file (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"codex-rs/network-proxy/src/certs.rs","lineNumber":555,"sourceCode":"fn lock_managed_ca_artifacts(proxy_dir: &Path) -> Result<File> {\n    let lock_path = proxy_dir.join(MANAGED_MITM_CA_ARTIFACT_LOCK);\n    let file = open_managed_ca_lock(&lock_path)?;\n    file.lock()\n        .with_context(|| format!(\"failed to lock {}\", lock_path.display()))?;\n    Ok(file)\n}\n\nfn managed_ca_certificate_lock_path(certificate_path: &Path) -> Option<PathBuf> {\n    let file_name = certificate_path.file_name()?.to_string_lossy();\n    Some(certificate_path.with_file_name(format!(\".{file_name}.lock\")))\n}\n\nfn open_managed_ca_lock(path: &Path) -> Result<File> {\n    if fs::symlink_metadata(path)\n        .ok()\n        .is_some_and(|metadata| metadata.file_type().is_symlink())\n    {\n        return Err(anyhow!(\n            \"refusing to use symlink lock file {}\",\n            path.display()\n        ));\n    }\n\n    #[cfg(unix)]\n    use std::os::unix::fs::OpenOptionsExt;\n\n    let mut options = OpenOptions::new();\n    options.read(true).write(true).create(true).truncate(false);\n    #[cfg(unix)]\n    options.mode(0o600);\n    options\n        .open(path)\n        .with_context(|| format!(\"failed to open {}\", path.display()))\n}\n\nfn prune_managed_ca_artifacts(proxy_dir: &Path) {","sourceCodeStart":537,"sourceCodeEnd":573,"githubUrl":"https://github.com/openai/codex/blob/339751715c64496cb86246bfb3935f40e309dd3d/codex-rs/network-proxy/src/certs.rs#L537-L573","documentation":"Error \"refusing to use symlink lock file {}\" thrown in openai/codex.","triggerScenarios":"Thrown at codex-rs/network-proxy/src/certs.rs:555 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"339751715c64496cb86246bfb3935f40e309dd3d","analyzedAt":"2026-08-25T05:35:09.876Z","schemaVersion":2},"datasetVersion":"2026-08-25T06:17:31.827Z"}