Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

623 lines
13 KiB

  1. /*++
  2. Copyright (c) 1994-2002 Microsoft Corporation
  3. Module Name :
  4. w3sht.h
  5. Abstract:
  6. WWW Property Sheet Definitions
  7. Author:
  8. Ronald Meijer (ronaldm)
  9. Sergei Antonov (sergeia)
  10. Project:
  11. Internet Services Manager
  12. Revision History:
  13. --*/
  14. #ifndef __W3SHT_H__
  15. #define __W3SHT_H__
  16. #include "shts.h"
  17. extern const LPCTSTR g_cszSvc;
  18. //
  19. // Helper function to determine if SSL is installed
  20. // and enabled on the given server
  21. //
  22. DWORD
  23. IsSSLEnabledOnServer(
  24. IN CComAuthInfo * pAuthInfo,
  25. OUT BOOL & fInstalled,
  26. OUT BOOL & fEnabled
  27. );
  28. //
  29. // Helper function to see if a certificate is installed
  30. //
  31. BOOL
  32. IsCertInstalledOnServer(
  33. IN CComAuthInfo * pAuthInfo,
  34. IN LPCTSTR lpszMDPath
  35. );
  36. #ifndef LOGGING_ENABLED
  37. #define LOGGING_ENABLED
  38. inline BOOL LoggingEnabled(
  39. IN DWORD dwLogType
  40. )
  41. {
  42. return (dwLogType == MD_LOG_TYPE_ENABLED);
  43. }
  44. #endif
  45. #ifndef ENABLE_LOGGING
  46. #define ENABLE_LOGGING
  47. inline void EnableLogging(
  48. OUT DWORD & dwLogType,
  49. IN BOOL fEnabled = TRUE
  50. )
  51. {
  52. dwLogType = fEnabled ? MD_LOG_TYPE_ENABLED : MD_LOG_TYPE_DISABLED;
  53. }
  54. #endif
  55. //
  56. // Bandwidth definitions
  57. //
  58. #define INFINITE_BANDWIDTH (0xffffffff)
  59. #define INFINITE_CPU_RAW (0xffffffff)
  60. #define KILOBYTE (1024L)
  61. #define MEGABYTE (1024L * KILOBYTE)
  62. #define DEF_BANDWIDTH (1 * MEGABYTE)
  63. #define CPU_THROTTLING_FACTOR (1000)
  64. #define DEFAULT_CPU_PERCENTAGE (10L)
  65. //
  66. // Some sanity values on max connections
  67. //
  68. #define INITIAL_MAX_CONNECTIONS ( 1000L)
  69. // TODO: Check these limits
  70. //#define UNLIMITED_CONNECTIONS (2000000000L)
  71. #define UNLIMITED_CONNECTIONS (0xFFFFFFFF)
  72. #define MAX_MAX_CONNECTIONS (UNLIMITED_CONNECTIONS - 1L)
  73. #define MAX_TIMEOUT (0x7FFFFFFF)
  74. class CW3InstanceProps : public CInstanceProps
  75. /*++
  76. Class Description:
  77. WWW Instance properties class
  78. Public Interface:
  79. CW3InstanceProps : Constructor
  80. --*/
  81. {
  82. public:
  83. CW3InstanceProps(
  84. IN CComAuthInfo * pAuthInfo,
  85. IN LPCTSTR lpszMDPath
  86. );
  87. ~CW3InstanceProps();
  88. public:
  89. //
  90. // Write Data if dirty
  91. //
  92. virtual HRESULT WriteDirtyProps();
  93. protected:
  94. //
  95. // Break out GetAllData() data to data fields
  96. //
  97. virtual void ParseFields();
  98. public:
  99. //
  100. // Service Page
  101. //
  102. MP_DWORD m_dwLogType;
  103. MP_CILong m_nConnectionTimeOut;
  104. MP_CStringListEx m_strlSecureBindings;
  105. //
  106. // Performance Page
  107. //
  108. MP_int m_nServerSize;
  109. MP_BOOL m_fUseKeepAlives;
  110. MP_CILong m_dwMaxBandwidth;
  111. MP_CILong m_dwMaxGlobalBandwidth;
  112. MP_CILong m_nMaxConnections;
  113. //
  114. // Operators Page
  115. //
  116. MP_CBlob m_acl;
  117. //
  118. // Root dir page
  119. //
  120. //MP_BOOL m_fFrontPage;
  121. //
  122. // Default Site page
  123. //
  124. MP_DWORD m_dwDownlevelInstance;
  125. //
  126. // Certificate and CTL information
  127. //
  128. MP_CBlob m_CertHash;
  129. MP_CString m_strCertStoreName;
  130. MP_CString m_strCTLIdentifier;
  131. MP_CString m_strCTLStoreName;
  132. };
  133. class CW3DirProps : public CChildNodeProps
  134. /*++
  135. Class Description:
  136. WWW Directory Properties
  137. Public Interface:
  138. CW3DirProps : Constructor
  139. --*/
  140. {
  141. public:
  142. //
  143. // Constructor
  144. //
  145. CW3DirProps(
  146. IN CComAuthInfo * pAuthInfo,
  147. IN LPCTSTR lpszMDPath
  148. );
  149. public:
  150. //
  151. // Write Data if dirty
  152. //
  153. virtual HRESULT WriteDirtyProps();
  154. protected:
  155. //
  156. // Break out GetAllData() data to data fields
  157. //
  158. virtual void ParseFields();
  159. public:
  160. //
  161. // Directory properties page
  162. //
  163. MP_CString m_strUserName;
  164. MP_CStrPassword m_strPassword;
  165. MP_CString m_strDefaultDocument;
  166. MP_CString m_strFooter;
  167. MP_CMaskedDWORD m_dwDirBrowsing;
  168. MP_BOOL m_fDontLog;
  169. MP_BOOL m_fEnableFooter;
  170. MP_BOOL m_fIndexed;
  171. //
  172. // HTTP Page
  173. //
  174. MP_CString m_strExpiration;
  175. MP_CStringListEx m_strlCustomHeaders;
  176. //
  177. // Custom Errors
  178. //
  179. MP_CStringListEx m_strlCustomErrors;
  180. //
  181. // Security page
  182. //
  183. MP_DWORD m_dwAuthFlags;
  184. MP_DWORD m_dwSSLAccessPermissions;
  185. MP_CString m_strBasicDomain;
  186. MP_CString m_strRealm;
  187. MP_CString m_strAnonUserName;
  188. MP_CStrPassword m_strAnonPassword;
  189. MP_BOOL m_fPasswordSync;
  190. MP_BOOL m_fU2Installed;
  191. MP_BOOL m_fUseNTMapper;
  192. MP_CBlob m_ipl;
  193. };
  194. #define MD_FILTER_STATE_UNDEFINED 0
  195. class CIISFilter : public CObjectPlus
  196. /*++
  197. Class Description:
  198. A single filter description
  199. Public Interface:
  200. CIISFilter : Constructors
  201. IsInitialized : Check to see if the name is set.
  202. Write : Write to the metabase.
  203. QueryResult : Query result from metabase read
  204. QueryError : Returns error as stored in metabase
  205. QueryName : Returns filter name
  206. IsLoaded : TRUE if filter is loaded
  207. IsUnloaded : TRUE if filter is unloaded
  208. IsEnabled : TRUE if filter is enabled
  209. Enable : Enable filter
  210. IsDirty : TRUE if filter values have changed
  211. IsFlaggedForDeletion : TRUE if filter should be deleted
  212. --*/
  213. {
  214. //
  215. // Constructors/Destructors
  216. //
  217. public:
  218. //
  219. // Null Constructor
  220. //
  221. CIISFilter();
  222. //
  223. // Read filter values using provided key
  224. //
  225. CIISFilter(
  226. IN CMetaKey * pKey,
  227. IN LPCTSTR lpszName
  228. );
  229. //
  230. // Copy constructor
  231. //
  232. CIISFilter(
  233. IN const CIISFilter & flt
  234. );
  235. public:
  236. //
  237. // Sorting helper
  238. //
  239. int OrderByPriority(
  240. IN const CObjectPlus * pobAccess
  241. ) const;
  242. BOOL IsInitialized() const { return !m_strName.IsEmpty(); }
  243. //
  244. // Write using provided key
  245. //
  246. HRESULT Write(CMetaKey * pKey);
  247. public:
  248. BOOL IsLoaded() const;
  249. BOOL IsUnloaded() const;
  250. BOOL IsEnabled() const { return m_fEnabled; }
  251. void Enable(BOOL fEnabled = TRUE);
  252. DWORD QueryError() const { return m_dwWin32Error; }
  253. HRESULT QueryResult() const { return m_hrResult; }
  254. //
  255. // Check to see if this item is marked as dirty
  256. //
  257. BOOL IsDirty() const { return m_fDirty; }
  258. //
  259. // Check to see if this item is flagged for deletion
  260. //
  261. BOOL IsFlaggedForDeletion() const { return m_fFlaggedForDeletion; }
  262. //
  263. // Set/reset the dirty flag
  264. //
  265. void Dirty(BOOL fDirty = TRUE);
  266. //
  267. // Flag this item for deletion
  268. //
  269. void FlagForDeletion();
  270. //
  271. // Get the name of this filter
  272. //
  273. LPCTSTR QueryName() const { return m_strName; }
  274. //
  275. // Meta Values
  276. //
  277. public:
  278. int m_nPriority;
  279. int m_nOrder;
  280. BOOL m_fEnabled;
  281. DWORD m_dwState;
  282. DWORD m_dwWin32Error;
  283. HRESULT m_hrResult;
  284. CString m_strName;
  285. CString m_strExecutable;
  286. //
  287. // State Values
  288. //
  289. private:
  290. BOOL m_fDirty;
  291. BOOL m_fFlaggedForDeletion;
  292. DWORD m_dwFlags;
  293. };
  294. class CIISFilterList : public CMetaKey
  295. /*++
  296. Class Description:
  297. A list of filters
  298. Public Interface:
  299. CIISFilterList : Constructor
  300. BeginSearch : Reset the iterator
  301. MoreFilters : More items available in the list?
  302. GetNextFilter : Get the next item in the list
  303. --*/
  304. {
  305. public:
  306. CIISFilterList(
  307. IN CComAuthInfo * pAuthInfo,
  308. IN LPCTSTR lpszMetaPath
  309. /*
  310. IN LPCTSTR lpszServerName,
  311. IN LPCTSTR lpszService,
  312. IN DWORD dwInstance = MASTER_INSTANCE
  313. */
  314. );
  315. public:
  316. //
  317. // Write out the filter list
  318. //
  319. HRESULT WriteIfDirty();
  320. //
  321. // Acccess Functions
  322. //
  323. public:
  324. //DWORD QueryInstance() const { return m_dwInstance; }
  325. BOOL FiltersLoaded() const { return m_fFiltersLoaded; }
  326. //
  327. // Load each filter in turn
  328. //
  329. HRESULT LoadAllFilters();
  330. //
  331. // Filter Access Functions
  332. //
  333. public:
  334. //
  335. // Reset the filter list iterator
  336. //
  337. void ResetEnumerator();
  338. int GetCount() const { return (int)m_oblFilters.GetCount(); }
  339. //
  340. // More filters available in the list?
  341. //
  342. BOOL MoreFilters() const { return m_pos != NULL; }
  343. //
  344. // Return position of filter by index
  345. //
  346. POSITION GetFilterPositionByIndex(int nSel);
  347. //
  348. // Iterate to the next filter in the list
  349. //
  350. CIISFilter * GetNextFilter();
  351. //
  352. // Remove filter
  353. //
  354. void RemoveFilter(int nItem);
  355. //
  356. // Add new filter
  357. //
  358. void AddFilter(CIISFilter * pFilter);
  359. //
  360. // Exchange two filters in the list
  361. //
  362. BOOL ExchangePositions(
  363. IN int nSel1,
  364. IN int nSel2,
  365. OUT CIISFilter *& p1,
  366. OUT CIISFilter *& p2
  367. );
  368. //
  369. // See if at least one filter is dirty
  370. //
  371. BOOL HasDirtyFilter() const;
  372. //
  373. // Virtual Interface:
  374. //
  375. public:
  376. virtual BOOL Succeeded() const { return SUCCEEDED(m_hrResult); }
  377. virtual HRESULT QueryResult() const { return m_hrResult; }
  378. protected:
  379. //
  380. // Build up order string from component list
  381. //
  382. LPCTSTR BuildFilterOrderString(
  383. OUT CString & strFilterOrder
  384. );
  385. protected:
  386. //
  387. // Seperator string (one character)
  388. //
  389. static const LPCTSTR s_lpszSep;
  390. private:
  391. BOOL m_fFiltersLoaded;
  392. //DWORD m_dwInstance;
  393. POSITION m_pos;
  394. HRESULT m_hrResult;
  395. CString m_strFilterOrder;
  396. CObListPlus m_oblFilters;
  397. };
  398. //
  399. // W3 Property sheet
  400. //
  401. // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  402. class CW3Sheet : public CInetPropertySheet
  403. {
  404. public:
  405. CW3Sheet(
  406. IN CComAuthInfo * pAuthInfo,
  407. IN LPCTSTR lpszMetaPath,
  408. IN DWORD dwAttributes,
  409. IN CWnd * pParentWnd = NULL,
  410. IN LPARAM lParam = 0L,
  411. IN LPARAM lParamParent= 0L,
  412. IN UINT iSelectPage = 0
  413. );
  414. virtual ~CW3Sheet();
  415. public:
  416. HRESULT QueryInstanceResult() const;
  417. HRESULT QueryDirectoryResult() const;
  418. CW3InstanceProps & GetInstanceProperties() { return *m_ppropInst; }
  419. CW3DirProps & GetDirectoryProperties() { return *m_ppropDir; }
  420. BOOL InCompatibilityMode() const { return m_fCompatMode; }
  421. virtual HRESULT LoadConfigurationParameters();
  422. virtual void FreeConfigurationParameters();
  423. HRESULT EnumAppPools(CStringListEx& pools);
  424. HRESULT SetKeyType();
  425. HRESULT QueryDefaultPoolId(CString& id);
  426. enum
  427. {
  428. SHEET_TYPE_SERVER,
  429. SHEET_TYPE_SITE,
  430. SHEET_TYPE_VDIR,
  431. SHEET_TYPE_DIR,
  432. SHEET_TYPE_FILE
  433. };
  434. HRESULT SetSheetType(int fSheetType);
  435. protected:
  436. virtual void WinHelp(DWORD dwData, UINT nCmd = HELP_CONTEXT);
  437. //{{AFX_MSG(CW3Sheet)
  438. //}}AFX_MSG
  439. DECLARE_MESSAGE_MAP()
  440. private:
  441. DWORD m_fNew;
  442. DWORD m_dwAttributes;
  443. BOOL m_fCompatMode;
  444. CW3InstanceProps * m_ppropInst;
  445. CW3DirProps * m_ppropDir;
  446. int m_fSheetType;
  447. };
  448. //
  449. // Inline Expansion
  450. //
  451. // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  452. inline BOOL CIISFilter::IsLoaded() const
  453. {
  454. return m_dwState == MD_FILTER_STATE_LOADED;
  455. }
  456. inline BOOL CIISFilter::IsUnloaded() const
  457. {
  458. return m_dwState == MD_FILTER_STATE_UNLOADED;
  459. }
  460. inline void CIISFilter::Enable(
  461. IN BOOL fEnabled
  462. )
  463. {
  464. m_fEnabled = fEnabled;
  465. }
  466. inline void CIISFilter::Dirty(
  467. IN BOOL fDirty
  468. )
  469. {
  470. m_fDirty = fDirty;
  471. }
  472. inline void CIISFilter::FlagForDeletion()
  473. {
  474. m_fFlaggedForDeletion = TRUE;
  475. }
  476. inline void CIISFilterList::ResetEnumerator()
  477. {
  478. m_pos = m_oblFilters.GetHeadPosition();
  479. }
  480. inline CIISFilter * CIISFilterList::GetNextFilter()
  481. {
  482. return (CIISFilter *)m_oblFilters.GetNext(m_pos);
  483. }
  484. inline void CIISFilterList::RemoveFilter(int nItem)
  485. {
  486. m_oblFilters.RemoveIndex(nItem);
  487. }
  488. inline void CIISFilterList::AddFilter(CIISFilter * pFilter)
  489. {
  490. m_oblFilters.AddTail(pFilter);
  491. }
  492. //
  493. // BUGBUG: Returns S_OK if object not present
  494. //
  495. inline HRESULT CW3Sheet::QueryInstanceResult() const
  496. {
  497. return m_ppropInst ? m_ppropInst->QueryResult() : S_OK;
  498. }
  499. inline HRESULT CW3Sheet::QueryDirectoryResult() const
  500. {
  501. return m_ppropDir ? m_ppropDir->QueryResult() : S_OK;
  502. }
  503. #endif // __W3SHT_H__