You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2506 lines
66 KiB
2506 lines
66 KiB
////////////////////////////////////////////////////////////////////
|
|
// Module: Static/StaticShow.cpp
|
|
//
|
|
// Purpose: Static Module Implementation.
|
|
//
|
|
// Developers Name: Surya
|
|
//
|
|
// History:
|
|
//
|
|
// Date Author Comments
|
|
// 10-8-2001 Surya Initial Version. SCM Base line 1.0
|
|
//
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
|
|
#include "nshipsec.h"
|
|
|
|
extern HINSTANCE g_hModule;
|
|
extern STORAGELOCATION g_StorageLocation;
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
//Function: PrintPolicyTable()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// IN PIPSEC_POLICY_DATA pPolicy,
|
|
// IN BOOL bVerb,
|
|
// IN BOOL bAssigned,
|
|
// IN BOOL bWide
|
|
//
|
|
//Return: VOID
|
|
//
|
|
//Description:
|
|
// This function prints out the Policy information.
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
|
|
VOID
|
|
PrintPolicyTable(
|
|
IN PIPSEC_POLICY_DATA pPolicy,
|
|
IN BOOL bVerb,
|
|
IN BOOL bAssigned,
|
|
IN BOOL bWide
|
|
)
|
|
{
|
|
_TCHAR pszGUIDStr[BUFFER_SIZE]={0};
|
|
_TCHAR pszStrTime[BUFFER_SIZE]={0};
|
|
_TCHAR pszStrTruncated[BUFFER_SIZE]={0};
|
|
DWORD i =0,k=0;
|
|
BOOL bDsPolAssigned = FALSE;
|
|
|
|
if (bVerb)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_NEWLINE);
|
|
|
|
// print policy name
|
|
if(pPolicy->pszIpsecName)
|
|
{
|
|
TruncateString(pPolicy->pszIpsecName,pszStrTruncated,POL_TRUNC_LEN_TABLE_VER,bWide);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPOLICY_POL_NAME_STR,pszStrTruncated);
|
|
}
|
|
|
|
// print policy desc
|
|
if(pPolicy->pszDescription)
|
|
{
|
|
TruncateString(pPolicy->pszDescription,pszStrTruncated,POL_TRUNC_LEN_TABLE_VER,bWide);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPOLICY_POL_DESC_STR,pszStrTruncated);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPOLICY_POL_DESC_NONE);
|
|
}
|
|
//print storage info
|
|
PrintStorageInfoTable();
|
|
|
|
//last modified time
|
|
FormatTime((time_t)pPolicy->dwWhenChanged, pszStrTime);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTERDATA_FL_LASTMOD_STR,pszStrTime);
|
|
|
|
//print GUID
|
|
i=StringFromGUID2(pPolicy->PolicyIdentifier,pszGUIDStr,BUFFER_SIZE);
|
|
if(i>0 && (_tcscmp(pszGUIDStr,_TEXT(""))!=0))
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTERDATA_FL_GUID_STR,pszGUIDStr);
|
|
}
|
|
|
|
if(g_StorageLocation.dwLocation !=IPSEC_DIRECTORY_PROVIDER)
|
|
{
|
|
if(bAssigned)
|
|
{
|
|
if (
|
|
ERROR_SUCCESS == IPSecIsDomainPolicyAssigned(&bDsPolAssigned) &&
|
|
g_StorageLocation.dwLocation != IPSEC_PERSISTENT_PROVIDER &&
|
|
bDsPolAssigned
|
|
)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPOLICY_ASSIGNED_AD);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPOLICY_ASSIGNED_YES);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPOLICY_ASSIGNED_NO);
|
|
}
|
|
}
|
|
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPOLICY_POLL_MIN, (pPolicy->dwPollingInterval)/60);
|
|
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTISAKMP_MM_LIFE_FORMAT,(pPolicy->pIpsecISAKMPData->pSecurityMethods[0].Lifetime.Seconds)/60 ,pPolicy->pIpsecISAKMPData->pSecurityMethods[0].QuickModeLimit);
|
|
|
|
if(pPolicy->pIpsecISAKMPData->ISAKMPPolicy.PfsIdentityRequired)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPOLICY_MMPFS_YES);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPOLICY_MMPFS_NO);
|
|
}
|
|
|
|
//print ISAKMP data structure
|
|
|
|
if(pPolicy->pIpsecISAKMPData)
|
|
{
|
|
PrintISAKMPDataTable(pPolicy->pIpsecISAKMPData);
|
|
}
|
|
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPOLICY_RULE_COUNT, pPolicy->dwNumNFACount);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPOLICY_RULE_TITLE);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPOLICY_RULE_UNDERLINE);
|
|
|
|
//print NFA structure in verbose mode
|
|
|
|
for (DWORD j=0;j<pPolicy->dwNumNFACount;j++)
|
|
{
|
|
if(pPolicy->ppIpsecNFAData[j])
|
|
{
|
|
k=StringFromGUID2(pPolicy->ppIpsecNFAData[j]->NFAIdentifier,pszGUIDStr,BUFFER_SIZE);
|
|
if(k>0 && (_tcscmp(pszGUIDStr,_TEXT(""))!=0))
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_RULE_ID_GUID,j+1,pszGUIDStr);
|
|
}
|
|
PrintRuleTable(pPolicy->ppIpsecNFAData[j],bVerb,bWide);
|
|
}
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
if(pPolicy->pszIpsecName)
|
|
{
|
|
TruncateString(pPolicy->pszIpsecName,pszStrTruncated,POL_TRUNC_LEN_TABLE_NVER,bWide);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPOLICY_FORMAT32S,pszStrTruncated);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFSPEC_NONE_STR);
|
|
}
|
|
|
|
// NFA count
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTER_IP_FORMAT_TAB,pPolicy->dwNumNFACount);
|
|
|
|
//last modified time
|
|
FormatTime((time_t)pPolicy->dwWhenChanged, pszStrTime);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_RULE_FORMAT23S,pszStrTime);
|
|
|
|
if(g_StorageLocation.dwLocation != IPSEC_DIRECTORY_PROVIDER)
|
|
{
|
|
if(bAssigned)
|
|
{
|
|
if (ERROR_SUCCESS == IPSecIsDomainPolicyAssigned(&bDsPolAssigned) && bDsPolAssigned)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPOLICY_AD_POL_OVERRIDES);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPOLICY_YES_STR);
|
|
}
|
|
}
|
|
else
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPOLICY_NO_STR);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_NEWLINE);
|
|
}
|
|
}
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
//
|
|
//Function: IsAssigned()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// IN PIPSEC_POLICY_DATA pPolicy,
|
|
// IN HANDLE hStorageHandle
|
|
// IN OUT BOOL &bAssigned
|
|
//
|
|
//Return: DWORD
|
|
//
|
|
//Description:
|
|
// This function checks out whether the specified policy is assigned.
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
|
|
DWORD
|
|
IsAssigned(
|
|
IN PIPSEC_POLICY_DATA pPolicy,
|
|
IN HANDLE hStorageHandle,
|
|
IN OUT BOOL &bAssigned
|
|
)
|
|
{
|
|
PIPSEC_POLICY_DATA pActive=NULL;
|
|
|
|
DWORD dwReturnCode = IPSecGetAssignedPolicyData(hStorageHandle, &pActive);
|
|
|
|
if ((dwReturnCode == ERROR_SUCCESS)&&(pActive!=NULL))
|
|
{
|
|
if (IsEqualGUID(pPolicy->PolicyIdentifier, pActive->PolicyIdentifier))
|
|
{
|
|
bAssigned=TRUE;
|
|
}
|
|
if (pActive)
|
|
{
|
|
IPSecFreePolicyData(pActive);
|
|
}
|
|
}
|
|
|
|
return dwReturnCode;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
//
|
|
//Function: PrintRuleTable()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// IN PIPSEC_NFA_DATA pIpsecNFAData,
|
|
// IN BOOL bVerb,
|
|
// IN BOOL bWide
|
|
//
|
|
//Return: VOID
|
|
//
|
|
//Description:
|
|
// This function prints out the Rule information.
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
|
|
VOID
|
|
PrintRuleTable(
|
|
IN PIPSEC_NFA_DATA pIpsecNFAData,
|
|
IN BOOL bVerb,
|
|
IN BOOL bWide
|
|
)
|
|
{
|
|
_TCHAR pszStrTime[BUFFER_SIZE]={0};
|
|
_TCHAR pszStrTruncated[BUFFER_SIZE]={0};
|
|
|
|
if(!bVerb)
|
|
{
|
|
if(pIpsecNFAData->dwTunnelIpAddr==0)
|
|
{
|
|
//whether the rule is activated
|
|
if(pIpsecNFAData->dwActiveFlag)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_YES_STR);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_NO_STR);
|
|
}
|
|
|
|
if(pIpsecNFAData->pIpsecFilterData && pIpsecNFAData->pIpsecFilterData->pszIpsecName)
|
|
{
|
|
TruncateString(pIpsecNFAData->pIpsecFilterData->pszIpsecName,pszStrTruncated,RUL_TRUNC_LEN_TABLE_NVER,bWide);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_FORMAT23STAB,pszStrTruncated);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_NONE_STR);
|
|
}
|
|
|
|
if(pIpsecNFAData->pIpsecNegPolData && pIpsecNFAData->pIpsecNegPolData->pszIpsecName)
|
|
{
|
|
TruncateString(pIpsecNFAData->pIpsecNegPolData->pszIpsecName,pszStrTruncated,RUL_TRUNC_LEN_TABLE_NVER,bWide);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_FORMAT23STAB,pszStrTruncated);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_NONE_STR);
|
|
}
|
|
|
|
// print auth
|
|
|
|
for (DWORD j=0;j<(pIpsecNFAData->dwAuthMethodCount);j++)
|
|
{
|
|
if(pIpsecNFAData->ppAuthMethods[j])
|
|
{
|
|
if(pIpsecNFAData->ppAuthMethods[j]->dwAuthType==IKE_SSPI)
|
|
{
|
|
//kerb
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_KERB);
|
|
}
|
|
else if(pIpsecNFAData->ppAuthMethods[j]->dwAuthType==IKE_RSA_SIGNATURE)
|
|
{
|
|
//cert
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_CERT);
|
|
}
|
|
else if (pIpsecNFAData->ppAuthMethods[j]->dwAuthType==IKE_PRESHARED_KEY)
|
|
{
|
|
//preshared
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_PRE);
|
|
}
|
|
else
|
|
{
|
|
//none
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_NONE_STR);
|
|
}
|
|
}
|
|
if(j< (pIpsecNFAData->dwAuthMethodCount-1))
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_COMMA);
|
|
}
|
|
|
|
if(!bWide && j==2 && (pIpsecNFAData->dwAuthMethodCount-1)>2 )
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_EXTENSION);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(pIpsecNFAData->dwActiveFlag)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_YES_STR);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_NO_STR);
|
|
}
|
|
if(pIpsecNFAData->pIpsecFilterData && pIpsecNFAData->pIpsecFilterData->pszIpsecName)
|
|
{
|
|
TruncateString(pIpsecNFAData->pIpsecFilterData->pszIpsecName,pszStrTruncated,RUL_TRUNC_LEN_TABLE_NVER,bWide);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_FORMAT23STAB,pszStrTruncated);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_NONE_STR);
|
|
}
|
|
|
|
if(pIpsecNFAData->pIpsecNegPolData && pIpsecNFAData->pIpsecNegPolData->pszIpsecName)
|
|
{
|
|
TruncateString(pIpsecNFAData->pIpsecNegPolData->pszIpsecName,pszStrTruncated,RUL_TRUNC_LEN_TABLE_NVER,bWide);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_FORMAT23STAB,pszStrTruncated);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_NONE_STR);
|
|
}
|
|
//tunnel address
|
|
|
|
PrintIPAddrTable(pIpsecNFAData->dwTunnelIpAddr);
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
if(pIpsecNFAData->pszIpsecName)
|
|
{
|
|
TruncateString(pIpsecNFAData->pszIpsecName,pszStrTruncated,POL_TRUNC_LEN_TABLE_VER,bWide);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_RULE_NAME_STR,pszStrTruncated);
|
|
}
|
|
else if(pIpsecNFAData->pIpsecNegPolData->NegPolType == GUID_NEGOTIATION_TYPE_DEFAULT)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_RULE_NAME_NONE_STR);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_RULE_NAME_NONE);
|
|
}
|
|
|
|
// rule desc
|
|
if(pIpsecNFAData->pszDescription)
|
|
{
|
|
TruncateString(pIpsecNFAData->pszDescription,pszStrTruncated,POL_TRUNC_LEN_TABLE_VER,bWide);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPOLICY_POL_DESC_STR,pszStrTruncated);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPOLICY_POL_DESC_NONE);
|
|
}
|
|
|
|
//last modified time
|
|
|
|
FormatTime((time_t)pIpsecNFAData->dwWhenChanged, pszStrTime);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTERDATA_FL_LASTMOD_STR,pszStrTime);
|
|
|
|
if(pIpsecNFAData->dwActiveFlag)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_ACTIVATED_YES);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_ACTIVATED_NO);
|
|
}
|
|
//tunnel address
|
|
if(pIpsecNFAData->pIpsecNegPolData->NegPolType != GUID_NEGOTIATION_TYPE_DEFAULT)
|
|
{
|
|
if(pIpsecNFAData->dwTunnelIpAddr==0)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_TUNNEL_NONE);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_TUNNEL_IP);
|
|
PrintIPAddrTable(pIpsecNFAData->dwTunnelIpAddr);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_NEWLINE);
|
|
}
|
|
}
|
|
|
|
//interface type
|
|
if(pIpsecNFAData->dwInterfaceType==(DWORD)PAS_INTERFACE_TYPE_ALL)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_CONN_TYPE_ALL);
|
|
}
|
|
else if(pIpsecNFAData->dwInterfaceType==(DWORD)PAS_INTERFACE_TYPE_LAN)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_CONN_TYPE_LAN);
|
|
}
|
|
else if(pIpsecNFAData->dwInterfaceType==(DWORD)PAS_INTERFACE_TYPE_DIALUP)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_CONN_TYPE_DIALUP);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_CONN_TYPE_UNKNOWN);
|
|
}
|
|
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_AUTH_TITLE,pIpsecNFAData->dwAuthMethodCount);
|
|
//print auth
|
|
for (DWORD j=0;j<(pIpsecNFAData->dwAuthMethodCount);j++)
|
|
{
|
|
if(pIpsecNFAData->ppAuthMethods[j])
|
|
{
|
|
PrintAuthMethodsTable(pIpsecNFAData->ppAuthMethods[j]);
|
|
}
|
|
}
|
|
|
|
//print filter data structure
|
|
if (pIpsecNFAData->pIpsecFilterData)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_FILTERLIST_TITLE);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_FILTERLIST_UNDERLINE);
|
|
if(pIpsecNFAData->pIpsecFilterData)
|
|
{
|
|
PrintFilterDataTable(pIpsecNFAData->pIpsecFilterData,bVerb,bWide);
|
|
}
|
|
}
|
|
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_FILTERACTION_TITLE);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTRULE_FILTERACTION_UNDERLINE);
|
|
//print filter action data structure
|
|
if(pIpsecNFAData->pIpsecNegPolData)
|
|
{
|
|
PrintNegPolDataTable(pIpsecNFAData->pIpsecNegPolData,bVerb,bWide);
|
|
}
|
|
}
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
//
|
|
//Function: PrintNegPolData()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// IN PIPSEC_NEGPOL_DATA pIpsecNegPolData,
|
|
// IN BOOL bVerb,
|
|
// IN BOOL bWide
|
|
//
|
|
//Return: VOID
|
|
//
|
|
//Description:
|
|
// This function prints out the Negotiation Policy information.
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
|
|
VOID
|
|
PrintNegPolDataTable(
|
|
IN PIPSEC_NEGPOL_DATA pIpsecNegPolData,
|
|
IN BOOL bVerb,
|
|
IN BOOL bWide
|
|
)
|
|
{
|
|
BOOL bSoft=FALSE;
|
|
_TCHAR pszGUIDStr[BUFFER_SIZE]={0};
|
|
_TCHAR pszStrTruncated[BUFFER_SIZE]={0};
|
|
_TCHAR pszStrTime[BUFFER_SIZE]={0};
|
|
DWORD i=0;
|
|
|
|
if(pIpsecNegPolData)
|
|
{
|
|
if (bVerb)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_NEWLINE);
|
|
|
|
//filteraction name
|
|
|
|
if(pIpsecNegPolData->pszIpsecName)
|
|
{
|
|
TruncateString(pIpsecNegPolData->pszIpsecName,pszStrTruncated,POL_TRUNC_LEN_TABLE_VER,bWide);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_FA_NAME_STR,pszStrTruncated);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_FA_NAME_NONE);
|
|
}
|
|
|
|
//filteraction desc
|
|
if(pIpsecNegPolData->pszDescription)
|
|
{
|
|
TruncateString(pIpsecNegPolData->pszDescription,pszStrTruncated,POL_TRUNC_LEN_TABLE_VER,bWide);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPOLICY_POL_DESC_STR,pszStrTruncated);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPOLICY_POL_DESC_NONE);
|
|
}
|
|
|
|
PrintStorageInfoTable();
|
|
|
|
//negpol action
|
|
if (!(pIpsecNegPolData->NegPolType==GUID_NEGOTIATION_TYPE_DEFAULT))
|
|
{
|
|
if(pIpsecNegPolData->NegPolAction==GUID_NEGOTIATION_ACTION_NO_IPSEC)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_ACTION_PERMIT);
|
|
}
|
|
else if(pIpsecNegPolData->NegPolAction==GUID_NEGOTIATION_ACTION_BLOCK)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_ACTION_BLOCK);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_ACTION_NEGOTIATE);
|
|
}
|
|
}
|
|
//secmethods
|
|
if(pIpsecNegPolData->pIpsecSecurityMethods)
|
|
{
|
|
for (DWORD cnt=0;cnt<pIpsecNegPolData->dwSecurityMethodCount;cnt++)
|
|
if (CheckSoft(pIpsecNegPolData->pIpsecSecurityMethods[cnt]))
|
|
{
|
|
bSoft=TRUE;
|
|
break;
|
|
}
|
|
}
|
|
//inpass
|
|
if(pIpsecNegPolData->NegPolAction==GUID_NEGOTIATION_ACTION_INBOUND_PASSTHRU)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_INPASS_YES);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_INPASS_NO);
|
|
}
|
|
//soft
|
|
if(bSoft)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_SOFT_YES);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_SOFT_NO);
|
|
}
|
|
if (pIpsecNegPolData->dwSecurityMethodCount )
|
|
{
|
|
if(pIpsecNegPolData->pIpsecSecurityMethods && pIpsecNegPolData->pIpsecSecurityMethods[0].PfsQMRequired)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_QMPFS_YES);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_QMPFS_NO);
|
|
}
|
|
}
|
|
|
|
//lastmodified time
|
|
FormatTime((time_t)pIpsecNegPolData->dwWhenChanged, pszStrTime);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTERDATA_FL_LASTMOD_STR,pszStrTime);
|
|
|
|
//guid
|
|
i=StringFromGUID2(pIpsecNegPolData->NegPolIdentifier,pszGUIDStr,BUFFER_SIZE);
|
|
if(i>0 && (_tcscmp(pszGUIDStr,_TEXT(""))!=0))
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTERDATA_FL_GUID_STR,pszGUIDStr);
|
|
}
|
|
|
|
if (pIpsecNegPolData->dwSecurityMethodCount)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_SEC_MTHD_TITLE);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_ALGO_TITLE);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_ALGO_UNDERLINE);
|
|
}
|
|
for (DWORD cnt=0;cnt<pIpsecNegPolData->dwSecurityMethodCount;cnt++)
|
|
{
|
|
//sec methods
|
|
if(pIpsecNegPolData->pIpsecSecurityMethods)
|
|
{
|
|
PrintSecurityMethodsTable(pIpsecNegPolData->pIpsecSecurityMethods[cnt]);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(pIpsecNegPolData->pszIpsecName)
|
|
{
|
|
TruncateString(pIpsecNegPolData->pszIpsecName,pszStrTruncated,FA_TRUNC_LEN_TABLE_NVER,bWide);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_FORMAT38S,pszStrTruncated);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_NONE_STR);
|
|
}
|
|
|
|
//negpol action
|
|
|
|
if (!(pIpsecNegPolData->NegPolType==GUID_NEGOTIATION_TYPE_DEFAULT))
|
|
{
|
|
if(pIpsecNegPolData->NegPolAction==GUID_NEGOTIATION_ACTION_NO_IPSEC)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_PERMIT_STR);
|
|
}
|
|
else if(pIpsecNegPolData->NegPolAction==GUID_NEGOTIATION_ACTION_BLOCK)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_BLOCK_STR);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_NEGOTIATE_STR);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_ACTION_NONE_STR);
|
|
}
|
|
//last modified
|
|
FormatTime((time_t)pIpsecNegPolData->dwWhenChanged, pszStrTime);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_FORMAT23SNEWLINE,pszStrTime);
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
//
|
|
//Function: PrintSecurityMethodsTable()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// IN IPSEC_SECURITY_METHOD IpsecSecurityMethods,
|
|
//
|
|
//Return: VOID
|
|
//
|
|
//Description:
|
|
// This function prints out the the Security Methods information.
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
|
|
VOID
|
|
PrintSecurityMethodsTable(
|
|
IN IPSEC_SECURITY_METHOD IpsecSecurityMethods
|
|
)
|
|
{
|
|
if (!CheckSoft(IpsecSecurityMethods))
|
|
{
|
|
if(IpsecSecurityMethods.Algos)
|
|
{
|
|
//print algo
|
|
PrintAlgoInfoTable(IpsecSecurityMethods.Algos,IpsecSecurityMethods.Count);
|
|
}
|
|
//print life
|
|
PrintLifeTimeTable(IpsecSecurityMethods.Lifetime);
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////
|
|
//
|
|
//Function: PrintAlgoInfo()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// IN PIPSEC_ALGO_INFO Algos,
|
|
// IN DWORD dwNumAlgos
|
|
//
|
|
//Return: VOID
|
|
//
|
|
//Description:
|
|
// This function prints out the the Algorithm information.
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
/////////////////////////////////////////////////////////////////
|
|
|
|
VOID
|
|
PrintAlgoInfoTable(
|
|
IN PIPSEC_ALGO_INFO Algos,
|
|
IN DWORD dwNumAlgos
|
|
)
|
|
{
|
|
if(dwNumAlgos==1) //if only auth or encrpt specified
|
|
{
|
|
//print authentication
|
|
if (Algos[0].operation==AUTHENTICATION)
|
|
{
|
|
if(Algos[0].algoIdentifier==AUTH_ALGO_MD5)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_MD5);
|
|
}
|
|
else if(Algos[0].algoIdentifier==AUTH_ALGO_SHA1)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_SHA1);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_NONE);
|
|
}
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_NONE_NONE);
|
|
}
|
|
else if (Algos[0].operation==ENCRYPTION)
|
|
{
|
|
//print encription
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_NONE);
|
|
|
|
if(Algos[0].secondaryAlgoIdentifier==HMAC_AUTH_ALGO_MD5)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_MD5_COMMA);
|
|
}
|
|
else if(Algos[0].secondaryAlgoIdentifier==HMAC_AUTH_ALGO_SHA1)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_SHA1_COMMA);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_NONE_COMMA);
|
|
}
|
|
|
|
if(Algos[0].algoIdentifier==CONF_ALGO_DES)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_DES_TAB);
|
|
}
|
|
else if(Algos[0].algoIdentifier==CONF_ALGO_3_DES)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_3DES_TAB);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_NONE_TAB);
|
|
}
|
|
}
|
|
}
|
|
else if(dwNumAlgos==2) //if both auth and encrpt specified
|
|
{
|
|
//encryption
|
|
|
|
if (Algos[0].operation==ENCRYPTION)
|
|
{
|
|
if (Algos[1].operation==AUTHENTICATION)
|
|
{
|
|
if(Algos[1].algoIdentifier==AUTH_ALGO_MD5)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_MD5);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_SHA1);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_NONE);
|
|
}
|
|
|
|
if(Algos[0].secondaryAlgoIdentifier==HMAC_AUTH_ALGO_MD5)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_MD5_COMMA);
|
|
}
|
|
else if(Algos[0].secondaryAlgoIdentifier==HMAC_AUTH_ALGO_SHA1)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_SHA1_COMMA);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_NONE_COMMA);
|
|
}
|
|
|
|
if(Algos[0].algoIdentifier==CONF_ALGO_DES)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_DES_TAB);
|
|
}
|
|
else if(Algos[0].algoIdentifier==CONF_ALGO_3_DES)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_3DES_TAB);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_NONE_TAB);
|
|
}
|
|
}
|
|
else //authentication
|
|
{
|
|
if (Algos[0].operation==AUTHENTICATION)
|
|
{
|
|
if(Algos[0].algoIdentifier==AUTH_ALGO_MD5)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_MD5);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_SHA1);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_NONE);
|
|
}
|
|
|
|
if(Algos[1].secondaryAlgoIdentifier==HMAC_AUTH_ALGO_MD5)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_MD5_COMMA);
|
|
}
|
|
else if(Algos[1].secondaryAlgoIdentifier==HMAC_AUTH_ALGO_SHA1)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_SHA1_COMMA);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_NONE_COMMA);
|
|
}
|
|
|
|
if(Algos[1].algoIdentifier==CONF_ALGO_DES)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_DES_TAB);
|
|
}
|
|
else if(Algos[1].algoIdentifier==CONF_ALGO_3_DES)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_3DES_TAB);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALGO_NONE_TAB);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////
|
|
//
|
|
//Function: PrintLifeTimeTable()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// IN LIFETIME LifeTime
|
|
//
|
|
//Return: VOID
|
|
//
|
|
//Description:
|
|
// This function prints out the Life Time details.
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
/////////////////////////////////////////////////////////////////
|
|
|
|
VOID
|
|
PrintLifeTimeTable(
|
|
IN LIFETIME LifeTime
|
|
)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTLIFE_FORMAT,LifeTime.KeyExpirationTime,LifeTime.KeyExpirationBytes);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////
|
|
//
|
|
//Function: CheckSoft()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// IN IPSEC_SECURITY_METHOD IpsecSecurityMethods
|
|
//
|
|
//Return: BOOL
|
|
//
|
|
//Description:
|
|
// This function checks whether soft association exists.
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
BOOL
|
|
CheckSoft(
|
|
IN IPSEC_SECURITY_METHOD IpsecSecurityMethods
|
|
)
|
|
{
|
|
BOOL bSoft=FALSE;
|
|
|
|
if (IpsecSecurityMethods.Count==0)
|
|
{
|
|
bSoft=TRUE;
|
|
}
|
|
|
|
return bSoft;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////
|
|
//
|
|
//Function: PrintAuthMethodsTable()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// IN PIPSEC_AUTH_METHOD pIpsecAuthData
|
|
//
|
|
//Return: VOID
|
|
//
|
|
//Description:
|
|
// This function prints out Authentication details.
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
/////////////////////////////////////////////////////////////////
|
|
|
|
VOID
|
|
PrintAuthMethodsTable(
|
|
IN PIPSEC_AUTH_METHOD pIpsecAuthData
|
|
)
|
|
{
|
|
if(pIpsecAuthData)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_NEWLINE);
|
|
|
|
if(pIpsecAuthData->dwAuthType==IKE_SSPI) //kerb
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTAUTH_KERB);
|
|
}
|
|
else if(pIpsecAuthData->dwAuthType==IKE_RSA_SIGNATURE && pIpsecAuthData->pszAuthMethod)
|
|
{
|
|
//cert
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTAUTH_ROOTCA_FORMAT,pIpsecAuthData->pszAuthMethod);
|
|
//cert mapping flag
|
|
|
|
if((g_StorageLocation.dwLocation != IPSEC_DIRECTORY_PROVIDER && IsDomainMember(g_StorageLocation.pszMachineName))||(g_StorageLocation.dwLocation == IPSEC_DIRECTORY_PROVIDER))
|
|
{
|
|
if(pIpsecAuthData->dwAuthFlags & IPSEC_MM_CERT_AUTH_ENABLE_ACCOUNT_MAP)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_POLICY_CERT_MAP_YES);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_POLICY_CERT_MAP_NO);
|
|
}
|
|
}
|
|
if (pIpsecAuthData->dwAuthFlags & IPSEC_MM_CERT_AUTH_DISABLE_CERT_REQUEST)
|
|
{
|
|
PrintMessageFromModule(g_hModule, SHW_AUTH_EXCLUDE_CA_NAME_YES_STR);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule, SHW_AUTH_EXCLUDE_CA_NAME_NO_STR);
|
|
}
|
|
}
|
|
else if (pIpsecAuthData->dwAuthType==IKE_PRESHARED_KEY && pIpsecAuthData->pszAuthMethod)
|
|
{
|
|
//preshared key
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTAUTH_PRE_FORMAT,pIpsecAuthData->pszAuthMethod);
|
|
}
|
|
else
|
|
{
|
|
//none
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTAUTH_NONE_AUTH_STR);
|
|
}
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////
|
|
//
|
|
//Function: PrintFilterDataTable()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// IN PIPSEC_FILTER_DATA pIpsecFilterData,
|
|
// IN BOOL bVerb,
|
|
// IN BOOL bWide
|
|
//
|
|
//Return: VOID
|
|
//
|
|
//Description:
|
|
// This function prints out Filter list details.
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
/////////////////////////////////////////////////////////////////
|
|
|
|
DWORD
|
|
PrintFilterDataTable(
|
|
IN PIPSEC_FILTER_DATA pIpsecFilterData,
|
|
IN BOOL bVerb,
|
|
IN BOOL bWide
|
|
)
|
|
{
|
|
BOOL bTitlePrinted=FALSE;
|
|
_TCHAR pszGUIDStr[BUFFER_SIZE]={0};
|
|
_TCHAR pszStrTime[BUFFER_SIZE]={0};
|
|
_TCHAR pszStrTruncated[BUFFER_SIZE]={0};
|
|
DWORD i=0,dwReturn = ERROR_SUCCESS;
|
|
|
|
if (pIpsecFilterData)
|
|
{
|
|
if(bVerb)
|
|
{
|
|
//filterlist name
|
|
if(pIpsecFilterData->pszIpsecName)
|
|
{
|
|
TruncateString(pIpsecFilterData->pszIpsecName,pszStrTruncated,POL_TRUNC_LEN_TABLE_VER,bWide);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTERDATA_FL_NAME_STR,pszStrTruncated);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTERDATA_FL_NAME_NONE);
|
|
}
|
|
//filterlist desc
|
|
if(pIpsecFilterData->pszDescription)
|
|
{
|
|
TruncateString(pIpsecFilterData->pszDescription,pszStrTruncated,POL_TRUNC_LEN_TABLE_VER,bWide);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPOLICY_POL_DESC_STR,pszStrTruncated);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPOLICY_POL_DESC_NONE);
|
|
}
|
|
|
|
PrintStorageInfoTable();
|
|
|
|
//last modified
|
|
FormatTime((time_t)pIpsecFilterData->dwWhenChanged, pszStrTime);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTERDATA_FL_LASTMOD_STR,pszStrTime);
|
|
|
|
//guid
|
|
i=StringFromGUID2(pIpsecFilterData->FilterIdentifier,pszGUIDStr,BUFFER_SIZE);
|
|
if(i>0 && (_tcscmp(pszGUIDStr,_TEXT(""))!=0))
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTERDATA_FL_GUID_STR,pszGUIDStr);
|
|
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTERDATA_FILTER_COUNT,pIpsecFilterData->dwNumFilterSpecs);
|
|
|
|
for (DWORD k=0;k<pIpsecFilterData->dwNumFilterSpecs;k++)
|
|
{
|
|
|
|
//print filter specs
|
|
if(!bTitlePrinted)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTERDATA_FILTERS_TITLE);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFSPEC_FILTER_TITLE);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFSPEC_FILTER_UNDERLINE);
|
|
bTitlePrinted=TRUE;
|
|
}
|
|
PrintFilterSpecTable(pIpsecFilterData->ppFilterSpecs[k]);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(pIpsecFilterData->pszIpsecName)
|
|
{
|
|
TruncateString(pIpsecFilterData->pszIpsecName,pszStrTruncated,FL_TRUNC_LEN_TABLE_NVER,bWide);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFSPEC_FORMAT45S,pszStrTruncated);
|
|
}
|
|
else
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFSPEC_NONE_TAB);
|
|
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFSPEC_FORMAT5D,pIpsecFilterData->dwNumFilterSpecs);
|
|
|
|
//last modified
|
|
FormatTime((time_t)pIpsecFilterData->dwWhenChanged, pszStrTime);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFSPEC_FORMATS,pszStrTime);
|
|
}
|
|
}
|
|
return dwReturn;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//Function: PrintIPAddrTable()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// IN DWORD dwAddr
|
|
//
|
|
///Return: VOID
|
|
//
|
|
//Description:
|
|
// This function prints out IP Address.
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
VOID
|
|
PrintIPAddrTable(
|
|
IN DWORD dwAddr
|
|
)
|
|
{
|
|
_TCHAR szIPAddr[20]= {0};
|
|
|
|
// not necessary to change to bounded printf
|
|
|
|
_stprintf(szIPAddr,_T("%d.%d.%d.%d"), (dwAddr & 0x000000FFL),((dwAddr & 0x0000FF00L) >> 8),((dwAddr & 0x00FF0000L) >> 16),((dwAddr & 0xFF000000L) >> 24) );
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_FORMAT15S,szIPAddr);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//Function: GetFilterDNSDetails()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// IN PIPSEC_FILTER_SPEC pFilterData,
|
|
// IN OUT PFILTERDNS pFilterDNS
|
|
//
|
|
//Return: VOID
|
|
//
|
|
//Description:
|
|
// This function gets the details of DNS information.
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
VOID
|
|
GetFilterDNSDetails(
|
|
IN PIPSEC_FILTER_SPEC pFilterData,
|
|
IN OUT PFILTERDNS pFilterDNS
|
|
)
|
|
{
|
|
if ((pFilterData->Filter.SrcAddr == 0) && (pFilterData->Filter.SrcMask == MASK_ME) && (WcsCmp0(pFilterData->pszSrcDNSName,_TEXT("")) == 0))
|
|
{
|
|
pFilterDNS->FilterSrcNameID=FILTER_MYADDRESS;
|
|
}
|
|
else
|
|
{
|
|
if (WcsCmp0(pFilterData->pszSrcDNSName,_TEXT("")) != 0)
|
|
{
|
|
pFilterDNS->FilterSrcNameID=FILTER_DNSADDRESS; //DNS name
|
|
}
|
|
else if ((pFilterData->Filter.SrcAddr == 0) && (pFilterData->Filter.SrcMask == 0))
|
|
{
|
|
pFilterDNS->FilterSrcNameID=FILTER_ANYADDRESS; //any
|
|
}
|
|
else if ((pFilterData->Filter.SrcAddr != 0) && (pFilterData->Filter.SrcMask == MASK_ME))
|
|
{
|
|
pFilterDNS->FilterSrcNameID=FILTER_IPADDRESS; //a specific IP
|
|
}
|
|
else if ((pFilterData->Filter.SrcAddr != 0) && (pFilterData->Filter.SrcMask != 0))
|
|
{
|
|
pFilterDNS->FilterSrcNameID=FILTER_IPSUBNET; //a specific IP subnet
|
|
}
|
|
else
|
|
{
|
|
pFilterDNS->FilterSrcNameID=FILTER_ANYADDRESS; //any
|
|
}
|
|
}
|
|
|
|
if ((pFilterData->Filter.DestAddr == 0) && (pFilterData->Filter.DestMask == 0) && ((WcsCmp0(pFilterData->pszDestDNSName,_TEXT("")) == 0) == 0))
|
|
{
|
|
pFilterDNS->FilterDestNameID= FILTER_ANYADDRESS; //any
|
|
}
|
|
else
|
|
{
|
|
if (WcsCmp0(pFilterData->pszDestDNSName,_TEXT("")) != 0)
|
|
{
|
|
pFilterDNS->FilterDestNameID = FILTER_DNSADDRESS; //DNA name
|
|
}
|
|
else if ((pFilterData->Filter.DestAddr == 0) && (pFilterData->Filter.DestMask == MASK_ME))
|
|
{
|
|
pFilterDNS->FilterDestNameID = FILTER_MYADDRESS; //me
|
|
}
|
|
else if ((pFilterData->Filter.DestAddr != 0) && (pFilterData->Filter.DestMask == MASK_ME))
|
|
{
|
|
pFilterDNS->FilterDestNameID = FILTER_IPADDRESS; //a specifiec IP
|
|
}
|
|
else if ((pFilterData->Filter.DestAddr != 0) && (pFilterData->Filter.DestMask != 0))
|
|
{
|
|
pFilterDNS->FilterDestNameID =FILTER_IPSUBNET; //a specific subnet
|
|
}
|
|
else
|
|
{
|
|
pFilterDNS->FilterDestNameID = FILTER_ANYADDRESS; //any
|
|
}
|
|
}
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//Function: PrintFilterSpecTable()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// IN PIPSEC_FILTER_SPEC pIpsecFilterSpec
|
|
//
|
|
//Return: DWORD
|
|
//
|
|
//Description:
|
|
//
|
|
// This function prints the Filter Spec details
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
DWORD
|
|
PrintFilterSpecTable(
|
|
IN PIPSEC_FILTER_SPEC pIpsecFilterSpec
|
|
)
|
|
{
|
|
DWORD dwReturn = ERROR_SUCCESS;
|
|
|
|
PFILTERDNS pFilterDNS= new FILTERDNS;
|
|
if(pFilterDNS == NULL)
|
|
{
|
|
dwReturn = ERROR_OUTOFMEMORY;
|
|
BAIL_OUT;
|
|
}
|
|
GetFilterDNSDetails(pIpsecFilterSpec, pFilterDNS);
|
|
|
|
if(pIpsecFilterSpec->dwMirrorFlag)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFSPEC_YES_STR_TAB);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFSPEC_NO_STR_TAB);
|
|
}
|
|
|
|
// print the filter details
|
|
|
|
PrintFilterTable(pIpsecFilterSpec->Filter,pFilterDNS);
|
|
error:
|
|
return dwReturn;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//Function: PrintFilterTable()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// IN IPSEC_FILTER Filter,
|
|
// IN PFILTERDNS pFilterDNS
|
|
//
|
|
//Return: VOID
|
|
//
|
|
//Description:
|
|
// This function prints the Filter details
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
VOID
|
|
PrintFilterTable(
|
|
IN IPSEC_FILTER Filter,
|
|
IN PFILTERDNS pFilterDNS
|
|
)
|
|
|
|
{
|
|
|
|
//Source details
|
|
|
|
if ((pFilterDNS->FilterSrcNameID==FILTER_MYADDRESS)&&(Filter.SrcAddr==0))
|
|
{
|
|
if((Filter.ExType == EXT_NORMAL)||((Filter.ExType & EXT_DEST)== EXT_DEST))
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTER_MY_IP_ADDR); // my IP
|
|
}
|
|
else if((Filter.ExType & EXT_DEST) != EXT_DEST) //special servers
|
|
{
|
|
if((Filter.ExType & EXT_DEFAULT_GATEWAY) == EXT_DEFAULT_GATEWAY)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTER_DEFGATE_TAB);
|
|
}
|
|
else if((Filter.ExType & EXT_DHCP_SERVER) == EXT_DHCP_SERVER)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTER_DHCP_TAB);
|
|
}
|
|
else if((Filter.ExType & EXT_WINS_SERVER) == EXT_WINS_SERVER)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTER_WINS_TAB);
|
|
}
|
|
else if((Filter.ExType & EXT_DNS_SERVER) == EXT_DNS_SERVER)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTER_DNS_TAB);
|
|
}
|
|
}
|
|
}
|
|
|
|
else if ((pFilterDNS->FilterSrcNameID==FILTER_ANYADDRESS)&&(Filter.SrcAddr==0))
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTER_ANY_IP_ADDR); //any IP address
|
|
}
|
|
else
|
|
{
|
|
PrintIPAddrTable(Filter.SrcAddr); //print specific IP addr
|
|
}
|
|
|
|
PrintIPAddrTable(Filter.SrcMask); //mask
|
|
|
|
//Destination details
|
|
|
|
if ((pFilterDNS->FilterDestNameID==FILTER_MYADDRESS)&&(Filter.DestAddr==0))
|
|
{
|
|
if((Filter.ExType == EXT_NORMAL)||((Filter.ExType & EXT_DEST) != EXT_DEST)) //my ip addr
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTER_MY_IP_ADDR);
|
|
}
|
|
else if((Filter.ExType & EXT_DEST) == EXT_DEST) // special servers
|
|
{
|
|
if((Filter.ExType & EXT_DEFAULT_GATEWAY) == EXT_DEFAULT_GATEWAY)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTER_DEFGATE_TAB);
|
|
}
|
|
else if((Filter.ExType & EXT_DHCP_SERVER) == EXT_DHCP_SERVER)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTER_DHCP_TAB);
|
|
}
|
|
else if((Filter.ExType & EXT_WINS_SERVER) == EXT_WINS_SERVER)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTER_WINS_TAB);
|
|
}
|
|
else if((Filter.ExType & EXT_DNS_SERVER) == EXT_DNS_SERVER)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTER_DNS_TAB);
|
|
}
|
|
}
|
|
}
|
|
|
|
else if ((pFilterDNS->FilterDestNameID==FILTER_ANYADDRESS)&&(Filter.DestAddr==0))
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTER_ANY_IP_ADDR); //any
|
|
}
|
|
else
|
|
{
|
|
PrintIPAddrTable(Filter.DestAddr); //print specific addr
|
|
}
|
|
|
|
PrintIPAddrTable(Filter.DestMask); //mask
|
|
|
|
PrintProtocolNameTable(Filter.Protocol);
|
|
|
|
if(Filter.SrcPort)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTER_IP_FORMAT_TAB,Filter.SrcPort);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTER_ANY_STR_TAB);
|
|
}
|
|
|
|
if(Filter.DestPort)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTER_IP_FORMAT_NEWLINE,Filter.DestPort);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTER_ANY_STR_NEWLINE);
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//Function: PrintProtocolName()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// DWORD dwProtocol
|
|
//
|
|
//Return: VOID
|
|
//
|
|
//Description:
|
|
// This function prints protocol name corresponding to protocoll ID.
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
VOID
|
|
PrintProtocolNameTable(
|
|
DWORD dwProtocol
|
|
)
|
|
{
|
|
switch(dwProtocol)
|
|
{
|
|
case PROT_ID_ICMP :
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPROTOCOL_ICMP_TAB);
|
|
break;
|
|
case PROT_ID_TCP :
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPROTOCOL_TCP_TAB);
|
|
break;
|
|
case PROT_ID_UDP :
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPROTOCOL_UDP_TAB);
|
|
break;
|
|
case PROT_ID_RAW :
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPROTOCOL_RAW_TAB);
|
|
break;
|
|
case PROT_ID_ANY :
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPROTOCOL_ANY_TAB);
|
|
break;
|
|
default:
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTPROTOCOL_OTHER_TAB);
|
|
break;
|
|
};
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//Function: PrintISAKMPDataTable()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// IN PIPSEC_ISAKMP_DATA pIpsecISAKMPData,
|
|
//
|
|
//Return: VOID
|
|
//
|
|
//Description:
|
|
// This function prints out the ISAKMP details.
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
VOID
|
|
PrintISAKMPDataTable(
|
|
IN PIPSEC_ISAKMP_DATA pIpsecISAKMPData
|
|
)
|
|
{
|
|
if(pIpsecISAKMPData)
|
|
{
|
|
//ISAKMP details
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTISAKMP_MMSEC_TITLE);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTISAKMP_MMSEC_MTD_TILE);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTISAKMP_MMSEC_MTD_UNDERLINE);
|
|
for (DWORD Loop=0;Loop<pIpsecISAKMPData->dwNumISAKMPSecurityMethods;Loop++)
|
|
{
|
|
if(pIpsecISAKMPData->pSecurityMethods)
|
|
{
|
|
PrintISAKAMPSecurityMethodsTable(pIpsecISAKMPData->pSecurityMethods[Loop]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//Function: PrintISAKAMPSecurityMethodsTable()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// IN CRYPTO_BUNDLE SecurityMethods,
|
|
//
|
|
//Return: VOID
|
|
//
|
|
//Description:
|
|
// This function prints out the ISAKMP SecurityMethods details.
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
VOID
|
|
PrintISAKAMPSecurityMethodsTable(
|
|
IN CRYPTO_BUNDLE SecurityMethods
|
|
)
|
|
{
|
|
// encription
|
|
if(SecurityMethods.EncryptionAlgorithm.AlgorithmIdentifier==CONF_ALGO_DES)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTISAKMPSEC_DES_TAB);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTISAKMPSEC_3DES_TAB);
|
|
}
|
|
|
|
//hash algo
|
|
if(SecurityMethods.HashAlgorithm.AlgorithmIdentifier==AUTH_ALGO_SHA1)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTISAKMPSEC_SHA1_TAB);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTISAKMPSEC_MD5_TAB);
|
|
}
|
|
|
|
//DH group
|
|
if(SecurityMethods.OakleyGroup==POTF_OAKLEY_GROUP1)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTISAKMPSEC_DH_LOW);
|
|
}
|
|
else if (SecurityMethods.OakleyGroup==POTF_OAKLEY_GROUP2)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTISAKMPSEC_DH_MEDIUM);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTISAKMPSEC_DH_2048);
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//Function: PrintStandAloneFAData()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// IN HANDLE hPolicyStorage,
|
|
// IN BOOL bVerbose,
|
|
// IN BOOL bTable,
|
|
// IN BOOL bWide
|
|
//
|
|
//Return: DWORD
|
|
//
|
|
//Description:
|
|
// This function prints out the Filter actions details ,unattached to any of the policies.
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
DWORD
|
|
PrintStandAloneFAData(
|
|
IN HANDLE hPolicyStorage,
|
|
IN BOOL bVerbose,
|
|
IN BOOL bTable,
|
|
IN BOOL bWide
|
|
)
|
|
{
|
|
|
|
DWORD dwReturnCode = S_OK;
|
|
BOOL bTitlePrinted=FALSE, bStandAlone=TRUE;
|
|
PIPSEC_NEGPOL_DATA *ppNegPolEnum = NULL,pNegPol=NULL;
|
|
DWORD dwNumNegPol=0;
|
|
DWORD cnt=0,num=1;
|
|
|
|
dwReturnCode = IPSecEnumNegPolData(hPolicyStorage, &ppNegPolEnum, &dwNumNegPol);
|
|
|
|
if (!(dwReturnCode == ERROR_SUCCESS && dwNumNegPol > 0 && ppNegPolEnum != NULL))
|
|
{
|
|
BAIL_OUT; // if no FA , bail out of the function
|
|
}
|
|
|
|
for(cnt=0; cnt < dwNumNegPol;cnt++)
|
|
{
|
|
bStandAlone=TRUE;
|
|
dwReturnCode = IPSecCopyNegPolData(ppNegPolEnum[cnt], &pNegPol);
|
|
|
|
if ((dwReturnCode == ERROR_SUCCESS) && (pNegPol != NULL)&&(pNegPol->NegPolType!=GUID_NEGOTIATION_TYPE_DEFAULT))
|
|
{
|
|
//check whether it is stand alone
|
|
dwReturnCode= IsStandAloneFA(pNegPol,hPolicyStorage,bStandAlone);
|
|
if (dwReturnCode == ERROR_SUCCESS)
|
|
{
|
|
if(bStandAlone) // if standalone print the details of it
|
|
{
|
|
if(!bTitlePrinted)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTSAFA_STAND_ALONE_FA_TITLE);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTSAFA_STAND_ALONE_FA_UNDERLINE);
|
|
}
|
|
num++;
|
|
if(bTable)
|
|
PrintNegPolDataTable(pNegPol,bVerbose,bWide);
|
|
else
|
|
PrintNegPolDataList(pNegPol,bVerbose,bWide);
|
|
bTitlePrinted=TRUE;
|
|
}
|
|
}
|
|
if(pNegPol) IPSecFreeNegPolData(pNegPol);
|
|
}
|
|
if (dwReturnCode != ERROR_SUCCESS) break;
|
|
}
|
|
// clean up
|
|
if (dwNumNegPol > 0 && ppNegPolEnum != NULL)
|
|
{
|
|
IPSecFreeMulNegPolData( ppNegPolEnum,dwNumNegPol);
|
|
}
|
|
if(num-1)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTSAFA_STAND_ALONE_FA_COUNT,num-1);
|
|
}
|
|
error:
|
|
return dwReturnCode;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//Function: IsStandAloneFA()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// IN PIPSEC_NEGPOL_DATA pNegPol,
|
|
// IN HANDLE hPolicyStorage
|
|
//
|
|
//Return: VOID
|
|
//
|
|
//Description:
|
|
// This function checks whether the specified Filter Action is unattached to any of the policies.
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
DWORD
|
|
IsStandAloneFA(
|
|
IN PIPSEC_NEGPOL_DATA pNegPol,
|
|
IN HANDLE hPolicyStorage,
|
|
IN OUT BOOL &bStandAlone
|
|
)
|
|
{
|
|
PIPSEC_POLICY_DATA *ppPolicyEnum = NULL,pPolicy=NULL;
|
|
DWORD dwNumPolicies = 0 , i = 0;
|
|
RPC_STATUS RpcStat;
|
|
DWORD dwReturnCode = S_OK;
|
|
|
|
dwReturnCode = IPSecEnumPolicyData(hPolicyStorage, &ppPolicyEnum, &dwNumPolicies);
|
|
|
|
if (!(dwReturnCode == ERROR_SUCCESS && dwNumPolicies > 0 && ppPolicyEnum != NULL))
|
|
{
|
|
dwReturnCode = ERROR_SUCCESS;
|
|
BAIL_OUT; // if nothing exists , bail out
|
|
}
|
|
for (i = 0; i < dwNumPolicies; i++)
|
|
{
|
|
dwReturnCode = IPSecCopyPolicyData(ppPolicyEnum[i], &pPolicy);
|
|
if (dwReturnCode == ERROR_SUCCESS)
|
|
{
|
|
//enum rules
|
|
dwReturnCode = IPSecEnumNFAData(hPolicyStorage, pPolicy->PolicyIdentifier, &(pPolicy->ppIpsecNFAData), &(pPolicy->dwNumNFACount));
|
|
if (dwReturnCode == ERROR_SUCCESS)
|
|
{
|
|
DWORD j;
|
|
for (j = 0; j < pPolicy->dwNumNFACount; j++)
|
|
{
|
|
if (!UuidIsNil(&(pPolicy->ppIpsecNFAData[j]->NegPolIdentifier), &RpcStat))
|
|
{
|
|
dwReturnCode=IPSecGetNegPolData(hPolicyStorage, pPolicy->ppIpsecNFAData[j]->NegPolIdentifier,&(pPolicy->ppIpsecNFAData[j]->pIpsecNegPolData));
|
|
if(dwReturnCode != ERROR_SUCCESS)
|
|
{
|
|
PrintErrorMessage(IPSEC_ERR,0,ERRCODE_SHW_STATIC_TAB_POLICY_3,pPolicy->pszIpsecName);
|
|
}
|
|
}
|
|
if (dwReturnCode != ERROR_SUCCESS) break;
|
|
|
|
}
|
|
}
|
|
if(dwReturnCode == ERROR_SUCCESS)
|
|
{
|
|
for (DWORD n = 0; n < pPolicy->dwNumNFACount; n++)
|
|
{
|
|
//check whether standalone filteraction
|
|
if (UuidCompare(&(pPolicy->ppIpsecNFAData[n]->pIpsecNegPolData->NegPolIdentifier), &(pNegPol->NegPolIdentifier), &RpcStat) == 0 && RpcStat == RPC_S_OK || (pNegPol->NegPolType==GUID_NEGOTIATION_TYPE_DEFAULT))
|
|
{
|
|
bStandAlone=FALSE;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (pPolicy)
|
|
IPSecFreePolicyData(pPolicy);
|
|
}
|
|
if ((!bStandAlone)||(dwReturnCode != ERROR_SUCCESS)) break;
|
|
}
|
|
//clean up
|
|
if (dwNumPolicies > 0 && ppPolicyEnum != NULL)
|
|
{
|
|
IPSecFreeMulPolicyData(ppPolicyEnum, dwNumPolicies);
|
|
}
|
|
error:
|
|
return dwReturnCode;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//Function: PrintStandAloneFLData()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// IN HANDLE hPolicyStorage,
|
|
// IN BOOL bVerbose
|
|
// IN BOOL bTable,
|
|
// IN BOOL bWide
|
|
//
|
|
//Return: VOID
|
|
//
|
|
//Description:
|
|
// This function prints out the Filter Lists details ,unattached to any of the policies.
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
DWORD
|
|
PrintStandAloneFLData(
|
|
IN HANDLE hPolicyStorage,
|
|
IN BOOL bVerbose,
|
|
IN BOOL bTable,
|
|
IN BOOL bWide
|
|
)
|
|
{
|
|
DWORD dwReturnCode = S_OK;
|
|
BOOL bTitlePrinted=FALSE,bStandAlone=TRUE;
|
|
PIPSEC_FILTER_DATA *ppFilterEnum = NULL,pFilter=NULL;
|
|
DWORD dwNumFilter=0;
|
|
DWORD cnt=0,num=1;
|
|
|
|
dwReturnCode = IPSecEnumFilterData(hPolicyStorage, &ppFilterEnum, &dwNumFilter);
|
|
|
|
if (!(dwReturnCode == ERROR_SUCCESS && dwNumFilter > 0 && ppFilterEnum != NULL))
|
|
{
|
|
BAIL_OUT; // if nothing available, bail out od the function
|
|
}
|
|
for(cnt=0; cnt < dwNumFilter;cnt++)
|
|
{
|
|
bStandAlone=TRUE;
|
|
|
|
dwReturnCode = IPSecCopyFilterData(ppFilterEnum[cnt], &pFilter);
|
|
if ((dwReturnCode == ERROR_SUCCESS) && (pFilter != NULL))
|
|
{
|
|
dwReturnCode= IsStandAloneFL(pFilter,hPolicyStorage,bStandAlone);
|
|
if (dwReturnCode == ERROR_SUCCESS)
|
|
{
|
|
if(bStandAlone) // print the details, if it is standalone
|
|
{
|
|
if(!bTitlePrinted)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTSAFL_STAND_ALONE_FL_TITLE);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTSAFL_STAND_ALONE_FL_UNDERLINE);
|
|
}
|
|
num++;
|
|
// print in required format
|
|
if(bTable)
|
|
{
|
|
PrintFilterDataTable(pFilter,bVerbose,bWide);
|
|
}
|
|
else
|
|
{
|
|
dwReturnCode = PrintFilterDataList(pFilter,bVerbose,FALSE,bWide);
|
|
BAIL_ON_WIN32_ERROR(dwReturnCode);
|
|
}
|
|
bTitlePrinted=TRUE; // this is to print the title only once
|
|
}
|
|
}
|
|
if(pFilter) IPSecFreeFilterData(pFilter);
|
|
}
|
|
|
|
if (dwReturnCode != ERROR_SUCCESS) break;
|
|
}
|
|
if(ppFilterEnum && dwNumFilter > 0)
|
|
{
|
|
IPSecFreeMulFilterData( ppFilterEnum,dwNumFilter);
|
|
}
|
|
if(num-1)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTSAFL_STAND_ALONE_FL_COUNT,num-1);
|
|
}
|
|
|
|
error:
|
|
return dwReturnCode;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//Function: IsStandAloneFL()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// IN PIPSEC_FILTER_DATA pFilter,
|
|
// IN HANDLE hPolicyStorage
|
|
// IN OUT BOOL & bStandAlone
|
|
//
|
|
//Return: VOID
|
|
//
|
|
//Description:
|
|
// This function checks whether the specified Filter List is unattached to any of the policies.
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
DWORD
|
|
IsStandAloneFL(
|
|
IN PIPSEC_FILTER_DATA pFilter,
|
|
IN HANDLE hPolicyStorage,
|
|
IN OUT BOOL & bStandAlone
|
|
)
|
|
{
|
|
|
|
PIPSEC_POLICY_DATA *ppPolicyEnum = NULL,pPolicy=NULL;
|
|
DWORD dwNumPolicies = 0 , i =0;
|
|
RPC_STATUS RpcStat=RPC_S_OK;
|
|
DWORD dwReturnCode = S_OK;
|
|
|
|
dwReturnCode = IPSecEnumPolicyData(hPolicyStorage, &ppPolicyEnum, &dwNumPolicies);
|
|
|
|
if (!(dwReturnCode == ERROR_SUCCESS && dwNumPolicies > 0 && ppPolicyEnum != NULL))
|
|
{
|
|
dwReturnCode = ERROR_SUCCESS;
|
|
BAIL_OUT; // if nothing found, bail out of the function
|
|
}
|
|
|
|
for (i = 0; i < dwNumPolicies; i++)
|
|
{
|
|
dwReturnCode = IPSecCopyPolicyData(ppPolicyEnum[i], &pPolicy);
|
|
if (dwReturnCode == ERROR_SUCCESS)
|
|
{
|
|
dwReturnCode = IPSecEnumNFAData(hPolicyStorage, pPolicy->PolicyIdentifier, &(pPolicy->ppIpsecNFAData), &(pPolicy->dwNumNFACount));
|
|
|
|
if (dwReturnCode == ERROR_SUCCESS)
|
|
{
|
|
DWORD j;
|
|
for (j = 0; j < pPolicy->dwNumNFACount; j++)
|
|
{
|
|
if (!UuidIsNil(&(pPolicy->ppIpsecNFAData[j]->FilterIdentifier), &RpcStat))
|
|
{
|
|
dwReturnCode=IPSecGetFilterData(hPolicyStorage, pPolicy->ppIpsecNFAData[j]->FilterIdentifier,&(pPolicy->ppIpsecNFAData[j]->pIpsecFilterData));
|
|
if(dwReturnCode != ERROR_SUCCESS)
|
|
PrintErrorMessage(IPSEC_ERR,0,ERRCODE_SHW_STATIC_TAB_POLICY_4,pPolicy->pszIpsecName);
|
|
}
|
|
if (dwReturnCode != ERROR_SUCCESS)
|
|
{
|
|
bStandAlone=FALSE;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(dwReturnCode == ERROR_SUCCESS)
|
|
{
|
|
for (DWORD n = 0; n < pPolicy->dwNumNFACount; n++)
|
|
{
|
|
if (UuidCompare(&(pPolicy->ppIpsecNFAData[n]->pIpsecFilterData->FilterIdentifier), &(pFilter->FilterIdentifier), &RpcStat) == 0 && RpcStat == RPC_S_OK )
|
|
{
|
|
// check whether it is stand alone or used some where
|
|
bStandAlone=FALSE;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (pPolicy) IPSecFreePolicyData(pPolicy);
|
|
}
|
|
if ((!bStandAlone)||(dwReturnCode != ERROR_SUCCESS)) break;
|
|
}
|
|
//clean up
|
|
if (dwNumPolicies > 0 && ppPolicyEnum != NULL)
|
|
{
|
|
IPSecFreeMulPolicyData(ppPolicyEnum, dwNumPolicies);
|
|
}
|
|
error:
|
|
return dwReturnCode;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//Function: PrintAllFilterData()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// IN HANDLE hPolicyStorage,
|
|
// IN LPTSTR pszFlistName,
|
|
// IN BOOL bVerbose,
|
|
// IN BOOL bTable,
|
|
// IN BOOL bResolveDNS,
|
|
// IN BOOL bWide
|
|
//
|
|
//Return: DWORD
|
|
//
|
|
//Description:
|
|
// This function prints out all the filter data
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
DWORD
|
|
PrintAllFilterData(
|
|
IN HANDLE hPolicyStorage,
|
|
IN LPTSTR pszFlistName,
|
|
IN BOOL bVerbose,
|
|
IN BOOL bTable,
|
|
IN BOOL bResolveDNS,
|
|
IN BOOL bWide
|
|
)
|
|
{
|
|
DWORD dwReturnCode = S_OK;
|
|
BOOL bNoFilter=TRUE, bAll=TRUE;
|
|
PIPSEC_FILTER_DATA *ppFilterEnum = NULL,pFilter=NULL;
|
|
DWORD dwNumFilters=0;
|
|
DWORD cnt=0;
|
|
BOOL bTitlePrinted=FALSE;
|
|
|
|
if (pszFlistName) bAll=FALSE;
|
|
|
|
dwReturnCode = IPSecEnumFilterData(hPolicyStorage, &ppFilterEnum, &dwNumFilters);
|
|
if (!(dwReturnCode == ERROR_SUCCESS && dwNumFilters > 0 && ppFilterEnum != NULL))
|
|
{
|
|
PrintErrorMessage(IPSEC_ERR,0,ERRCODE_SHW_STATIC_TAB_PRTALLFL_2);
|
|
BAIL_OUT; // if nothing exists, bail out of the function
|
|
}
|
|
for(cnt=0; cnt < dwNumFilters;cnt++)
|
|
{
|
|
dwReturnCode = IPSecCopyFilterData(ppFilterEnum[cnt], &pFilter);
|
|
|
|
if ((dwReturnCode == ERROR_SUCCESS) && (pFilter != NULL))
|
|
{
|
|
//if exists , print the details
|
|
if(bAll||((pFilter->pszIpsecName!=NULL)&&(pszFlistName!=NULL)&&(_tcscmp(pFilter->pszIpsecName,pszFlistName)==0)))
|
|
{
|
|
if(bTable) // print as per the requested format
|
|
{
|
|
if(!bVerbose && !bTitlePrinted)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTERDATA_NONVERB_TITLE);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTFILTERDATA_NONVERB_UNDERLINE);
|
|
bTitlePrinted=TRUE;
|
|
}
|
|
PrintFilterDataTable(pFilter,bVerbose,bWide);
|
|
}
|
|
else
|
|
{
|
|
dwReturnCode = PrintFilterDataList(pFilter,bVerbose,bResolveDNS,bWide);
|
|
BAIL_ON_WIN32_ERROR(dwReturnCode);
|
|
}
|
|
bNoFilter=FALSE;
|
|
}
|
|
if(pFilter) IPSecFreeFilterData(pFilter);
|
|
}
|
|
if (dwReturnCode != ERROR_SUCCESS) break;
|
|
}
|
|
|
|
if (bAll) // if all is specified, print the count
|
|
{
|
|
if(bTable)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALLFL_FL_COUNT_TAB,dwNumFilters);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALLFL_FL_COUNT_LIST,dwNumFilters);
|
|
}
|
|
}
|
|
|
|
//error message
|
|
if (bNoFilter && pszFlistName && (dwReturnCode == ERROR_SUCCESS))
|
|
{
|
|
PrintErrorMessage(IPSEC_ERR,0,ERRCODE_SHW_STATIC_TAB_PRTALLFL_3,pszFlistName);
|
|
}
|
|
//clean up
|
|
if(ppFilterEnum && dwNumFilters>0)
|
|
{
|
|
IPSecFreeMulFilterData( ppFilterEnum,dwNumFilters);
|
|
}
|
|
error:
|
|
return dwReturnCode;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//Function: PrintAllFilterActionData()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// IN HANDLE hPolicyStorage,
|
|
// IN LPTSTR pszFactName,
|
|
// IN BOOL bVerbose,
|
|
// IN BOOL bTable,
|
|
// IN BOOL bWide
|
|
//
|
|
//Return: VOID
|
|
//
|
|
//Description:
|
|
// This function prints out all the filter action data
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
DWORD
|
|
PrintAllFilterActionData(
|
|
IN HANDLE hPolicyStorage,
|
|
IN LPTSTR pszFactName,
|
|
IN BOOL bVerbose,
|
|
IN BOOL bTable,
|
|
IN BOOL bWide
|
|
)
|
|
{
|
|
|
|
DWORD dwReturnCode = S_OK;
|
|
PIPSEC_NEGPOL_DATA *ppNegPolEnum = NULL,pNegPol=NULL;
|
|
DWORD dwNumNegPol=0,dwNegPol=0;
|
|
DWORD cnt=0;
|
|
BOOL bAll=TRUE,bNoFilterAct=TRUE,bTitlePrinted=FALSE;
|
|
|
|
if (pszFactName) bAll=FALSE;
|
|
|
|
dwReturnCode = IPSecEnumNegPolData(hPolicyStorage, &ppNegPolEnum, &dwNumNegPol);
|
|
|
|
if (!(dwReturnCode == ERROR_SUCCESS && dwNumNegPol > 0 && ppNegPolEnum != NULL))
|
|
{
|
|
PrintErrorMessage(IPSEC_ERR,0,ERRCODE_SHW_STATIC_TAB_PRTALLFA_6);
|
|
BAIL_OUT; // if nothing found, bail out
|
|
}
|
|
|
|
if (bAll)
|
|
{
|
|
for (DWORD Loop=0;Loop< dwNumNegPol;Loop++)
|
|
{
|
|
if(IsEqualGUID(ppNegPolEnum[Loop]->NegPolType,GUID_NEGOTIATION_TYPE_DEFAULT)) continue;
|
|
dwNegPol++; // ignore default filteractions
|
|
}
|
|
}
|
|
for(cnt=0; cnt < dwNumNegPol ;cnt++)
|
|
{
|
|
dwReturnCode = IPSecCopyNegPolData(ppNegPolEnum[cnt], &pNegPol);
|
|
|
|
if ((dwReturnCode == ERROR_SUCCESS) && (pNegPol != NULL))
|
|
{
|
|
//if something found, print them in requested format
|
|
if((bAll&&(pNegPol->NegPolType!=GUID_NEGOTIATION_TYPE_DEFAULT))||((pNegPol->pszIpsecName!=NULL)&&(pszFactName!=NULL)&&(_tcscmp(pNegPol->pszIpsecName,pszFactName)==0)))
|
|
{
|
|
if(bTable)
|
|
{
|
|
if(!bVerbose && !bTitlePrinted)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_NONVERB_TITLE);
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTNEGPOL_NONVERB_UNDERLINE);
|
|
bTitlePrinted=TRUE;
|
|
}
|
|
PrintNegPolDataTable(pNegPol,bVerbose,bWide); //table format
|
|
}
|
|
else
|
|
PrintNegPolDataList(pNegPol,bVerbose,bWide); // list format
|
|
bNoFilterAct=FALSE;
|
|
}
|
|
if(pNegPol) IPSecFreeNegPolData(pNegPol);
|
|
}
|
|
if (dwReturnCode != ERROR_SUCCESS) break;
|
|
}
|
|
//error messages
|
|
if (bAll&& (dwNegPol==0) && (dwReturnCode == ERROR_SUCCESS))
|
|
{
|
|
PrintErrorMessage(IPSEC_ERR,0,ERRCODE_SHW_STATIC_TAB_PRTALLFA_6);
|
|
}
|
|
else if (bNoFilterAct&&pszFactName && (dwReturnCode == ERROR_SUCCESS))
|
|
{
|
|
PrintErrorMessage(IPSEC_ERR,0,ERRCODE_SHW_STATIC_TAB_PRTALLFA_FA_COUNT_LIST,pszFactName);
|
|
}
|
|
|
|
if(dwNegPol> 0) // negpol count printing
|
|
{
|
|
if(bTable)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALLFA_FA_COUNT_TAB,dwNegPol);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_PRTALLFA_FA_COUNT_LIST,dwNegPol);
|
|
}
|
|
}
|
|
//clean up
|
|
if (dwNumNegPol > 0 && ppNegPolEnum != NULL)
|
|
{
|
|
IPSecFreeMulNegPolData( ppNegPolEnum,dwNumNegPol);
|
|
}
|
|
|
|
error:
|
|
return dwReturnCode;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//Function: GetPolicyInfoFromDomain()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// IN LPTSTR pszDirectoryName,
|
|
// IN LPTSTR szPolicyDN
|
|
//
|
|
//Return: DWORD
|
|
//
|
|
//Description:
|
|
// This function prints the details of GPO assigned policy from domain.
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
DWORD
|
|
GetPolicyInfoFromDomain(
|
|
IN LPTSTR pszDirectoryName,
|
|
IN LPTSTR szPolicyDN,
|
|
IN OUT PGPO pGPO
|
|
)
|
|
{
|
|
|
|
DWORD dwReturnCode=ERROR_SUCCESS , dwStrLength = 0;
|
|
LPTSTR pszDomainName=NULL;
|
|
DWORD dwLocation=IPSEC_DIRECTORY_PROVIDER;
|
|
_TCHAR szPathName[MAX_PATH] ={0};
|
|
DWORD dwNumPolicies = 0, i =0;
|
|
PIPSEC_POLICY_DATA *ppPolicyEnum = NULL ;
|
|
HANDLE hPolicyStorage = NULL;
|
|
LPWSTR pszPolicyIdentifier= new _TCHAR[POLICYGUID_STR_SIZE];
|
|
if(pszPolicyIdentifier==NULL)
|
|
{
|
|
dwReturnCode=ERROR_OUTOFMEMORY;
|
|
BAIL_OUT;
|
|
}
|
|
|
|
PDOMAIN_CONTROLLER_INFO pDomainControllerInfo = NULL;
|
|
DWORD Flags = DS_DIRECTORY_SERVICE_REQUIRED | DS_RETURN_DNS_NAME | DS_FORCE_REDISCOVERY;
|
|
|
|
//get domain and DC name
|
|
|
|
DWORD hr = DsGetDcName(NULL,
|
|
NULL,
|
|
NULL,
|
|
NULL,
|
|
Flags,
|
|
&pDomainControllerInfo
|
|
) ;
|
|
if(hr==NO_ERROR && pDomainControllerInfo)
|
|
{
|
|
if(pDomainControllerInfo->DomainName)
|
|
{
|
|
dwStrLength = _tcslen(pDomainControllerInfo->DomainName);
|
|
|
|
pGPO->pszDomainName= new _TCHAR[dwStrLength+1];
|
|
if(pGPO->pszDomainName==NULL)
|
|
{
|
|
dwReturnCode=ERROR_OUTOFMEMORY;
|
|
BAIL_OUT;
|
|
}
|
|
_tcsncpy(pGPO->pszDomainName,pDomainControllerInfo->DomainName,dwStrLength+1);
|
|
}
|
|
|
|
if(pDomainControllerInfo->DomainControllerName)
|
|
{
|
|
dwStrLength = _tcslen(pDomainControllerInfo->DomainControllerName);
|
|
|
|
pGPO->pszDCName= new _TCHAR[dwStrLength+1];
|
|
if(pGPO->pszDCName==NULL)
|
|
{
|
|
dwReturnCode=ERROR_OUTOFMEMORY;
|
|
BAIL_OUT;
|
|
}
|
|
_tcsncpy(pGPO->pszDCName,pDomainControllerInfo->DomainControllerName,dwStrLength+1);
|
|
}
|
|
|
|
NetApiBufferFree(pDomainControllerInfo); //free it after used
|
|
}
|
|
|
|
dwReturnCode = OpenPolicyStore(&hPolicyStorage);
|
|
if (dwReturnCode != ERROR_SUCCESS)
|
|
{
|
|
PrintErrorMessage(IPSEC_ERR,0,ERRCODE_FAILED_POLSTORE_OPEN);
|
|
dwReturnCode=ERROR_SUCCESS;
|
|
BAIL_OUT;
|
|
}
|
|
|
|
dwReturnCode = IPSecEnumPolicyData(hPolicyStorage, &ppPolicyEnum, &dwNumPolicies);
|
|
if (!(dwReturnCode == ERROR_SUCCESS && dwNumPolicies > 0 && ppPolicyEnum != NULL))
|
|
{
|
|
PrintErrorMessage(IPSEC_ERR,0,ERRCODE_NO_POLICY);
|
|
dwReturnCode= ERROR_SUCCESS;
|
|
BAIL_OUT;
|
|
}
|
|
|
|
//check for any domain policy which is assigned
|
|
// if yes, copy the name and other details to local structure
|
|
|
|
for (i = 0; i < dwNumPolicies; i++)
|
|
{
|
|
DWORD dwReturn = StringFromGUID2(ppPolicyEnum[i]->PolicyIdentifier, pszPolicyIdentifier, POLICYGUID_STR_SIZE);
|
|
if(dwReturn == 0)
|
|
{
|
|
dwReturnCode = ERROR_INVALID_DATA;
|
|
BAIL_OUT;
|
|
}
|
|
ComputePolicyDN(pszDirectoryName, pszPolicyIdentifier, szPathName);
|
|
|
|
if ( szPathName[0] && szPolicyDN[0] && !_tcsicmp(szPolicyDN, szPathName))
|
|
{
|
|
pGPO->bActive=TRUE;
|
|
if(ppPolicyEnum[i]->pszIpsecName)
|
|
{
|
|
dwStrLength = _tcslen(ppPolicyEnum[i]->pszIpsecName);
|
|
|
|
pGPO->pszPolicyName = new _TCHAR[dwStrLength+1];
|
|
if(pGPO->pszPolicyName==NULL)
|
|
{
|
|
dwReturnCode=ERROR_OUTOFMEMORY;
|
|
BAIL_OUT;
|
|
}
|
|
_tcsncpy(pGPO->pszPolicyName,ppPolicyEnum[i]->pszIpsecName,dwStrLength+1);
|
|
}
|
|
|
|
dwStrLength = _tcslen(szPolicyDN);
|
|
|
|
pGPO->pszPolicyDNName=new _TCHAR[dwStrLength+1];
|
|
if(pGPO->pszPolicyDNName==NULL)
|
|
{
|
|
dwReturnCode=ERROR_OUTOFMEMORY;
|
|
BAIL_OUT;
|
|
}
|
|
_tcsncpy(pGPO->pszPolicyDNName,szPolicyDN,dwStrLength+1);
|
|
}
|
|
}
|
|
// clean up
|
|
if (dwNumPolicies > 0 && ppPolicyEnum != NULL)
|
|
{
|
|
IPSecFreeMulPolicyData(ppPolicyEnum, dwNumPolicies);
|
|
}
|
|
if(dwReturnCode == ERROR_FILE_NOT_FOUND)
|
|
dwReturnCode=ERROR_SUCCESS;
|
|
|
|
ClosePolicyStore(hPolicyStorage);
|
|
|
|
error:
|
|
if(pszPolicyIdentifier) delete []pszPolicyIdentifier;
|
|
if(pszDomainName) delete []pszDomainName;
|
|
|
|
return dwReturnCode;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//Function: PrintStorageInfoTable()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// VOID
|
|
//
|
|
//
|
|
//Return: DWORD
|
|
//
|
|
//Description:
|
|
// This function prints out the the Security Methods information.
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
DWORD
|
|
PrintStorageInfoTable(
|
|
VOID
|
|
)
|
|
{
|
|
DWORD dwReturn = ERROR_SUCCESS , dwStrLength = 0, dwStoreId = 0;
|
|
|
|
if(g_StorageLocation.dwLocation!=IPSEC_DIRECTORY_PROVIDER)
|
|
{
|
|
if(_tcscmp(g_StorageLocation.pszMachineName,_TEXT(""))!=0) // if name exists in global variable, print
|
|
{
|
|
if (g_StorageLocation.dwLocation == IPSEC_REGISTRY_PROVIDER)
|
|
{
|
|
dwStoreId = SHW_STATIC_TAB_POLICY_STORE_RM_NAME;
|
|
}
|
|
else
|
|
{
|
|
dwStoreId = SHW_STATIC_TAB_POLICY_STORE_RM_NAMEP;
|
|
}
|
|
|
|
PrintMessageFromModule(g_hModule,dwStoreId,g_StorageLocation.pszMachineName);
|
|
}
|
|
else // if no name exists in global variable, get it and print
|
|
{
|
|
_TCHAR pszLocalMachineName[MAXSTRLEN] = {0};
|
|
DWORD MaxStringLen=MAXSTRLEN;
|
|
|
|
GetComputerName(pszLocalMachineName,&MaxStringLen); // to get the computer name
|
|
|
|
if(_tcscmp(pszLocalMachineName,_TEXT(""))!=0)
|
|
{
|
|
if (g_StorageLocation.dwLocation == IPSEC_REGISTRY_PROVIDER)
|
|
{
|
|
dwStoreId = SHW_STATIC_TAB_POLICY_STORE_LM_NAME;
|
|
}
|
|
else
|
|
{
|
|
dwStoreId = SHW_STATIC_TAB_POLICY_STORE_LM_NAMEP;
|
|
}
|
|
|
|
PrintMessageFromModule(g_hModule,dwStoreId,pszLocalMachineName);
|
|
}
|
|
else
|
|
{
|
|
if (g_StorageLocation.dwLocation == IPSEC_REGISTRY_PROVIDER)
|
|
{
|
|
dwStoreId = SHW_STATIC_TAB_POLICY_STORE_LM;
|
|
}
|
|
else
|
|
{
|
|
dwStoreId = SHW_STATIC_TAB_POLICY_STORE_LP;
|
|
}
|
|
|
|
PrintMessageFromModule(g_hModule,dwStoreId);
|
|
}
|
|
}
|
|
}
|
|
else if(g_StorageLocation.dwLocation==IPSEC_DIRECTORY_PROVIDER)
|
|
{
|
|
if(_tcscmp(g_StorageLocation.pszDomainName,_TEXT(""))!=0)
|
|
{
|
|
// if name exists in global variable, print
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_POLICY_STORE_RD_NAME,g_StorageLocation.pszDomainName);
|
|
}
|
|
else
|
|
{
|
|
// if no name exists in global variable, get it and print
|
|
PDOMAIN_CONTROLLER_INFO pDomainControllerInfo = NULL;
|
|
LPTSTR pszDomainName = NULL;
|
|
|
|
DWORD Flags = DS_DIRECTORY_SERVICE_REQUIRED | DS_RETURN_DNS_NAME | DS_FORCE_REDISCOVERY;
|
|
|
|
// to get the DOMAIN name
|
|
|
|
DWORD hr = DsGetDcName(NULL,
|
|
NULL,
|
|
NULL,
|
|
NULL,
|
|
Flags,
|
|
&pDomainControllerInfo
|
|
) ;
|
|
|
|
if(hr==NO_ERROR && pDomainControllerInfo && pDomainControllerInfo->DomainName)
|
|
{
|
|
dwStrLength = _tcslen(pDomainControllerInfo->DomainName);
|
|
pszDomainName= new _TCHAR[dwStrLength+1];
|
|
if(pszDomainName == NULL)
|
|
{
|
|
dwReturn = ERROR_OUTOFMEMORY;
|
|
BAIL_OUT;
|
|
}
|
|
_tcsncpy(pszDomainName,pDomainControllerInfo->DomainName,dwStrLength+1);
|
|
}
|
|
|
|
if (pDomainControllerInfo)
|
|
{
|
|
NetApiBufferFree(pDomainControllerInfo);
|
|
}
|
|
|
|
if(pszDomainName)
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_POLICY_STORE_LD_NAME,pszDomainName);
|
|
}
|
|
else
|
|
{
|
|
PrintMessageFromModule(g_hModule,SHW_STATIC_TAB_POLICY_STORE_LD);
|
|
}
|
|
|
|
if(pszDomainName) delete [] pszDomainName;
|
|
}
|
|
}
|
|
error:
|
|
return dwReturn;
|
|
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//Function: TruncateString()
|
|
//
|
|
//Date of Creation: 21st Aug 2001
|
|
//
|
|
//Parameters:
|
|
// IN LPTSTR pszOriginalString,
|
|
// IN OUT LPTSTR &pszReturnString,
|
|
// IN DWORD dwTruncLen,
|
|
// IN BOOL bWide
|
|
//
|
|
//
|
|
//Return: VOID
|
|
//
|
|
//Description:
|
|
// This function prints out the the Security Methods information.
|
|
//
|
|
//Revision History:
|
|
//
|
|
// Date Author Comments
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
VOID
|
|
TruncateString(
|
|
IN LPTSTR pszOriginalString,
|
|
IN OUT LPOLESTR pszReturnString,
|
|
IN DWORD dwTruncLen,
|
|
IN BOOL bWide
|
|
)
|
|
{
|
|
|
|
//this truncates the string to the requested extent
|
|
_tcsncpy(pszReturnString,pszOriginalString,BUFFER_SIZE-1);
|
|
|
|
if(!bWide && (DWORD)_tcslen(pszOriginalString)> dwTruncLen)
|
|
{
|
|
pszReturnString[dwTruncLen]= _TEXT('\0');
|
|
pszReturnString[dwTruncLen-1]= _TEXT('.');
|
|
pszReturnString[dwTruncLen-2]= _TEXT('.');
|
|
pszReturnString[dwTruncLen-3]= _TEXT('.');
|
|
}
|
|
}
|