Repository navigation
mvsce: write the mvsMF console route into HTTPPRM0 - #41
Merged
Merged
Conversation
mvsMF's installation guide registers four z/OSMF routes. setup_mvsce.py wrote three and left out /zosmf/restconsoles/*, which needs the MVSMF.CONSOLE facility. The route goes before the /zosmf/* catch-all, since the first match wins. Refs #40
The RAKF 2.0.0 TK5INST.zip was re-uploaded by the maintainer on
2026-10-24, four minutes after commit a4d101e ("fix 80 column error")
and a minute after the release was republished, so its digest changed
and the build failed at the checksum. The pin now follows the new asset.
HTTPD 4.5.1 carries httpd#351: a RES= route whose profile is missing is
refused (opt-in), where 4.3.0 only logged HTTPD425W and gated the route
by AUTH= alone. The console route needs that refusal.
Refs #40
mgrossmann
commented
Nov 8, 2026
mgrossmann
left a comment
Contributor
Author
There was a problem hiding this comment.
Review of 26a8e03 (head of #41).
Verified
mvsce/setup_mvsce.py:142: the new route line is byte for byte the one in mvsMFdocs/installation.mdon main (line 212) and precedes/zosmf/*. Correct.mvsce/Dockerfile:89: I downloadedTK5INST.zipof the RAKF v2.0.0 release just now; its SHA-256 is34a3556a…3ec6d, as pinned.- CI is green on both architectures; the PR description records a local build with
BUILD_EXIT=0and a container test of the route. - The finding in the PR description is right:
mvsce/Dockerfile:80pins mvsMF 1.3.0, and the console handler of 1.3.0 does not checkFACILITY MVSMF.CONSOLEitself (that check arrived with mvsMF 1.4.0, see its CHANGELOG, #347/#460;git grep MVSMF.CONSOLE v1.3.0 -- srcfinds nothing). So with this PR the console route is still open to every logged-in user, exactly as/zosmf/* AUTH=TOKENleft it on main. The PR does not make anything worse, but the newRES=reads as a gate and is none, and every start of the image will logHTTPD425W ... NOT GATED.
Must fix
mvsce/setup_mvsce.py:904-905(setup_rakf): define the profile in the same script that writes the route. The REXX already insertsFACILITYFTPAUTH; addFACILITYMVSMF.CONSOLEwith universalNONEandREADfor the groupADMIN, the same pattern as FTPAUTH (IBMUSER, which the setup verification uses against/zosmf/test, is in ADMIN). The merge loop sorts, so the new lines only need to be in ascending order among themselves. Failure scenario today: a user in group USER logs in andPOST /zosmf/restconsoles/consoles/defcnruns an operator command. Sure.mvsce/setup_mvsce.py:138-143: once the profile is defined, addRES_NOPROFILE=DENYtoHTTPPRM0.setup_rakfruns and reloadsRAKFPROFbefore HTTPD is started, so the start writes neitherHTTPD425WnorHTTPD426W. This is what the HTTPD installation guide says for a new system whose profile definitions are part of the installation. Sure.- Commit message of 26a8e03: "The console route needs that refusal" and "a RES= route whose profile is missing is refused" describe a behaviour the image does not have (the keyword is not set). The PR description corrects it, but the commit message is what
git logkeeps. Reword the commit before the merge (a force-push on this branch is fine). Sure.
Suggestion
- Step 5 of the setup verification (module docstring, lines 56-63) could fail the build on
HTTPD425W/HTTPD426Win the HTTPD start log, so a profile that is lost again is caught at build time instead of in the container. - Moving mvsMF to 1.4.1 would make the console fail-closed in the handler itself, but that also needs the
JESSPOOLprofiles of 1.4.0 and is a change of its own; see the follow-up issue.
Who gets READ on the profile (group ADMIN only, as proposed above) is still an open decision on our side; I will state it here as soon as it is taken.
CHANGES REQUESTED
The console route /zosmf/restconsoles/* names FACILITY MVSMF.CONSOLE. Without that profile HTTPD 4.5.1 leaves the route open to every logged-in user, and mvsMF up to 1.3.0 does not check the profile itself. setup_rakf now defines it with RDEFINE (UACC NONE) and permits READ to IBMUSER only, and HTTPPRM0 sets RES_NOPROFILE=DENY so a route whose profile is missing answers 403.
mgrossmann
commented
Nov 8, 2026
mgrossmann
left a comment
Contributor
Author
There was a problem hiding this comment.
Review of 4d116a7 (head of #41), after the first review on 26a8e03.
Verified
mvsce/setup_mvsce.py:934-950:RDEFCONdefinesFACILITY MVSMF.CONSOLEwithUACC(NONE)and permits READ to IBMUSER only, as decided. Both steps are listed inrun_job, which fails the build unless each step appears with CC 00000 (run_job, line 296), so a failed RDEFINE or PERMIT cannot slip through. The job runs beforeS RAKFPROFand before HTTPD is started.mvsce/setup_mvsce.py:142:RES_NOPROFILE=DENYis inHTTPPRM0; with the profile loaded first this is the order the HTTPD installation guide prescribes for a new system.- The container test in the PR description matches what was required: no
HTTPD425W/HTTPD426Wat the start, 401 without a login, 200 for IBMUSER on/zosmf/restconsoles/v1/log, container down and list empty. - The three must-fix points of the first review are addressed. On the third: the message of 26a8e03 stays as it is. 4d116a7 explains the actual behaviour and the keyword it sets, and the PR is merged with a merge commit, so the history shows both. No force-push needed.
- Not tested: a logged-in user without READ gets 403. Acceptable here, the gate is HTTPD's own
RES=path, which HTTPD's tests cover; the image has no second user with a known password.
Suggestion
mvsce/setup_mvsce.py:940and:947: the RAKF commands must start in column 1 (a leading blank makes RAKF 2.0.0 runADDSDand define a DATASET profile; the PERMIT then fails). That is in the PR description but not in the file. A one-line comment above the JCL would save the next editor the same CC 8.
Merge once CI is green on 4d116a7.
APPROVE
This was referenced Nov 8, 2026
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
setup_mvsce.pywrites the four z/OSMF routes that mvsMF documents. The new one isMOD=MVSMF /zosmf/restconsoles/* AUTH=TOKEN RES=FACILITY:MVSMF.CONSOLE, placed before the/zosmf/*catch-all.HTTPPRM0points at the mvsMF documentation and states that the first match wins.setup_rakfdefines the profileFACILITY MVSMF.CONSOLE(RDEFINE, UACC NONE) and permits READ to IBMUSER only. RDEFINE and PERMIT run as separate IKJEFT01 steps.HTTPPRM0setsRES_NOPROFILE=DENY, so aRES=route whose profile is missing is refused.TK5INST.zip(sha25634a3556a…); HTTPD raised from 4.3.0 to 4.5.1; README table updated.Closes #40
Test plan
Done:
docker buildexit 0).RDEFCONjob:RDEFandPERMboth CC 00000;RAKFPROF7 RAKF PROFILES UPDATEDseen.MVSCE_TARGET_IMAGE=mvsce mvsce-target up --pull missing):HTTPPRM0. NoHTTPD425Wand noHTTPD426Win the log.GET /zosmf/restconsoles/v1/log: without login 401; with IBMUSER basic auth 200.mvsce-target down;mvsce-target listempty.Not done:
FACILITY MVSMF.CONSOLEwas not tested. Expected result: 403. No second test user with a known password was available.Corrections
RDEFINEmakes RAKF 2.0.0 run the command asADDSD, which creates a DATASET profile, and the following PERMIT then fails with "No universal access record found". The RAKF commands in this PR start in column 1 and RDEFINE and PERMIT are in separate steps.