Example #1
0
/* --- 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);
}