[0001]
[0002]
[0003]
[0004]
[0005]
[0006]
[0007]
[0008]
[0009]
[0010]
[0011]
[0012]
[0013]
[0014]
[0015]
[0016]
[0017]
[0018]
[0019]
[0020]
[0021]
[0022]
[0023]
[0024]
[0025]
[0026]
[0027]
[0028]
[0029]
[0030]
[0031]
[0032]
[0033]
[0034]
[0035]
[0036]
[0037]
[0038]
[0039]
[0040]
[0041]
[0042]
[0043]
[0044]
[0045]
[0046]
[0047]
[0048]
[0049]
[0050]
[0051]
[0052]
[0053]
[0054]
[0055]
[0056]
[0057]
[0058]
[0059]
[0060]
[0061]
[0062]
[0063]
[0064]
[0065]
[0066]
[0067]
[0068]
[0069]
[0070]
[0071]
[0072]
[0073]
[0074]
[0075]
[0076]
[0077]
[0078]
[0079]
[0080]
[0081]
[0082]
[0083]
[0084]
[0085]
[0086]
[0087]
[0088]
[0089]
[0090]
[0091]
[0092]
[0093]
[0094]
[0095]
[0096]
[0097]
[0098]
[0099]
[0100]
[0101]
[0102]
[0103]
[0104]
[0105]
[0106]
[0107]
[0108]
[0109]
[0110]
[0111]
[0112]
[0113]
[0114]
[0115]
[0116]
[0117]
[0118]
[0119]
[0120]
[0121]
[0122]
[0123]
[0124]
[0125]
[0126]
[0127]
[0128]
[0129]
[0130]
[0131]
[0132]
[0133]
[0134]
[0135]
[0136]
[0137]
[0138]
[0139]
[0140]
[0141]
[0142]
[0143]
[0144]
[0145]
[0146]
[0147]
[0148]
[0149]
[0150]
[0151]
[0152]
[0153]
[0154]
[0155]
[0156]
[0157]
[0158]
[0159]
[0160]
[0161]
[0162]
[0163]
[0164]
[0165]
[0166]
[0167]
[0168]
[0169]
[0170]
[0171]
[0172]
[0173]
[0174]
[0175]
[0176]
[0177]
[0178]
[0179]
[0180]
[0181]
[0182]
[0183]
[0184]
[0185]
[0186]
[0187]
[0188]
[0189]
[0190]
[0191]
[0192]
[0193]
[0194]
[0195]
[0196]
[0197]
[0198]
[0199]
[0200]
[0201]
[0202]
[0203]
[0204]
[0205]
[0206]
[0207]
[0208]
[0209]
[0210]
[0211]
[0212]
[0213]
[0214]
[0215]
[0216]
[0217]
[0218]
[0219]
[0220]
[0221]
[0222]
[0223]
[0224]
[0225]
[0226]
[0227]
[0228]
[0229]
[0230]
[0231]
[0232]
[0233]
[0234]
[0235]
[0236]
[0237]
[0238]
[0239]
[0240]
[0241]
[0242]
[0243]
[0244]
[0245]
[0246]
[0247]
[0248]
[0249]
[0250]
[0251]
[0252]
[0253]
[0254]
[0255]
[0256]
[0257]
[0258]
[0259]
[0260]
[0261]
[0262]
[0263]
[0264]
[0265]
[0266]
[0267]
[0268]
[0269]
[0270]
[0271]
[0272]
[0273]
[0274]
[0275]
[0276]
[0277]
[0278]
[0279]
[0280]
[0281]
[0282]
[0283]
[0284]
[0285]
[0286]
[0287]
[0288]
[0289]
[0290]
[0291]
[0292]
[0293]
[0294]
[0295]
[0296]
[0297]
[0298]
[0299]
[0300]
[0301]
[0302]
[0303]
[0304]
[0305]
[0306]
[0307]
[0308]
[0309]
[0310]
[0311]
[0312]
[0313]
[0314]
[0315]
[0316]
[0317]
[0318]
[0319]
[0320]
[0321]
[0322]
[0323]
[0324]
[0325]
[0326]
[0327]
[0328]
[0329]
[0330]
[0331]
[0332]
[0333]
[0334]
[0335]
[0336]
[0337]
[0338]
[0339]
[0340]
[0341]
[0342]
[0343]
[0344]
[0345]
[0346]
[0347]
[0348]
[0349]
[0350]
[0351]
[0352]
[0353]
[0354]
[0355]
[0356]
[0357]
[0358]
[0359]
[0360]
[0361]
[0362]
[0363]
[0364]
[0365]
[0366]
[0367]
[0368]
[0369]
[0370]
[0371]
[0372]
[0373]
[0374]
[0375]
[0376]
[0377]
[0378]
[0379]
[0380]
[0381]
[0382]
[0383]
[0384]
[0385]
[0386]
[0387]
[0388]
[0389]
[0390]
[0391]
[0392]
[0393]
[0394]
[0395]
[0396]
[0397]
[0398]
[0399]
[0400]
[0401]
[0402]
[0403]
[0404]
[0405]
[0406]
[0407]
[0408]
[0409]
[0410]
[0411]
[0412]
[0413]
[0414]
[0415]
[0416]
[0417]
[0418]
[0419]
[0420]
[0421]
[0422]
[0423]
[0424]
[0425]
[0426]
[0427]
[0428]
[0429]
[0430]
[0431]
[0432]
[0433]
[0434]
[0435]
[0436]
[0437]
[0438]
[0439]
[0440]
[0441]
[0442]
[0443]
[0444]
[0445]
[0446]
[0447]
[0448]
[0449]
[0450]
[0451]
[0452]
[0453]
[0454]
[0455]
[0456]
[0457]
[0458]
[0459]
[0460]
[0461]
[0462]
[0463]
[0464]
[0465]
[0466]
[0467]
[0468]
[0469]
[0470]
[0471]
[0472]
[0473]
[0474]
[0475]
[0476]
[0477]
[0478]
[0479]
[0480]
[0481]
[0482]
[0483]
[0484]
[0485]
[0486]
[0487]
[0488]
[0489]
[0490]
[0491]
[0492]
[0493]
[0494]
[0495]
[0496]
[0497]
[0498]
[0499]
[0500]
[0501]
[0502]
[0503]
/*****************************************************************************/
/*
                                  Config.h

Function prototypes for configuration module.

*/
/*****************************************************************************/

#ifndef CONFIG_H_LOADED
#define CONFIG_H_LOADED 1

#ifndef ODSSTRUCT_H_LOADED
#   include "odsstruct.h"
#endif

#include "wasd.h"
#include "metacon.h"

/* must be powers of two! */
#define CONTENT_TYPE_HASH_TABLE_SIZE  128
#define CONTENT_TYPE_HASH_TABLE_MASK  CONTENT_TYPE_HASH_TABLE_SIZE-1
#define ICON_HASH_TABLE_SIZE          64
#define ICON_HASH_TABLE_MASK          ICON_HASH_TABLE_SIZE-1

/**********************************/
/* config authorization structure */
/**********************************/

struct ConfigAuthStruct
{
   BOOL  BasicEnabled,
         DigestEnabled,
         SysUafAcceptExpPwd,
         SysUafUseACME;
   int  CacheEntriesMax,
        CacheEntrySize,
        CacheMinutes,
        DigestNonceGetLifeTime,
        DigestNoncePutLifeTime,
        FailureLimit,
        FailurePeriodSeconds,
        FailureTimeoutSeconds,
        RevalidateUserMinutes,
        SysUafLogonType,
        TokenEntriesMax;
        char  SysUafPwdExpUrl [128];
};

/********************************/
/* config buffer size structure */
/********************************/

struct ConfigBufferStruct
{
   int  QuotaDclOutput,
        SizeDclCommand,
        SizeDclOutput,
        SizeDclCgiHeader,
        SizeDclCgiPlusIn,
        SizeNetFile,
        SizeNetMTU,
        SizeNetRead,
        SizeNetWrite,
        SizeSocketSndBuf,
        SizeSocketRcvBuf;
};

/**************************/
/* config cache structure */
/**************************/

struct ConfigCacheStruct
{
   BOOL  Enabled;
   int  EntriesMax,
        FileKBytesMax,
        FrequentHits,
        FrequentSeconds,
        GuardSeconds,
        TotalKBytesMax,
        ValidateSeconds;
};

/****************************/
/* config content structure */
/****************************/

typedef struct ContentTypeStruct CONTENT_TYPE;

struct ContentTypeStruct
{
   CONTENT_TYPE  *NextPtr,
                 *HashCollisionPtr;
   BOOL  FromMimeTypes,
         Superceded,
         TypeText,
         TypeUnknown;
   int  PutRFM;
   char  FtpMode;
   char  *AutoScriptNamePtr,
         *ContentTypePtr,
         *DescriptionPtr,
         *IconPtr,
         *SuffixPtr;
   /* string data is stored here */
};

typedef struct IconTypeStruct ICON_TYPE;

struct IconTypeStruct
{
   struct IconTypeStruct  *NextPtr,
                          *HashCollisionPtr;
   BOOL  FromMimeTypes,
         Superceded;
   char  *AltTextPtr,
         *ContentTypePtr,
         *IconUriPtr,
         *IconUrlPtr;
   /* string data is stored here */
};

struct ConfigContentStruct
{
   int  CharsetConvertLength,
        ContentTypeStructOverhead,
        HomePageCount,
        IconStructOverhead;
   char  *CharsetConvertPtr,
         *ContentTypeDefaultPtr;
   char  CharsetDefault [32],
         MimeTypesFileName [128];
   char  *HomePageArray [CONFIG_HOME_PAGES_MAX];
   CONTENT_TYPE  *ContentInfoListHeadPtr,
                 *ContentInfoListTailPtr;
   ICON_TYPE  *IconListHeadPtr,
              *IconListTailPtr;
   CONTENT_TYPE  *ContentInfoHashTable [CONTENT_TYPE_HASH_TABLE_SIZE];
   ICON_TYPE  *IconHashTable [ICON_HASH_TABLE_SIZE];
};

/************************/
/* config dir structure */
/************************/

struct ConfigDirStruct
{
   BOOL  Access,
         AccessSelective,
         MetaInfoEnabled,
         NoImpliedWildcard,
         NoPrivIgnore,
         OwnerEnabled,
         PreExpired,
         ReadMeBottom,
         ReadMeTop,
         WildcardEnabled;
   int  DescriptionLines,
        ReadMeFileCount;
   char  DefaultLayout [32],
         BodyTag [256];
   char  *ReadMeFileArray [CONFIG_README_FILES_MAX];
};

/***************************/
/* config HTTP/2 structure */
/***************************/

struct ConfigHttp2Struct
{
   BOOL  Enabled;
   int  InitialWindowSize,
        MaxConcurrentStreams,
        MaxFrameSize,
        MaxHeaderListSize,
        MaxHeaderTableSize,
        PingTimerSeconds;
};

/****************************/
/* config logging structure */
/****************************/

struct ConfigLogStruct
{
   BOOL  Enabled,
         PerInstance,
         PerService,
         PerServiceHostOnly,
         WriteFail503;
   int  ExcludeHostsLength,
        ExtendBlocks;
   char  *ExcludeHostsPtr;
   char  FileName [128],
         Format [128],
         Naming [32],
         Period [32];
};

/**********************************/
/* config miscellaneous structure */
/**********************************/

struct ConfigMiscStruct
{
   BOOL  DnsLookupClient,
         EntityTag,
         HttpTraceEnabled,
         MonitorEnabled,
         PipelineRequests,
         RegexSyntax;
   int  ActivityNumberOfDays,
        DnsLookupLifeTimeSeconds,
        DnsLookupRetryCount,
        GzipAcceptWindowBits,
        GzipFlushSeconds,
        GzipFlushInitialSeconds,
        GzipResponseCompLevel,
        GzipResponseMemLevel,
        GzipResponseWindowBits,
        MapUserNameCacheEntries,
        PersonaCacheEntries,
        PutBinaryRFM,
        PutMaxKbytes,
        PutVersionLimit,
        RequestHistory,
        StreamLfConversionMaxKbytes,
        WwwImplied;
};


/**************************/
/* config OPCOM structure */
/**************************/

struct ConfigOpcomStruct
{
   int  Index,
        Messages,
        Target;
};

/**********************************/
/* config proxy serving structure */
/**********************************/

struct ConfigProxyStruct
{
   BOOL  ReportCacheLog,
         ReportLog,
         ServingEnabled,
         UnknownRequestFields;
   int  ConnectPersistMax,
        ConnectPersistSeconds,
        ConnectTimeoutSeconds,
        ForwardedBy,
        HostLookupRetryCount,
        VerifyRecordMax,
        XForwardedFor;
};

/***************************/
/* config report structure */
/***************************/

struct ConfigReportStruct
{
   BOOL  ErrorRecommend,
         BasicOnly,
         MetaInfoEnabled;
   int  ErrorReportPathLength;
   char  ErrorReportPath [128];
};

/****************************/
/* config proctor structure */
/****************************/

typedef struct ConfigProctorStruct PROCTOR_STRUCT;

struct ConfigProctorStruct
{
   BOOL  Problem;

   int  FailWeight,
        NotePadLength,
        NumberMin,
        NumberIdle,
        TotalMin,
        TotalIdle,
        TotalFail;

   int64  LastTime64,
          LastFailTime64;

   char  *ActivatePtr,
         *NotePadPtr,
         *RunTimePtr,
         *ScriptPtr,
         *VmPtr;

   char  FailReason [64];
};

/******************************/
/* config scripting structure */
/******************************/

struct ConfigRunTimeStruct
{
   int  FileTypeLength;
   char  *StringPtr;
};

struct ConfigScriptStruct
{
   BOOL  CgiStrictOutput,
         DetachProcess,
         Enabled,
         FullRequest,
         GatewayBg,
         SpawnAuthPriv;
   int  BitBucketTimeout,
        CgiPlusLifeTime,
        CleanupScratchMinutesMax,
        CleanupScratchMinutesOld,
        DECnetConnectListMax,
        DECnetReuseLifeTime,
        DefaultSearchLength,
        DefaultSearchExcludeLength,
        ProctorCount,
        RunTimeCount,
        ScriptProcessHardLimit,
        ScriptProcessSoftLimit,
        ZombieLifeTime;
   char  *DefaultSearchExcludePtr;
   char  DetachProcessPriority [32],
         DefaultSearch [128];
   struct ConfigProctorStruct Proctor  [CONFIG_SCRIPT_PROCTOR_MAX];
   struct ConfigRunTimeStruct RunTime  [CONFIG_SCRIPT_RUNTIME_MAX];
};

/***************************/
/* config server structure */
/***************************/

struct ConfigServerStruct
{
   BOOL  InstancePassive;
   int  AcceptHostsLength,
        ConnectMax,
        DefaultPort,
        InstanceMax,
        ListenBacklog,
        ProcessMax,
        RejectHostsLength,
        Signature,
        ServiceLength;
   char  *AcceptHostsPtr,
         *RejectHostsPtr,
         *ServicePtr;
   char  AdminEmail [64],
         AdminBodyTag [256],
         ReportBodyTag [256],
         ServiceNotFoundUrl [128];
};

/***********************************/
/* config Secure Sockets structure */
/***********************************/

struct ConfigSesolaStruct
{
   BOOL  Disabled,
         VerifyPeer;
   char  ProtocolVersion [128],
         ProtocolOptions [256],
         CipherList [1024],
         ServerCert [128],
         StrictTransSec [48],
         PrivateKey [128],
         VerifyPeerCAFile [128];
   int  InstanceSessionCacheMax,
        InstanceSessionCacheSize,
        SessionCacheMax,
        SessionLifetime,
        VerifyPeerDataMax,
        VerifyPeerDepth;
};

/*****************************************/
/* config Server Side Includes structure */
/*****************************************/

struct ConfigSsiStruct
{
   BOOL  Enabled,
         AccessesEnabled,
         ExecEnabled;
   int  SizeMax;
};

/****************************/
/* config timeout structure */
/****************************/

struct ConfigTimeoutStruct
{
   int  Http2Idle,
        Input,
        NoProgress,
        Output,
        Persistent;
};

/***************************/
/* config WebDAV structure */
/***************************/

struct ConfigWebDavStruct
{
   BOOL  DavEnabled,
         LockingEnabled,
         QuotaEnabled;
   int  LockCollectionDepth,
        LockTimeoutDefaultSeconds,
        LockTimeoutMaxSeconds,
        MetaFileDirectoryLength;
   char  MetaFileDirectory [64];
};

/***************************/
/* configuration structure */
/***************************/

typedef struct ConfigStruct CONFIG_STRUCT;

struct ConfigStruct
{
   struct ConfigAuthStruct    cfAuth;
   struct ConfigBufferStruct  cfBuffer;
   struct ConfigCacheStruct   cfCache;
   struct ConfigContentStruct cfContent;
   struct ConfigDirStruct     cfDir;
   struct ConfigHttp2Struct   cfHttp2;
   struct ConfigLogStruct     cfLog;
   struct ConfigMiscStruct    cfMisc;
   struct ConfigOpcomStruct   cfOpcom;
   struct ConfigProxyStruct   cfProxy;
   struct ConfigReportStruct  cfReport;
   struct ConfigScriptStruct  cfScript;
   struct ConfigServerStruct  cfServer;
   struct ConfigSesolaStruct  cfSesola;
   struct ConfigSsiStruct     cfSsi;
   struct ConfigTimeoutStruct cfTimeout;
   struct ConfigWebDavStruct   cfWebDav;

   /* basically only used while reading configuration from file */
   BOOL  BracketDirectives,
         IncludeFileDetected,
         EquateDirectives;
   char  DirectiveName [64];
   /* only used when reporting or changing configuration */
   void  *RequestPtr;
};

/***********************/
/* function prototypes */
/***********************/

int ConfigLoad (META_CONFIG**);
BOOL ConfigLoadCallback (META_CONFIG*);
BOOL ConfigAcceptClientHostName (char*, char*);
ConfigAddType (META_CONFIG*, char*);
ConfigAddMimeType (META_CONFIG*, char*);
ConfigAddTypeNow (META_CONFIG*, char*, char*, char*, char*, char, int, BOOL);
char* ConfigStringList (REQUEST_STRUCT*, char*, char);
char* ConfigContentType (CONTENT_TYPE*, char*);
ConfigContentTypeIcon (META_CONFIG*);
char* ConfigHomePage (int);
ConfigAddIcon (META_CONFIG*, char*, char*, BOOL);
char* ConfigIconFor (char*, char**, char**);
char* ConfigReadMeFile (int);
ConfigReport (REQUEST_STRUCT*, BOOL);
ConfigReportNow (REQUEST_STRUCT*, META_CONFIG*);
ConfigReportSecureSocket (REQUEST_STRUCT*, META_CONFIG*);
ConfigRevise (REQUEST_STRUCT*, BOOL);
ConfigReviseNow (REQUEST_STRUCT*, META_CONFIG*);
ConfigReviseSecureSocket (REQUEST_STRUCT*, META_CONFIG*);
BOOL ConfigSameContentType (char*, char*, int);
ConfigSetAccept (META_CONFIG*, char*);
ConfigSetDirReadMe (META_CONFIG*, char*);
ConfigSetDirReadMeFile (META_CONFIG*, char*);
ConfigSetOpcom (META_CONFIG*, char*, char*);
ConfigSetReject (META_CONFIG*, char*);
ConfigSetScriptProctor (META_CONFIG*, char*);
ConfigSetScriptRunTime (META_CONFIG*, char*);
ConfigSetWelcome (META_CONFIG*, char*);

#endif /* CONFIG_H_LOADED */

/*****************************************************************************/