/*++ Copyright (c) 1994-2000 Microsoft Corporation Module Name : restrictlist.h Abstract: IIS Object definitions Author: Aaron Lee (aaronl) Project: Internet Services Manager Revision History: --*/ #ifndef __RESTRICT_LIST_H__ #define __RESTRICT_LIST_H__ extern INT g_iDebugOutputLevel; #define METABASE_PATH_FOR_RESTRICT_LIST _T("LM/W3SVC") #define EMPTY_GROUPID_KEY _T("$e$m$p$t$y$:") #define DEFAULTS_ISAPI "0,*.dll" #define DEFAULTS_CGI "0,*.exe" #define RESTRICTION_LIST_SEPARATOR _T(',') #define APPLICATION_DEPENDENCY_NAME_SEPARATOR _T(";") #define APPLICATION_DEPENDENCY_LIST_SEPARATOR _T(",") #define RESTRICTION_ENTRY_IS_ALLOW _T("1") #define RESTRICTION_ENTRY_IS_PROHIBIT _T("0") enum { WEBSVCEXT_TYPE_REGULAR, WEBSVCEXT_TYPE_ALL_UNKNOWN_ISAPI, WEBSVCEXT_TYPE_ALL_UNKNOWN_CGI, WEBSVCEXT_TYPE_FILENAME_EXTENSIONS_FILTER, /**/ WEBSVCEXT_TYPE_TOTAL }; enum { WEBSVCEXT_STATUS_ALLOWED, WEBSVCEXT_STATUS_PROHIBITED, WEBSVCEXT_STATUS_CUSTOM, WEBSVCEXT_STATUS_NOTINUSE, WEBSVCEXT_STATUS_INUSE, /**/ WEBSVCEXT_STATUS_TOTAL }; typedef struct _CApplicationDependEntry { CString strApplicationName; CStringListEx strlistGroupID; } CApplicationDependEntry, * pCApplicationDependEntry; typedef CMap CApplicationDependList; typedef CMap CMyMapStringToString; // CRestrictionUIList has many CRestrictionUIEntry // CRestrictionUIEntry has one CRestrictionList // CRestrictionList has many CRestrictionEntry // CRestrictionUIList->CRestrictionUIEntry->CRestrictionList->CRestrictionEntry typedef struct _CRestrictionEntry { CString strFileName; int iStatus; int iDeletable; CString strGroupID; CString strGroupDescription; int iType; } CRestrictionEntry, *pCRestrictionEntry; typedef CMap CRestrictionList; typedef CList CRestrictionEntryList; typedef struct _CRestrictionUIEntry { int iType; CString strGroupID; CString strGroupDescription; CRestrictionList strlstRestrictionEntries; } CRestrictionUIEntry, * pCRestrictionUIEntry; typedef CMap CRestrictionUIList; typedef CList CRestrictionUIEntryList; class CRestrictionListBox : public CListCtrl { DECLARE_DYNAMIC(CRestrictionListBox); public: CRestrictionListBox(); public: BOOL Initialize(int iColumns); CRestrictionEntry * GetItem(UINT nIndex); int InsertItem(int idx, CRestrictionEntry * p); int AddItem(CRestrictionEntry * pItem); int SetListItem(int idx, CRestrictionEntry * pItem); void SelectItem(int idx, BOOL bSelect = TRUE); // void MoveSelectedItem(int direction); private: int m_iColsToDisplay; CString m_strAllowed; CString m_strProhibited; }; void DumpRestrictionList(CRestrictionList * pMyList); void DumpRestrictionUIEntry(CRestrictionUIEntry * pMyEntry); // Restriction List stuff CRestrictionEntry * CreateRestrictionEntry(CString NewstrFileName,int NewiStatus,int NewiDeletable,CString NewstrGroupID,CString NewstrGroupDescription,int NewiType); HRESULT WriteSettingsRestrictionList(CMetaInterface * pInterface,CStringListEx * pstrlstWrite); BOOL AddRestrictEntryToRestrictList(CRestrictionList* pRestrictList, CRestrictionEntry * pAddEntry); HRESULT PrepRestictionListForWrite(CRestrictionList * pMyList,CStringListEx * pstrlstReturned); HRESULT LoadMasterRestrictListWithoutOldEntry(CMetaInterface * pInterface,CRestrictionList * pMasterRestrictionList,CRestrictionUIEntry * pOldEntry); BOOL AddRestrictListToRestrictList(CRestrictionList* pBigRestrictList, CRestrictionList * pAddEntry); BOOL RestrictionListCopy(CRestrictionList * pRestrictionListCopyTo, CRestrictionList * pRestrictionListCopyFrom); void CleanRestrictionList(CRestrictionList * pListToDelete); // UI Restriction list stuff HRESULT PrepRestictionUIListForWrite(CRestrictionUIList * pMyList,CStringListEx * pstrlstReturned); CRestrictionUIEntry * RestrictionUIEntryMakeCopy(CRestrictionUIEntry * pRestrictionUIEntry); HRESULT LoadMasterUIWithoutOldEntry(CMetaInterface * pInterface,CRestrictionUIList * pMasterRestrictionList,CRestrictionUIEntry * pOldEntry); BOOL AddRestrictUIEntryToRestrictUIList(CRestrictionUIList* pRestrictUIList, CRestrictionUIEntry * pAddEntry); void RestrictionUIEntryCopy(CRestrictionUIEntry * pRestrictionUIEntryCopyTo,CRestrictionUIEntry * pRestrictionUIEntryCopyFrom); void DeleteRestrictionUIEntry(CRestrictionUIEntry * pEntryToDelete); HRESULT RemoveRestrictionUIEntry(CMetaInterface * pInterface,CRestrictionUIEntry * pRestrictionUIEntry); HRESULT ChangeStateOfEntry(CMetaInterface * pInterface,INT iDesiredState,CRestrictionUIEntry * pRestrictionUIEntry); void CleanRestrictionUIEntry(CRestrictionUIEntry * pEntryToDelete); void CleanRestrictionUIList(CRestrictionUIList * pListToDelete); INT GetRestrictUIState(CRestrictionUIEntry * pRestrictionUIEntry); int UpdateItemFromItemInList(CRestrictionUIEntry * pMyItem,CRestrictionUIList * pMyList); void DeleteItemFromList(CRestrictionUIEntry * pMyItem,CRestrictionUIList * pMyList); // Application list stuff HRESULT LoadApplicationDependList(CMetaInterface * pInterface,CApplicationDependList * pMasterList,BOOL bAddOnlyIfFriendlyNameExists); HRESULT LoadApplicationFriendlyNames(CMetaInterface * pInterface,CMyMapStringToString * pMyList); BOOL ReturnDependentAppsList(CMetaInterface * pInterface,CString strGroupID,CStringListEx * pstrlstReturned,BOOL bAddOnlyIfFriendlyNameExists); // other BOOL IsFileUsedBySomeoneElse(CMetaInterface * pInterface,LPCTSTR lpName,LPCTSTR strGroupID,CString * strUser); BOOL IsGroupIDUsedBySomeoneElse(CMetaInterface * pInterface,LPCTSTR lpName); HBITMAP GetBitmapFromStrip(HBITMAP hbmStrip, int nPos, int cSize); #if defined(_DEBUG) || DBG #define DEBUG_PREPEND_STRING_RESTRICT _T("---") class CDebug_RestrictList { public: CDebug_RestrictList() { m_strClassName = _T("CDebug_RestrictList"); }; ~CDebug_RestrictList(){}; public: CString m_strClassName; void Init() { DebugList_RestrictionEntryList.RemoveAll(); DebugList_RestrictionUIEntryList.RemoveAll(); } void Add(CRestrictionEntry * pItem) { if (g_iDebugOutputLevel & DEBUG_FLAG_CRESTRICTLIST) { DebugTrace(_T("%s%s>:Add:[%3d] %p\r\n"),m_strClassName,DEBUG_PREPEND_STRING_RESTRICT,DebugList_RestrictionEntryList.GetCount(),pItem); } DebugList_RestrictionEntryList.AddTail(pItem); } void Add(CRestrictionUIEntry * pItem) { if (g_iDebugOutputLevel & DEBUG_FLAG_CRESTRICTLIST) { DebugTrace(_T("%s%s>:Add:[%3d] %p\r\n"),m_strClassName,DEBUG_PREPEND_STRING_RESTRICT,DebugList_RestrictionUIEntryList.GetCount(),pItem); } DebugList_RestrictionUIEntryList.AddTail(pItem); } void Del(CRestrictionEntry * pItem) { INT_PTR iCount = DebugList_RestrictionEntryList.GetCount(); iCount--; POSITION pos = DebugList_RestrictionEntryList.Find(pItem); if (pos) { DebugList_RestrictionEntryList.RemoveAt(pos); if (g_iDebugOutputLevel & DEBUG_FLAG_CRESTRICTLIST) { DebugTrace(_T("%s<%s:Del:[%3d] %p\r\n"),m_strClassName,DEBUG_PREPEND_STRING_RESTRICT,iCount,pItem); } } else { if (g_iDebugOutputLevel & DEBUG_FLAG_CRESTRICTLIST) { DebugTrace(_T("%s<%s:Del:[%3d] %p (not found)\r\n"),m_strClassName,DEBUG_PREPEND_STRING_RESTRICT,iCount,pItem); } } } void Del(CRestrictionUIEntry * pItem) { INT_PTR iCount = DebugList_RestrictionUIEntryList.GetCount(); iCount--; POSITION pos = DebugList_RestrictionUIEntryList.Find(pItem); if (pos) { DebugList_RestrictionUIEntryList.RemoveAt(pos); if (g_iDebugOutputLevel & DEBUG_FLAG_CRESTRICTLIST) { DebugTrace(_T("%s<%s:Del:[%3d] %p\r\n"),m_strClassName,DEBUG_PREPEND_STRING_RESTRICT,iCount,pItem); } } else { if (g_iDebugOutputLevel & DEBUG_FLAG_CRESTRICTLIST) { DebugTrace(_T("%s<%s:Del:[%3d] %p (not found)\r\n"),m_strClassName,DEBUG_PREPEND_STRING_RESTRICT,iCount,pItem); } } } void Dump(BOOL bShouldBeEmpty) { int iCount = 0; CString strName; BOOL bDisplayDump = FALSE; if (!(g_iDebugOutputLevel & DEBUG_FLAG_CRESTRICTLIST)) { return; } if (bShouldBeEmpty) { if (DebugList_RestrictionEntryList.GetCount() || DebugList_RestrictionUIEntryList.GetCount()) { DebugTrace(_T("%s%s:Dump:SHOULD BE EMPTY, BUT IT'S NOT! [%d/%d]\r\n"),m_strClassName,DEBUG_PREPEND_STRING_RESTRICT,DebugList_RestrictionEntryList.GetCount(),DebugList_RestrictionUIEntryList.GetCount()); bDisplayDump = TRUE; } } else { bDisplayDump = TRUE; } if (bDisplayDump) { DebugTrace(_T("%s%s:Dump:start\r\n"),m_strClassName,DEBUG_PREPEND_STRING_RESTRICT); CRestrictionEntry * pItemFromList1 = NULL; POSITION pos = DebugList_RestrictionEntryList.GetHeadPosition(); while (pos) { pItemFromList1 = DebugList_RestrictionEntryList.GetNext(pos); if (pItemFromList1) { iCount++; DebugTrace(_T("%s%s:Dump:[%3d] %p (%s)\r\n"),m_strClassName,DEBUG_PREPEND_STRING_RESTRICT,iCount,pItemFromList1,pItemFromList1->strFileName); } } DebugTrace(_T("%s%s:Dump:--------------\r\n"),m_strClassName,DEBUG_PREPEND_STRING_RESTRICT); iCount = 0; CRestrictionUIEntry * pItemFromList2 = NULL; pos = DebugList_RestrictionUIEntryList.GetHeadPosition(); while (pos) { pItemFromList2 = DebugList_RestrictionUIEntryList.GetNext(pos); if (pItemFromList2) { iCount++; DebugTrace(_T("%s%s:Dump:[%3d] %p (%s)\r\n"),m_strClassName,DEBUG_PREPEND_STRING_RESTRICT,iCount,pItemFromList2,pItemFromList2->strGroupID); } } DebugTrace(_T("%s%s:Dump:end\r\n"),m_strClassName,DEBUG_PREPEND_STRING_RESTRICT); } } private: CRestrictionEntryList DebugList_RestrictionEntryList; CRestrictionUIEntryList DebugList_RestrictionUIEntryList; }; #endif //DEBUG #endif // __RESTRICT_LIST_H__