CGIplus-enabled Run-time Environment Example
--------------------------------------------
***** FIRST, EVIDENCE OF PERSISTANCE *****
Usage Count: 1
***** SECOND, THE CGI ENVIRONMENT AVAILABLE *****
WWW_AUTH_TYPE=
WWW_CONTENT_LENGTH=0
WWW_CONTENT_TYPE=text/plain; charset=ISO-8859-1
WWW_DOCUMENT_ROOT=
WWW_GATEWAY_INTERFACE=CGI/1.1
WWW_GATEWAY_EOF=$Z-37354F3339E902D837943EF9-
WWW_GATEWAY_EOT=$D-47E212661D5DE9AF32C10424-
WWW_GATEWAY_ESC=$E-75EA24D575334F92C4B321EB-
WWW_GATEWAY_MRS=4096
WWW_HTTP_ACCEPT=*/*
WWW_HTTP_USER_AGENT=Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
WWW_HTTP_ACCEPT_ENCODING=gzip, br, zstd, deflate
WWW_HTTP_HOST=www.timmersit.nl
WWW_PATH_INFO=/just/a/bogus/path.txt
WWW_PATH_ODS=5
WWW_PATH_TRANSLATED=WASD_ROOT:[just.a.bogus]path.txt
WWW_QUERY_STRING=query=string
WWW_REMOTE_ADDR=13.59.113.183
WWW_REMOTE_HOST=13.59.113.183
WWW_REMOTE_PORT=12697
WWW_REMOTE_USER=
WWW_REQUEST_METHOD=GET
WWW_REQUEST_PROTOCOL=HTTP/1.1
WWW_REQUEST_SCHEME=http:
WWW_REQUEST_TIME_GMT=Sat, 03 May 2025 20:46:57 GMT
WWW_REQUEST_TIME_LOCAL=Sat, 03 May 2025 22:46:57
WWW_REQUEST_URI=/rtbin/version.h/just/a/bogus/path.txt?query=string
WWW_SCRIPT_FILENAME=WASD_ROOT:[SRC.HTTPD]VERSION.H
WWW_SCRIPT_NAME=/rtbin/version.h
WWW_SCRIPT_RTE=cgi-bin:[000000]rte_example.exe
WWW_SERVER_ADDR=192.168.1.31
WWW_SERVER_CHARSET=ISO-8859-1
WWW_SERVER_GMT=+02:00
WWW_SERVER_NAME=vms1.timmersit.nl
WWW_SERVER_PROTOCOL=HTTP/1.1
WWW_SERVER_PORT=80
WWW_SERVER_SIGNATURE=
WASD/11.3.0 Server at vms1.timmersit.nl Port 80
WWW_SERVER_SOFTWARE=HTTPd-WASD/11.3.0 OpenVMS/AXP
WWW_UNIQUE_ID=aBac4QAAAAQAAMkkHJY
WWW_SECURITY_STATUS=NONE
WWW_FORM_QUERY=string
WWW_KEY_COUNT=0
***** THIRD, AN "INTERPRETED" FILE (WWW_SCRIPT_NAME/WWW_SCRIPT_FILENAME) *****
[0001] /*****************************************************************************/
[0002] /*
[0003] version.h
[0004]
[0005]
[0006] VERSION HISTORY
[0007] ---------------
[0008] 23-OCT-2021 MGD v12.0.0,
[0009] So long, farewell, Auf Wiedersehen, goodnight (-VAX)
[0010] (comprehensive move to native 64 bit data storage)
[0011] continuing port to x86-64 (OpenVMS V9.1-A)
[0012] verified builds against and operates with OpenSSL 3.0
[0013] (but not offically supported due to OpenSSL 3.0 issues)
[0014] accomodate PIPE from WASD_ROOT:[SRC.UTILS]WASTEE.C
[0015] TcpIpAlt..() experimental address/name lookup
[0016] BSD 4.4 sockaddr.. IO$M_EXTEND to $QIO (per MB)
[0017] proxy caching has been obsoleted
[0018] proxy SOCKS5 connect support
[0019] scripting process naming revised (perhaps even enhanced)
[0020] agent scripting extended and formalised for v12...
[0021] AGENT-BEGIN: and AGENT-END: callouts
[0022] CGI: and DICT: callouts
[0023] /DO=DCL=PROCTOR=APPLY
[0024] /DO=DCL=PROCTOR=LOAD
[0025] /DO=NET=LIST
[0026] /DO=NET=PURGE=HTTP1
[0027] /DO=NET=PURGE=HTTP2
[0028] logging 'XX:blb' visual aid
[0029] AdminPing() provides a baseline RTT for request processing
[0030] SET proxy=rework= (replacement strings for response)
[0031] SET response=var=asis (provide exact image of on-disk file)
[0032] SET webdav=all (process all requests via WebDAV code)
[0033] SET webdav=auth (authorise access using WebDAV SETings)
[0034] metacon webdav:all (SETing of above)
[0035] metacon webdav:auth (SETing of above)
[0036] pass /whatever "200 $" executes CLI command
[0037] !#-- and !#++ selectively disable/(re)enable WATCH reporting
[0038] [ServiceConnect] respond to a connection on a port
[0039] WATCH: proctored script by checking only [x]Script
[0040] OdsFileAcpInfo() ATR$C_MODDATE (date-time *data* modified)
[0041] supplements ATR$C_REVDATE (classic revision date-time)
[0042] callout HTTP-STATUS: detect if a script has responded yet
[0043] DavWebRequest() specifically handle WebDAV GET and HEAD
[0044] DavMetaOds() ensure extended syntax only used ODS-5 volumes
[0045] AuthAccessEnable() file access use (rqptr->WebDavRequest ||
[0046] rqptr->WhiffOfWebDav || rqptr->rqPathSet.WebDavAuth)
[0047] AuthParseAuthorization() return AUTH_DENIED_BY_LOGIN
[0048] if unknown scheme allowing 401 response rather than 403
[0049] FaoBigNumber() '&,' optionally numbers 'P', 'G', 'M', 'k'
[0050] SesolaMkCertRetain() stores dynamic cert in process logical
[0051] WatchData() and WatchDataDump() constrain length
[0052] NetListFor() use of $BRKTHRU requires OPER privilege
[0053] bugfix; Http2Supervisor() idle connection
[0054] bugfix; SesolaNetIoRead() /bytes = value/
[0055] bugfix; FileBegin() ERROR_REPORTED() free file task
[0056] bugfix; CliDemo and instance environment number (per KM)
[0057] bugfix; CgiGenerateVariables() "AUTHAGENT hangs when called
[0058] for a POST request" (per JPP)
[0059] bugfix; DclCalloutDefault() CLIENT-READ:
[0060] bugfix; AdminMenu() activity hours 672
[0061] bugfix; MapOdsAdsVmsToUrl() "if (SAME2(cptr,':['))"
[0062] bugfix; OdsDirectSearch() appending the resultant file name
[0063] to the pre-filled expanded name
[0064] bugfix; DavMetaCreateDir() and DavMetaDeleteDir()
[0065] allow for non-existant meta data files
[0066] bugfix; DavMetaName() no meta directory
[0067] bugfix; ErrorReportFooter() use request heap for signature
[0068] 17-AUG-2020 MGD v11.5.1,
[0069] Http2RequestData() reduce memory consumption
[0070] HTTP2_DEFAULT_WINDOW_SIZE from 1048575 to 131070
[0071] if no service configured create http: and https: ex nihilo
[0072] VmCheckPgFlLimit() and WASD_VM_PGFL_LIMIT logical name
[0073] keep connect cert (->VerifyPeer) distinct from client cert
[0074] bugfix; ProxyEnd() fix NetIoEnd() fix
[0075] bugfix; OdsDirectSearch() if wildcard specification
[0076] return RMS$_NMF, otherwise RMS$_FNF (seems so elementary)
[0077] bugfix; Http2RequestCancel() cancel and abort
[0078] bugfix; RequestEnd() redirection
[0079] bugfix; SesolaALPNCallback() 'h2' global and service enabled
[0080] bugfix; ControlDoHelp() remove non-existant DISCONNECT=..
[0081] bugfix; RequestExecutePostAuth1() INTERNAL_PASSWORD_CHANGE
[0082] should call HtAdminBegin() not AdminBegin()
[0083] bugfix; SesolaSNICallback() needs to propagate newly set
[0084] context client verify parameters to SSL-specific
[0085] bugfix; SesolaNetFree() ensure (sigh) X509_free() where
[0086] ->ClientCertPtr associated with connection (i.e. HTTP/2)
[0087] bugfix; RequestParseExecute() ensure PUT and DELETE have
[0088] WebDAV header field(s) before considering WebDAV
[0089] 22-JUL-2020 MGD v11.5.0, "Stay well..."
[0090] static fallback cert replaced by dynamic SesolaMkCert()
[0091] protocol "HTTP/2" also reported in standard log formats
[0092] DavWebRequest() remove requirement for logical name
[0093] WASD_HTTP2_WEBDAV after WebDAV over HTTP/2 tested
[0094] NetIoQioMaxSeg() tune QIO to TCP MSS
[0095] verified against VSI SSL111 product
[0096] SET response=csp= ("content-security-policy:")
[0097] https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
[0098] SET response=cspro= ("..policy-report-only:")
[0099] metacon alpn: (TLS application level protocol negotiation)
[0100] metacon proctor: (obvious proctored script clause)
[0101] DCL callout CSP: ("content-security-policy:")
[0102] DCL callout CSPRO: ("..policy-report-only:")
[0103] REGEX.C updated (ever-so-slightly)
[0104] more proxy persistent connection (per JPP)
[0105] RequestAbort() accomodates HttpdSupervisor() refinement
[0106] and REQUEST_STATE_ABORT used throughout server
[0107] Http2RequestData() delivers Http2RequestCancel() read AST
[0108] NetTestSupevisor() and WASD_NET_TEST_BREAK logical name
[0109] bugfix; ProxyEnd() free ioptr using NetIoEnd()
[0110] bugfix; NetIoWriteStatus() and NetIoReadStatus()
[0111] bugfix; RequestPersistentConnection() pipelined request
[0112] bugfix; Http2RequestData() flow control
[0113] bugfix; SesolaClientCertGet() SSL_VERIFY_POST_HANDSHAKE
[0114] bugfix; httpd.c if (!CliDemo) HttpdGblSecInit();
[0115] bugfix; MetaConConditionalList() bu**ered
[0116] bugfix; RequestProcessFields() DictLookup (.."accept"..)
[0117] bugfix; SesolaCertExtension() BIO_NOCLOSE memory leak
[0118] bugfix; CacheLoadEnd() free rqCache.ContentPtr on fail
[0119] bugfix; DICT.C "tmptr && tmptr->clink.."
[0120] bugfix; Http2Priority() exclusive bit
[0121] bugfix; NetCreateService() only SesolaInitService() once
[0122] bugfix; WatchDataDump() CHARS_PER_LINE calculation (sigh)
[0123] bugfix; OdsDirectSearch() RMS$_FNF not RMS$_NMF (per JPP)
[0124] bugfix; RequestShareBegin() if (!MATCH6 (cptr, "raw://"))
[0125] bugfix; SesolaNetClientBegin() SESOLA_SINCE_110
[0126] BIO_set_data() before SSL_set_bio() (per JPP)
[0127] bugfix; AdminParsePath() extraneous OdsParseRelease()
[0128] bugfix; OdsDirectSearch() only if not already on the block
[0129] boundary add one to get to next, otherwise already there!
[0130] 20-JUL-2019 MGD v11.4.0, "One small step ..."
[0131] 25th Anniversary Release (see 20-JUN-1994 below)
[0132] adapt WatchSystemPlus() to allow use via CLI /SYSPLUS
[0133] then dignified with a (sysPlus..()) module of its very own
[0134] /OUTPUT= (in particular for /SYSPLUS)
[0135] HttpdSupervisor() explicitly WatchEnd()
[0136] Sesola_netio_read() and Sesola_netio_write() if connection
[0137] broken (channel zero) return zero (SSL shutdown)
[0138] SET response=200=203 for request tracking and log analysis
[0139] ResponseHiss() response status changed from 403 to 203
[0140] status code 418 (teapot) forces connection drop
[0141] allow a specified port when redirecting, i.e. http[s]//:nnn
[0142] Sesola_netio_read_ast() 0 status TCP/IP Services?
[0143] Sesola_netio_write_ast() 0 status TCP/IP Services?
[0144] bugfix; SesolaClientCertGet() status 0 an issue
[0145] bugfix; SesolaClientCertGet() if (value <= 0) break;
[0146] bugfix; CgiOutput() Content-Length: strtoul()
[0147] bugfix; SesolaClientCert() allow pattern per 25-AUG-2015
[0148] bugfix; SesolaCertExtension() storage reset
[0149] bugfix; SesolaCertParseDn() regression (or whatever)
[0150] bugfix; Http2NetQueueWrite() PEEK_8 at w2ptr->type
[0151] bugfix; non-local without "Host:" use name not host:port
[0152] bugfix; Http2RequestEnd() copy tally rx/tx to request
[0153] bugfix; OdsDirectSearch() (uint)0xffff && rlen < 508)
[0154] bugfix; AuthCompleted() and AuthNotComplete() to address
[0155] AST delivery following request end and rundown
[0156] bugfix; for bugfix StringSliceValue() kludge
[0157] allow for DECnet connection string specified username
[0158] bugfix; DavMetaDir() ACCVIO from !SAME2(mfdptr,'[.')
[0159] 24-NOV-2018 MGD v11.3.0
[0160] verified against OpenSSL v1.0.2 && v1.1.0 && v1.1.1
[0161] TLSv1.3 operational
[0162] verified against EXPAT v2.2.5 (for WebDAV purposes)
[0163] (but reverted to v2.0.1 for final VAX WASD release)
[0164] VM.C eliminate dynamic tuning of heap initial allocation
[0165] and rework to allow detailed memory management statistics
[0166] to be compiled into the runtime for development purposes
[0167] ODS (FILES-11) directory parser
[0168] WatchSystemPlus() et.al. for system troubleshooting
[0169] RequestBegin() exit after consecutive SesolaNetBegin() fails
[0170] DavWebRundown() explicitly abort WebDAV processing
[0171] allow logical name content during one-to-one rule mapping
[0172] refactor WatchWrite() using NetWriteBuffered()
[0173] DclTaskRunDown() always use DclEmptySysOutput()
[0174] [BufferQuotaDclOutput] BUFQUO value for SYS$OUTPUT mailbox
[0175] refactor Http2RequestCancel() into Http2RequestCancelRead()
[0176] and Http2RequestCancelWrite()
[0177] ProxyRequestRebuild() proxy-authorization opaque:
[0178] ProxyTunnelLogicalName() WASD_TUNNEL_SECONDS
[0179] RequestGet() and ProxyTunnelNetReadAst() provide
[0180] "X-Forwarded-For:" client host to proxied-to server
[0181] /DO=REQUEST=RUNDOWN=..
[0182] /DO=ZERO=STATUS
[0183] /DO=SSL=SERVICE=LOAD[=] no longer works
[0184] SET response=var=crlf
[0185] SET response=var=lf
[0186] SET response=var=none
[0187] bugfix; PutWriteFileOpen() override incompatible existing
[0188] file characteristics by first erasing the file
[0189] bugfix; seeming innumerable WebDAV fixes (some obvious,
[0190] some obscure) many thanks to John Dite for his patience and
[0191] persistence in finding and reporting anomalous behaviours
[0192] (check the individual DAV...C modules for descriptions)
[0193] bugfix; StringSliceValue() kludge for DECnet tasks
[0194] bugfix; MetaConEvaluate() "webdav:MSagent"
[0195] bugfix; DavWebMicrosoftDetect() before ->WebDavTaskPtr
[0196] bugfix; X509_free() memory leak with ->ClientCertPtr
[0197] bugfix; Http2NetIoWrite() blocking write data must be
[0198] asynchronously persistent so employ internal buffer(s)
[0199] bugfix; /DO=AUTH=SKELKEY=.. cluster wide (yet again :-)
[0200] bugfix; SESOLA-OpenSSL memory leak at v11.0.0
[0201] bugfix; FileParseAst() regression with search list file
[0202] bugfix; RequestRundown() allow for cache activity
[0203] bugfix; WatchDataDump() CHARS_PER_LINE calculation
[0204] bugfix; (longstanding) MapUrl__Map() multiple template
[0205] wildcards when reverse mapping
[0206] 01-MAR-2018 MGD v11.2.0
[0207] make WATCH item width flexible using initial value 6 digits
[0208] with leading 3 digits HTTP/2 stream ID followed by 3 digits
[0209] connection ID number and on overflow increment by 2
[0210] if |WASD_ENV| defined use that in absence of /ENV=..
[0211] Dav..() always DavWebEnd() not RequestEnd()
[0212] WebDAV "authorisation" allowed to be EXTERNAL or OPAQUE
[0213] RequestRundown() outstanding task sanity checks
[0214] HttpdSupervisor() refactored timeout handling
[0215] ProxyTunnelLogicalName() and WASD_TUNNEL to provide client
[0216] host and port tunnel data available to the WASD system
[0217] activated by SET..PROXY=FORWARDED=[FOR|ADDRESS]
[0218] logging 'II' image information (file, version, link time)
[0219] logging 'TI' request time in ISO 8601 extended format
[0220] logging 'TS' (sortable) UTC request time ISO 8601 format
[0221] logging 'TU' request time UTC (GMT) now synonym for 'TG'
[0222] stamp (note) log events when common/combined with/without+
[0223] SET DIR=TITLE=[default|owner|remote||this=]
[0224] /DO=HELP brief summary of command-line /DOs
[0225] /DO=SSL=SERVICE=LOAD[= (re)load SSL context
[0226] (/DO=SSL=CERT=LOAD is now implemented using this)
[0227] /DO=STATUS report basic status of all instances
[0228] /DO=STATUS=NOW instances immediately update status information
[0229] /DO=STATUS=PURGE zero stale instance status information
[0230] /DO=STATUS=RESET zero instance status information
[0231] /NOTE= annotation to server process log
[0232] refactor WatchEnd() (yet again)
[0233] DclInit() do not adjust SYS$OUTPUT mailbox size when HTTP/2
[0234] is enabled, issue an informational as required
[0235] DclMemBuf..() memory buffer script IPC (see DCLMEMBUF.C)
[0236] callout BUFFER-BEGIN:
[0237] callout BUFFER-END:
[0238] callout BUFFER-WRITE:
[0239] SesolaReport() allow reporting using an HTTP service
[0240] CgiOutput() refine Content-Length: to report out-of-range
[0241] CgiOutput() reject subsequent non-header
[0242] WatchReport() move SSL item into Network group
[0243] WatchShowCluster() and WatchShowSystem() VMS V6.2 obsolete
[0244] bugfix; (longstanding) InstanceSocketForAdmin() sys$deq()
[0245] bugfix; Http2..() window update and flow control management
[0246] bugfix; logging 'BB' header length "lost" during HTTP/2 mods
[0247] bugfix; nil content CGI responses not delivered
[0248] bugfix; (long-standing) always use UpdEnd() not SysDclAst()
[0249] bugfix; CgiGenerateVariables()
[0250] |rqptr->rqAuth.SourceRealm != AUTH_SOURCE_AGENT_OPAQUE &&|
[0251] 09-AUG-2017 MGD v11.1.1
[0252] relax HTTP/2 "rabbit hole" to permit WATCHing except
[0253] for items [x]HTTP/2, [x]SSL and [x]network
[0254] /INSTANCE=CONFIG ensures config values used
[0255] SesolaClientCertRenegotiate() allow for pre- and post-
[0256] OpenSSL 1.1.0 due to MSIE11 (Edge) stalling on a read
[0257] after renegotiation (pre reverts to v11.0 and earlier code)
[0258] SesolaInitService() when SSL_CTX_set_tmp_dh_callback() is
[0259] enabled (DH_PARAM_*.PEM files present) ensure flag
[0260] SSL_OP_CIPHER_SERVER_PREFERENCE is implicitly set
[0261] MapUrl_GuaranteeAccess() mapping as well as authorisation
[0262] Authorize() move AuthorizeGuaranteeAccess() up-front to
[0263] ensure access to guaranteed paths not only with failure
[0264] StringSliceValue() allow quote-delim inside space-delimited
[0265] bugfix; rationalise as OpenSSL_version[_num]() becomes
[0266] confused catering for OpenSSL v1.0.2 && v1.1.0 && v1.1.1
[0267] bugfix; HttpdSupervisor() do RequestRundown() only the once
[0268] bugfix; DclCalloutDefault() NOTICED: and OPCOM: responses
[0269] bugfix; DclScriptProctor() request is not actually "!!*!"
[0270] bugfix; HpackHeadersFrame() use ":authority" pseudo-header
[0271] for "Host:" header according to RFC7540 8.1.2.3
[0272] bugfix; SesolaCertExtension() generate UPN independently
[0273] for each of pre- and post- OpenSSL 1.1.n
[0274] bugfix; SesolaClientCertConditional() 'IS' processing
[0275] bugfix; SesolaClientCertRenegotiate() allow for low-level
[0276] (i.e. SSL) I/O errors (e.g. link disconnection)
[0277] bugfix; LoggingDo() 'SR' silliness from v11.0 rework
[0278] bugfix; MapUrl_ExplainPathSet() response=header=add=..
[0279] bugfix; for HTTP/2 (sigh) we need NPH to generate a header
[0280] bugfix; session ticket key refresh (must be one of those...)
[0281] 04-MAY-2017 MGD v11.1.0,
[0282] "Raw"Socket based on WebSocket infrastructure
[0283] [DclScriptProctor] * general idle process(es)
[0284] [ServiceRawSocket] enables a RawSocket
[0285] [ServiceSSLcert] specification can contain wildcard(s)
[0286] SET proxy=header=[=]
[0287] logging 'CL' insert request content-length
[0288] logging 'PL' insert PUT or POST body received count
[0289] Sesola..() refinements for OpenSSL v1.1.1 and TLS 1.3
[0290] sesola.h |#include "openssl/rand.h"| to fix OpenSSL v1.1.0
[0291] static link error against rand_bytes() and rand_seed()
[0292] SesolaNetThisIsSSL() allow redirection to include scheme
[0293] /DO=SSL=CERT=LOAD ... basically for internal use only!
[0294] (heads-up: planned Let's Encrypt CME utility :-)
[0295] Graph..() activity graphic now implemented using HTML5 canvas
[0296] ResponseHeader() ensure non-printables cannot be injected
[0297] InstanceSessionTicketKey() rework multi-instance/cluster
[0298] (sigh! yes again; the lack of a test cluster these days)
[0299] DirDirectories() do not list "hidden" (^.the.DIR) directories
[0300] bugfix; use rqHeader.RequestBody.. for body with header
[0301] bugfix; DclScriptProctor() v11.0 request structure
[0302] requires dictionary and netio structures
[0303] bugfix; SesolaNetIoRead() SSL_read() in-progress
[0304] bugfix; Http2RequestEnd() end-of-request (control) frame
[0305] independent of request itself
[0306] bugfix; Http2NetQueueWrite() and Http2NetWriteDataAst()
[0307] blocking writes are not placed on the request's
[0308] write list as they are transparent to the request
[0309] bugfix; Http2NetQueueWrite() deliver via NetIoWriteStatus()
[0310] using SS$_NORMAL (HTTP/2 I/O) not the request ->VmsStatus
[0311] bugfix; SesolaControlReloadCA() do not proactively
[0312] X509_STORE_free() (leaves a dangling pointer?)
[0313] bugfix; SesolaSNICallback() port elimination
[0314] bugfix; RequestExecutePostCache() keyword redirection count
[0315] 25-AUG-2016 MGD v11.0.2,
[0316] Http2RequestBegin() ensure stream ident not reused
[0317] increase MAX_REQUEST_HEADER from 16384 to 32768
[0318] InstanceSessionTicketKey() rework multi-instance rotate
[0319] CgiGenerateVariables() mitigate httpoxy vulnerability
[0320] MsgConfigLoadCallback() make [ismap] optional
[0321] ParseCommandInteger() accept just an integer
[0322] CLI /INSTANCE= now sets global section |InstanceMax|
[0323] to allow the created process to continue to exist and when
[0324] used needs to be reset with the likes of /INSTANCE=1
[0325] minimum supported OpenSSL version is now v1.0.0
[0326] which precludes HP SSL V1.4 (at least)
[0327] OpenSSL v1.1.0 required code changes including
[0328] #if (OPENSSL_VERSION_NUMBER < 0x10100000L) in Sesola..()
[0329] modules, and introducing a version dependent build
[0330] SesolaClientCertRenegotiate() rework due to OpenSSL v1.1.0
[0331] ResponseHeader() ->rqCgi.ScriptControlHttpStatus will allow
[0332] an error reporting script to override the original status
[0333] CGI Script-Control: X-http-status=
[0334] %SSL-x-STRICT (RFC6797) now described as %SSL-x-STRICT, HSTS
[0335] bugfix; Http2RequestData() always deliver via NetIoReadAst()
[0336] bugfix; HpackHeadersFrame() uncompressed header size
[0337] bugfix; CgiGenerateVariables() names from dictionary
[0338] bugfix; MetaConEvaluate() request: regression
[0339] bugfix; RequestProcessFields() if-range: regression
[0340] bugfix; MetaConEvaluate() client_connect_gt: regression
[0341] bugfix; SesolaClientCert() move X509 RENEGOTIATE switch
[0342] HTTP/2 to HTTP/1.1 after SSL_get_peer_certificate()
[0343] 30-JUN-2016 MGD v11.0.1,
[0344] meta config [[wasd*n.n.n]] server version conditional
[0345] [SSLsessionLifetime] session ticket (or ID) lifetime
[0346] [SSLverifyPeerDataMax] see documentation
[0347] [ServiceSSLsessionLifetime] per-service equivalent
[0348] [ServiceSSLverifyPeerDataMax] per-service equivalent
[0349] [SSLsessionCacheMax] default (of zero) now disables
[0350] in favour of the more efficient Session Ticket
[0351] SesolaSessionTicket..() refresh and coordinate the
[0352] TLS session ticket key cluster-wide using the DLM
[0353] InstanceSupervisor() refresh session ticket key at midnight
[0354] RequestGblSecUpdate() method and URI only printable chars
[0355] ProxyTunnelRequestParse() append mapped path for logging
[0356] DirFiles() and DavPropSearchAst() ignore ambiguous file
[0357] names containing an escaped ("^.") period but no type
[0358] ErrorRedirectQueryString() ERROR_URI variable
[0359] bugfix; MapOdsUrlToOds5Vms() URLs will not contain
[0360] '^'-escaped sequences so just '^'-escape them
[0361] bugfix; SesolaClientCertRenegotiate() ensure request
[0362] data cleared before renegotiate ([SSLverifyPeerDataMax])
[0363] bugfix; DclTaskRundown() cancel HTTP/2 client read
[0364] bugfix; HttpdSupervisor() accumulate proxy accounting data
[0365] bugfix; RequestEnd2() decrement processing rx or (SSH) method
[0366] bugfix; RequestEnd2() read status OK -or- ENDOFFILE
[0367] bugfix; HpackHeadersFrame() multiple to single cookie header
[0368] bugfix; MetaConEvaluate() request-scheme: regression
[0369] bugfix; NetWrite() response header write error handling
[0370] bugfix; SesolaClientCert() just return status
[0371] 07-MAY-2016 MGD v11.0.0,
[0372] HTTP/2 (RFC7540, RFC7541)
[0373] restructure network I/O abstractions (oh boy!)
[0374] key-value dictionary (associative array) abstraction
[0375] add "Refresh [integer] Seconds" to appropriate reports
[0376] ProxyFtpListOutput() update in line with directory listing
[0377] SET dict[=[=]]
[0378] SET http2=protocol=1.1
[0379] SET http2=send=goaway[=]
[0380] SET http2=send=ping
[0381] SET http2=send=reset[=]
[0382] SET http2=write=[low|normal|high]
[0383] metacon dict:, http2: and request-protocol:
[0384] [HTTP2..] global configuration
[0385] [TimeoutHttp2Idle]
[0386] logging 'DI' insert specified dictionary item value
[0387] /DO=HTTP2=PURGE[=]
[0388] ensure timed-out requests are logged as 408/500
[0389] excise much of the twenty years of reporting HTML cruft
[0390] obsolete ismap.c, filedot.c, menu.c and track.c functionality
[0391] 22-APR-2016 MGD v10.4.3 (unreleased),
[0392] logging 'NP' insert notepad value
[0393] logging 'XX' insert custom site/client-specific datum
[0394] SET sslcgi=apache_mod_ssl_client
[0395] SET sslcgi=apache_mod_ssl_extens
[0396] LoggingDo() MAX_FAO_VECTOR from 64 to 128
[0397] SSL_CTX_set_ecdh_auto() set elliptic curves selection
[0398] SesolaTmpDHCallback() improve DH*.PEM flexibility
[0399] SesolaCertExtension() parse X509 extensions
[0400] SesolaCertName() parse X509 distinguished name
[0401] SesolaCgiVariablesExtension() document X509 extensions
[0402] SesolaReport() list certificate extensions
[0403] [ru:/CN=] allows multiple to be selected between
[0404] (e.g. "[ru:/CN=user*]", "[ru:/CN=^^\[^/=\]*$]")
[0405] SesolaCertParseDn() strncmp() not strsame()
[0406] SesolaCertParseDn() select on pattern match
[0407] StringMatchAndRegex() ensure |rqptr| not needed
[0408] add limit to consecutive failures on persistent connection
[0409] remove limit to consecutive requests on persistent connection
[0410] TcpIpAddressToString() IPv4 in IPv6 as ::FFFF:n.n.n.n
[0411] bugfix; ResponseHeader() for HEAD request transfer-encoding
[0412] chunked suppress actual chunked body (RFC 7230 3.3)
[0413] bugfix; SesolaInit() session cache max -1 disables cache
[0414] bugfix; LoggingDo() elapsed time items
[0415] bugfix; LoggingDo() 'CC' do not reuse pointers!
[0416] bugfix; LoggingDo() 'VS' |->ServicePtr| dereference
[0417] 15-AUG-2015 MGD v10.4.2,
[0418] [ServiceStrictTransSec] (RFC6797)
[0419] [SSLstrictTransSec] (RFC6797)
[0420] SET response=sts= (Strict-Transport-Security:)
[0421] ResponseHeader() Strict-Transport-Security: header
[0422] add WATCH "!42*x" to beginning and ending of requests
[0423] DavWebRequest() allow bodies with any and no Content-Type:
[0424] then in DavWebRequest2() check for XML in the body content
[0425] RequestRedirect() always use dynamic buffers
[0426] when "remote-addr:" begins '?' translate host to IP address
[0427] LoggingDo() add WASD_LOGS "convenience" logical name
[0428] disable kludge; SesolaNetAccept() SSL3_ST_SR_CLNT_HELLO_C
[0429] as the issue seems to have been fixed in OpenSSL v1.0.2c
[0430] logical name WASD_REDIRECT_WILDCARD must be defined
[0431] to enable "DNS wildcard" proxy redirection
[0432] bugfix; [Cli]ParseCommand() parenthesis parsing
[0433] bugfix; Request..() rework pipelined request handling
[0434] bugfix; move supervisor PID from InstanceNodeSupervisor()
[0435] to InstanceNodeSupervisorAst()
[0436] bugfix; DavWebDestination() URI and URL (Total Commander)
[0437] bugfix; Error..() earlier and broader detection of WebDAV
[0438] bugfix; DavDeleteParse() enable access around OdsParse()
[0439] bugfix; DavMoveMeta() do not report RMS$_DNF
[0440] bugfix; FaoSAK() sdptr = StrDscBuffer(StrDscPtr);
[0441] bugfix; DavXmlStartElement() PROPFIND accumulate list of
[0442] dead properties subsequently searched for in the metadata
[0443] bugfix; MapUrl_ExplainPathSet() ->ResponseChunked
[0444] bugfix; CONFIG_SERVER_LOGS logical names precede fixed locale
[0445] 12-FEB-2015 MGD v10.4.1,
[0446] ProxyResponseRebuild() and ProxyRequestRebuild() provide
[0447] timeout=n parameter with Keep-Alive: header field (some
[0448] origin servers hang when no parameters supplied, per JPP)
[0449] SesolaInitOptions() expand options keywords to include
[0450] most SSL_OP_.. flags using the OpenSSL flag #define as the
[0451] keyword minus the "SSL_" (e.g. OP_CIPHER_SERVER_PREFERENCE)
[0452] SesolaTmpRSACallback() and SesolaTmpDHCallback()
[0453] support for ephemeral keys enabling "forward secrecy"
[0454] SesolaInitService() and SesolaInitClientService()
[0455] if cipher list begins '+', '-' or '!' append it to default
[0456] increase MAX_REQUEST_HEADER from 8192 to 16384
[0457] (proxying requests from Firefox to IIS, per JPP)
[0458] kludge; SesolaNetAccept() SSL3_ST_SR_CLNT_HELLO_C
[0459] bugfix; RequestEndEnd() use ZERO_DELTA_TIME macro
[0460] bugfix; AuthCacheNeedsReval() AlreadyLocked (per JPP)
[0461] bugfix; ConfigReportSecureSocket() FaoVector[32]
[0462] 05-DEC-2014 MGD v10.4.0
[0463] CORS support
[0464] /SSL=(TLSvALL,TLSv1.1,noTLSv1.1,TLSv1.2,noTLSv1.2)
[0465] removed /SSL=(2|3|23) which must be altered to SSLv2, etc.
[0466] NOTE: TLSv1, TLSv1.1, TLSv1.2 now ENABLED by default
[0467] SSLv2 and SSLv3 are now DISABLED by default
[0468] (as recommended post-POODLE)
[0469] MapUrl_ClientAddress() allows for transparent upstream proxy
[0470] ResponseStream() and request /stream/
[0471] AuthCacheNeedsReval() so multiple cache entries for the
[0472] same credentials do not trigger multiple revalidations
[0473] SsiEnd() detect and report non-SSI problem encountered
[0474] access log buffer extended from [4096] to [16384] (UMA SAML)
[0475] LoggingQuoted() explicitly encode some fields where a raw
[0476] quotation mark (URI forbidden) can break a log entry
[0477] HttpdExit() sanity check trace after %SYSTEM-F-ASTFLT
[0478] stack corruption at (you guessed it) Uni Malaga resulted
[0479] in the icb.libicb$v_bottom_of_stack never being set!
[0480] tweaks to some accounting fields and values (for WASDmon)
[0481] NetCreateService() check bind address string instead of
[0482] address to allow binding primary to 0.0.0.0 (INADDR_ANY)
[0483] directory default listing style now ed
[0484] directory path SET ods=name=utf8 then response charset=utf-8
[0485] directory ?httpd=index&font=[inherit|monospace(D)]
[0486] ?httpd=index&style=table[2]
[0487] SET client=[forwarded|if=forwarded|literal=|reset|
[0488] if=xforwardedfor|xforwardedfor]
[0489] SET dir=font=[inherit|monospace(D)]
[0490] dir=style=TABLE[2] (new default)
[0491] SET cors=age= cors=cred=[true|false]
[0492] cors=expose= cors=headers=
[0493] cors=methods= cors=origin=
[0494] SET ods=name=8bit, ods=name=utf8, ods=name=default
[0495] SET webdav=[no]hidden
[0496] webdav=meta=dir=
[0497] [SecureSocket] and [SSL...] (overridden by /SSL=)
[0498] [WebDAVmetaDir] sub or full directory for meta files
[0499] WedDAV configurable metadata (sub)directory
[0500] AuthAccessCheck() add explicit check against server
[0501] account to improve reporting of underlying access
[0502] User-defined logging directives 'CI', 'SR', 'SV' for
[0503] SSL cipher, session reuse and version items
[0504] COMMON+, COMMON_SERVER+, COMBINED+ composite log formats
[0505] X-record0-mode[=0|1] and associated CGI null-record mode
[0506] bugfix; and refine DirFormatSize()
[0507] bugfix; SSLv23_method() appears to be a Swiss-army knife
[0508] significant rework of SSL version configuration
[0509] bugfix; TcpIpCacheAddressToName() memcpy null char
[0510] bugfix; DavMetaOpenAst() retry after meta directory creation
[0511] bugfix; DavPropEnd() ensure unused meta-data file deleted
[0512] bugfix; MapOds5VmsToUrl() et.al. allow for ".]["
[0513] bugfix; SAME3 0x00ffffff mask (not 0xffffff00)
[0514] bugfix; DirFormatAcpInfoAst() ThisIsADirectory = false;
[0515] bugfix; DavWebCreateDir() set SYSPRV access, propagate rest
[0516] bugfix; PutWriteFileOpen() WebDAV should not use default
[0517] protection mask and instead propagate from profile
[0518] bugfix; FileParseAst() allow for non-dir .DIR files
[0519] bugfix; RequestRedirect() allocate using (possibly expanded)
[0520] header length (not fixed) when allocating POST buffer
[0521] bugfix; PROXY.C no $QIO buffer should exceed 65535!
[0522] 06-OCT-2013 MGD v10.3.0
[0523] TLS1 Server Name Indication (SNI) extension
[0524] /SSL= parameter options rework (plus new mnemonic options)
[0525] SesolaNetClientBegin() include SNI before connect
[0526] PutWriteFileOpen() support FAB$C_STM and FAB$C_STMCR
[0527] DclMailboxAcl() allow usernames without associated
[0528] identifiers (i.e. shared UICs) by first trying with the
[0529] username and on failure getting the UIC and using that
[0530] FaoUrlEncodeTable tilde from "%7e" to "~" (cadaver issue)
[0531] GzipInit() ZLIB shareable image via logical names
[0532] WASD_LIBZ_SHR32, then GNV$LIBZSHR32, finally LIBZ_SHR32
[0533] PersonaAssume() wrap sys$persona_create() with SYSPRV
[0534] after modifications to DclMailboxAcl() to allow usernames
[0535] without associated identifiers (i.e. shared UICs)
[0536] authorisation realm read-only group can be specified as "*"
[0537] to represent that "everyone else" can read
[0538] ProxyResponseRebuild() additional header length bumped
[0539] from an ambit 256 to an ambit 1024 (Uni Malaga :-)
[0540] OdsNamBlockAst() on non-ODS_EXTENDED platforms (i.e. VAX)
[0541] tease-out system file name from Nam.nam$l_name and
[0542] Nam.nam$l_type into odsptr->SysFileName buffer
[0543] historically used by ODS-5 and munge for ODS-2 as well
[0544] .WWW_WASD directory directive file
[0545] sortable directory listing
[0546] ?httpd=index&ilink=[yes|no]
[0547] ?httpd=index&override=[yes|no]
[0548] ?httpd=index&query= (.WWW_WASD specific)
[0549] ?httpd=index&style=
[0550] ?httpd=index&sort=[+|-]
[0551] ?httpd=index&target=
[0552] ?httpd=index&these=[,]
[0553] ?httpd=index&versions=|*
[0554] SET dir=delimit=
[0555] SET dir=[no]ilink
[0556] SET dir=style=sort (plus the dir=style=2)
[0557] SET dir=sort=[+|-]
[0558] SET dir=target=
[0559] SET dir=these=[,]
[0560] SET dir=versions=|*
[0561] SET put=rfm=[STM|STMCR|UDF] added to FIX512,STMLF
[0562] "upstream-addr:" conditional
[0563] [AuthRevalidateLoginCookie] obsolete (in favour of ...)
[0564] rqptr->AuthRevalidateCount to track empty authentication
[0565] prompts preceding potential redundant revalidation prompt
[0566] [PutBinaryRFM] add STM and STMCR
[0567] [ServiceNonSSLRedirect] |[:]
[0568] some refinements to Upd..() layout and functionality
[0569] refine HTML and bring a little more up-to-date
[0570] AUTH_MAX_USERNAME_LENGTH bumped from 47 to 64 for X509
[0571] FileAcpInfoAst() '$.' file extension kludge
[0572] bugfix; AuthConfigLoadCallBack() additional [AuthProxy]
[0573] with intervening rules should reset proxies
[0574] bugfix; FileResponseHeader() "?httpd=content&type=" decoded
[0575] bugfix; MapOds..() identify MFD using "000000]" and "000000."
[0576] bugfix; AuthVmsGetUai() interaction of logon= parameters
[0577] bugfix; UpdFileRename() ACCVIO with AuthAccessEnable()
[0578] bugfix; RequestParseAndExecute2() remove reset of
[0579] request persistent flag from OPTIONS and DELETE
[0580] bugfix; SesolaInitService() (or refinement)
[0581] SSL_CTX_set_session_id_context() against each service
[0582] bugfix; DirFormatSize() bytes
[0583] bugfix; OdsParseTerminate() on non-ODS_EXTENDED platforms
[0584] (i.e. VAX) reset .nam$b_esl to changed expanded length
[0585] or it can generate RMS$_ESL errors
[0586] bugfix; DavPropSearchAst() on non-ODS_EXTENDED platforms
[0587] (i.e. VAX) reset .nam$b_rsl to changed resultant length
[0588] or it can generate RMS$_RSL errors
[0589] bugfix; non-ODS_EXTENDED platforms (e.g. VAX) must
[0590] OdsParse() NAM$M_NOCONCEAL before OdsSearchNoConceal()
[0591] bugfix; MapUrl__Map() reverse mapping wildcard copy
[0592] bugfix; CgiGenerateVariables() AUTH_GROUP write/read status
[0593] bugfix; AuthClientHostGroup() wildcard match result reversed
[0594] bugfix; ProxyResponseRebuild() call ProxyRebuildLocation()
[0595] can return a pointer to the original location!
[0596] bugfix; SesolaInit() translate WASD_SSL_CIPHER logical name
[0597] 09-NOV-2012 MGD v10.2.0,
[0598] TOKEN authorisation
[0599] request header DNT (do not track)
[0600] set ProxyReadBufferSize to 64k (per JPP)
[0601] allow (proxy) ResponseBufferSize to be >= 64k (per JPP)
[0602] HttpdSystemInfo() $GETSYIW() CsidVersion treat status
[0603] SS$_UNREACHABLE as non-fatal and fallback to 16 byte LVB
[0604] DIGEST.C numerious tweaks up to RFC2069
[0605] [AuthTokenEntriesMax] for token authorisation
[0606] bugfix; HTAdminModifyUser() use database name for digest
[0607] bugfix; AuthorizeResponse() digest scheme
[0608] bugfix; AuthVmsGetUai() logon= fall through
[0609] bugfix; DclSysOutputAst() WebSocket wrt agent
[0610] bugfix; WebSockEnd() do not NetCloseSocket()
[0611] bugfix; (at least improve) caching of group write/read
[0612] bugfix; SesolaParseCertDn() return NULL if record not found
[0613] bugfix; AuthorizeGroupWrite() with cached entries!
[0614] bugfix; AuthReadSimpleList() parameter /DIRECTORY= processing
[0615] 28-APR-2012 MGD v10.1.1,
[0616] RequestGet() no longer report 408 for unused connections
[0617] RequestEndEnd() likewise ignore unused connections (Chrome)
[0618] MetaConLoad() compress non-signficant white-space
[0619] proxy WebSocket upgrade requests as raw tunnels (kludge)
[0620] DclRestartScript() refine WebSocket handling
[0621] DirFormatSize() now uses quadword
[0622] DirFormatSize() adjusts units to fit size width
[0623] MATCH0..8() macro to improve efficiency over memcmp()
[0624] SAME1..4() macro to abstract the *(USHORTPTR)s, etc.
[0625] bugfix; RequestBegin() remove RequestEnd() following failed
[0626] SesolaNetBegin() resulted in redundant request rundown
[0627] bugfix; SesolaNetAccept() initialise value=0
[0628] bugfix; SesolaNetRead() SSL state not SSL_ST_OK
[0629] bugfix; SesolaNetWrite() SSL state not SSL_ST_OK
[0630] bugfix; DavWebMicrosoftMunge2() token reprocessing
[0631] bugfix; FileAcpInfoAst() SS$_BADPARAM >2GB <4GB (per JPP)
[0632] bugfix; WebSockCloseMailboxes() logic
[0633] bugfix; DclScriptProcessCompletionAST() don't WebSockClose()
[0634] any WebSocket request currrently associated with the task
[0635] bugfix; RequestEndEnd() '->WebSocketCount' already locked
[0636] 06-NOV-2011 MGD v10.1.0,
[0637] dragged kicking and screaming to VMS V7.0 base build
[0638] Web Socket (HTML5) support
[0639] Secure Sockets default to SSL v3 and TLS v1 (no more SSL v2)
[0640] SET cache=[no]cookie
[0641] SET map=uri
[0642] SET proxy=chain=cred=
[0643] SET proxy=tunnel=request=
[0644] SET regex=
[0645] SET response=HTTP=original
[0646] SET service=
[0647] SET notimeout (short-hand for timeout=none,none,none)
[0648] SET websocket=
[0649] "origin:" conditional
[0650] "request-peek:" conditional
[0651] "upgrade:" conditional
[0652] "websocket:" conditional
[0653] [DclScriptProctor] (pro-)activate script/environments
[0654] [RegEx] enabled/disabled/
[0655] [ServiceProxyChainCred] down-stream proxy credentials
[0656] [WwwImplied] "www." is implied even with virtual services
[0657] ("Host:") not beginning with it (ServiceFindVirtual())
[0658] callout LIFETIME: can accept
[0659] callout SCRIPT-CONTROL:string (see DCL.C)
[0660] logging 'PP' outgoing proxy connection local port
[0661] /DO=ALIGN=.. to allow collection and analysis of Alpha and
[0662] Itanium alignment fault data using HttpdAlignFault() et.al.
[0663] /DO=NET=PURGE[=..] expanded capability
[0664] /DO=WEBSOCKET=DISCONNECT[=..] to disconnect WebSockets
[0665] /PRIORITY= limit increased from 6 to 15
[0666] SesolaInit() default is SSLv2 off and SSLv3/TLSv1 on
[0667] AuthAgentCallout() callout BODY implemented (for PAPI)
[0668] MapOdsUrlTo..() consecutive '/' into a single a la Unix
[0669] ServiceReportNow() service synopsis
[0670] ProxyTunnelChainConnect() chain proxy authorization
[0671] ProxyRequestRebuild() chain proxy authorization (BASIC only)
[0672] ServiceReportNow() add summary to service report
[0673] configuration lines beginning "!#" now allow WATCHable
[0674] during mapping and authorisation processing
[0675] reworked query string handling based on length
[0676] ServiceEntityMatch() processes in-match and if-not-match
[0677] CacheSearch() implement request cache control
[0678] CacheLoadResponse() checks response header for
[0679] "Cache-Control:" directives and adjusts accordingly
[0680] CacheLoadEnd() buffer all content-type data
[0681] (previous behaviour truncated at ';' or white-space)
[0682] MetaConLoad() ensure metacon "lines" are quadword aligned
[0683] __unaligned directive added to pointer macros in a
[0684] (successful) effort to avoid alignment faults
[0685] VM_OFFSET now 8 (quadword alignment) instead of 4
[0686] bugfix; OdsFileExists() parse NAM$M_NOCONCEAL in case of
[0687] multi-valued, concealed logical devices and then convert
[0688] returned status DNF into the functional equivalent FNF
[0689] bugfix; directory listing OdsSearchNoConceal() to
[0690] process concealed, multi-value logical device names
[0691] bugfix; RequestRedirect() only concat '&' if including query
[0692] bugfix; set rule 'CacheSetting' boolean with any CACHE=..
[0693] 02-OCT-2010 MGD v10.0.3,
[0694] command-line checks of configuration files
[0695] /DO=AUTH=CHECK /DO=CONFIG=CHECK (all configuration files)
[0696] /DO=GLOBAL=CHECK /DO=MAP=CHECK /DO=MSG=CHECK
[0697] /DO=SERVICE=CHECK
[0698] TcpIp6..() functions to resolve IPv6 AAAA records
[0699] ProxyRequestParse() improve IPv6 host parsing
[0700] bugfix; regression at 10.0.1 with proxy authorization
[0701] bugfix; SSL_set_info_callback() not SSL_CTX_set..()
[0702] 01-JUL-2010 MGD v10.0.2,
[0703] metacon "file:" and "directory:" to probe file-system
[0704] SET script=lifetime=
[0705] SET put=max= per-path equivalent of [PutMaxKbytes]
[0706] SET put=max=* for (effectively) unlimited upload
[0707] BODY.C significant rework to function()alise common code
[0708] BODY.C improve performance with multiblock of 127 (per JPP)
[0709] BODY.C make MultipartContentType(Ptr) a dynamic structure
[0710] as Microsoft endeavour to include application data
[0711] along with MIME content-type, see ...
[0712] http://msdn.microsoft.com/en-us/library/aa338205.aspx
[0713] and an example (no kidding!) ...
[0714] "application/vnd.ms.powerpoint.template.macroEnabled.12application/x-font"
[0715] FileNextBlocks() change QIO file size from long to quad
[0716] to cater for files greater than 4GB (4GB+ is limited to
[0717] file serving only, no ranges, etc.)
[0718] RequestExecutePostCache() UTF-8 decode WebDAV objects
[0719] RequestRedirect() support WebDAV "Destination:" field (JPP)
[0720] DclAllocateTask() default unconfigured CGIplus lifetime
[0721] SsiDoSet() and SsiGetTagValue() allow '$' in variable names
[0722] Mapurl_ControlReload() rather than Mapurl_Load()
[0723] bugfix; MapUrl_ControlReload()
[0724] bugfix; DclUpdateScriptNameCache() run-time pointer
[0725] bugfix; OdsNamBlockAst() odsptr->NamFileSysNamePtr
[0726] always set to odsptr->SysFileName in case RMS$_FNF, etc.
[0727] bugfix; RequestGet() MAX_REQUEST_HEADER (per JPP)
[0728] bugfix; allow METACON_TOKEN_INCLUDE for [IncludeFile]
[0729] bugfix; MetaConEvaluate() when JustChecking: HTTP header
[0730] fields (e.g. "cookie:")
[0731] bugfix; DavMetaReadName() and DavMetaWriteName()
[0732] allow for typeless file names (e.g. ]AFILE.;)
[0733] bugfix; PutWriteFileOpen() ensure SYSPRV enabled before
[0734] $ERASE() if not WebDAV request (access and ownership) (JPP)
[0735] bugfix; DavWebSlashlessMunge() enable SYSPRV while
[0736] calling OdsFileExists() (per JPP)
[0737] bugfix; do not use REDIRECT for WebDAV request error report
[0738] bugfix; no new token when refreshing existing lock (per JPP)
[0739] bugfix; FileNextBlocks() signed/unsigned comparison
[0740] when calculating buffer size on files larger than 2^31
[0741] bugfix; MapOdsUrlToOds5Vms() MapOdsElementsToVms()
[0742] include '|' and '%' as ODS-5 escaped characters
[0743] bugfix; DirAuthorizationAst() only check access on
[0744] non-empty expanded file names
[0745] bugfix; PutWriteFileOpen() ensure SYSPRV enabled before
[0746] $CREATE() if not WebDAV request (for access and ownership)
[0747] bugfix; FileNextBlocks() signed/unsigned comparison
[0748] when calculating buffer size on files larger than 2^31
[0749] bugfix; MapOdsUrlToOds5Vms() MapOdsElementsToVms()
[0750] include '|' as an ODS-5 escaped character
[0751] bugfix; DirAuthorizationAst() only check access on
[0752] non-empty expanded file names
[0753] bugfix; PutWriteFileOpen() ensure SYSPRV enabled before
[0754] $CREATE() if not WebDAV request (for access and ownership)
[0755] bugfix; DirBegin() "httpd=index&" detection (since v9.3.0)
[0756] bugfix; DirEnd() suppress