/* --- PUBLIC FUNCTIONS ----------------------------------------------------- */ void SetLogLevel( _In_ LPTSTR lvl ) { static const LPCTSTR gs_DebugLevelSets[] = { _T("ALL"), _T("DBG"), _T("INFO"), _T("WARN"), _T("ERR"), _T("SUCC"), _T("NONE") }; DWORD index = gs_debugLevel; if (IsInSetOfStrings(lvl, gs_DebugLevelSets, ARRAY_COUNT(gs_DebugLevelSets), &index)) { gs_debugLevel = (LOG_LEVEL)index; LOG(Info, SUB_LOG(_T("Setting log level to <%s>")), lvl); } else { LOG(Err, SUB_LOG(_T("Unknown log level <%s>")), lvl); } }
/* --- PRIVATE FUNCTIONS ---------------------------------------------------- */ static void CallbackExchRoleEntry( _In_ CSV_HANDLE hOutfile, _In_ CSV_HANDLE hDenyOutfile, _Inout_ LPTSTR *tokens ) { UNREFERENCED_PARAMETER(hDenyOutfile); BOOL bResult = FALSE; LPTSTR roleEntry = NULL; LPTSTR roleEntryName = NULL; LPTSTR listMsExchRoleEntries = NULL; LPTSTR nextEntry = NULL; LPTSTR nextEntryField = NULL; LPTSTR domainDN = NULL; LPTSTR dn = NULL; DWORD roleEntryIndex = 0; size_t eTSDNlen = 0; if (!exchangeTrustedSubsystemDN) { dn = _tcsdup(tokens[LdpListDn]); domainDN = _tcsstr(dn, _T("dc=")); eTSDNlen = _tcslen(ETS_PARTIAL_DN) + _tcslen(domainDN) + 1; exchangeTrustedSubsystemDN = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,eTSDNlen * sizeof(TCHAR)); if (!exchangeTrustedSubsystemDN) { LOG(Err, _T("Cannot allocate DN string")); } _tcsncat_s(exchangeTrustedSubsystemDN, eTSDNlen, ETS_PARTIAL_DN, _tcslen(ETS_PARTIAL_DN)); _tcsncat_s(exchangeTrustedSubsystemDN, eTSDNlen, domainDN, _tcslen(domainDN)); } // Do we have role entries if (STR_EMPTY(tokens[LdpListMsExchRoleEntries])) return; listMsExchRoleEntries = _tcsdup(tokens[LdpListMsExchRoleEntries]); CharLower(listMsExchRoleEntries); roleEntry = _tcstok_s(listMsExchRoleEntries, _T(";"), &nextEntry); while (roleEntry) { roleEntryName = _tcstok_s(roleEntry, _T(","), &nextEntryField); roleEntryName = _tcstok_s(NULL, _T(","), &nextEntryField); if (IsInSetOfStrings(roleEntryName, controlRoleEntryList, CONTROL_ROLE_ENTRY_COUNT, &roleEntryIndex)) { bResult = ControlWriteOutline(hOutfile, tokens[LdpListDn], exchangeTrustedSubsystemDN, gc_RoleEntryKeyword[roleEntryIndex]); if (!bResult) { LOG(Err, _T("Cannot write outline for <%s>"), tokens[LdpListDn]); } } nextEntryField = NULL; roleEntry = _tcstok_s(NULL, _T(";"), &nextEntry); } free(listMsExchRoleEntries); }