Name the Parmlib member that is actually in effect - #168
Merged
Conversation
HTTPD404E printed the CONFIG= parm, which http_config() has ignored since the Parmlib migration -- and which the shipped STC procedure does not pass at all, so the one message naming what failed to process always read "processing (null)". After #163 and #165 gave the parser real reasons to refuse a startup, that message got a lot more visible. The configuration's real identity is the HTTPPRM DD, and the PROC allocates it as &D(&M), so which member is in effect is a startup choice an operator can genuinely need to confirm. parmlib_name() resolves it from the DSAB -> TIOT entry -> JFCB, read-only pointer chasing with no SVC and no allocation, falling back to the DD name if any link is missing. It is reported before parsing, so a later error is already attributed: HTTPD022I Configuration from SYS2.PARMLIB(HTTPPRM0) HTTPD404E drops the operand accordingly. CONFIG= is now answered rather than swallowed. Silently ignoring it is worse than not accepting it -- an operator who passes it believes it took effect, and migration.md still tells 3.x users to remove theirs, so a leftover is exactly what this catches. HTTPD024W says it did nothing and names the mechanism that does. Fixes #166
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.
Fixes #166
The defect
httpd.c:95printed theCONFIG=parm, whichhttp_config()has ignored sincethe Parmlib migration (
(void)member) — and which the shipped STC proceduredoes not pass at all. So the one message naming what failed to process always
read:
After #163 and #165 gave the parser real reasons to refuse a startup, that
message became a lot more visible.
Name the member instead
The configuration's real identity is the
HTTPPRMDD, and the PROC allocates itas
&D(&M)— soS HTTPDandS HTTPD,M=HTTPPRM1read different members and"which one is this server running?" is a question an operator can genuinely
have. Nothing answered it before.
parmlib_name()resolves it from DSAB → TIOT entry → JFCB (get_dsab(),TIOEJFCB,jfcbdsnm+jfcbelnm) — read-only pointer chasing, no SVC and noallocation, the same walk
__listal()does. It falls back to the DD name if anylink is missing, so a caller always gets something printable.
__listal()itselfwas not reusable: it drops
jfcbelnm, which is the half that matters here.It is reported before parsing, so a later error is already attributed:
and
HTTPD404Edrops the operand.CONFIG= is answered rather than swallowed
The issue asks whether to remove it or make it select the member. Neither:
S HTTPD,M=memberalready is the MVS-native way to select one, so a secondmechanism would be redundant.
today, which is the actual problem — an operator who passes it believes it took
effect.
migration.mdstill tells 3.x users to removePARM='CONFIG=...'fromtheir JCL, so a leftover is exactly what this catches.
HTTPD024Wnow says it did nothing and names the mechanism that does.Testing
All three halves are directly observable, so all three were observed on the live
system rather than argued for.
1. The member is resolved, and it is the real one — not the fallback and not a
default. Started twice, with different members:
The second is what proves the JFCB walk reads the live allocation.
2. The failure path now attributes itself. Started on a member carrying the
malformed route from #164, so the whole chain is visible at once:
Which member, what was wrong with it, why that is fatal, and that startup ended
— previously the first and last lines were "nothing" and "(null)".
3.
CONFIG=is caught. The STC procedure passes no PARM — which is why theold message could only ever print "(null)" — so this needed a batch run, pointed
at the same bad member so it terminates at once and never competes for the port:
That run also confirms the JFCB walk works against a batch DD, not just the
STC's.
Temporary member deleted, server restarted on
HTTPPRM0,/.dsrvand/zosmf/restfilesboth 200, production member verified byte-for-byte unchanged.Also
make modules/make testclean under-Wall -Werror,make test-host4 suites / 63 assertions / 0 fail.
Docs
configuration.mdgains the member-selection note and theHTTPD022Iline;migration.mdshows what a leftoverPARM='CONFIG=...'now produces, next tothe instruction to remove it.