Skip to content

vms-e9e: SET PASSWORD moves FACADE to REAL (DCL Phase 2 facade-kill) - #319

Merged
baron-3dl merged 1 commit into
mainfrom
vms-e9e-set-password-real
Aug 11, 2026
Merged

baron-3dl merged 1 commit into
mainfrom
vms-e9e-set-password-real

Conversation

@baron-3dl

Copy link
Copy Markdown
Contributor

Summary

  • cmd_set_password() (src/vmsdcl/dcl_cmd_set.c) used to print %SET-I-PASSWORD, password change not fully implemented and return SS$_NORMAL without touching SYSUAF — an -I- (success-toned) lie for a no-op, the class INV-DCL bans.
  • Now implements the real public OpenVMS DCL Dictionary "SET PASSWORD" self-service exchange: Old password: / New password: / Verification:, no echo, old password verified via sysuaf_authenticate(), new hash persisted via a new shared writer sysuaf_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.
  • /SECONDARY and /SYSTEM (SECURITY-privilege gated, per the Dictionary) and /GENERATE honestly refuse (OVMX has neither subsystem). Mismatch, blank, and under-length (Dictionary PWDMINIMUM default of 6) all refuse without writing.
  • Flagged deviation from the item's initial framing (source-of-truth hierarchy authenticity: INV-1 system-identity SSOT + logical-driven login banners (vms-e652) #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 (tools/vms_authorize.c, already SYSPRV-gated). Documented in docs/dcl-verb-fidelity-scoreboard.md.

Test plan

  • tests/libvms/test_sysuaf_write_veracity.c (new): drives the exact mechanism cmd_set_password() calls — sysuaf_lookup → sysuaf_authenticate → sysuaf_write_record — against a real SYS$SYSTEM:SYSUAF.DAT in 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_NOT guards against the old facade text reappearing.
  • Full DCL suite green under canonical ctest -R dcl-integration: 101/101 (was 100/100 baseline + 1 new test).
  • Full 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-files unreachable from inside the isolated worktree mount) — confirmed by checking the real worktree directly (git ls-files/git status --porcelain show the referenced files properly tracked and clean).
  • All 6 SYSUAF-related tests green, including the new one.

🤖 Generated with Claude Code

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
baron-3dl merged commit 3180165 into main Aug 11, 2026
53 checks passed
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant