Static release carry: explicit 0444 under UMask 0027 #9
Loading…
Reference in a new issue
No description provided.
Delete branch "hands/static-carry-mode-0444"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Cause:
carry_and_flipcreated the carried site file withOpenOptions::mode(0o444). The create mode is masked by the umask, and the service runsUMask=0027, so the file landed 0440 root:root. www-data could not read it and the sealed-tree verifier (accepts only 0444/0555) rejected it. Seen on the first Ratatoskr release (receipt /opt/commons/handoff/rat146-a-receipt-20261114.md); S6 is held until a fixed Idunn is deployed and a second release is made.Fix:
file.set_permissions(0o444)on the open handle before the write and rename. One line plus the import.Proof: new test
static_release_carry_is_0444_under_the_service_umaskre-runs itself in a child process underumask(0o027)(umask is process-global, so no sibling test sees it; the parent also fails if the child filter matched no test).left: 288 right: 292(0o440 vs 0o444).cargo test --lib static_release15 passed, including the existing default-umask test.Sibling sites on the static-release path: none unfixed. Other
.mode(...)creates either set permissions explicitly (route stage 8095, write_root_owned_file 8193) or only narrow (0600 create_private_file, 0400 activation credential, which also sets permissions).🤖 Generated with Claude Code