/*++ Copyright (c) 1994-2000 Microsoft Corporation Module Name : pwiz.h Abstract: IIS Security Wizard Author: Ronald Meijer (ronaldm) Sergei Antonov (sergeia) Project: Internet Services Manager Revision History: --*/ #ifndef __IISPWIZ_H__ #define __IISPWIZ_H__ class CBlob; #define NUM_ACCESS_RECORDS (2) typedef CList CDWORDList; // // Structure to map a flag to a string ID // typedef struct tagFLAGTOSTRING { DWORD dwFlag; UINT nID; BOOL fSet; } FLAGTOSTRING; class CIISSecurityTemplate : public CMetaProperties /*++ Class Description: Security template info Public Interface: CIISSecurityTemplate : Constructor ApplySettings : Apply template to destination path ClearSummary : Clear the text summary GenerateSummary : Generate the text summary --*/ { public: CIISSecurityTemplate( CMetaKey * pKey, LPCTSTR lpszMDPath, BOOL fInherit ); public: // // Apply settings to destination path // virtual HRESULT ApplySettings( BOOL fUseTemplates, CComAuthInfo * pAuthInfo, LPCTSTR lpszMDPath ); // // Build summary strings from security settings. Clear summary // before calling GenerateSummary(). // virtual void GenerateSummary( BOOL fUseTemplates, CComAuthInfo * pAuthInfo, LPCTSTR lpszMDPath ); void ClearSummary() { m_strlSummary.RemoveAll(); } POSITION GetHeadPosition() { return m_strlSummary.GetHeadPosition(); } CString & GetNext(POSITION & pos) { return m_strlSummary.GetNext(pos); } void AddSummaryString( LPCTSTR szTextItem, int cIndentLevel = 0 ); void AddSummaryString( UINT nID, int cIndentLevel = 0 ); protected: // // Break out GetAllData() data to data fields // virtual void ParseFields(); public: MP_DWORD m_dwAccessPerms; MP_CBlob m_ipl; protected: // // The derived class is expected to add its managed properties // to this list in its constructor // CDWORDList m_dlProperties; CStringList m_strlSummary; }; class CFTPSecurityTemplate : public CIISSecurityTemplate { public: CFTPSecurityTemplate( CMetaKey * pKey, LPCTSTR lpszMDPath, BOOL fInherit); public: virtual HRESULT ApplySettings( BOOL fUseTemplates, CComAuthInfo * pAuthInfo, LPCTSTR lpszMDPath ); virtual HRESULT LoadData(); virtual void GenerateSummary( BOOL fUseTemplates, CComAuthInfo * pAuthInfo, LPCTSTR lpszMDPath ); protected: virtual void ParseFields(); public: MP_BOOL m_fAllowAnonymous; MP_BOOL m_fAnonymousOnly; }; class CWebSecurityTemplate : public CIISSecurityTemplate { public: CWebSecurityTemplate( CMetaKey * pKey, LPCTSTR lpszMDPath, BOOL fInherit); public: virtual HRESULT ApplySettings( BOOL fUseTemplates, CComAuthInfo * pAuthInfo, LPCTSTR lpszMDPath ); virtual HRESULT LoadData(); virtual void GenerateSummary( BOOL fUseTemplates, CComAuthInfo * pAuthInfo, LPCTSTR lpszMDPath ); protected: virtual void ParseFields(); public: MP_DWORD m_dwAuthentication; MP_DWORD m_dwDirBrowsing; }; // // Launch security wizard // HRESULT RunSecurityWizard( CComAuthInfo * pAuthInfo, CMetaInterface * pInterface, CString& meta_path, UINT nLeftBmpId, UINT nHeadBmpId ); class CIISSecWizSettings : public CObjectPlus /*++ Class Description: Security wizard settings -- passed around from page to page. Public Interface: CIISSecWizSettings : Constructor --*/ { // // Constructor/Destructor // public: CIISSecWizSettings( IN CComAuthInfo * pAuthInfo, IN LPCTSTR lpszMDPath ); ~CIISSecWizSettings(); public: // // Fetch the metabase properties from the open key // (could be template or another vroot) // HRESULT FetchProperties( IN CMetaKey & mk, IN LPCTSTR lpszPath = NULL, IN BOOL fInherit = FALSE ); // // Data Members // public: BOOL m_fSetAcls; BOOL m_fReplaceAcls; BOOL m_fRedirected; BOOL m_fUseTemplate; DWORD m_dwInstance; DWORD m_AccessMaskAdmin; DWORD m_AccessMaskEveryone; DWORD m_AccessMaskDefault; HRESULT m_hResult; CString m_strPath; CComAuthInfo * m_auth; CString m_strMDPath; CIISSecurityTemplate * m_pist; EXPLICIT_ACCESS m_rgaae[NUM_ACCESS_RECORDS]; }; // // Permissions Wizard Source Page // // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class CPWSource : public CIISWizardPage { DECLARE_DYNCREATE(CPWSource) // // Construction // public: CPWSource(IN CIISSecWizSettings * pSettings = NULL); ~CPWSource(); // // Dialog Data // protected: enum { RADIO_INHERITANCE, RADIO_TEMPLATE, }; //{{AFX_DATA(CPWSource) enum { IDD = IDD_PERMWIZ_SOURCE }; int m_nSource; //}}AFX_DATA // // Overrides // protected: // ClassWizard generate virtual function overrides //{{AFX_VIRTUAL(CPWSource) public: virtual BOOL OnSetActive(); virtual LRESULT OnWizardNext(); protected: virtual void DoDataExchange(CDataExchange * pDX); //}}AFX_VIRTUAL // // Implementation // protected: // Generated message map functions //{{AFX_MSG(CPWSource) //}}AFX_MSG DECLARE_MESSAGE_MAP() void SetControlStates(); private: CIISSecWizSettings * m_pSettings; }; // // Permissions Wizard Template Page // // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class CPWTemplate : public CIISWizardPage { DECLARE_DYNCREATE(CPWTemplate) // // Construction // public: CPWTemplate(IN CIISSecWizSettings * pSettings = NULL); ~CPWTemplate(); // // Dialog Data // protected: //{{AFX_DATA(CPWTemplate) enum { IDD = IDD_PERMWIZ_TEMPLATE }; CListBox m_list_Templates; CEdit m_edit_Description; //}}AFX_DATA // // Overrides // protected: // ClassWizard generate virtual function overrides //{{AFX_VIRTUAL(CPWTemplate) public: virtual BOOL OnSetActive(); virtual LRESULT OnWizardNext(); protected: virtual void DoDataExchange(CDataExchange * pDX); //}}AFX_VIRTUAL // // Implementation // protected: // Generated message map functions //{{AFX_MSG(CPWTemplate) virtual BOOL OnInitDialog(); afx_msg void OnSelchangeListTemplates(); //}}AFX_MSG DECLARE_MESSAGE_MAP() void SetControlStates(); private: CIISSecWizSettings * m_pSettings; }; // // Permissions Wizard ACL Page // // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class CPWACL : public CIISWizardPage { DECLARE_DYNCREATE(CPWACL) // // Construction // public: CPWACL(IN CIISSecWizSettings * pSettings = NULL); ~CPWACL(); // // Dialog Data // protected: enum { RADIO_MAXIMUM, RADIO_MINIMUM, RADIO_NONE, }; //{{AFX_DATA(CPWACL) enum { IDD = IDD_PERMWIZ_ACL }; CStatic m_static_Line4; CStatic m_static_Line3; CStatic m_static_Line2; CStatic m_static_Line1; int m_nRadioAclType; //}}AFX_DATA // // Overrides // protected: // ClassWizard generate virtual function overrides //{{AFX_VIRTUAL(CPWACL) public: virtual BOOL OnSetActive(); virtual LRESULT OnWizardNext(); protected: virtual void DoDataExchange(CDataExchange * pDX); //}}AFX_VIRTUAL // // Implementation // protected: // Generated message map functions //{{AFX_MSG(CPWACL) //}}AFX_MSG DECLARE_MESSAGE_MAP() void SetControlStates(); private: CIISSecWizSettings * m_pSettings; }; // // Permissions Wizard Summary Page // // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< class CPWSummary : public CIISWizardPage { DECLARE_DYNCREATE(CPWSummary) // // Construction // public: CPWSummary(IN CIISSecWizSettings * pSettings = NULL); ~CPWSummary(); // // Dialog Data // protected: //{{AFX_DATA(CPWSummary) enum { IDD = IDD_PERMWIZ_SUMMARY }; CListBox m_list_Summary; //}}AFX_DATA // // Overrides // protected: // ClassWizard generate virtual function overrides //{{AFX_VIRTUAL(CPWSummary) public: virtual BOOL OnSetActive(); virtual LRESULT OnWizardNext(); protected: virtual void DoDataExchange(CDataExchange * pDX); //}}AFX_VIRTUAL // // Implementation // protected: // Generated message map functions //{{AFX_MSG(CPWSummary) virtual BOOL OnInitDialog(); //}}AFX_MSG DECLARE_MESSAGE_MAP() void SetControlStates(); void GenerateAclSummary(); void DisplaySummary(); HRESULT ApplyACLSToFiles(); HRESULT SetPermToChildren( IN CString& FileName, IN SECURITY_INFORMATION si, IN PACL pDacl, IN PACL pSacl ); private: CIISSecWizSettings * m_pSettings; }; #endif // __IISPWIZ_H__