vms-e9e: SET PASSWORD moves FACADE to REAL (DCL Phase 2 facade-kill) - #319
Merged
Merged
Conversation
cmd_set_password() (src/vmsdcl/dcl_cmd_set.c) printed "%SET-I-PASSWORD, password change not fully implemented" and returned SS$_NORMAL without touching SYSUAF -- a success-toned lie for a no-op, the banned class INV-DCL exists to kill. It now implements the real public OpenVMS DCL Dictionary "SET PASSWORD" self-service exchange: Old password / New password / Verification, no terminal echo, verified against the real SYSUAF hash (sysuaf_authenticate()), and on match writes a real new hash through a new shared writer, sysuaf_write_record() (src/libvms/rtl/sysuaf.c) -- a second caller of the one writer (sysuaf_format_record(), vms-9b7/INV-1), never a second SYSUAF format. /SECONDARY and /SYSTEM (SECURITY-gated) and /GENERATE honestly refuse; mismatch/blank/under-length (Dictionary PWDMINIMUM default 6) refuse without writing. Deviation from the item's initial framing (flagged, source-of-truth hierarchy #1): the public Dictionary shows SET PASSWORD takes no parameters and has no /USER= qualifier -- there is no DCL-level way to change another account's password; that stays AUTHORIZE's job (already SYSPRV-gated). Veracity: tests/libvms/test_sysuaf_write_veracity.c drives sysuaf_lookup -> sysuaf_authenticate -> sysuaf_write_record against a real SYS$SYSTEM:SYSUAF.DAT in an isolated temp root, proving the new password authenticates, the old one no longer does, and a bystander row is untouched. tests/dcl/test_set_password_veracity.sh proves the DCL surface no longer fakes success (bogus qualifier -> IVQUAL, /SECONDARY and /GENERATE -> honest NOTIMPL, extra parameter -> MAXPARM). DCL suite: 101/101 (was 100/100 baseline + 1 new test) under canonical ctest. docs/dcl-verb-fidelity-scoreboard.md updated: SET PASSWORD FACADE -> REAL. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
baron-3dl
added a commit
that referenced
this pull request
Aug 11, 2026
…in diagnostics) (#321) * vms-832: bump OVMX_PRODUCT_VERSION to V0.3-3 Third point release off tag 0.3-2, cut through the RE machinery (vms-a84). Payload: conversational boot (#301), DCL Phase 2 facade-kills (ASSIGN->real logical names #316, STOP->real sys$delprc #318, SET PASSWORD->real SYSUAF hash change #319), and rejoin isolation diagnostics (#314/#317/#320). No test hardcodes the version literal -- tests/libvms/test_identity.c and friends all compare against the OVMX_PRODUCT_VERSION macro, so no de-hardcoding was needed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * vms-832: generate V0.3-3 release notes (boot + DCL Phase 2 + rejoin diagnostics) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: alice <alice@workspace.local> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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
cmd_set_password()(src/vmsdcl/dcl_cmd_set.c) used to print%SET-I-PASSWORD, password change not fully implementedand returnSS$_NORMALwithout touching SYSUAF — an-I-(success-toned) lie for a no-op, the class INV-DCL bans.Old password:/New password:/Verification:, no echo, old password verified viasysuaf_authenticate(), new hash persisted via a new shared writersysuaf_write_record()(src/libvms/rtl/sysuaf.c+sysuaf.h) — a second caller of the existing one writer (sysuaf_format_record(), INV-1), not a second SYSUAF format./SECONDARYand/SYSTEM(SECURITY-privilege gated, per the Dictionary) and/GENERATEhonestly refuse (OVMX has neither subsystem). Mismatch, blank, and under-length (DictionaryPWDMINIMUMdefault of 6) all refuse without writing./USER=qualifier — there is no DCL-level way to change another account's password; that stays AUTHORIZE's job (tools/vms_authorize.c, already SYSPRV-gated). Documented indocs/dcl-verb-fidelity-scoreboard.md.Test plan
tests/libvms/test_sysuaf_write_veracity.c(new): drives the exact mechanismcmd_set_password()calls —sysuaf_lookup → sysuaf_authenticate → sysuaf_write_record— against a realSYS$SYSTEM:SYSUAF.DATin an isolated temp DKA0: root. Proves the NEW password authenticates, the OLD one no longer does, and a bystander row survives untouched. 12/12 checks pass.tests/dcl/test_set_password_veracity.sh(new): proves the DCL-surface facade text/status is gone —SET PASSWORD/BOGUS→%DCL-W-IVQUAL/2288,/SECONDARY+/GENERATE→ honest%DCL-W-NOTIMPL/2296, extra parameter →%DCL-E-MAXPARM/20,EXPECT_NOTguards against the old facade text reappearing.ctest -R dcl-integration: 101/101 (was 100/100 baseline + 1 new test).ctest --output-on-failure -LE slow: 130/131 in a from-scratch containerized build; the 1 remaining failure (cmake_shims_tracked_gate) is a git-worktree-container-mount artifact (git ls-filesunreachable from inside the isolated worktree mount) — confirmed by checking the real worktree directly (git ls-files/git status --porcelainshow the referenced files properly tracked and clean).🤖 Generated with Claude Code