/*****************************************************************************/
/*
MapUrl.h
*/
/*****************************************************************************/
#ifndef MAPURL_H_LOADED
#define MAPURL_H_LOADED 1
#include "wasd.h"
#include "metacon.h"
#define MAPURL_RULE_EXEC 1
#define MAPURL_RULE_FAIL 2
#define MAPURL_RULE_MAP 3
#define MAPURL_RULE_PASS 4
#define MAPURL_RULE_REDIRECT 5
#define MAPURL_RULE_SCRIPT 6
#define MAPURL_RULE_SET 7
#define MAPURL_RULE_USER 8
#define MAPURL_RULE_UXEC 9
#define MAPURL_RULE_PROTECT 10
#define MAPURL_REPORT_MATCH_NOT 0
#define MAPURL_REPORT_MATCH_RULE 1
#define MAPURL_REPORT_MATCH_RULECOND 2
#define MAPURL_REPORT_MATCH_RULENOCOND 3
#define MAPURL_REPORT_MATCH_VIRT 4
#define MAPURL_PATH_ODS_0 -1
#define MAPURL_PATH_ODS_2 2
#define MAPURL_PATH_ODS_5 5
#define MAPURL_PATH_ODS_ADS 66
#define MAPURL_PATH_ODS_PWK 77
#define MAPURL_PATH_ODS_SMB 88
#define MAPURL_PATH_ODS_SRI 99
#define MAPURL_PATH_ODS_SRI 99
#define MAPURL_DIR_FONT_INHERIT 1
#define MAPURL_DIR_FONT_MONOSPACE 2
#define MAPURL_DIR_STYLE_DEFAULT -1
#define MAPURL_DIR_STYLE_DEFAULT2 -2
#define MAPURL_DIR_STYLE_NONE 0
#define MAPURL_DIR_STYLE_ORIGINAL 1 /* pre-v8.2 */
#define MAPURL_DIR_STYLE_ORIGINAL2 2 /* pre-v8.2 minus
s */
#define MAPURL_DIR_STYLE_ANCHOR 3 /* post-v8.2 */
#define MAPURL_DIR_STYLE_ANCHOR2 4 /* post-v8.2 minus
s */
#define MAPURL_DIR_STYLE_SORT 5 /* HTML table and sortable */
#define MAPURL_DIR_STYLE_SORT2 6 /* table and sortable minus
s */
#define MAPURL_DIR_STYLE_HTDIR 7 /* Alex Ivanov's HTdir, etc. */
#define MAPURL_DIR_STYLE_HTDIR2 8 /* HTdir, etc. minus
s */
#define MAPURL_DIR_STYLE_TABLE 9 /* post-v10.4 table element */
#define MAPURL_DIR_STYLE_TABLE2 10 /* post-v10.4 table element */
#define MAPURL_DIR_TITLE_THIS -5 /* literal string */
#define MAPURL_DIR_TITLE_OWNER -4
#define MAPURL_DIR_TITLE_REMOTE -3
#define MAPURL_DIR_TITLE_DEFAULT -2
#define MAPURL_DIR_TITLE_NONE -1
/* then as 1, 2, 3 .. 99999 */
#define MAPURL_DIR_DELIMIT_BOTH 1
#define MAPURL_DIR_DELIMIT_HEADER 2
#define MAPURL_DIR_DELIMIT_FOOTER 3
#define MAPURL_DIR_DELIMIT_NONE 4
#define MAPURL_PATH_ALERT_END 0x0001
#define MAPURL_PATH_ALERT_AUTH 0x0002
#define MAPURL_PATH_ALERT_MAP 0x0004
#define MAPURL_PATH_ALERT_DONE 0x8000 /* bit that is ORed into the flag */
#define MAPURL_ODS_DEFAULT -1
#define MAPURL_ODS_8BIT 1 /* native encoding (default) */
#define MAPURL_ODS_UTF8 2 /* utf-8 encoding */
#define MAPURL_CLIENT_FORWARDED 1
#define MAPURL_CLIENT_IF_FORWARDED 2
#define MAPURL_CLIENT_LITERAL 3
#define MAPURL_CLIENT_RESET 4
#define MAPURL_CLIENT_XFORWARDEDFOR 5
#define MAPURL_CLIENT_IF_XFORWARDEDFOR 6
#define MAPURL_RESPONSE_GZIP_NONE -1
#define MAPURL_RESPONSE_GZIP_ALL -2
/* any other non-zero integer represents kilobytes */
/* used to mask the actual reason for denying access to a USER rule username */
#define MAPURL_USER_RULE_FORBIDDEN_MSG "\0" "403 USER forbidden!"
/* put a brake on potentially runaway mapping restarts */
#define MAPURL_RESTART_MAX 5
#define MAPURL_NO_REVERSE_PATH "NO:[REVERSE.MAPPING.FOR.THIS]FILE.PATH!"
#define MAPURL_PROXY_HEADER_MAX 4
/*******************/
/* data structures */
/*******************/
#pragma member_alignment __save
#pragma member_alignment
typedef struct MapPathSetMetaStruct MAP_SET_META;
struct MapPathSetMetaStruct
{
BOOL AcceptLangWildcard,
AcceptLangTypeVariant,
NoAcceptLang,
AccessProfile,
AccessNoProfile,
AccessRead,
AccessNoRead,
AccessServer,
AccessNoServer,
AccessWrite,
AccessNoWrite,
Alert,
NoAlert,
AuthAll,
NoAuthAll,
AuthMapped,
NoAuthMapped,
AuthOnce,
NoAuthOnce,
Cache,
NoCache,
CacheCGI,
CacheNoCGI,
CacheCookie,
CacheNoCookie,
CacheFile,
CacheNoFile,
CacheNet,
CacheNoNet,
CacheNPH,
CacheNoNPH,
CachePermanent,
CacheNoPermanent,
CacheQuery,
CacheNoQuery,
CacheScript,
CacheNoScript,
CacheSSI,
CacheNoSSI,
CacheSetting,
CgiPlusInWriteof,
CgiPlusInNoWriteof,
DefaultSearch,
NoDefaultSearch,
DirAccess,
DirAccessSelective,
DirNoAccess,
DirIconLink,
DirNoIconLink,
DirImpliedWildcard,
DirNoImpliedWildcard,
DirWildcard,
DirNoWildcard,
Expired,
NoExpired,
Extended,
GetUai,
NoGetUai,
NoHtmlEquals,
Http2SendPing,
Http2ToHttp11,
Log,
NoLog,
MapEllipsis,
NoMapEllipsis,
MapEmpty,
MapNonEmpty,
MapExtensionMethod,
NoMapExtensionMethod,
MapOnce,
NoMapOnce,
MapRestart,
MapSetIgnore,
MapSetNoIgnore,
MapSetRequest,
MapSetNoRequest,
MapUri,
NoOp,
PrivSsi,
NoPrivSsi,
Profile,
NoProfile,
ProxyAffinity,
ProxyNoAffinity,
ProxyReverseVerify,
NoProxyReverseVerify,
ProxyReverseAuthHeader,
NoProxyReverseAuthHeader,
ProxyUnknownRequestFields,
NoProxyUnknownRequestFields,
ResponseChunked,
ResponseNoChunked,
ResponseHeaderBegin,
ResponseHeaderFull,
ResponseHeaderNone,
ResponseHeaderNoAdd,
ResponseHttpOriginal,
ResponseHttpNoOriginal,
ScriptBodyDecode,
ScriptBodyNoDecode,
ScriptFind,
ScriptNoFind,
ScriptPathFind,
ScriptNoPathFind,
ScriptQueryNone,
ScriptNoQueryNone,
ScriptQueryRelaxed,
ScriptNoQueryRelaxed,
ScriptSymbolTruncate,
ScriptSymbolNoTruncate,
ScriptSyntaxUnix,
ScriptSyntaxNoUnix,
StmLF,
ThrottleSet,
ThrottleNoSet,
NoStmLF,
WildcardEllipsis,
NoWildcardEllipsis,
WebDavAll,
WebDavNoAll,
WebDavAuth,
WebDavNoAuth,
WebDavHidden,
WebDavNoHidden,
WebDavLock,
WebDavNoLock,
WebDavMetaDirLength,
WebDavProfile,
WebDavNoProfile,
WebDavProp,
WebDavNoProp,
WebDavPutLock,
WebDavNoPutLock,
WebDavRead,
WebDavNoRead,
WebDavServer,
WebDavNoServer,
WebDavWinProp,
WebDavNoWinProp,
WebDavWrite,
WebDavNoWrite;
int AcceptLangLength,
AuthRevalidateTimeout,
AuthSysUafPwdExpUrlLength,
CacheExpiresAfter,
CacheGuardSeconds,
CacheMaxKBytes,
CgiPrefixLength,
CgiVarLength,
ChangeServiceLength,
CharsetLength,
ClientAddress,
ClientAddressLiteralLength,
ContentTypeLength,
CorsAllowCredentials,
CorsNoAllowCredentials,
CorsAllowHeadersLength,
CorsAllowMethodsLength,
CorsAllowOriginLength,
CorsExposeHeadersLength,
CorsMaxAge,
DirCharsetLength,
DirTargetLength,
DirTheseLength,
DirTitle,
DirTitleLength,
DirDelimit,
DirFont,
DirStyle,
DirVersionsOf,
HtmlBodyTagLength,
HtmlFooterLength,
HtmlFooterTagLength,
HtmlHeaderLength,
HtmlHeaderTagLength,
Http2MaxStreams,
Http2SendGoAway,
Http2SendReset,
Http2WriteQueue,
HttpAcceptCharsetLength,
HttpAcceptLangLength,
IndexLength,
MapRootLength,
OdsName,
PathOds,
ProxyBindIpAddressLength,
ProxyChainCredLength,
ProxyChainHostPortLength,
ProxyChainPort,
ProxyForwardedBy,
ProxyHeaderCount,
ProxyReverseLocationLength,
ProxyReworkLength,
ProxyTunnelRequestLength,
ProxyXForwardedFor,
PutRFM,
PutMaxKbytes,
QueryStringLength,
RegexSyntax,
Report400as,
Report403as,
Report404as,
ReportType,
Response200is203,
ResponseCspLength,
ResponseCsproLength,
ResponseGzip,
ResponseHeaderAddLength,
ResponseStrictTransSecLength,
ResponseVarRecord,
ScriptAgentAsLength,
ScriptAsLength,
ScriptCommandLength,
ScriptControlLength,
ScriptBitBucketTimeout,
ScriptCpuMax,
ScriptDefaultLength,
ScriptLifeTime,
ScriptParamsLength,
SsiExecLength,
SSLCGIvar,
StyleSheetLength,
ThrottleIndex,
ThrottleBusy,
ThrottleFrom,
ThrottlePerUser,
ThrottleResume,
ThrottleTo,
ThrottleTimeoutBusy,
ThrottleTimeoutQueue,
TimeoutNoProgress,
TimeoutOutput,
TimeoutPersistent,
WebDavLockTimeoutDefault,
WebDavLockTimeoutMax,
WebSocketInputSize,
WebSocketOutputSize,
WebSocketFraming;
char AcceptLangChar,
RmsSubChar;
char *AcceptLangPtr,
*AuthSysUafPwdExpUrlPtr,
*CgiPrefixPtr,
*CgiVarPtr,
*ChangeServicePtr,
*CharsetPtr,
*ClientAddressLiteralPtr,
*ContentTypePtr,
*CorsAllowHeadersPtr,
*CorsAllowMethodsPtr,
*CorsAllowOriginPtr,
*CorsExposeHeadersPtr,
*DictionaryPtr,
*DirCharsetPtr,
*DirTargetPtr,
*DirThesePtr,
*DirTitlePtr,
*HtmlBodyTagPtr,
*HtmlFooterPtr,
*HtmlFooterTagPtr,
*HtmlHeaderPtr,
*HtmlHeaderTagPtr,
*HttpAcceptCharsetPtr,
*HttpAcceptLangPtr,
*IndexPtr,
*MapRootPtr,
*NotePadPtr,
*ProxyBindIpAddressPtr,
*ProxyChainCredPtr,
*ProxyChainHostPortPtr,
*ProxyReverseLocationPtr,
*ProxyReworkPtr,
*ProxyTunnelRequestPtr,
*QueryStringPtr,
*ResponseCspPtr,
*ResponseCsproPtr,
*ResponseHeaderAddPtr,
*ResponseStrictTransSecPtr,
*ScriptAgentAsPtr,
*ScriptAsPtr,
*ScriptCommandPtr,
*ScriptControlPtr,
*ScriptDefaultPtr,
*ScriptParamsPtr,
*SsiExecPtr,
*StyleSheetPtr,
*WebDavMetaDirPtr;
char *ProxyHeader [MAPURL_PROXY_HEADER_MAX];
char DirSort [3];
IPADDRESS ProxyBindIpAddress,
ProxyChainIpAddress;
char CgiPlusInCC [4];
};
typedef struct MappingRuleMetaStruct MAP_RULE_META;
struct MappingRuleMetaStruct
{
BOOL IsCgiPlusScript,
PathSet;
int MetaConNumber,
ResultLength,
ResultPathOds,
RuleType;
char *ConditionalPtr,
*ResultPtr,
*TemplatePtr;
/* storage for pre-compiled regular expression */
regex_t RegexPregTemplate;
MAP_SET_META mpPathSet;
/* strings are stored straight after and pointed to by the above */
char Storage[];
};
typedef struct MappingMetaStruct MAPPING_META;
struct MappingMetaStruct
{
int ThrottleIndex,
ThrottlePerUserTotal,
ThrottleTotal;
REQUEST_STRUCT *RequestPtr;
};
#define MAPURL_USER_NAME_SIZE 12
#define MAPURL_USER_DEFDEV_SIZE 31
#define MAPURL_USER_DEFDIR_SIZE 63
#define MAPURL_USER_PATH_SIZE MAPURL_USER_DEFDEV_SIZE + MAPURL_USER_DEFDIR_SIZE
typedef struct MapUrlUserCacheStruct MAP_URL_USER_ENTRY;
struct MapUrlUserCacheStruct
{
LIST_ENTRY UserCacheListEntry;
int HitCount,
PathOds,
ReuseCount;
int64 LastTime64;
char UserName [MAPURL_USER_NAME_SIZE+1],
UserPath [MAPURL_USER_PATH_SIZE+1];
};
#pragma member_alignment __restore
/***********************/
/* function prototypes */
/***********************/
/* "quick and dirty" return path equivalent of VMS file specification */
#define MapVmsPath(vp,rp) \
MapUrl_Map (NULL, 0, vp, 0, NULL, 0, NULL, 0, NULL, 0, NULL, rp, NULL)
/* (re)load the mappings */
#define MapUrl_Load() \
MapUrl_Map (NULL,0,NULL,0,NULL,0,NULL,0,NULL,0,NULL,NULL,NULL)
/************/
/* MAPURL.C */
/************/
char* MapUrl_Map (char*, int, char*, int, char*, int, char*, int, char*, int,
int*, REQUEST_STRUCT*, REQUEST_PATHSET*);
char* MapUrl__Map (char*, int, char*, int, char*, int, char*, int, char*, int,
int*, REQUEST_STRUCT*, REQUEST_PATHSET*);
int MapUrl_ConfigLoad (META_CONFIG**);
BOOL MapUrl_ConfigLoadCallBack (META_CONFIG*);
MapUrl_ConfigUnload (META_CONFIG*);
MapUrl_ConfigUnloadLineData (void*);
MapUrl_ControlReload ();
char* MapUrl_GuaranteeAccess (REQUEST_STRUCT*, char*);
char* MapUrl_ReportMessage (struct MappingRuleListStruct*, char*, int);
void MapUrl_ResetClientAddress (REQUEST_STRUCT*);
char* MapUrl_SetClientAddress (REQUEST_STRUCT*);
int MapUrl_SetSeconds (struct MappingRuleListStruct*, char*, int);
char* MapUrl_Substitute (REQUEST_STRUCT*, char*);
MAP_RULE_META* MapUrl_ThrottleRule (int);
MapUrl_ConfigParseValue (char*);
int MapUrl_VirtualPath (char*, char*, char*, int);
MapUrl_WatchRule (REQUEST_STRUCT*, MAP_RULE_META*, METACON_LINE*,
char*, int, int, BOOL);
/************/
/* MAPCON.C */
/************/
BOOL MapConList (REQUEST_STRUCT*, char*, char*);
BOOL MapConString (REQUEST_STRUCT*, MAP_RULE_META*, REQUEST_PATHSET*);
/************/
/* MAPODS.C */
/************/
int MapOds2VmsToUrl (char*, char*, int, BOOL);
int MapOds5VmsToUrl (char*, char*, int, BOOL);
int MapOdsAdsVmsToUrl (char*, char*, int, BOOL);
char* MapOdsAdsFileType (char*);
int MapOdsElementsToVms (char*, int, char*, int, BOOL);
int MapOdsPwkVmsToUrl (char*, char*, int, BOOL);
char MapOdsSriCharVmsToUrl (char**, BOOL*);
char* MapOdsSriFileType (char*);
int MapOdsSriVmsToUrl (char*, char*, int, BOOL);
int MapOdsUrlToVms (char*, char*, int, char, BOOL, int);
int MapOdsUrlToAdsVms (char*, char*, int, BOOL);
int MapOdsUrlToPwkVms (char*, char*, int, BOOL);
int MapOdsUrlToSriVms (char*, char*, int, BOOL);
int MapOdsUrlToOds2Vms (char*, char*, int, BOOL, char);
int MapOdsUrlToOds5Vms (char*, char*, int, BOOL);
int MapOdsVmsToUrl (char*, char*, int, BOOL, int);
int MapOdsVmsToUnix (char*, char*, int);
/************/
/* MAPSET.C */
/************/
BOOL MapSetConfig (char*, char*, META_CONFIG*, MAP_SET_META*, BOOL*);
char* MapSetExplain (REQUEST_STRUCT*, MAP_RULE_META*);
int MapSetPath (REQUEST_STRUCT*, REQUEST_PATHSET*, MAP_SET_META*);
/*************/
/* MAPUSER.C */
/*************/
char* MapUserName (REQUEST_STRUCT*, char*, int*);
char* MapUserNameCache (REQUEST_STRUCT*, char*, char*, int*);
#endif /* MAPURL_H_LOADED */
/*****************************************************************************/