/*++ Copyright (c) 1994-1998 Microsoft Corporation Module Name : sitesecu.h Abstract: Site Security property page definitions Author: Ronald Meijer (ronaldm) Project: Internet Services Manager Revision History: --*/ #ifndef _SITESECU_H_ #define _SITESECU_H_ #define DEFAULT_GRANTED 0 #define DEFAULT_DENIED 1 class COMDLL CIPAccessDescriptor : public CObjectPlus /*++ Class Description: Access description object Public Interface: CIPAccessDescriptor : Various overload constructors for the different types SetValues : Set values, overloaded on a per type basis DuplicateInList : Check to see if a duplicate entry exists in the list GrantAccess : Grant or deny access HasAccess : Query whether the object describes a 'grant' or 'deny' item IsSingle : Query whether the object describes a single IP address IsMultiple : Query whether the object describes a range of ip addresses IsDomainName : Query whether the object describes a domain name QueryIPAddress : Get the object's IP address QuerySubnetMask : Get the object's subnet mask value QueryDomainName : Get the object's domain name operator == : Comparison operator OrderByAddress : Sorting helper --*/ { protected: // // Access descriptor types // enum AD_TYPE { ADT_SINGLE, ADT_MULTIPLE, ADT_DOMAIN, }; // // Constructors // public: // // Construct NULL descriptor // CIPAccessDescriptor( IN BOOL fGranted = TRUE ); // // Copy Constructor // CIPAccessDescriptor( IN const CIPAccessDescriptor & ac ); // // Construct with ip address(ip address/subnet mask) descriptor // if subnet massk is ffffffff this describes a single ip address // CIPAccessDescriptor( IN BOOL fGranted, IN DWORD dwIpAddress, IN DWORD dwSubnetMask = NULL_IP_MASK, IN BOOL fNetworkByteOrder = FALSE ); // // Construct domain name descriptor // CIPAccessDescriptor( IN BOOL fGranted, IN LPCTSTR lpstrDomain ); // // Interface // public: // // Set ip address/ip range value // void SetValues( IN BOOL fGranted, IN DWORD dwIpAddress, IN DWORD dwSubnetMask = NULL_IP_MASK, BOOL fNetworkByteOrder = FALSE ); // // Set domain name // void SetValues( IN BOOL fGranted, IN LPCTSTR lpstrDomain ); // // Check to see if a duplicate exists in the // list. // BOOL DuplicateInList( IN CObListPlus & oblList ); // // Access // public: // // Access Functions // BOOL HasAccess() const; // // Grant/deny access // void GrantAccess( IN BOOL fGranted = TRUE ); // // TRUE if this item is single ip address // BOOL IsSingle() const; // // True if this item describes an ip range // BOOL IsMultiple() const; // // True if this item describes a domain name // BOOL IsDomainName() const; // // Get the ip address as a DWORD // DWORD QueryIPAddress( IN BOOL fNetworkByteOrder ) const; // // Get the ip address as ip address object // CIPAddress QueryIPAddress() const; // // Get the subnet mask as a DWORD // DWORD QuerySubnetMask( IN BOOL fNetworkByteOrder ) const; // // Get the subnet mask as an ip address object // CIPAddress QuerySubnetMask() const; // // Get the domain name // LPCTSTR QueryDomainName() const; public: // // Comparison Operator // BOOL operator ==( IN const CIPAccessDescriptor & ac ) const; // // Sorting Helper // int OrderByAddress( IN const CObjectPlus * pobAccess ) const; private: BOOL m_fGranted; AD_TYPE m_adtType; CString m_strDomain; CIPAddress m_iaIPAddress; CIPAddress m_iaSubnetMask; }; // // Helper Functions // // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // // Convert an oblist of access descriptors to a blob // void COMDLL BuildIplBlob( IN CObListPlus & oblAccessList, IN BOOL fGrantByDefault, OUT CBlob & blob ); // // Reverse the above, build an oblist of access descriptors // from a blob // DWORD COMDLL BuildIplOblistFromBlob( IN CBlob & blob, OUT CObListPlus & oblAccessList, OUT BOOL & fGrantByDefault ); class COMDLL CIPAccessDescriptorListBox : public CHeaderListBox /*++ Class Description: Listbox of CIPAccessDescriptor objects Public Interface: CIPAccessDescriptorListBox : Constructor GetItem : Get CIPAccessDescriptor item at specified position in the listbox AddItem : Add new CIPAccessDescriptor item to the listbox Initialize : Initialize the listbox --*/ { DECLARE_DYNAMIC(CIPAccessDescriptorListBox); public: // // Number of bitmaps // static const nBitmaps; // // Constructor/Destructor // public: CIPAccessDescriptorListBox( IN BOOL fDomainsAllowed = FALSE ); // // Interface // public: CIPAccessDescriptor * GetItem( IN UINT nIndex ); int AddItem( IN const CIPAccessDescriptor * pItem ); // // Return the singly selected item, or NULL // if 0, or more than one item is selected // CIPAccessDescriptor * GetSelectedItem( OUT int * pnSel = NULL ); // // Return next selected listbox item (doesn't matter // if the listbox is single select or multi-select) // CIPAccessDescriptor * GetNextSelectedItem( IN OUT int * pnStartingIndex ); virtual BOOL Initialize(); protected: virtual void DrawItemEx( IN CRMCListBoxDrawStruct & ds ); protected: BOOL m_fDomainsAllowed; CString m_strGranted; CString m_strDenied; CString m_strFormat; }; // // Inline Expansion // // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< inline BOOL CIPAccessDescriptor::HasAccess() const { return m_fGranted; } inline void CIPAccessDescriptor::GrantAccess( IN BOOL fGranted ) { m_fGranted = fGranted; } inline BOOL CIPAccessDescriptor::IsSingle() const { return m_adtType == ADT_SINGLE; } inline BOOL CIPAccessDescriptor::IsMultiple() const { return m_adtType == ADT_MULTIPLE; } inline BOOL CIPAccessDescriptor::IsDomainName() const { return m_adtType == ADT_DOMAIN; } inline DWORD CIPAccessDescriptor::QueryIPAddress( IN BOOL fNetworkByteOrder ) const { ASSERT(!IsDomainName()); return m_iaIPAddress.QueryIPAddress(fNetworkByteOrder); } inline CIPAddress CIPAccessDescriptor::QueryIPAddress() const { ASSERT(!IsDomainName()); return m_iaIPAddress; } inline DWORD CIPAccessDescriptor::QuerySubnetMask( IN BOOL fNetworkByteOrder ) const { ASSERT(!IsDomainName()); return m_iaSubnetMask.QueryIPAddress(fNetworkByteOrder); } inline CIPAddress CIPAccessDescriptor::QuerySubnetMask() const { ASSERT(!IsDomainName()); return m_iaSubnetMask; } inline LPCTSTR CIPAccessDescriptor::QueryDomainName() const { ASSERT(IsDomainName()); return (LPCTSTR)m_strDomain; } inline CIPAccessDescriptor * CIPAccessDescriptorListBox::GetItem( IN UINT nIndex ) { return (CIPAccessDescriptor *)GetItemDataPtr(nIndex); } inline int CIPAccessDescriptorListBox::AddItem( IN const CIPAccessDescriptor * pItem ) { return AddString((LPCTSTR)pItem); } inline CIPAccessDescriptor * CIPAccessDescriptorListBox::GetSelectedItem( OUT int * pnSel ) { return (CIPAccessDescriptor *)CRMCListBox::GetSelectedListItem(pnSel); } inline CIPAccessDescriptor * CIPAccessDescriptorListBox::GetNextSelectedItem( IN OUT int * pnStartingIndex ) { return (CIPAccessDescriptor *)CRMCListBox::GetNextSelectedItem(pnStartingIndex); } #endif // _SITESECU_H_