NTSTATUS SrvMatchPathPrefix( PWSTR pwszPath, ULONG ulPathLength, PWSTR pwszPrefix ) { NTSTATUS ntStatus = STATUS_NO_MATCH; ULONG ulPrefixLength = wc16slen(pwszPrefix); PWSTR pwszTmp = NULL; if (ulPathLength >= ulPrefixLength) { ntStatus = SrvAllocateMemory( (ulPrefixLength + 1) * sizeof(wchar16_t), (PVOID*)&pwszTmp); BAIL_ON_NT_STATUS(ntStatus); memcpy( (PBYTE)pwszTmp, (PBYTE)pwszPath, ulPrefixLength * sizeof(wchar16_t)); if (!SMBWc16sCaseCmp(pwszTmp, pwszPrefix)) { ntStatus = STATUS_SUCCESS; } } error: SRV_SAFE_FREE_MEMORY(pwszTmp); return ntStatus; }
NTSTATUS SrvSession2CheckPrincipal( PLWIO_SRV_SESSION_2 pSession, PCWSTR pwszClientPrincipal, PBOOLEAN pbIsMatch ) { NTSTATUS ntStatus = STATUS_SUCCESS; BOOLEAN bInLock = FALSE; if (!pwszClientPrincipal) { ntStatus = STATUS_INVALID_PARAMETER; BAIL_ON_NT_STATUS(ntStatus); } LWIO_LOCK_RWMUTEX_SHARED(bInLock, &pSession->mutex); if (!pSession->pwszClientPrincipalName || (0 != SMBWc16sCaseCmp( pSession->pwszClientPrincipalName, pwszClientPrincipal))) { *pbIsMatch = FALSE; } else { *pbIsMatch = TRUE; } cleanup: LWIO_UNLOCK_RWMUTEX(bInLock, &pSession->mutex); return ntStatus; error: *pbIsMatch = FALSE; goto cleanup; }