fix(pam): correct success=end → success=done across all 9 sites#31
Merged
Conversation
`pam.conf(5)` documents exactly `ignore | bad | die | ok | done | reset | N` as the legal value-keywords for the `[control=value …]` syntax. `end` is not in that list — libpam logs a warning and silently treats the unknown keyword as `ignore`, which means a successful face match (`PAM_SUCCESS` from `pam_visage.so`) was being dropped and the stack fell through to the next auth rule. In practice, users with the documented setup were still seeing a password prompt on every authentication; face auth appeared to succeed but had no effect on the stack flow. This has shipped since v0.1.0. The bug appeared in 9 places (some files contained two occurrences): README.md docs/architecture.md docs/operations-guide.md (×2) docs/research/architecture-review-and-roadmap.md (×2) docs/research/domain-audit.md docs/research/howdy-analysis-and-visage-design.md packaging/debian/pam-auth-update packaging/nix/module.nix (×2: sudo + login rules) Reported-by: @SelfRef <#27> Existing-user impact: anyone who manually edited `/etc/pam.d/system-auth` following the prior README (Arch path) or installed an older `.deb` / NixOS rebuild needs to swap `success=end` for `success=done` in their config and re-test. The CHANGELOG entry calls this out.
7e81d44 to
d643a87
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
pam.conf(5)documents exactlyignore | bad | die | ok | done | reset | Nas the legal value-keywords inside the[control=value …]syntax.endis not in that list. libpam logs a warning and silently treats the unknown keyword asignore, which meansPAM_SUCCESSfrompam_visage.sowas being dropped and the stack fell through to whatever came next (typicallypam_unix.so→ password prompt). Effectively: face auth has been working as if Visage weren't installed, since v0.1.0.This sweeps the 11 occurrences in 9 files:
README.mddocs/operations-guide.mddocs/architecture.mddocs/research/architecture-review-and-roadmap.mddocs/research/domain-audit.mddocs/research/howdy-analysis-and-visage-design.mdpackaging/debian/pam-auth-updatepackaging/nix/module.nixsudo+loginrules)The Ubuntu profile and the NixOS module are the load-bearing live configs — fixing those is the actual user-impact change. The docs sweep is so users following our setup instructions today don't reintroduce the bug.
Origin
Caught by @SelfRef in #27 — the README diff there flagged it as the right fix for the Arch manual-edit case. The bug is broader than the README, so I'm landing the fleet sweep separately and leaving #27 for the other improvements (resume-unit enable,
visage verifystep). Attribution preserved viaReported-by:in the commit.Existing-user impact
This is a behavior change for anyone whose PAM stack still references
success=end:/etc/pam.d/system-authper the prior README — they need to swap the keyword in their config. The CHANGELOG entry calls this out..debusers from a release before this lands — their/etc/pam.d/common-auth(generated bypam-auth-update --package) contains the broken keyword and won't fix itself until the new.debis installed AND they re-runpam-auth-update(thepostinstalready does this).nixos-rebuild switch.For all of them: face auth was silently a no-op. After this fix, face match actually terminates the auth stack with success, as intended.
Test plan
cargo fmt --all -- --checkcleancargo clippy --workspace -- -D warningscleancargo test --workspacegreen (this PR doesn't touch Rust code, but workspace test is the contract)build-debproduces a.debcleanly with the correctedpam-auth-updateprofile/etc/pam.d/system-authto usesuccess=donesudo visage enroll && sudo true— should authenticate via face without password prompt.deb; postinst runspam-auth-update --packagegrep pam_visage /etc/pam.d/common-authshowssuccess=donesudo trueauthenticates via faceCHANGELOG
Entry added under
[Unreleased] > Fixedwith the existing-user upgrade note.Related
systemctl restartafter hibernate due to stale camera fd #26 / fix(visaged): handle SIGTERM (closes #26) #30 — sibling shipped-bug fix (SIGTERM handler); both land in v0.3.2🤖 Generated with Claude Code