windows-nt/Source/XPSP1/NT/net/layer2svc/wlstore/validate.c
2020-09-26 16:20:57 +08:00

130 lines
3.1 KiB
C

#include "precomp.h"
extern LPWSTR PolicyDNAttributes[];
DWORD
ValidateWirelessPSData(
PWIRELESS_PS_DATA pWirelessPSData,
DWORD dwNetworkType
)
{
DWORD dwError = 0;
DWORD dwSSIDLen = 0;
DWORD dwPSLen = 0;
DWORD dwDescriptionLen = 0;
DWORD dwEAPDataLen = 0;
if (!pWirelessPSData) {
dwError = ERROR_INVALID_PARAMETER;
}
BAIL_ON_WIN32_ERROR(dwError);
if (pWirelessPSData->dwNetworkType != dwNetworkType) {
dwError = ERROR_INVALID_PARAMETER;
}
BAIL_ON_WIN32_ERROR(dwError);
dwSSIDLen = wcslen(pWirelessPSData->pszWirelessSSID);
if (dwSSIDLen == 0) {
dwError = ERROR_INVALID_PARAMETER;
}
BAIL_ON_WIN32_ERROR(dwError);
if (dwSSIDLen < pWirelessPSData->dwWirelessSSIDLen) {
dwError = ERROR_INVALID_PARAMETER;
}
BAIL_ON_WIN32_ERROR(dwError);
if (pWirelessPSData->pszDescription) {
dwDescriptionLen = wcslen(pWirelessPSData->pszDescription);
}
dwEAPDataLen = pWirelessPSData->dwEAPDataLen;
if (dwEAPDataLen) {
if (!(pWirelessPSData->pbEAPData)) {
dwError = ERROR_INVALID_PARAMETER;
}
}
BAIL_ON_WIN32_ERROR(dwError);
dwPSLen = (sizeof(WIRELESS_PS_DATA) - sizeof(DWORD) -sizeof(LPWSTR)) + sizeof(WCHAR) * dwDescriptionLen
- sizeof(LPWSTR) + dwEAPDataLen;
if (dwPSLen != pWirelessPSData->dwPSLen) {
dwError = ERROR_INVALID_PARAMETER;
}
BAIL_ON_WIN32_ERROR(dwError);
error:
return(dwError);
}
DWORD
ValidateWirelessPolicyData(
PWIRELESS_POLICY_DATA pWirelessPolicyData
)
{
PWIRELESS_PS_DATA *ppWirelessPSData = NULL;
PWIRELESS_PS_DATA pWirelessPSData = NULL;
DWORD dwError = 0;
DWORD dwNumPreferredSettings = 0;
DWORD dwNumAPNetworks = 0;
DWORD dwSSIDLen = 0;
DWORD dwPSLen = 0;
DWORD i=0;
if (!pWirelessPolicyData) {
dwError = ERROR_INVALID_PARAMETER;
}
BAIL_ON_WIN32_ERROR(dwError);
if (!pWirelessPolicyData->pszWirelessName) {
dwError = ERROR_INVALID_PARAMETER;
}
BAIL_ON_WIN32_ERROR(dwError);
dwNumPreferredSettings = pWirelessPolicyData->dwNumPreferredSettings;
dwNumAPNetworks = pWirelessPolicyData->dwNumAPNetworks;
if (dwNumPreferredSettings) {
ppWirelessPSData = pWirelessPolicyData->ppWirelessPSData;
if (!ppWirelessPSData) {
dwError = ERROR_INVALID_PARAMETER;
}
BAIL_ON_WIN32_ERROR(dwError);
if (dwNumPreferredSettings < dwNumAPNetworks) {
dwError = ERROR_INVALID_PARAMETER;
}
BAIL_ON_WIN32_ERROR(dwError);
for (i=0; i < dwNumAPNetworks ; ++i) {
pWirelessPSData = ppWirelessPSData[i];
dwError = ValidateWirelessPSData(pWirelessPSData, WIRELESS_NETWORK_TYPE_AP);
BAIL_ON_WIN32_ERROR(dwError);
}
for (i=dwNumAPNetworks; i < dwNumPreferredSettings; ++i) {
pWirelessPSData = ppWirelessPSData[i];
dwError = ValidateWirelessPSData(pWirelessPSData, WIRELESS_NETWORK_TYPE_ADHOC);
BAIL_ON_WIN32_ERROR(dwError);
}
}
error:
return(dwError);
}