CGIplus-enabled Run-time Environment Example -------------------------------------------- ***** FIRST, EVIDENCE OF PERSISTANCE ***** Usage Count: 3 ***** 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_BG=BG2684: WWW_GATEWAY_INTERFACE=CGI/1.1 WWW_GATEWAY_EOF=$Z-970FB1A4753A94556DC61912- WWW_GATEWAY_EOT=$D-0FF9FD6B7A795DB09AA1F5F1- WWW_GATEWAY_ESC=$E-03202EFE522687674521A87C- WWW_GATEWAY_MRS=4492 WWW_HTTP_ACCEPT=*/* WWW_HTTP_ACCEPT_ENCODING=gzip, br, zstd, deflate WWW_HTTP_COOKIE=laikanxia_cookie_id=250123121128779; laikanxia_google_v=1 WWW_HTTP_HOST=polarhome.com:703 WWW_HTTP_USER_AGENT=Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com) WWW_PATH_INFO=/just/a/bogus/path.txt WWW_PATH_TRANSLATED=WASD_ROOT:[JUST.A.BOGUS]PATH.TXT WWW_QUERY_STRING=query=string WWW_REMOTE_ADDR=3.144.1.100 WWW_REMOTE_HOST=3.144.1.100 WWW_REMOTE_PORT=49931 WWW_REMOTE_USER= WWW_REQUEST_METHOD=GET WWW_REQUEST_SCHEME=http: WWW_REQUEST_TIME_GMT=Thu, 23 Jan 2025 03:20:50 GMT WWW_REQUEST_TIME_LOCAL=Thu, 23 Jan 2025 05:20:50 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.10.2 WWW_SERVER_CHARSET=ISO-8859-1 WWW_SERVER_GMT=+02:00 WWW_SERVER_NAME=vax.polarhome.com WWW_SERVER_PROTOCOL=HTTP/1.1 WWW_SERVER_PORT=80 WWW_SERVER_SIGNATURE=
WASD/10.3.0 Server at vax.polarhome.com Port 80
WWW_SERVER_SOFTWARE=HTTPd-WASD/10.3.0 OpenVMS/VAX WWW_UNIQUE_ID=Z5HRsgAAAAQAAAIeLZk 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] 06-OCT-2013 MGD v10.3.0 [0009] TLS1 Server Name Indication (SNI) extension [0010] /SSL= parameter options rework (plus new mnemonic options) [0011] SesolaNetClientBegin() include SNI before connect [0012] PutWriteFileOpen() support FAB$C_STM and FAB$C_STMCR [0013] DclMailboxAcl() allow usernames without associated [0014] identifiers (i.e. shared UICs) by first trying with the [0015] username and on failure getting the UIC and using that [0016] FaoUrlEncodeTable tilde from "%7e" to "~" (cadaver issue) [0017] GzipInit() ZLIB shareable image via logical names [0018] WASD_LIBZ_SHR32, then GNV$LIBZSHR32, finally LIBZ_SHR32 [0019] PersonaAssume() wrap sys$persona_create() with SYSPRV [0020] after modifications to DclMailboxAcl() to allow usernames [0021] without associated identifiers (i.e. shared UICs) [0022] authorisation realm read-only group can be specified as "*" [0023] to represent that "everyone else" can read [0024] ProxyResponseRebuild() additional header length bumped [0025] from an ambit 256 to an ambit 1024 (Uni Malaga :-) [0026] OdsNamBlockAst() on non-ODS_EXTENDED platforms (i.e. VAX) [0027] tease-out system file name from Nam.nam$l_name and [0028] Nam.nam$l_type into odsptr->SysFileName buffer [0029] historically used by ODS-5 and munge for ODS-2 as well [0030] .WWW_WASD directory directive file [0031] sortable directory listing [0032] ?httpd=index&ilink=[yes|no] [0033] ?httpd=index&override=[yes|no] [0034] ?httpd=index&query= (.WWW_WASD specific) [0035] ?httpd=index&style= [0036] ?httpd=index&sort=[+|-] [0037] ?httpd=index&target= [0038] ?httpd=index&these=[,] [0039] ?httpd=index&versions=|* [0040] SET dir=delimit= [0041] SET dir=[no]ilink [0042] SET dir=style=sort (plus the dir=style=2) [0043] SET dir=sort=[+|-] [0044] SET dir=target= [0045] SET dir=these=[,] [0046] SET dir=versions=|* [0047] SET put=rfm=[STM|STMCR|UDF] added to FIX512,STMLF [0048] [AuthRevalidateLoginCookie] obsolete (in favour of ...) [0049] rqptr->AuthRevalidateCount to track empty authentication [0050] prompts preceding potential redundant revalidation prompt [0051] [PutBinaryRFM] add STM and STMCR [0052] [ServiceNonSSLRedirect] |[:] [0053] some refinements to Upd..() layout and functionality [0054] refine HTML and bring a little more up-to-date [0055] AUTH_MAX_USERNAME_LENGTH bumped from 47 to 64 for X509 [0056] FileAcpInfoAst() '$.' file extension kludge [0057] bugfix; AuthConfigLoadCallBack() additional [AuthProxy] [0058] with intervening rules should reset proxies [0059] bugfix; FileResponseHeader() "?httpd=content&type=" decoded [0060] bugfix; MapOds..() identify MFD using "000000]" and "000000." [0061] bugfix; AuthVmsGetUai() interaction of logon= parameters [0062] bugfix; UpdFileRename() ACCVIO with AuthAccessEnable() [0063] bugfix; RequestParseAndExecute2() remove reset of [0064] request persistent flag from OPTIONS and DELETE [0065] bugfix; SesolaInitService() (or refinement) [0066] SSL_CTX_set_session_id_context() against each service [0067] bugfix; DirFormatSize() bytes [0068] bugfix; OdsParseTerminate() on non-ODS_EXTENDED platforms [0069] (i.e. VAX) reset .nam$b_esl to changed expanded length [0070] or it can generate RMS$_ESL errors [0071] bugfix; DavPropSearchAst() on non-ODS_EXTENDED platforms [0072] (i.e. VAX) reset .nam$b_rsl to changed resultant length [0073] or it can generate RMS$_RSL errors [0074] bugfix; non-ODS_EXTENDED platforms (e.g. VAX) must [0075] OdsParse() NAM$M_NOCONCEAL before OdsSearchNoConceal() [0076] bugfix; MapUrl__Map() reverse mapping wildcard copy [0077] bugfix; CgiGenerateVariables() AUTH_GROUP write/read status [0078] bugfix; AuthClientHostGroup() wildcard match result reversed [0079] bugfix; ProxyResponseRebuild() call ProxyRebuildLocation() [0080] can return a pointer to the original location! [0081] bugfix; SesolaInit() translate WASD_SSL_CIPHER logical name [0082] 09-NOV-2012 MGD v10.2.0, [0083] TOKEN authorisation [0084] request header DNT (do not track) [0085] set ProxyReadBufferSize to 64k (per JPP) [0086] allow (proxy) ResponseBufferSize to be >= 64k (per JPP) [0087] HttpdSystemInfo() $GETSYIW() CsidVersion treat status [0088] SS$_UNREACHABLE as non-fatal and fallback to 16 byte LVB [0089] DIGEST.C numerious tweaks up to RFC2069 [0090] [AuthTokenEntriesMax] for token authorisation [0091] bugfix; HTAdminModifyUser() use database name for digest [0092] bugfix; AuthorizeResponse() digest scheme [0093] bugfix; AuthVmsGetUai() logon= fall through [0094] bugfix; DclSysOutputAst() WebSocket wrt agent [0095] bugfix; WebSockEnd() do not NetCloseSocket() [0096] bugfix; (at least improve) caching of group write/read [0097] bugfix; SesolaParseCertDn() return NULL if record not found [0098] bugfix; AuthorizeGroupWrite() with cached entries! [0099] bugfix; AuthReadSimpleList() parameter /DIRECTORY= processing [0100] 28-APR-2012 MGD v10.1.1, [0101] RequestGet() no longer report 408 for unused connections [0102] RequestEndEnd() likewise ignore unused connections (Chrome) [0103] MetaConLoad() compress non-signficant white-space [0104] proxy WebSocket upgrade requests as raw tunnels (kludge) [0105] DclRestartScript() refine WebSocket handling [0106] DirFormatSize() now uses quadword [0107] DirFormatSize() adjusts units to fit size width [0108] MATCH0..8() macro to improve efficiency over memcmp() [0109] SAME1..4() macro to abstract the *(USHORTPTR)s, etc. [0110] bugfix; RequestBegin() remove RequestEnd() following failed [0111] SesolaNetBegin() resulted in redundant request rundown [0112] bugfix; SesolaNetAccept() initialise value=0 [0113] bugfix; SesolaNetRead() SSL state not SSL_ST_OK [0114] bugfix; SesolaNetWrite() SSL state not SSL_ST_OK [0115] bugfix; DavWebMicrosoftMunge2() token reprocessing [0116] bugfix; FileAcpInfoAst() SS$_BADPARAM >2GB <4GB (per JPP) [0117] bugfix; WebSockCloseMailboxes() logic [0118] bugfix; DclScriptProcessCompletionAST() don't WebSockClose() [0119] any WebSocket request currrently associated with the task [0120] bugfix; RequestEndEnd() '->WebSocketCount' already locked [0121] 06-NOV-2011 MGD v10.1.0, [0122] dragged kicking and screaming to VMS V7.0 base build [0123] Web Socket (HTML5) support [0124] Secure Sockets default to SSL v3 and TLS v1 (no more SSL v2) [0125] SET cache=[no]cookie [0126] SET map=uri [0127] SET proxy=chain=cred= [0128] SET proxy=tunnel=request= [0129] SET regex= [0130] SET response=HTTP=original [0131] SET service= [0132] SET notimeout (short-hand for timeout=none,none,none) [0133] SET websocket= [0134] "origin:" conditional [0135] "request-peek:" conditional [0136] "upgrade:" conditional [0137] "websocket:" conditional [0138] [DclScriptProctor] (pro-)activate script/environments [0139] [RegEx] enabled/disabled/ [0140] [ServiceProxyChainCred] down-stream proxy credentials [0141] [WwwImplied] "www." is implied even with virtual services [0142] ("Host:") not beginning with it (ServiceFindVirtual()) [0143] callout LIFETIME: can accept [0144] callout SCRIPT-CONTROL:string (see DCL.C) [0145] logging 'PP' outgoing proxy connection local port [0146] /DO=ALIGN=.. to allow collection and analysis of Alpha and [0147] Itanium alignment fault data using HttpdAlignFault() et.al. [0148] /DO=NET=PURGE[=..] expanded capability [0149] /DO=WEBSOCKET=DISCONNECT[=..] to disconnect WebSockets [0150] /PRIORITY= limit increased from 6 to 15 [0151] SesolaInit() default is SSLv2 off and SSLv3/TLSv1 on [0152] AuthAgentCallout() callout BODY implemented (for PAPI) [0153] MapOdsUrlTo..() consecutive '/' into a single a la Unix [0154] ServiceReportNow() service synopsis [0155] ProxyTunnelChainConnect() chain proxy authorization [0156] ProxyRequestRebuild() chain proxy authorization (BASIC only) [0157] ServiceReportNow() add summary to service report [0158] configuration lines beginning "!#" now allow WATCHable [0159] during mapping and authorisation processing [0160] reworked query string handling based on length [0161] ServiceEntityMatch() processes in-match and if-not-match [0162] CacheSearch() implement request cache control [0163] CacheLoadResponse() checks response header for [0164] "Cache-Control:" directives and adjusts accordingly [0165] CacheLoadEnd() buffer all content-type data [0166] (previous behaviour truncated at ';' or white-space) [0167] MetaConLoad() ensure metacon "lines" are quadword aligned [0168] __unaligned directive added to pointer macros in a [0169] (successful) effort to avoid alignment faults [0170] VM_OFFSET now 8 (quadword alignment) instead of 4 [0171] bugfix; OdsFileExists() parse NAM$M_NOCONCEAL in case of [0172] multi-valued, concealed logical devices and then convert [0173] returned status DNF into the functional equivalent FNF [0174] bugfix; directory listing OdsSearchNoConceal() to [0175] process concealed, multi-value logical device names [0176] bugfix; RequestRedirect() only concat '&' if including query [0177] bugfix; set rule 'CacheSetting' boolean with any CACHE=.. [0178] 02-OCT-2010 MGD v10.0.3, [0179] command-line checks of configuration files [0180] /DO=AUTH=CHECK /DO=CONFIG=CHECK (all configuration files) [0181] /DO=GLOBAL=CHECK /DO=MAP=CHECK /DO=MSG=CHECK [0182] /DO=SERVICE=CHECK [0183] TcpIp6..() functions to resolve IPv6 AAAA records [0184] ProxyRequestParse() improve IPv6 host parsing [0185] bugfix; regression at 10.0.1 with proxy authorization [0186] bugfix; SSL_set_info_callback() not SSL_CTX_set..() [0187] 01-JUL-2010 MGD v10.0.2, [0188] metacon "file:" and "directory:" to probe file-system [0189] SET script=lifetime= [0190] SET put=max= per-path equivalent of [PutMaxKbytes] [0191] SET put=max=* for (effectively) unlimited upload [0192] BODY.C significant rework to function()alise common code [0193] BODY.C improve performance with multiblock of 127 (per JPP) [0194] BODY.C make MultipartContentType(Ptr) a dynamic structure [0195] as Microsoft endeavour to include application data [0196] along with MIME content-type, see ... [0197] http://msdn.microsoft.com/en-us/library/aa338205.aspx [0198] and an example (no kidding!) ... [0199] "application/vnd.ms.powerpoint.template.macroEnabled.12application/x-font" [0200] FileNextBlocks() change QIO file size from long to quad [0201] to cater for files greater than 4GB (4GB+ is limited to [0202] file serving only, no ranges, etc.) [0203] RequestExecutePostCache() UTF-8 decode WebDAV objects [0204] RequestRedirect() support WebDAV "Destination:" field (JPP) [0205] DclAllocateTask() default unconfigured CGIplus lifetime [0206] SsiDoSet() and SsiGetTagValue() allow '$' in variable names [0207] Mapurl_ControlReload() rather than Mapurl_Load() [0208] bugfix; MapUrl_ControlReload() [0209] bugfix; DclUpdateScriptNameCache() run-time pointer [0210] bugfix; OdsNamBlockAst() odsptr->NamFileSysNamePtr [0211] always set to odsptr->SysFileName in case RMS$_FNF, etc. [0212] bugfix; RequestGet() MAX_REQUEST_HEADER (per JPP) [0213] bugfix; allow METACON_TOKEN_INCLUDE for [IncludeFile] [0214] bugfix; MetaConEvaluate() when JustChecking: HTTP header [0215] fields (e.g. "cookie:") [0216] bugfix; DavMetaReadName() and DavMetaWriteName() [0217] allow for typeless file names (e.g. ]AFILE.;) [0218] bugfix; PutWriteFileOpen() ensure SYSPRV enabled before [0219] $ERASE() if not WebDAV request (access and ownership) (JPP) [0220] bugfix; DavWebSlashlessMunge() enable SYSPRV while [0221] calling OdsFileExists() (per JPP) [0222] bugfix; do not use REDIRECT for WebDAV request error report [0223] bugfix; no new token when refreshing existing lock (per JPP) [0224] bugfix; FileNextBlocks() signed/unsigned comparison [0225] when calculating buffer size on files larger than 2^31 [0226] bugfix; MapOdsUrlToOds5Vms() MapOdsElementsToVms() [0227] include '|' and '%' as ODS-5 escaped characters [0228] bugfix; DirAuthorizationAst() only check access on [0229] non-empty expanded file names [0230] bugfix; PutWriteFileOpen() ensure SYSPRV enabled before [0231] $CREATE() if not WebDAV request (for access and ownership) [0232] bugfix; FileNextBlocks() signed/unsigned comparison [0233] when calculating buffer size on files larger than 2^31 [0234] bugfix; MapOdsUrlToOds5Vms() MapOdsElementsToVms() [0235] include '|' as an ODS-5 escaped character [0236] bugfix; DirAuthorizationAst() only check access on [0237] non-empty expanded file names [0238] bugfix; PutWriteFileOpen() ensure SYSPRV enabled before [0239] $CREATE() if not WebDAV request (for access and ownership) [0240] bugfix; DirBegin() "httpd=index&" detection (since v9.3.0) [0241] bugfix; DirEnd() suppress unless RequestEnd() AST [0242] bugfix; SsiDoDcl() report cgi=/script= query string as error [0243] bugfix; UpdBegin() [goto] processing [0244] 01-MAR-2010 MGD v10.0.1, [0245] ProxyFtpListProcessUnix() names with white-space (per JPP) [0246] ProxyResponseRebuild() !"accept-encoding" (per JPP) [0247] make proxy requests subject to throttle (per JPP) [0248] MapUrl__Map() increase some buffer sizes (per JPP) [0249] RequestRedirect() add return length (overflow) check [0250] log format 'HO' request "Host:" field [0251] log format 'RH' any request header (e.g. "RH:cache-control:") [0252] log format 'VS' request virtual service [0253] According to http://www.ietf.org/rfc/rfc2145.txt a server [0254] should respond with the minor HTTP version reflecting its [0255] own compliance rather than the client's provided the [0256] response itself is compliant with the client minor version [0257] (i.e. HTTP/1.0 requests should get HTTP/1.1 in the response [0258] status line - and now implemented by ResponseHeader()) [0259] bugfix; LoggingDo() sys$flush(&RAB) not (&FAB) [0260] bugfix; LoggingDo() initialise (zero) &DummyRequest [0261] bugfix; ProxyMaintInit() use v10orPrev10() for scan (per JPP) [0262] bugfix; ProxyTunnelReadAst() data count tx (per JPP) [0263] bugfix; ConfigAcceptClientHostName() reject [0264] 29-NOV-2009 MGD v10.0.0, [0265] WebDAV 1,2 [0266] AuthAcmeVerifyUser() requires SECURITY privilege to [0267] allow ACME$M_NOAUTHORIZATION for authentication-only [0268] when using WASD_NIL_ACCESS identifier [0269] AuthAcmeVerifyUser() and AuthVmsGetUai() can now use [0270] [AuthSYSUAFlogonType] and/or an optional authorization rule [0271] parameter 'param="logon=.."' to specify the login type [0272] (default is still NETWORK) [0273] AuthRestrictAny() uses a single set of access restrictions [0274] ACME DOI name of '*' indicates use the default of [0275] ACME$LATEST_ENABLED_AGENT_LIST rather than specified DOI [0276] (authentication realm set to the DOI authentication realm) [0277] allow for []-delimited IPv6 addresses as service names [0278] concurrently support v10 and pre-v10 logical names [0279] (use WASD_.. rather than HTTPD$.. and HT_.. logical names) [0280] move WASD process naming schema from "HTTPd:" to "WASD:" [0281] (implies the automatic creation of new rights identifiers) [0282] use STR_DSC and associated StrDsc..() functions [0283] to refine and simplify formatted and buffered output [0284] OdsNameOfDirectoryFile() no longer mandatory that a [0285] directory file actually exists to generate the name [0286] MapUrl_Map()/__Map() now have a REQUEST_PATHSET parameter [0287] (to better decouple file-system mapping and path SETing) [0288] refine loading and mapping of path SETings [0289] add HTTP status filter to WATCH [0290] DclSysOutputAst() if WATCHing DCL and non-CGI-compliant [0291] response continue to end-of-script bit-bucketing output [0292] (DECNET.C code already provides this behaviour) [0293] User-defined log format now includes 'CP' client port [0294] RequestRedirect() allow a redirect to include its own query [0295] string and then concatenate any request query with '&'.. [0296] CgiVariable() optimise single-quotation escaping (JPP) [0297] GzipShouldDeflate() do not compress Shockwave Flash [0298] increase minimum size before compression to 1400 bytes [0299] HttpdExit() add explicit traceback for AXP and IA64 (per JPP) [0300] WATCH script item [0301] (interesting and useful suggestion from Jean-Pierre Petit) [0302] callout WATCH:string (see DCL.C) [0303] CGI variable WATCH_SCRIPT indicates when script WATCHing [0304] SET css= [0305] SET put=max= [0306] SET put=rfm=[FIX512|STMLF] [0307] SET script=agent=as= [0308] SET webdav=... (multiple WebDAV related settings) [0309] [AuthSYSUAFlogonType] specifies NETWORK, DIALUP, etc. [0310] [BufferSizeNetFile] global configuration directive [0311] [BufferSizeNetMTU] global configuration directive [0312] [HttpTrace] global configuration directive [0313] [PutBinaryRFM] global configuration directive [0314] [ServiceLogFormat] a per-service user-defined log format [0315] [ServiceShareSSH] share with (allow proxy to) SSH [0316] [WebDAV...] global configuration directives [0317] "webdav:" conditional [0318] logical name WASD_NO_SYSUAF_ACME disables SYSUAF via ACME [0319] logical name WASD_NO_ACME disables ACME altogether [0320] can't believe it but some PHP script paths are [0321] exceeding a SCRIPT_NAME_SIZE of 128 - bump to 256! [0322] ServiceConfigAdd() use INADDR_ANY if host name lookup fails [0323] NetCreateService() use primary if service IP addr reset [0324] activity report has some major changes (see version log) [0325] AuthorizeResponse() allow agent reason for 403 [0326] bugfix; NetWriteStrDsc() flush all full descriptors [0327] bugfix; NetWriteGzip() ensure buffer size <= 65535 [0328] bugfix; MapUrl__Map() to URL use request ODS not path ODS [0329] bugfix; ServiceConfigFromString() create and use [0330] temporary service structure when generating report [0331] bugfix; FileAcpInfoAst() and CacheAcpInfoAst() [0332] byte-range limit negative offset [0333] bugfix; OdsNamBlockAst() deliver AST with 'AstParam' [0334] (requiring parameter changes to *lots* of AST functions [0335] called by use of OdsParse() and OdsSearch() - bugga!) [0336] bugfix; AuthVmsChangePassword() ensure that [0337] rqAuth.SysUafDataPtr is populated [0338] bugfix; MapUrl__Map() proxy 'fall-thru' [0339] bugfix; ProxyResponseRebuild() proxy->client compression [0340] chunk only for HTTP/1.1 responses and connection [0341] persistence header fields reflect non-chunked GZIP stream [0342] bugfix; HttpdSupervisor() no-progress use ->BytesRaw.. [0343] bugfix; ErrorNoticed() use of 'rqptr' (from 16-NOV-2007) [0344] bugfix; NetRead() redact into DataPtr *not* into [0345] rqNet.ReadBufferPtr (which works until subsequent read :-) [0346] bugfix; DclUpdateScriptNameCache() undo bug from fix of [0347] non-existant problem from 12-APR-2008 (talk about it!) [0348] bugfix; DclUpdateScriptNameCache() copy determined [0349] script invocation method ("@","$","=", etc.) into cache [0350] 15-MAR-2008 MGD v9.3.0, [0351] RequestReport() per-current, per-connection, [0352] per-throttle and per-history [0353] CgiGenerateVariables() suppress SCRIPT_NAME if it is an [0354] empty script name ("/") [0355] RequestGblSecUpdate() include remote user and realm in [0356] request monitor data [0357] callout REDACT: and REDACT-SIZE: [0358] support for request redaction (see DCL.C) [0359] NetRead(), RequestRedact(), RequestEnd() redact support [0360] callout NOTICED: (and auth agent NOTICED) [0361] callout OPCOM: (and auth agent OPCOM) [0362] auth agent callout SCRIPT-META [0363] DirBegin() only use query string if it begins "httpd=index&" [0364] RequestExecutePostCache() check again for RequestHomePage() [0365] before final RequestFile() [0366] [ServiceProxyAuth] CHAIN [0367] AUTH_PATH variable for authentication agents [0368] AuthConfigLoadCallBack() do not lower-case path [0369] ProxyRequestRebuild() allow "Proxy-Authorization:" header [0370] only if configured for CHAIN proxy authentication [0371] [SocketSizeRcvBuf] and [SocketSizeSndBuf] [0372] HTADMIN and AUTHHTA modules allow for CONNECT method [0373] ProxyTunnel..() provide for SSL client connections [0374] Server Activity graphing slash-delimitted 'max-requests' [0375] that scales the Y axis allowing finer detail display [0376] authorization realm agent can now be '=agent+opaque' [0377] to suppress the automatic username/password challenge [0378] accounting per-request GZIP compress percentage [0379] RequestRedirect() include response cookie(s) [0380] force ACME on VMS V7.3 and later [0381] [AuthSYSUAFuseACME] obsolete [0382] bugfix; GraphActivityPlotBegin() X axis scaling for [0383] non-integral factors [0384] bugfix; GraphActivityReport() uninitialised 'cptr' before [0385] use in processing '"form"-based query string' [0386] bugfix; AdminMenu() JavaScript doIt() call [0387] bugfix; RequestGet() buggy browser kludge (per JPP) [0388] bugfix; CONNECT proxy authorization [0389] bugfix; AuthCacheGblSecInit() (per JPP) [0390] bugfix; ProxyVerifyGblSecInit() (per JPP) [0391] bugfix; SesolaCacheGblSecInit() (per JPP) [0392] 19-MAY-2007 MGD v9.2.1, [0393] RequestGet() now handles extraneous which [0394] buggy browsers can incorrectly insert after the body [0395] of a valid request (See RFC 2616 section 4.1) [0396] ProxyRequestBegin() restrict HTTP methods for FTP scheme [0397] ProxyFtpLifeCycle() process HEAD as for GET [0398] ProxyResponseRebuild() make request HTTP version a [0399] consideration before chunking proxy->client (with JPP) [0400] RequestExecutePostAuth1() kludge to allow 'implied' scripts [0401] CgiGenerateVariables() provide TRACK_ID if present (for JPP) [0402] bugfix; DclBegin() agent runs under default account [0403] bugfix; MapUrl_Map() auth agent modifying path SETings [0404] bugfix; DirFormatAcpInfoAst() 'S' (size) processing for [0405] block totals at the end of a listing [0406] bugfix; agent mappings using VMS-USER: not being cached [0407] bugfix; GzipDeflateCache() allow for cached CGI header [0408] bugfix; CacheNext() don't adjust GZIP content for CGI header [0409] bugfix; ConfigLoadCallback() post-process sanity checking [0410] for 'NetConcurrentMax' and 'NetConcurrentProcessMax' [0411] bugfix; BodyReadBegin() 413 set status before declaring AST [0412] bugfix; ProxyRequestRebuild() proxy verify [0413] "Authorization:" request header field carriage-control [0414] bugfix; ProxyNetConnectPersist() rejects all further [0415] requests once ProxyConnectPersistMax has been hit [0416] 04-NOV-2006 MGD v9.2.0, [0417] significantly enhance WATCH filtering [0418] added REG_NEWLINE to REGEX_C_FLAGS so that anchors match [0419] newlines in strings to support 'Request' filter in WATCH [0420] access logging now supports an HOURLY period [0421] remove file name length constraint for access logs created [0422] on an ODS-5 volume (allows full host name components, etc.) [0423] ProxyTunnelChainConnect() and ProxyTunnelChainConnectAst() [0424] to implement raw tunnelling through an intermediate proxy [0425] maintenance; there seem to have been some changes in the [0426] underlying TCP/IP Services handling of shared sockets [0427] so NetAcceptAst() set socket share on client and ... [0428] NetClientSocketCcl() to control BG device carriage-control [0429] (to parallel the APACHE$SET_CCL.EXE functionality) [0430] DclCalloutDefault() add GATEWAY-CCL: callout to allow [0431] BG device carriage-control from running script [0432] RequestHttpStatusCode() provides more fine-grained HTTP [0433] response status code accounting (mainly for WOTSUP) [0434] DirFormat() and DirFormatSize() allow in-line layouts to [0435] specify size with VMS format listings, as well as [0436] adding size specification of 'V' (VMS-ish, in blocks) [0437] use PercentOf() and QuadPercentOf() for more accurate and [0438] more consistent percentages [0439] AdminMenu() status panel (time, connect, request) mods [0440] AdminMenu() instance [active][standby] functionality [0441] (service item) network connection [Purge][All] [0442] activity graph; add request peak data [0443] ('network connections' has been masquerading as this) [0444] (also see 'CRAZY' note in GraphActivityReport()) [0445] for authorization add '+=' to realm default syntax for [0446] realm default to be concatenated to any path access [0447] /DO=INSTANCE=ACTIVE|STANDBY [0448] /DO=NET=PURGE[=ALL]|SUSPEND[=NOW]|RESUME [0449] NetPassive() and NetActive() to allow non-supervisor [0450] instances to be made quiescent [0451] NetSuspend() and NetResume() to allow halt and resume [0452] request processing [0453] NetPurge() to remove network connections [0454] increase AUTH_MAX_PATH_PARAM_LENGTH from 127 to 255 [0455] (initially prompted by development of AUTHAGENT_LDAP) [0456] add 'ConnectSuspend', 'InstancePassive', 'LastExitBinTime', [0457] 'LastExitPid' and 'ResponseStatusCodeCount[]' to global [0458] section [0459] bugfix; LoggingDo() changes for daily period test [0460] to support hourly logging (thanks again JPP) [0461] bugfix; SsiEnd() propagate included document user variables [0462] back into parent document to ensure they remain *global* [0463] bugfix; GzipShouldDefault() uninitialized 'cptr' when no [0464] content-type would cause WatchThis() "!AZ" to barf if [0465] 'cptr' was non-NULL but pointed into an invalid page [0466] bugfix; NetAcceptProcess() and NetDirectResponse() [0467] should issue 503 for 'too busy', not 502 [0468] bugfix; StringMatchAndRegex() regular expression [0469] 'MatchType' detection prior to pre-match [0470] bugfix; ThrottleReport() column alignment of 'busy' and [0471] 'total' percentages in second row of per-path statistics [0472] bugfix; NetAccept(), NetAcceptAst(), NetAcceptProcess() [0473] nasty problem where multihomed servers 'svptr' confusion [0474] (due to the multihome pointer manipulation) could result [0475] in an attempted re-queue of an accept on a service that [0476] did not correspond to the original accept AST delivery [0477] with the result that no accept ended up being queued [0478] bugfix; ResponseHeader() and NetWrite() accomodate 304 [0479] bugfix; RequestGet() timestamp the event immediately [0480] bugfix; AuthConfigLine() propagate 'RealmCanString' by [0481] making it static storage (doh) [0482] bugfix; MenuFileDescription() status from OdsParse() [0483] bugfix; StmLfLog() -E- to -I- for non-status-value call [0484] 11-MAY-2006 MGD v9.1.4, [0485] 'Proxy affinity' courtesy of Jean-Pierre Petit (esme.fr) [0486] (see PROXY.C for an explanation of what all this means) [0487] enabled per-service using [ServiceProxyAffinity] or [0488] per-path using SET PROXY=[NO]AFFINITY [0489] SesolaCacheInit(), in conjunction with AuthConfigInit() [0490] noting the presence of any X509 realm, automatically [0491] adjusts multi-instance, SSL session cache record size [0492] to accomodate potential client certificate [0493] SesolaInit() added ICACHE=SIZE= and SSL=ICACHE=RECORD= to [0494] allow manual configuration of instance SSL session cache [0495] RequestRedirect() "//:port/path" (i.e. begins with "//:") [0496] allows a redirect to a different port on the same host [0497] increase MapUrl__Map() WildBuffer[] storage to 4096 [0498] increase HOST_STORAGE from 236 to 1004 as an interim [0499] workaround for SS$_ENDOFFILE when storage insufficient [0500] (jpp@esme.fr) - why doesn't it return SS$_RESULTOVF?!! [0501] SesolaCacheInit() if boolean 'AuthRealmX509' indicates X509 [0502] realm is in use then use a larger session cache record [0503] potential bugfix; CgiOutput() CGI_OUTPUT_MODE_CRLF output [0504] count should be checked for zero before negative index [0505] potential bugfix; when URL-encoded decoding use unsigned [0506] char to prevent sign bit issues with the likes of %FC [0507] bugfix; non-SSL SesolaCacheInit() should return not bugcheck! [0508] bugfix; SSL_shutdown() problem reported by JPP [0509] introduce SesolaNetReadAst() and SesolaNetWriteAst() [0510] to defer reset of AST function address used to indicate [0511] AST-in-progress in other parts of the code [0512] bugfix; CgiOutput() empty 'record' in stream mode should be [0513] ignored and not have carriage-control adjusted (JFP) [0514] bugfix; 'RQ' include method (equivalent of Apache "%r") [0515] bugfix; 'EM', 'ES' and 'UE' arithmetic ('doh'!?) [0516] bugfix; DECnetWriteRequestBody() suppress empty record on [0517] end-of-body for OSU (call DECnetWriteRequestBodyAst()) [0518] to prevent it interfering with functionality [0519] bugfix; HttpdTimerSet() TIMER_PERSISTENT (jpp@esme.fr) [0520] bugfix; RequestFields() allow for header lines with no [0521] white-space between field name and value (jpp@esme.fr) [0522] 24-NOV-2005 MGD v9.1.3, [0523] authorization OPAQUE realm to allow a script to completely [0524] generate it's own authentication challenge and processing [0525] bugfix; MapUrl__Map() SCRIPT result copy not checking [0526] for null resulting in occasional overflow error status [0527] bugfix; FileNextBlocks() ensure VARiable record format [0528] files have records read on word (even byte) boundaries [0529] bugfix; AuthConfigProxyMap() set cache record SYSUAF [0530] authentication boolean in tandem with request boolean [0531] bugfix; DclSysCommandAst() allow for the queued [0532] post-CGIplus script STOP/ID=0 and EOF [0533] bugfix; copy sentinals into request storage to prevent [0534] them (potentially) being overwritten by an early call [0535] to DclScriptProcessCompletionAST() [0536] bugfix; ResponseHeader() ensure a charset= supplied with [0537] a text content-type (e.g. from a CGI script) is used [0538] 15-SEP-2005 MGD v9.1.2, [0539] metacon "server-protocol:" as "1.1", "1.0", "0.9" [0540] SET proxy=reverse=[no]auth (jpp@esme.fr) [0541] AuthAcmeVerifyUser() remote IP address to refine intrusion [0542] data and reduce possibility of DOS attack on usernames [0543] support multiple IP addresses in host cache (jpp@esme.fr) [0544] support proxy to origin server failover (jpp@esme.fr) [0545] [ProxyConnectTimeoutSeconds] configures period proxy to [0546] origin server connection is attempted (1-60 seconds) [0547] add selected request data to ErrorNoticed() report [0548] /DO=ZERO=NOTICED to reset 'errors noticed' accounting [0549] refine OPTIONS ResponseOptions() to provide "Allow:" [0550] bugfix; raw proxy tunnelling requires a contrived connect [0551] request in NetRead() to initiate an AST to RequestGet() [0552] bugfix; AuthAcmeVerifyUser() ACME$_LOGON_TYPE requires [0553] IMPERSONATE (DETACH) privilege for VMS V7.3-1 and earlier [0554] bugfix; DECnetOsuDialog() allow CgiOutput() error responses [0555] bugfix; initialize TcpIpHostCacheExpireSeconds (jpp@esme.fr) [0556] 10-JUL-2005 MGD v9.1.1, [0557] [[?]] and service:? to match unknown virtual service [0558] OpenSSL v0.9.8 changed macro name EVP_F_EVP_DECRYPTFINAL [0559] bugfix; adjust CacheMemoryInUse/CachePermMemoryInUse [0560] bugfix; GzipDeflateCache() ambit buffer size calculation [0561] too small for small content lengths (just allow heaps!) [0562] 26-JUN-2005 MGD v9.1.0, [0563] SET throttle=/ per-user throttle [0564] SET script=symbol=[no]truncate [0565] allow for VMS V8.2 64 byte lksb$b_valblk [0566] /DO=DCL=[PURGE|DELETE]=[USER|SCRIPT|FILE]= [0567] script processes by username, script name, or file name [0568] /DO=NOTE= to provide admin mapping notes [0569] /DO=THROTTLE=[TERMINATE|RELEASE]=[USER|SCRIPT]= [0570] throttled requests by username or script name [0571] AdminMenu() [/DO=] button/field and supporting functionality [0572] caching of GZIP compressed content [0573] proxy cache GZIP compressed content [0574] revised multihoming so that the client specified IP address [0575] of a accept()ed connection is used to identify the service [0576] (this allows easier isolation of SSL certificates, etc.) [0577] metacon 'instance:' to allow testing of WASD instances [0578] metacon 'multihome:' to allow detection of mismatched [0579] multihomed IP addresses and services [0580] metacon 'note:' to allow testing of admin conditional notes [0581] metacon 'robin:' to allow round-robin distribution [0582] CGI variable SERVER_MULTIHOME present when above true [0583] provide PWDMIX mixed-case plus printable char passwords [0584] in AuthVmsVerifyPassword() and AuthVmsChangePassword() [0585] CgiVariable() allow path mapping script=symbol=truncate to [0586] truncate a CLI symbol within the limit of the current VMS [0587] version capacity, noting this in SERVER_TRUNCATE variable [0588] SesolaInitService() no longer needs to clone [0589] modify VM statistics to a max of 1024 pages and granularity [0590] of 8 (GZIP significantly increased memory requirements) [0591] DclTaskRunDown() proactively handle task after SS$_NONEXPR [0592] ProxyMaintSupervisor() return if caching not enabled [0593] IA64 TcpIpSetAgentInfo() Multinet uses UCX$IPC_SHR [0594] in the image header (TCP/IP Services' TCPIP$IPC_SHR) [0595] AuthVmsVerifyUser() WATCH which flag causes failure [0596] allow client-side GZIPing of non-GZIPed proxied responses [0597] (courtesy Jean-Pierre Petit at jpp@esme.fr) [0598] allow config files to be a logical search list [0599] (initially to support multiple language HTTPD$MSG files) [0600] relax configured file type check if path SETing [0601] script=command=<..> provides a full activation command [0602] HTTPD$VERIFY can now specify a REMOTE_ADDR IP address [0603] allow report path to exclude using negative codes [0604] SSI to response header [0605] SSI to pre-expire [0606] make EXQUOTA (particularly ASTLM) a little more obvious [0607] bugfix; remove mutex around spurious wake counter [0608] bugfix; MetaConLoad() allocate structure before non-filename [0609] return! (revealed by Alex Daniels with no HTTPD$SERVICE) [0610] bugfix; prevent expired SYSUAF password from being cached [0611] bugfix; ProxyEnd(rqptr) should be ProxyEnd(ktptr) in [0612] ProxyNetHostConnectAst() (jpp@esme.fr) [0613] bugfix; FileResponseHeader() if none-match entity and [0614] IfModifiedSince() logic [0615] bugfix; GzipDeflateCache() ambit buffer size caclulation [0616] (captr->ContentLength >> 9) now (.. >> 7) (jpp@esme.fr) [0617] bugfix; MapOdsUrlToOds2Vms() DECnet access string should [0618] be able to support the space required for password [0619] bugfix; HTTP_METHOD_.. constants needs to be a bitmap! [0620] bugfix; the Ben Burke collection :-) [0621] bugfix; SesolaNetClientShutdown() remove SSL_shutdown() [0622] (revealed by https: tunnelling shutdown) [0623] bugfix; keyword search exclusion on configured file type [0624] 04-FEB-2005 MGD v9.0.2, [0625] SET script=control=<...> [0626] [GzipFlushSeconds] controls GZIPed response flush interval [0627] NetWriteGzip() abandon using argument counts to determine [0628] AST usage or direct call, use NetWriteGzipAst() instead [0629] RequestParseAndExecute() and ProxyRequestBegin() remove [0630] explicit disable of POST & PUT connection persistence [0631] CgiOutput() if "Location:" is supplied but no HTTP [0632] status turn it into a 302 (see also ResponseHeader()) [0633] ResponseHeader() include 'rqResponse.LocationPtr' [0634] GzipShouldDeflate() disable PDF deflation by default [0635] bugfix; aarghh! NetWriteGzip()/NetWriteGzipAst() [0636] bugfix; ServiceConfigAdd(), NetHostNameLookup() status check [0637] bugfix; ProxyReadResponseAst() if required, chunking needs [0638] to be performed after header as well as body processing [0639] bugfix; NetWriteChunked() ensure an empty body is [0640] terminated with a chunk of zero [0641] bugfix; NetWrite() distinguish between "empty" data and [0642] end-of-stream (inducing occasional ZLIB buffer errors) [0643] bugfix; AuthorizeRealm() check for login cookie before [0644] revalidating new cache record credentials (jpp@esme.fr) [0645] 22-DEC-2004 MGD v9.0.1, [0646] introduce chunked responses where content-length is [0647] unknown to enhance connection persistence behaviour [0648] SET response=[no]chunked [0649] CGI Script-Control: X-transfer-encoding-chunked[=0|1] [0650] in Sesola_read() and Sesola_write() remove [0651] BIO_set_retry_..() and BIO_clear_retry_..(), [0652] bugfix; NetWriteGzip() AST no remaining data length [0653] bugfix; Sesola_read_ast() and Sesola_write_ast() [0654] zero I/O status block count on error status [0655] bugfix; MapOdsVmsToUnix() empty if empty [0656] 01-DEC-2004 MGD v9.0.0, [0657] HTTP/1.1 compliance [0658] persistent connections over SSL [0659] persistent proxy connections [0660] proxy tunnelling [0661] significant changes to proxy cache file processing [0662] GZIP transfer-encoding (reponse and request) [0663] allow ResponseHiss() kBytes [0664] allow throttling with zero requests being processed [0665] metacon 'request-method:?' tests for HTTP extension method [0666] metacon refined directive and request header field processing [0667] request redirect, CGI variable and proxy request field [0668] processing refined [0669] SET report=tunnel [0670] SET response=gzip=<...> [0671] SET script=body=[no]decode [0672] SET script=syntax=[no]unix [0673] [ConnectMax] (supercedes [Busy]) max concurrent connections [0674] [EntityTag] enables the generation of file "ETag:", [0675] [GzipAccept] accept gzip encoded request bodies [0676] [GzipResponse] level[,memory,window] gzip encoded responses [0677] [LogWriteFail503] service unavailable 503 response when [0678] access log write fails [0679] [PipelineRequests] enables pipeline processing [0680] [ProcessMax] max concurrent requests being processed [0681] [ProxyCacheNegativeSeconds] for non-success responses [0682] [ProxyConnectPersistMax] and [ProxyConnectPersistSeconds] [0683] for controlling proxy->server connection persistence [0684] [ServiceProxyTunnel] connect | firewall | raw [0685] [ServiceClientSSLcert] and others allow outgoing SSL config [0686] [TimeoutPersistent] supercedes [TimeoutKeepAlive] [0687] CGI Script-Control: X-content-encoding-gzip[=0|1] [0688] bugfix; FileVariableRecord() memset only if positive [0689] bugfix; (authorization) agents should not begin to read [0690] a POSTed request body (Jean-Pierre Petit, jpp@esme.fr)) [0691] bugfix; CgiOutputFile() missing sizeof(FILE_CONTENT) [0692] when VmReallocHeap() increasing buffer space [0693] bugfix; AuthReadSimpleList() group member password check [0694] 02-OCT-2004 MGD v8.5.3, [0695] revalidation periods and '?httpd=logout&goto=...' [0696] change from self-relative to absolute links in "Index of" [0697] anchor generation (broke usage in some SSI documents) [0698] bugfix; MetaconClientConcurrent() if IP address not the same! [0699] bugfix; auth=revalidate= is minutes not seconds [0700] bugfix; even number of bytes on a disk $QIO READVBLK [0701] bugfix; HttpTimerSet() after mapping in case of SET timeout [0702] bugfix; ServiceFindVirtual() port string comparison [0703] 31-JUL-2004 MGD v8.5.2, [0704] bugfix; StringMatchAndRegex() SMATCH__GREEDY_REGEX [0705] bugfix; (potential anyway) PutWriteFileClose()/PutEnd() [0706] bugfix; TcpIpNetMask() result in AuthRestrictList() [0707] bugfix; ProxyFtpPasvData() if PASV response address [0708] is 0.0.0.0 then use connect address [0709] 30-JUN-2004 MGD v8.5.1, [0710] bugfix; HttpdExit() INHIB_MSG test [0711] 07-JUN-2004 MGD v8.5.0, [0712] IPv6 (concurrent with IPv4) support [0713] ACME authentication (realm) [0714] [AuthSysUafUseACME] config directive [0715] config directives [DNSLookupClient] (formerly [DNSLookup]), [0716] [DNSLookupLifeTime] and [DNSLookupRetry] [0717] config directive [ProxyHostCachePurgeHours] obsolete [0718] SYSUAF user verification now checks pre-expired passwords [0719] changes to eliminate RMS from file access and proxy cache [0720] (WASD's doing all the content conversion work anyway!) [0721] by using ACP/QIOs and massaging record content explicitly [0722] (outgrowth of returns from 8.4.3 changes in this area) [0723] on-disk structure for each PASS result (ODS-2 or ODS-5) [0724] is applied to a path unless otherwise SET with ODS= [0725] bugfix; file cache pointer initialization before [0726] first call to CacheNext() [0727] bugfix; agent script should have non-strict-CGI ignored [0728] (stupid problem introduced with script output caching) [0729] 04-MAR-2004 MGD v8.4.3, [0730] read variable record format files using block IO and then [0731] explicitly process those records to produce a stream-LF [0732] block of data in their place! [0733] (provides in excess of 400% throughput boost!!! :^) [0734] set script process default directory before activation [0735] set script process parse extended/traditional if path ODS set [0736] CGI 'Script-Control: X-content-handler=SSI' field [0737] absorb CGI/NPH header during script CGI processing [0738] SET ssi=exec= [0739] script=default= [0740] SSI can now be enabled on a per-path basis using 'ssi=exec=#' [0741] SSI #exec (#dcl) directives can be allowed on per-path basis [0742] using SET ssi=exec= (e.g. 'ssi=exec=say,show') [0743] 'delete-on-close' file specification extended [0744] SSI [0745] metacon add server_process_gt:, change to client_connect_gt: [0746] and server_connect_gt: to better reflect functionality [0747] service access log report (last 65kB of an access log) [0748] add connect processing and keep-alive accounting items [0749] DECC 6.2 objected to '$DESCRIPTOR(name,ptr->string)' [0750] bugfix; rare RECTOOBIG on variable record length file where [0751] longest record exceeded 'OutputBufferSize' so initialize [0752] buffer to maximum of 'OutputBufferSize' or file lrl [0753] bugfix; RequestExecute() re-set error by redirect [0754] bugfix; ErrorGeneral() always get module name and number [0755] bugfix; DclAllocateTask() CGIplus with virtual services [0756] bugfix; ProxyFtpListProcessUnix() maximum fields handling [0757] 08-JAN-2004 MGD v8.4.1, [0758] SET response=header=[no]add[=""] [0759] 04-JAN-2004 MGD v8.4.0, [0760] compilation and run-time support for IA64 [0761] for VMS 7.3-2 and later take advantage of the larger [0762] EDCL CLI line (255->4095) and symbol (1024->8192) sizes [0763] 'config directory' located authorization databases [0764] authorization path keyword 'final' to conclude further [0765] rule mapping at that point (as if none matched) [0766] rule mapping "set map=root=" allows a set of rules [0767] to be rooted to a particular path (CGI document-root) [0768] support "Range: bytes=[,..]" request field [0769] for non-VAR-record files and cached files [0770] provide network mode operation (server and scripts) [0771] revise detached process cleanup candidate identification [0772] (now requires CMKRNL privilege to use $GRANTID service) [0773] modify DCL.C script activation code (allow qualifiers [0774] and/or parameters to be supplied from path setting) [0775] extensive rework of cache module to allow non-file content [0776] (e.g. script) output to be cached [0777] [CacheGuardPeriod] configuration directive [0778] optional HTTPD$MSG [language] 'charset=' parameter [0779] HTA database now "read [record] regardless of lock" [0780] SET cache=[no]cgi, cache=expires=, cache=[no]file, [0781] cache=[no]net, cache=maxkbytes=, cache=[no]nph, [0782] cache=[no]script, cache=[no]ssi, [0783] map=root=, [0784] map=set=[no]ignore, map=set=[no]request, [0785] proxy=reverse=location=, proxy=reverse=verify, [0786] response=header=[append|full|none], [0787] script=command= [0788] reverse-proxy 302 "Location: ..." response can have the [0789] location URL rewritten to reflect the original host [0790] reverse-proxy can be locally authorized and then have [0791] that verified by the proxied-to server (UMA) [0792] metacon "document-root:" ('DR') reflects "set map=root=" [0793] add "client_current_gt:" and "server_current_gt:" [0794] /PERSONA=IDENT= is now available for PERSONA_MACRO [0795] mapping now URL-encodes a redirect wildcard path portions [0796] rework some report item format and content [0797] check Digest authentication against Mozilla 1.4 [0798] only check SYSUAF secondary password expiry date/time [0799] if the secondary password hash is not empty [0800] bugfix; error report by redirect, set after virtual host [0801] bugfix; GraphActivityPlotBegin() and GraphActivityDataScan() [0802] signed/unsigned issue masking out request value [0803] bugfix; chained proxy CONNECT processing [0804] bugfix; keep track of outstanding body reads [0805] bugfix; according to the doco "Index of"s from SSI should [0806] not be delimited top or bottom (up to SSI to caption it!) [0807] bugfix; DclScriptProcessPurge() [0808] 12-OCT-2003 MGD v8.3.2, [0809] bugfix; DECnet allow for outstanding network writes [0810] bugfix; "internal" script detection [0811] bugfix; MetaConLoad() [IncludeFile] [0812] bugfix; ProxyRequestRebuild() rebuild buffer space [0813] bugfix; suppress output after "Script-Control: x-error..." [0814] bugfix; keyword search exclude file type [0815] bugfix; notepad needs to be explicitly NULLed [0816] bugfix; MAP-FILE: stripping leading character [0817] bugfix; DECnet allow for outstanding body reads [0818] 15-AUG-2003 MGD v8.3.1, [0819] allow the database directory location to be specified using [0820] authorization rule 'param="/directory=device:[directory]"' [0821] allow for and keep track of $HIBER spurious wakes [0822] massage SYSUAF-authenticated remote username to comply [0823] with VMS requirements [0824] suppress digest auth challenge except for HTA and external [0825] where CDATA constraints make using entity impossible [0826] use a field name of hidden$lf and ^ substituted [0827] with the BODY.C module doing some sleight-of-hand with it [0828] (modern browsers like Mozilla were having issues) [0829] BODY_DISCARD_CHUNK_COUNT made *very* large [0830] bugfix; ServiceConfigReviseNow() form element names must be [0831] unique (technically correct, enforced by modern browsers) [0832] bugfix; AuthCacheAddRecord() [0833] bugfix; check for NULL pointer 'cnptr->ReuseConnection' [0834] bugfix; DECnetCgiDialog() not strict wait for EOF sentinal [0835] bugfix; do not allow SET mapping during a callout [0836] bugfix; use _BBCCI() to clear the mutex in InstanceExit()!! [0837] bugfix; SesolaCacheAddRecord() oldest tick second [0838] 28-JUN-2003 MGD v8.3.0, [0839] regular expression support [0840] [AuthFailurePeriod], [AuthFailureTimeout], [0841] [ProxyUnknownRequestFields], [RegEx] directives [0842] SET cache=[no]perm, cache=max= [0843] SET notepad= and if (notepad:) [0844] metacon "notepad:", "regex:", "request:" ('RQ'), "restart:" [0845] [Match] Server Admin item, report, and WATCH item [0846] file cache support for permanent and volatile entries [0847] improve efficiency RequestRedirect() & ProxyRequestRebuild() [0848] store and provide unrecognised request header fields [0849] rework break-in detection and processing [0850] (configuration defaults to LGI sysgen parameters and now [0851] operates in the same way as described for general VMS) [0852] /SYSUAF=(VMS,ID) allows concurrent VMS and ID authorization [0853] add proxy cache device error count statistics [0854] home pages may now be [Welcome]+[DclScriptRunTime] specified [0855] (i.e. provided via scripting environments such as PHP) [0856] request heap statistics and VmRequestTune() [0857] bugfix; add HTTP protocol to combined/common format URL [0858] bugfix; request body to be read needs to be the smaller of [0859] remaining body or buffer size (jpp@esme.fr) [0860] bugfix; InstanceMutex..() use _BBCCI() to clear the mutex [0861] bugfix; FILE.C FileSetCharset() following CacheSearch() [0862] moved to CACHE.C module (ACCVIO if entry NULLed) [0863] bugfix; ProxyMaintDeviceStats() volume count (set) handling [0864] bugfix; ServiceConfigFromString() (jpp@esme.fr) [0865] bugfix; DirFormatLayout() static flags (jpp@esme.fr) [0866] bugfix; request SET Html.. memory allocation (jpp@esme.fr) [0867] bugfix; MetaConParse() decrement index (back) when [0868] not currently executing an if()inline directive [0869] bugfix; (and refine) DECnetSupervisor() [0870] bugfix; DclSysOutputAst() do not rundown script process [0871] if the error generated came from "Script-Control:" [0872] bugfix; CGI(plus) allow for '!' from (!$blah) mapping rule [0873] 09-APR-2003 MGD v8.2.0, [0874] some minor logging format changes for server entries [0875] wildcard and comma-separated list of languages [0876] can be specified (e.g. "[Language] es-ES,es,es-*") [0877] [ProxyForwarded] supercedes [ProxyAddForwardedBy] with [0878] proxy=forwarded[=...] mapping rule [0879] [ProxyXForwardedFor] configuration directive with [0880] proxy=xforwardedfor[=...] mapping rule to support [0881] proxy generation of "X-Forwarded-For:" header field [0882] authentication agent '100 REASON any text' [0883] script=as=$? to indicate optional use of SYSUAF username [0884] SET dir=style[=default|original|anchor|htdir], [0885] SET html=[bodytag|header|headertag|footer|footertag]=[..] [0886] and incorporation in "Index of", selected other facilities [0887] SET cgiplusin=[none|cr|lf|crlf], SET cgiplusin=eof, [0888] SET script=query=none, SET script=path=find, [0889] SET [no]search=none [0890] disable 'NetMultiHomedHost' (should not be required [0891] for modern virtual service processing) [0892] script=params=+(name=value) concatenates to any existing [0893] HTAdminPasswordChange() check for VMS group write [0894] processes created using HttpdDetachServerProcess() now have [0895] a YYYYMMDDHHMMSS timestamp as part of the process log name [0896] with RTEs look first for one that was executing the same [0897] script, then if not found fall back to (any) LRU RTE [0898] SYSUAF security profile via rule and /PROFILE=BYRULE [0899] script as SYSUAF username can be requested with auth rule [0900] allow [[service]] to include the [[scheme://service]] [0901] relax ServiceParse() so that [[the.host.name]] is accepted [0902] enable SYSPRV in HTAdminDatabaseSearch() [0903] relax initial CGI response line checking [0904] build 'records' from script single byte output streams [0905] general (non-RTE) run-time allowed with (!..) syntax [0906] both run-time specifications allowed with SCRIPT rule [0907] added GATEWAY_EOF/EOT/ESC CGI variables [0908] sentinals changed to have only RMS-compliant characters [0909] supply more detail from "%DCL-E-OPENIN, blah" responses [0910] SesolaParseCertDn() record /email and /emailAddress [0911] bugfix; Alpha VMS V7.1 or earlier sys$persona_assume() [0912] needs to be used in the same way as for VAX [0913] bugfix; RequestRedirect() append remain CGI response header [0914] bugfix; body provision for script processing restart [0915] bugfix; proxy FTP ResponseHeader() content-length of zero [0916] bugfix; StringParseQuery() loop on string overflow [0917] bugfix; HTAdminPasswordChange() cache reset realm [0918] bugfix; error recovery in Sesola_read() and Sesola_write() [0919] bugfix; DECnetFindCgiScript() foreign verb creation [0920] 10-JAN-2003 MGD v8.1.1, [0921] SET script=query=relaxed [0922] AuthVmsLoadIdentifiers() more flexible [0923] bugfix; ControlEnqueueCommand() occasional race condition [0924] 07-DEC-2002 MGD v8.1.0, [0925] SET auth=all (path must be subject to authorization or fail) [0926] CGI 'Control-Script:' X-error-... fields [0927] add 'mp' mapping and 'mapped-path:' metacon conditionals [0928] add 'rc' mapping and 'redirected:' metacon conditionals [0929] add 'st' mapping and 'script-name:' metacon conditionals [0930] add "path-translated:" metacon conditional [0931] skeleton-key authentication [0932] refine mapping rule processing to ensure that paths with [0933] forbidden syntax generate RMS bad syntax [0934] check for device and directory (minimum) before parse [0935] refine metacon reporting (reporting detected errors to OPCOM) [0936] the server now detects the presence of HTTP$NOBODY [0937] account and scripts using that [0938] if the server is using HTTP$NOBODY or /script=as= [0939] DECnet scripting now uses the same account [0940] refine VMS security profile usage (no, just coincidence!) [0941] to allow VMS profile authorized requests to override [0942] directory listing controls (amongst other things) [0943] server process log is now accessable via the Admin Menu [0944] additional mapping functionality (SET query-string=) [0945] no sneaky getting directory contents by downloading files! [0946] CGI.C in non-strict CGI mode report anything like [0947] "%DCL-E-OPENIN, blah" as a failed script activation [0948] PUT.C allow for white-space in multipart file names [0949] bugfix; in OdsNameOfDirectoryFile() use SYSPRV [0950] around sys$parse() to ensure access to directory [0951] bugfix; set path dir=access not ignored [0952] 25-SEP-2002 MGD v8.0.1 [0953] additional persona counters [0954] /script=as= allows a NOBODY scripting environment [0955] without enabling PERSONA in general [0956] require account SYSPRV for certain command-line activities [0957] implement /persona=[authorized|relaxed|relaxed=authorized] [0958] to prevent inadvertant scripting using privileged accounts [0959] HttpdDetachServerProcess() [STARTUP]STARTUP_SERVER.COM [0960] MapOdsElementsToVms() excise parent directory syntax [0961] only use MapUrl_VmsUserName() path ODS if not already set [0962] SET report=4nn=nnn for mapping HTTP status [0963] SET map=ellipsis now required to map VMS '...' wildcard [0964] SET dir=charset= directory listing charset mapping rule [0965] support 'script=as=' functionality, plus DECnet variants [0966] NODE"$":: substitutes SYSUAF authenticated username into [0967] access string (for proxy access to account) and [0968] NODE"~":: substitutes '/~username/' username in same way [0969] set path en/decoding for RSI (MultiNet NFS), PATHWORKS (v4), [0970] Advanced Server (PATHWORKS v6) / Samba file naming schemas [0971] (as well as for ODS-2 and ODS-5) [0972] AuthVmsCheckUserAccess() traps SS$_NOCALLPRIV returning [0973] SS$_NOPRIV to allow directory listings of DFS volumes [0974] introduce fab$b_rfm and fab$b_rat as fields to allow [0975] PUT.C to specifically set these attributes as required [0976] refine SesolaReport() for obtaining service ciphers [0977] (OpenSSLv0.9.6f/0.9.7-beta break it) [0978] local redirection should have the path re-URL-encoded [0979] FAO change function of "!&U" to "!&P", new "!&U" [0980] enhance authentication and SSL global section creation [0981] allow for 'pass /* 400' (i.e. no trailing message) [0982] RFC1413 authorization with DNS lookup use host name to [0983] construct remote user string [0984] rework path alert notification for greater functionality [0985] bugfix; make ServiceConfigLoad() file not found non fatal [0986] bugfix; ConfigIconFor() terminate on content-type [0987] bugfix; if restart MIME boundary matching algorithm [0988] using that char (allow for --..boundary) [0989] bugfix; 'Xray' broken in v8, repaired and reworked [0990] bugfix; always revalidate X509 and RFC1413 [0991] (for path authorization after script) [0992] bugfix; 'script' and 'exec' MetaConParseReset() state [0993] bugfix; set AuthCacheRecordSize from HTTPD$CONFIG value [0994] bugfix; when discarding via BodyReadBegin() use BodyRead() [0995] to queue a network read only if data is outstanding [0996] bugfix; template/result wildcard checking for scripting rules [0997] bugfix; do not count callout records for CGI header purposes [0998] 03-JUL-2002 MGD v8.0.0 [0999] "instance" capability (loosely coupled, multiple [1000] socket/service-sharing servers on the one system) [1001] meta-config (integrated config, mapping, service, auth), [1002] provide "module WATCHing" for on-line, ad hoc debug [1003] SET script=params=(name=value), proxy=bind=
and [1004] proxy=chain= mapping rules [1005] asynchronous block processing of POST and PUT request body [1006] some accomodations for Mozilla-HTTP/1.1 "Cache-Control:" [1007] improve performance with EFN$C_ENF and use explicitly [1008] allocated event flags for avoiding potential interactions [1009] client host name lookup now asynchronous [1010] FTP proxying processing [1011] /DEMO demonstration mode [1012] 29-JUN-2002 MGD v7.2.3 [1013] some accomodations for Mozilla-HTTP/1.1 "Cache-Control:" [1014] bugfix; [ProxyCacheNoReloadSeconds] parsing [1015] bugfix; (well sort of) it would appear that after NO_CONCEAL [1016] searching and a sys$open() must sys$close() *before* the [1017] SYNCHCK sys$parse() release resources otherwise a channel [1018] bugfix; ensure when OdsParse() is used successively with [1019] the same ODS structure that previous resources are first [1020] released (can present a problem unique to search lists) [1021] to the device is left assigned!! [1022] bugfix; ensure sys$search() RMS channel is released [1023] bugfix; ProxyResolveHostCache() NULL 'rqptr' [1024] bugfix; account/password expiry [1025] bugfix; DclFindFileEnd() reset result file name [1026] bugfix; SsiAccessesClose() now synchronous using SYSPRV [1027] 13-APR-2002 MGD v7.2.2 [1028] Authorize() allow /NO401 parameter to suppress server [1029] challenge to allow external agent to response (e.g. PHP) [1030] ProxyHostConnectAst() invalidate host cache entry [1031] NetCreateService() checks previously bound address [1032] MapOdsUrlToVms() eliminate chance of device:[.directory] [1033] make a proxy reactive purge initially more agressive [1034] keep-alive decision logic to RequestFields() [1035] bugfix; ensure only one request revalidates a cache entry at [1036] a time (multiple could cause eventual channel exhaustion) [1037] bugfix; switch return not break with next reactive scan [1038] bugfix; AuthConfigProxyMap() wildcard string results [1039] bugfix; ODS-5 parent directories with multiple periods [1040] bugfix; command-line proxy cache maintenance reporting [1041] bugfix; FileNextRecordAst() VAR file into contents buffer [1042] bugfix; MAPURL.C throttle report [1043] bugfix; AuthCacheAddRecord() and host group without "host=" [1044] bugfix; reset SSL state to SSL_ST_OK if renegotiation fails [1045] bugfix; DclTaskRunDown() reset script task type [1046] bugfix; MsgFor() Accept-Lang: comparison [1047] bugfix; NetAcceptAst() deassign channel when connect dropped [1048] bugfix; wildcard substitution in MapUrl__Map() [1049] bugfix; StringMatch() wildcard matching [1050] bugfix; close log file for ALL services in LOGGING.C [1051] bugfix; !&M formatting directive in PROXYCACHE.C [1052] bugfix; /RELAXED should allow all but DISUSERed accounts [1053] to authenticate regardless of RESTRICTED or CAPTIVE flags [1054] 03-NOV-2001 MGD v7.2.1 [1055] PERSONA.C using PERSONA.MAR can now provide persona scripting [1056] for pre-VMS 6.2 VAX systems (CAUTION!! - UNSUPPORTED) [1057] "TASK=CGI..", "0=CGI.." recognised as DECnet CGI dialog [1058] FAB$M_TEF to deallocate unused log file space [1059] StringMatch() replaces SearchTextString() for more [1060] light-weight text matching (affects six modules) [1061] [SsiSizeMax] and [ProxyCacheNoReloadSeconds] [1062] FILE.C block I/O complete if _rsz is less than _usz [1063] 'ProxyCacheNoReloadSeconds' limits immediate (pragma) reload [1064] ensure mapping conditional not mistaken for missing template [1065] kludge work around spawning authorized privs with $CREPRC [1066] bugfix; ensure only one request revalidates a cache entry at [1067] a time (multiple could cause eventual channel exhaustion) [1068] bugfix; close current log file if period changes [1069] bugfix; DECnet user script mapping [1070] bugfix; FileNextBlocksAst() 'ContentRemaining' [1071] bugfix; wildcard substitution in MapUrl__Map() [1072] bugfix; sys$close() in OdsLoadTextFile() [1073] bugfix; always generate callout sequences [1074] bugfix; a bugfix in VMS V7.2 has broken the previously [1075] working usage of IO$_MODIFY in ProxyCacheSetLastAccessed() [1076] bugfix; activity graphic [1077] bugfix; check ParseQueryField() in WatchBegin() for NULL [1078] bugfix; allow agent to provide 'CGIPLUS:' directive [1079] bugfix; 'layout=U' upper-casing [1080] 01-JUL-2001 MGD v7.2.0 [1081] X.509 authentication and authorization [1082] RFC1413 (identfication protocol) authorization [1083] remote user to vms user (SYSUAF authorization) proxy mapping [1084] proxy cache maintainence may now be done from the CLI [1085] HTL list maintenance can now be done from the Admin Menu [1086] a fatal authorization problem now disables authorization [1087] "hh:mm:ss" allows for a more versatile period [1088] concurrent processing controls (request "throttling") [1089] improved script process run-down conditions and handling [1090] HttpdTick() drives XxxSupervisor()s [1091] control (/DO= and Admin menu) now via a global section [1092] monitor (HTTPDMON) data now supplied via a global section [1093] suppress CGI content-type "x-internal..." [1094] [IncludeFile] for all configuration files [1095] request supervisor refinements [1096] .URL file processing [1097] 01-JUL-2001 MGD v7.1.2 [1098] add selective status codes to error report path [1099] refine 'view' and 'list' redirection in UPD.C [1100] refine logging RMS characteristics (500% improvement) [1101] provide for ODS-5 "hidden" files ('^.') [1102] check network status during SSL accept [1103] EXEC of file type [1104] remove http: check from SesolaAccept() [1105] bugfix; parsing of [ServiceProxyChain] [1106] bugfix; 'RU' conditional [1107] bugfix; SCRIPT_FILENAME with CGIplus [1108] bugfix; NetThisVirtualService() and call conditions [1109] bugfix; SesolaFree() BioPtr [1110] bugfix; AuthVmsCheckUserAccess() return SS$_NOPRIV [1111] bugfix; ParseNetMask() and VSLM mask processing [1112] bugfix; sys$create_user_profile() length size from word [1113] (System Services Manual) to unsigned int (startlet.h)! [1114] bugfix; authorization network masks [1115] bugfix; directory specfication length (sys$check_access()) [1116] bugfix; HTAdminPasswordChange() call to FaoToOpcom() [1117] bugfix; AuthGenerateHashPassword() force upper-case [1118] bugfix; final status at write group/no read group check [1119] 18-JAN-2001 MGD v7.1.1 [1120] HTTPD$SCRATCH automatic script scratch file cleanup [1121] authentication agent can now '100 SET-COOKIE rfc2109-cookie' [1122] bugfix; memory leak in AUTH.C [1123] bugfix; FILE.C make a search list DNF appear as a FNF [1124] bugfix; /PROFILE empty directory passing incorrect parameter [1125] bugfix; general error reporter variable arguments [1126] bugfix; final authorization failure should specify 403 [1127] bugfix; ensure mapping rules exist for authentication agents [1128] bugfix; control cache purge arguments [1129] 17-OCT-2000 MGD v7.1.0 [1130] sys$creprc() scripting [1131] sys$persona...() scripting [1132] Run Time Environments (RTEs) [1133] server-group/cluster-wide directives (via DLM) [1134] further refined CGI.C module output handling [1135] apply authorization to SSI.C #include'd and #dir'e [1136] client socket (BGnnnn:) potentially sharable for scripts [1137] proxy cache device directory organization flat256/64x64 [1138] modify SSL initialization to better indicate "fallback" [1139] integration of WATCH peek/one-shot [1140] 03-SEP-2000 MGD v7.0.2 [1141] limit script output of ENDOFFILE [1142] if CGI response "Content-Encoding:" force stream mode [1143] bugfix; ProxyResolveHostLookup() can be called multiple [1144] during host name resolution - only allocate channel once!! [1145] bugfix; include Accept-Encoding when redirecting [1146] bugfix; ParseQueryField() string length check [1147] 09-JUL-2000 MGD v7.0.1 [1148] locking around proxy cache scans [1149] add "success=" 303 processing to PUT.C file upload [1150] improve CgiOutput() header processing (again!) [1151] correct concealed/searchlist parsing [1152] allow "302 location" redirection from authentication agent [1153] bugfix; proxy CONNECT service [1154] bugfix; HEAD requests specifying content-length [1155] bugfix; WatchCliSettings() storage [1156] 01-JUN-2000 MGD v7.0.0 [1157] support extended file specifications [1158] (ODS-5 under Alpha VMS V7.2ff) [1159] event reporting via OPCOM [1160] some "Apache" support for easing CGI script ports [1161] access log file naming refinements [1162] 18-MAR-2000 MGD v6.1.3 [1163] bugfix; authconfig processing [1164] 06-JAN-2000 MGD v6.1.2 [1165] authorization failure limit evasion period [1166] numerous warnings from DECC v6.2 addressed [1167] bugfix; user restriction list pass (broken in 6.1) [1168] 17-DEC-1999 MGD v6.1.1 [1169] bugfix; quote double-up in CgiVariable() (INSVIRMEM exit) [1170] 04-DEC-1999 MGD v6.1.0 [1171] "agent" authentication/authorization [1172] CGI(plus) processing provides callouts [1173] SSI module now supports OSU-specific directives [1174] /SYSPRV now allows operation with SYSPRV turned on [1175] "one-shot" WATCH and "peek" reports [1176] output no-progress timer [1177] remove NETLIB support [1178] 16-OCT-1999 MGD v6.0.3 [1179] bugfix; sys$create_user_profile [1180] bugfix; mapping storage overflow [1181] USER mapping rule for SYSUAF access [1182] 12-SEP-1999 MGD v6.0.2 [1183] minor changes to authorization processing [1184] bugfix; service parsing and SSL [1185] virtual services now match using "Host:" field [1186] 19-JUN-1999 MGD v6.0.1 [1187] refinements to request termination/rundown [1188] bugfix; DECnet (CGI and OSU) task handling [1189] bugfix; proxy request HTTP/0.9 response processing [1190] 30-MAY-1999 MGD v6.0.0 [1191] proxy, with HTTP caching [1192] OpenSSL 0.9.3 support (also SSLeay support) [1193] extended authorization/authentication environment [1194] 31-MAR-1999 MGD v5.3.4 [1195] bugfix; SesolaReport(), HttpHeaderChallenge() [1196] 28-MAR-1999 MGD v5.3.3 [1197] SSI variables global (when "#include"ing other SSI) [1198] SSI read buffer determined by 'FileXabFhc.xab$w_lrl' [1199] 05-FEB-1999 MGD v5.3.2 [1200] bugfix; FileNextRecord() zero '_usz' [1201] 10-JAN-1999 MGD v5.3.1 [1202] greater granularity when WATCHing authorization [1203] bugfix; OSU scripting pass *mapped* file spec [1204] 14-NOV-1998 MGD v5.3.0 [1205] [[host:port]] virtual service syntax [1206] [AddType] can now "text/html; charset=ISO-8859-1" [1207] [CharsetDefault] sets text and server character set [1208] improved AST granularity several significant modules [1209] WATCH report and CLI [1210] RMS-invalid substitution character in mapping rules [1211] bugfix; NameOfDirectoryFile() [1212] 29-AUG-1998 MGD v5.2.0 [1213] reuse DECnet task connections [1214] allow specified hosts exclusion from logging [1215] stream-LF conversion only on specified paths [1216] bugfix; SYS$TIMEZONE_DIFFERENTIAL processing [1217] bugfix; DECnet tasks not aborted at timeout [1218] 07-JUL-1998 MGD v5.1.0 [1219] add eXtended Server Side Includes processing [1220] design-problem; modify CGIplus script rundown [1221] SYSUAF authentication by identifier [1222] per-service logging [1223] rqptr->rqTmr.Terminated (occasional lib$get_vm() [1224] %LIB-F-BADLOADR around connection expiry termination) [1225] 20-DEC-1997 MGD v5.0.0 [1226] optional Secure Sockets Layer (using SSLeay) [1227] DECnet-based scripting including OSU emulation [1228] miscellaneous revisions and "improvements" [1229] 07-JAN-1997 MGD v4.5.2 [1230] bugfix; record-mode file transfer [1231] bugfix; activity graph [1232] 06-DEC-1997 MGD v4.5.1 [1233] resolving a suspected inconsistent AST delivery situation [1234] by requiring all $QIO()s with AST routines to ensure any [1235] queueing errors etc. are reported via the AST routine by [1236] an explicit $DCLAST() ... this removes ambiguity about how [1237] $QIO() returns should be handled ... drastic but desperate [1238] times, etc. (a more consistent and desirable model anyway :^) [1239] 02-NOV-1997 MGD v4.5.0 [1240] file cache [1241] logging periods [1242] HttpdSupervisor() [1243] configurable script run-time environments [1244] additional request header fields [1245] 18-OCT-1997 MGD v4.4.1 [1246] bugfix; duration [1247] bugfix; logging period [1248] 01-OCT-1997 MGD v4.4.0 [1249] message module [1250] conditional rule mapping [1251] SYSUAF-authenticated user access control [1252] multi-homed/multi-port services [1253] (some NETLIB packages now cannot DNS lookup) [1254] echo and Xray internal scripts [1255] extensions to logging functionality [1256] additional command-line server control [1257] bugfix; redirection loop detection [1258] 01-AUG-1997 MGD v4.3.0 [1259] MadGoat NETLIB broadens TCP/IP package support [1260] server activity report [1261] 16-JUL-1997 MGD v4.2.2 [1262] bugfix; WORLD realm and access list [1263] 07-JUL-1997 MGD v4.2.1 [1264] minimum heap allocation chunk size [1265] prevent keep-alive timeout redefining request logical [1266] 01-JUL-1997 MGD v4.2.0 [1267] change name to WASD (Wide Area Surveillance Division) [1268] persistent DCL subprocesses and CGIplus [1269] (see re-written DCL.C module) [1270] scripting and client reports [1271] potential multi-thread problems in reports fixed [1272] 27-MAR-1997 MGD v4.1.0 [1273] rationalized HTTP response header generation [1274] delete on close for "temporary" files to support [1275] UPD module "preview" functionality ... WARNING, any [1276] file with a name comprising a leading hyphen [1277] sixteen digits and a trailing hyphen will be deleted! [1278] 01-FEB-1997 MGD v4.0.0 [1279] HTTPd version 4 [1280] 01-OCT-1996 MGD v3.4.0 [1281] extended server reporting [1282] 01-AUG-1996 MGD v3.3.0 [1283] realm/path-based authorization [1284] BASIC and DIGEST authentication [1285] PUT(/POST/DELETE) module [1286] StmLf module (variable to stream-LF file conversion) [1287] 12-APR-1996 MGD v3.2.0 [1288] file record/binary now determined by record format [1289] persistent connections ("Keep-Alive" within HTTP/1.0) [1290] moved RMS parse structures into thread data [1291] improved local redirection detection [1292] observed Multinet disconnection/zero-byte behaviour [1293] (request now aborts if network read returns zero bytes) [1294] 15-FEB-1996 MGD v3.1.1 [1295] fixed rediculous :^( bug in 302 HTTP header [1296] minor changes to request accounting and server report [1297] minor changes for user directory support [1298] minor changes to error reporting [1299] 03-JAN-1996 MGD v3.1.0 [1300] support for both DEC TCP/IP Services and TGV MultiNet [1301] 01-DEC-1995 MGD v3.0.0 [1302] single heap for each thread's dynamic memory management [1303] extensive rework of DCL subprocess functionality [1304] HTML pre-processsing module (aka Server Side Includes) [1305] NCSA/CERN compliant image-mapping module [1306] NetWriteBuffered() for improving network IO [1307] miscellaneous reworks/rewrites [1308] 27-SEP-1995 MGD v2.3.0 [1309] carriage-control on non-header records from [1310] to single ('\n' ... newline), some browsers expect [1311] only this (e.g. Netscape 1.n was spitting on X-bitmaps) [1312] added Greenwich Mean Time time-stamp functionality [1313] added 'Referer:', 'If-Modified-Since:', 'User-Agent:' [1314] 07-AUG-1995 MGD v2.2.2 [1315] optionally include commented VMS file specifications [1316] in HTML documents and VMS-style directory listings [1317] 16-JUN-1995 MGD v2.2.1 [1318] added file type description to "Index of" (directory) [1319] 24-MAY-1995 MGD v2.2.0 [1320] minor changes to allow compilation on AXP platform [1321] 03-APR-1995 MGD v2.1.0 [1322] add SYSUAF authentication, POST method handling [1323] 20-DEC-1994 MGD v2.0.0 [1324] multi-threaded version [1325] 20-JUN-1994 MGD v1.0.0 [1326] single-threaded version [1327] */ [1328] /*****************************************************************************/ [1329] [1330] #ifndef VERSION_H_LOADED [1331] #define VERSION_H_LOADED 1 [1332] [1333] /* five characters or less */ [1334] #define HTTPD_NAME "WASD" [1335] #define HTTPD_SOFTWAREID_NAME "HTTPd-WASD" [1336] [1337] /* keep HTTPD_GBLSEC_VERSION in step with this version (as necessary) */ [1338] #define HTTPD_VERSION "10.3.0" [1339] [1340] /* used to name and to detect changes in global section data structures */ [1341] #define ACTIVITY_GBLSEC_VERSION_NUMBER 0x100200 /* i.e. 10.02.00 */ [1342] #define AUTH_GBLSEC_VERSION_NUMBER 0x100200 [1343] #define AUTH_TOKEN_GBLSEC_VERSION_NUMBER 0x100200 [1344] #define HTTPD_GBLSEC_VERSION_NUMBER 0x100200 [1345] #define SESOLA_GBLSEC_VERSION_NUMBER 0x100200 [1346] #define PROXYVERIFY_GBLSEC_VERSION_NUMBER 0x100200 [1347] [1348] /* used as part of the the "instance" lock names, allowed range 1..15 */ [1349] #define HTTPD_LOCK_VERSION 1 [1350] [1351] VersionInfo(); [1352] [1353] #endif /* VERSION_H_LOADED */ [1354] [1355] /*****************************************************************************/