313 lines
6 KiB
C
313 lines
6 KiB
C
/*++
|
|
|
|
Copyright (c) 1999 Microsoft Corporation
|
|
|
|
|
|
Module Name:
|
|
|
|
IKE utils
|
|
|
|
Abstract:
|
|
|
|
Contains parameter validation
|
|
|
|
Author:
|
|
|
|
BrianSw 10-19-200
|
|
|
|
Environment:
|
|
|
|
User Level: Win32
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
#include "precomp.h"
|
|
|
|
|
|
DWORD
|
|
ValidateInitiateIKENegotiation(
|
|
STRING_HANDLE pServerName,
|
|
PQM_FILTER_CONTAINER pQMFilterContainer,
|
|
DWORD dwClientProcessId,
|
|
ULONG uhClientEvent,
|
|
DWORD dwFlags,
|
|
IKENEGOTIATION_HANDLE * phIKENegotiation
|
|
)
|
|
{
|
|
|
|
DWORD dwError=ERROR_SUCCESS;
|
|
|
|
if (pQMFilterContainer == NULL ||
|
|
pQMFilterContainer->pQMFilters == NULL) {
|
|
dwError=ERROR_INVALID_PARAMETER;
|
|
}
|
|
|
|
if (pServerName && (wcscmp(pServerName,L"") != 0)) {
|
|
if (uhClientEvent || phIKENegotiation || dwClientProcessId) {
|
|
dwError=ERROR_NOT_SUPPORTED;
|
|
BAIL_ON_WIN32_ERROR(dwError);
|
|
}
|
|
} else {
|
|
if (phIKENegotiation || dwClientProcessId || uhClientEvent) {
|
|
if (!phIKENegotiation || !dwClientProcessId || !uhClientEvent) {
|
|
dwError=ERROR_INVALID_PARAMETER;
|
|
BAIL_ON_WIN32_ERROR(dwError);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!(pQMFilterContainer->pQMFilters) ||
|
|
!(pQMFilterContainer->dwNumFilters)) {
|
|
dwError = ERROR_INVALID_PARAMETER;
|
|
BAIL_ON_WIN32_ERROR(dwError);
|
|
}
|
|
|
|
|
|
dwError = ValidateIPSecQMFilter(
|
|
pQMFilterContainer->pQMFilters
|
|
);
|
|
BAIL_ON_WIN32_ERROR(dwError);
|
|
|
|
error:
|
|
return dwError;
|
|
}
|
|
|
|
|
|
DWORD
|
|
ValidateQueryIKENegotiationStatus(
|
|
IKENEGOTIATION_HANDLE hIKENegotiation,
|
|
SA_NEGOTIATION_STATUS_INFO *NegotiationStatus
|
|
)
|
|
|
|
{
|
|
|
|
DWORD dwError=ERROR_SUCCESS;
|
|
|
|
if (!hIKENegotiation || !NegotiationStatus) {
|
|
dwError = ERROR_INVALID_PARAMETER;
|
|
BAIL_ON_WIN32_ERROR(dwError);
|
|
}
|
|
error:
|
|
return dwError;
|
|
}
|
|
|
|
|
|
DWORD
|
|
ValidateCloseIKENegotiationHandle(
|
|
IKENEGOTIATION_HANDLE * phIKENegotiation
|
|
)
|
|
{
|
|
DWORD dwError=ERROR_SUCCESS;
|
|
|
|
if (!phIKENegotiation) {
|
|
dwError=ERROR_INVALID_PARAMETER;
|
|
}
|
|
BAIL_ON_WIN32_ERROR(dwError);
|
|
|
|
error:
|
|
return dwError;
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
|
ValidateEnumMMSAs(
|
|
STRING_HANDLE pServerName,
|
|
PMM_SA_CONTAINER pMMTemplate,
|
|
PMM_SA_CONTAINER *ppMMSAContainer,
|
|
LPDWORD pdwNumEntries,
|
|
LPDWORD pdwTotalMMsAvailable,
|
|
LPDWORD pdwEnumHandle,
|
|
DWORD dwFlags
|
|
)
|
|
{
|
|
DWORD dwError=ERROR_SUCCESS;
|
|
|
|
if (pMMTemplate == NULL ||
|
|
pMMTemplate->pMMSAs == NULL ||
|
|
ppMMSAContainer == NULL ||
|
|
*ppMMSAContainer == NULL ||
|
|
pdwNumEntries == NULL ||
|
|
pdwTotalMMsAvailable == NULL ||
|
|
pdwEnumHandle == NULL ) {
|
|
dwError=ERROR_INVALID_PARAMETER;
|
|
}
|
|
BAIL_ON_WIN32_ERROR(dwError);
|
|
|
|
error:
|
|
return dwError;
|
|
}
|
|
|
|
|
|
DWORD
|
|
ValidateDeleteMMSAs(
|
|
STRING_HANDLE pServerName,
|
|
PMM_SA_CONTAINER pMMTemplate,
|
|
DWORD dwFlags
|
|
)
|
|
|
|
{
|
|
|
|
DWORD dwError=ERROR_SUCCESS;
|
|
|
|
if (pMMTemplate == NULL ||
|
|
pMMTemplate->pMMSAs == NULL) {
|
|
dwError=ERROR_INVALID_PARAMETER;
|
|
}
|
|
BAIL_ON_WIN32_ERROR(dwError);
|
|
|
|
error:
|
|
return dwError;
|
|
}
|
|
|
|
DWORD
|
|
ValidateQueryIKEStatistics(
|
|
STRING_HANDLE pServerName,
|
|
IKE_STATISTICS *pIKEStatistics
|
|
)
|
|
|
|
{
|
|
|
|
DWORD dwError=ERROR_SUCCESS;
|
|
|
|
if (pIKEStatistics == NULL) {
|
|
dwError=ERROR_INVALID_PARAMETER;
|
|
}
|
|
BAIL_ON_WIN32_ERROR(dwError);
|
|
|
|
error:
|
|
return dwError;
|
|
}
|
|
|
|
|
|
DWORD
|
|
ValidateRegisterIKENotifyClient(
|
|
STRING_HANDLE pServerName,
|
|
DWORD dwClientProcessId,
|
|
ULONG uhClientEvent,
|
|
PQM_SA_CONTAINER pQMSATemplateContainer,
|
|
IKENOTIFY_HANDLE *phNotifyHandle,
|
|
DWORD dwFlags
|
|
)
|
|
|
|
{
|
|
DWORD dwError=ERROR_SUCCESS;
|
|
|
|
if (pServerName && (wcscmp(pServerName,L"") != 0)) {
|
|
return ERROR_NOT_SUPPORTED;
|
|
}
|
|
|
|
if (pQMSATemplateContainer == NULL ||
|
|
pQMSATemplateContainer->pQMSAs == NULL ||
|
|
phNotifyHandle == NULL) {
|
|
dwError=ERROR_INVALID_PARAMETER;
|
|
}
|
|
BAIL_ON_WIN32_ERROR(dwError);
|
|
|
|
error:
|
|
return dwError;
|
|
|
|
}
|
|
|
|
DWORD ValidateQueryNotifyData(
|
|
IKENOTIFY_HANDLE uhNotifyHandle,
|
|
PDWORD pdwNumEntries,
|
|
PQM_SA_CONTAINER *ppQMSAContainer,
|
|
DWORD dwFlags
|
|
)
|
|
|
|
{
|
|
|
|
DWORD dwError=ERROR_SUCCESS;
|
|
|
|
if (ppQMSAContainer == NULL ||
|
|
*ppQMSAContainer == NULL ||
|
|
pdwNumEntries == NULL ||
|
|
*pdwNumEntries == 0) {
|
|
dwError=ERROR_INVALID_PARAMETER;
|
|
}
|
|
BAIL_ON_WIN32_ERROR(dwError);
|
|
|
|
error:
|
|
return dwError;
|
|
|
|
}
|
|
|
|
DWORD ValidateCloseNotifyHandle(
|
|
IKENOTIFY_HANDLE *phHandle
|
|
)
|
|
{
|
|
DWORD dwError=ERROR_SUCCESS;
|
|
|
|
if (phHandle == NULL) {
|
|
dwError=ERROR_INVALID_PARAMETER;
|
|
}
|
|
BAIL_ON_WIN32_ERROR(dwError);
|
|
|
|
error:
|
|
return dwError;
|
|
}
|
|
|
|
|
|
DWORD ValidateIPSecAddSA(
|
|
STRING_HANDLE pServerName,
|
|
PIPSEC_QM_POLICY_CONTAINER pQMPolicyContainer,
|
|
PQM_FILTER_CONTAINER pQMFilterContainer,
|
|
DWORD *uhLarvalContext,
|
|
DWORD dwInboundKeyMatLen,
|
|
BYTE *pInboundKeyMat,
|
|
DWORD dwOutboundKeyMatLen,
|
|
BYTE *pOutboundKeyMat,
|
|
BYTE *pContextInfo,
|
|
DWORD dwFlags)
|
|
{
|
|
DWORD dwError=ERROR_SUCCESS;
|
|
|
|
if (!pQMFilterContainer ||
|
|
!pQMPolicyContainer ||
|
|
pContextInfo == NULL) {
|
|
dwError= ERROR_INVALID_PARAMETER;
|
|
}
|
|
BAIL_ON_WIN32_ERROR(dwError);
|
|
|
|
if (uhLarvalContext == NULL){
|
|
dwError= ERROR_INVALID_PARAMETER;
|
|
BAIL_ON_WIN32_ERROR(dwError);
|
|
}
|
|
|
|
|
|
if (!(pQMFilterContainer->pQMFilters) ||
|
|
!(pQMFilterContainer->dwNumFilters)) {
|
|
dwError = ERROR_INVALID_PARAMETER;
|
|
BAIL_ON_WIN32_ERROR(dwError);
|
|
}
|
|
|
|
if (!(pQMPolicyContainer->pPolicies) ||
|
|
!(pQMPolicyContainer->dwNumPolicies)) {
|
|
dwError = ERROR_INVALID_PARAMETER;
|
|
BAIL_ON_WIN32_ERROR(dwError);
|
|
}
|
|
|
|
dwError = ValidateIPSecQMFilter(
|
|
pQMFilterContainer->pQMFilters
|
|
);
|
|
BAIL_ON_WIN32_ERROR(dwError);
|
|
|
|
dwError = ValidateQMOffers(
|
|
1,
|
|
pQMPolicyContainer->pPolicies->pOffers);
|
|
BAIL_ON_WIN32_ERROR(dwError);
|
|
|
|
if ((dwFlags & IPSEC_SA_INBOUND) &&
|
|
(dwFlags & IPSEC_SA_OUTBOUND)) {
|
|
dwError= ERROR_INVALID_PARAMETER;
|
|
BAIL_ON_WIN32_ERROR(dwError);
|
|
}
|
|
|
|
error:
|
|
return dwError;
|
|
}
|