/*++ 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; }