|
|
////////////////////////////////////////////////////////////////////
// Module: Static/StaticShowList.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: PrintPolicyList()
//
//Date of Creation: 21st Aug 2001
//
//Parameters:
// IN PIPSEC_POLICY_DATA pPolicy,
// IN BOOL bVerb,
// IN BOOL bAssigned,
// IN BOOL bWide
//Return: DWORD
//
//Description:
// This function prints out the Policy information.
//
//Revision History:
//
//Date Author Comments
//
////////////////////////////////////////////////////////////////////
DWORD PrintPolicyList( 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,dwReturn = ERROR_SUCCESS; BOOL bDsPolAssigned = FALSE;
PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_NEWLINE);
// print name
if(pPolicy->pszIpsecName) { TruncateString(pPolicy->pszIpsecName,pszStrTruncated,POL_TRUNC_LEN_TABLE_VER,bWide); PrintMessageFromModule(g_hModule,SHW_STATIC_PRTPOLICY_POL_NAME_STR,pszStrTruncated); } // print desc
if(pPolicy->pszDescription) { TruncateString(pPolicy->pszDescription,pszStrTruncated,POL_TRUNC_LEN_TABLE_VER,bWide); PrintMessageFromModule(g_hModule,SHW_STATIC_PRTPOLICY_POL_DESC_STR,pszStrTruncated); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTPOLICY_POL_DESC_NONE); }
if (bVerb) // storage info
{ dwReturn = PrintStorageInfoList(FALSE); if(dwReturn == ERROR_OUTOFMEMORY) { BAIL_OUT; } }
//last modified time
FormatTime((time_t)pPolicy->dwWhenChanged, pszStrTime); PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTERDATA_FL_LASTMODIFIED,pszStrTime);
if(bVerb) { i=StringFromGUID2(pPolicy->PolicyIdentifier,pszGUIDStr,BUFFER_SIZE); if(i>0 && (_tcscmp(pszGUIDStr,_TEXT(""))!=0)) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTERDATA_FL_GUID,pszGUIDStr); } }
//whether the policy is active
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_PRTPOLICY_ASSIGNED_AD); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTPOLICY_ASSIGNED_YES_STR); } } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTPOLICY_ASSIGNED_NO_STR); } }
if(!bVerb) { if(pPolicy->pIpsecISAKMPData->ISAKMPPolicy.PfsIdentityRequired) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTPOLICY_MMPFS_YES_STR); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTPOLICY_MMPFS_NO_STR); } }
PrintMessageFromModule(g_hModule,SHW_STATIC_PRTPOLICY_POLL_INTERVAL, (pPolicy->dwPollingInterval)/60);
if (bVerb) //verbose mode
{ PrintMessageFromModule(g_hModule,SHW_STATIC_PRTISAKMP_MMLIFETIME_STR,(pPolicy->pIpsecISAKMPData->pSecurityMethods[0].Lifetime.Seconds)/60 ,pPolicy->pIpsecISAKMPData->pSecurityMethods[0].QuickModeLimit);
if(pPolicy->pIpsecISAKMPData->ISAKMPPolicy.PfsIdentityRequired) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTPOLICY_MMPFS_YES_STR); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTPOLICY_MMPFS_NO_STR); }
if(pPolicy->pIpsecISAKMPData) // print the ISAKMP data structure details
{ PrintISAKMPDataList(pPolicy->pIpsecISAKMPData); }
PrintMessageFromModule(g_hModule,SHW_STATIC_PRTPOLICY_RULE_COUNT, pPolicy->dwNumNFACount); PrintMessageFromModule(g_hModule,SHW_STATIC_PRTPOLICY_RULE_DETAILS_TITLE); PrintMessageFromModule(g_hModule,SHW_STATIC_PRTPOLICY_RULE_DETAILS_UNDERLINE);
//print rule data structures
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_RULE_RULE_ID_GUID,j+1,pszGUIDStr); }
dwReturn = PrintRuleList(pPolicy->ppIpsecNFAData[j],bVerb,bWide); if(dwReturn == ERROR_OUTOFMEMORY) { BAIL_OUT; } } } } error:
return dwReturn; }
////////////////////////////////////////////////////////////////////
//
//Function: PrintRuleList()
//
//Date of Creation: 21st Aug 2001
//
//Parameters:
// IN PIPSEC_NFA_DATA pIpsecNFAData,
// IN BOOL bVerb,
// IN BOOL bWide
//
//Return: DWORD
//
//Description:
// This function prints out the Rule information.
//
//Revision History:
//
//Date Author Comments
//
////////////////////////////////////////////////////////////////////
DWORD PrintRuleList( IN PIPSEC_NFA_DATA pIpsecNFAData, IN BOOL bVerb, IN BOOL bWide ) { _TCHAR pszStrTime[BUFFER_SIZE]={0}; _TCHAR pszStrTruncated[BUFFER_SIZE]={0}; DWORD dwReturn = ERROR_SUCCESS;
if(pIpsecNFAData->pszIpsecName) { TruncateString(pIpsecNFAData->pszIpsecName,pszStrTruncated,POL_TRUNC_LEN_TABLE_VER,bWide); PrintMessageFromModule(g_hModule,SHW_STATIC_PRTRULE_RULE_NAME_STR,pszStrTruncated); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTRULE_RULE_NAME_NONE); }
if(bVerb) { if(pIpsecNFAData->pszDescription) { TruncateString(pIpsecNFAData->pszDescription,pszStrTruncated,POL_TRUNC_LEN_TABLE_VER,bWide); PrintMessageFromModule(g_hModule,SHW_STATIC_PRTPOLICY_POL_DESC_STR,pszStrTruncated); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTPOLICY_POL_DESC_NONE); } }
//last modified time
FormatTime((time_t)pIpsecNFAData->dwWhenChanged, pszStrTime); PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTERDATA_FL_LASTMODIFIED,pszStrTime);
if(pIpsecNFAData->dwActiveFlag) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTRULE_ACTIVATED_YES_STR); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTRULE_ACTIVATED_NO_STR); }
if(!bVerb) //non verbose
{ if(pIpsecNFAData->pIpsecFilterData && pIpsecNFAData->pIpsecFilterData->pszIpsecName) { TruncateString(pIpsecNFAData->pIpsecFilterData->pszIpsecName,pszStrTruncated,POL_TRUNC_LEN_TABLE_VER,bWide); PrintMessageFromModule(g_hModule,SHW_STATIC_RULE_FL_NAME_STR,pszStrTruncated); } else PrintMessageFromModule(g_hModule,SHW_STATIC_RULE_FL_NAME_NONE);
if(pIpsecNFAData->pIpsecNegPolData && pIpsecNFAData->pIpsecNegPolData->pszIpsecName) { TruncateString(pIpsecNFAData->pIpsecNegPolData->pszIpsecName,pszStrTruncated,POL_TRUNC_LEN_TABLE_VER,bWide); PrintMessageFromModule(g_hModule,SHW_STATIC_PRTNEGPOL_FA_NAME_STR,pszStrTruncated); } else PrintMessageFromModule(g_hModule,SHW_STATIC_PRTNEGPOL_FA_NAME_NONE); } if(pIpsecNFAData->dwTunnelIpAddr!=0) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTRULE_TUNNEL_IP); PrintIPAddrList(pIpsecNFAData->dwTunnelIpAddr); }
//interface type
if(pIpsecNFAData->dwInterfaceType==(DWORD)PAS_INTERFACE_TYPE_ALL) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTRULE_CONN_ALL_STR); } else if(pIpsecNFAData->dwInterfaceType==(DWORD)PAS_INTERFACE_TYPE_LAN) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTRULE_CONN_LAN_STR); } else if(pIpsecNFAData->dwInterfaceType==(DWORD)PAS_INTERFACE_TYPE_DIALUP) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTRULE_CONN_DIALUP_STR); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTRULE_CONN_NONE_STR); }
//auth count
if ( pIpsecNFAData->dwAuthMethodCount) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTRULE_AUTH_TITLE,pIpsecNFAData->dwAuthMethodCount); } for (DWORD j=0;j<(pIpsecNFAData->dwAuthMethodCount);j++) { // print auth methods details
if(pIpsecNFAData->ppAuthMethods[j]) { PrintAuthMethodsList(pIpsecNFAData->ppAuthMethods[j]); } }
if(bVerb) { //print the filter data details
if (pIpsecNFAData->pIpsecFilterData) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTRULE_FL_DETAILS_TITLE); PrintMessageFromModule(g_hModule,SHW_STATIC_PRTRULE_FL_DETAILS_UNDERLINE); if(pIpsecNFAData->pIpsecFilterData) { dwReturn = PrintFilterDataList(pIpsecNFAData->pIpsecFilterData,bVerb,FALSE,bWide); if(dwReturn == ERROR_OUTOFMEMORY) { BAIL_OUT; } } } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTRULE_NO_FL_FOR_DEF_RULE); }
PrintMessageFromModule(g_hModule,SHW_STATIC_PRTRULE_FA_DETAILS_TITLE); PrintMessageFromModule(g_hModule,SHW_STATIC_PRTRULE_FA_TITLE_UNDERLINE); //print the filter action details
if(pIpsecNFAData->pIpsecNegPolData) { PrintNegPolDataList(pIpsecNFAData->pIpsecNegPolData,bVerb,bWide); } } error: return dwReturn; }
////////////////////////////////////////////////////////////////////
//
//Function: PrintNegPolDataList()
//
//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 PrintNegPolDataList( IN PIPSEC_NEGPOL_DATA pIpsecNegPolData, IN BOOL bVerb, IN BOOL bWide ) {
BOOL bSoft=FALSE; _TCHAR pszGUIDStr[BUFFER_SIZE]={0}; _TCHAR pszStrTime[BUFFER_SIZE]={0}; _TCHAR pszStrTruncated[BUFFER_SIZE]={0}; DWORD i=0;
if(pIpsecNegPolData) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_NEWLINE);
//print filteraction name
if(pIpsecNegPolData->pszIpsecName) { TruncateString(pIpsecNegPolData->pszIpsecName,pszStrTruncated,POL_TRUNC_LEN_TABLE_VER,bWide); PrintMessageFromModule(g_hModule,SHW_STATIC_PRTNEGPOL_FA_NAME_STR,pszStrTruncated); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTNEGPOL_FA_NAME_NONE); }
if(pIpsecNegPolData->pszDescription) { TruncateString(pIpsecNegPolData->pszDescription,pszStrTruncated,POL_TRUNC_LEN_TABLE_VER,bWide); PrintMessageFromModule(g_hModule,SHW_STATIC_PRTPOLICY_POL_DESC_STR,pszStrTruncated); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTPOLICY_POL_DESC_NONE); }
if(bVerb) //storage info
{ PrintStorageInfoList(FALSE); }
//print action
if (!(pIpsecNegPolData->NegPolType==GUID_NEGOTIATION_TYPE_DEFAULT)) { if(pIpsecNegPolData->NegPolAction==GUID_NEGOTIATION_ACTION_NO_IPSEC) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTNEGPOL_ACTION_PERMIT); } else if(pIpsecNegPolData->NegPolAction==GUID_NEGOTIATION_ACTION_BLOCK) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTNEGPOL_ACTION_BLOCK); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTNEGPOL_ACTION_NEGOTIATE); } }
for (DWORD cnt=0;cnt<pIpsecNegPolData->dwSecurityMethodCount;cnt++) { if (CheckSoft(pIpsecNegPolData->pIpsecSecurityMethods[cnt])) { bSoft=TRUE; break;} }
//soft association
if(bSoft) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTNEGPOL_SOFT_YES_STR); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTNEGPOL_SOFT_NO_STR); }
if(pIpsecNegPolData->NegPolAction==GUID_NEGOTIATION_ACTION_INBOUND_PASSTHRU) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTNEGPOL_INPASS_YES_STR); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTNEGPOL_INPASS_NO_STR); }
if(bVerb) { if (pIpsecNegPolData->dwSecurityMethodCount ) { if(pIpsecNegPolData->pIpsecSecurityMethods && pIpsecNegPolData->pIpsecSecurityMethods[0].PfsQMRequired) PrintMessageFromModule(g_hModule,SHW_STATIC_PRTNEGPOL_QMPFS_YES_STR); else PrintMessageFromModule(g_hModule,SHW_STATIC_PRTNEGPOL_QMPFS_NO_STR); } }
//last modified time
FormatTime((time_t)pIpsecNegPolData->dwWhenChanged, pszStrTime); PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTERDATA_FL_LASTMODIFIED,pszStrTime);
//print guid
i=StringFromGUID2(pIpsecNegPolData->NegPolIdentifier,pszGUIDStr,BUFFER_SIZE); if(i>0 && (_tcscmp(pszGUIDStr,_TEXT(""))!=0)) PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTERDATA_FL_GUID,pszGUIDStr);
if (bVerb) { //print security methods
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++) { if(pIpsecNegPolData->pIpsecSecurityMethods) { PrintSecurityMethodsTable(pIpsecNegPolData->pIpsecSecurityMethods[cnt]); } } } } }
////////////////////////////////////////////////////////////////////
//
//Function: PrintAuthMethodsList()
//
//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 PrintAuthMethodsList( IN PIPSEC_AUTH_METHOD pIpsecAuthData ) { if(pIpsecAuthData) { PrintMessageFromModule(g_hModule, DYNAMIC_SHOW_MMF_NEWLINE_TAB);
if(pIpsecAuthData->dwAuthType==IKE_SSPI) //kerb
{ PrintMessageFromModule(g_hModule,SHW_STATIC_PRTAUTH_KERBEROS); } else if(pIpsecAuthData->dwAuthType==IKE_RSA_SIGNATURE && pIpsecAuthData->pszAuthMethod) { DisplayCertInfo(pIpsecAuthData->pszAuthMethod, pIpsecAuthData->dwAuthFlags); } else if (pIpsecAuthData->dwAuthType==IKE_PRESHARED_KEY && pIpsecAuthData->pszAuthMethod) { //preshared key
PrintMessageFromModule(g_hModule,SHW_STATIC_PRTAUTH_PRE_STR,pIpsecAuthData->pszAuthMethod); } else { //none
PrintMessageFromModule(g_hModule,SHW_STATIC_PRTAUTH_NONE_STR); } } }
////////////////////////////////////////////////////////////////////
//
//Function: PrintFilterDataList()
//
//Date of Creation: 21st Aug 2001
//
//Parameters:
// IN PIPSEC_FILTER_DATA pIpsecFilterData,
// IN BOOL bVerb,
// IN BOOL bResolveDNS,
// IN BOOL bWide
//
//Return: DWORD
//
//Description:
// This function prints out Filter list details.
//
//Revision History:
//
//Date Author Comments
//
////////////////////////////////////////////////////////////////////
DWORD PrintFilterDataList( IN PIPSEC_FILTER_DATA pIpsecFilterData, IN BOOL bVerb, IN BOOL bResolveDNS, IN BOOL bWide ) { _TCHAR pszGUIDStr[BUFFER_SIZE]={0}; _TCHAR pszStrTime[BUFFER_SIZE]={0}; _TCHAR pszStrTruncated[BUFFER_SIZE]={0}; DWORD i=0 , dwReturn = ERROR_SUCCESS;
if (pIpsecFilterData) { //name
if(pIpsecFilterData->pszIpsecName) { TruncateString(pIpsecFilterData->pszIpsecName,pszStrTruncated,POL_TRUNC_LEN_TABLE_VER,bWide); PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTERDATA_FL_NAME_STR,pszStrTruncated); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTERDATA_FL_NAME_NONE); } //desc
if(pIpsecFilterData->pszDescription) { TruncateString(pIpsecFilterData->pszDescription,pszStrTruncated,POL_TRUNC_LEN_TABLE_VER,bWide); PrintMessageFromModule(g_hModule,SHW_STATIC_PRTPOLICY_POL_DESC_STR,pszStrTruncated); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTPOLICY_POL_DESC_NONE); }
if(bVerb) // storage info
{ PrintStorageInfoList(FALSE); }
if(!bVerb) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTERDATA_FILTERS_COUNT,pIpsecFilterData->dwNumFilterSpecs); } //last modified
FormatTime((time_t)pIpsecFilterData->dwWhenChanged, pszStrTime); PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTERDATA_FL_LASTMODIFIED,pszStrTime);
//print guid
i=StringFromGUID2(pIpsecFilterData->FilterIdentifier,pszGUIDStr,BUFFER_SIZE); if(i>0 && (_tcscmp(pszGUIDStr,_TEXT(""))!=0)) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTERDATA_FL_GUID,pszGUIDStr); }
if(bVerb) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTERDATA_FILTERS_COUNT,pIpsecFilterData->dwNumFilterSpecs); }
if(bVerb) { //print filter specs
if(pIpsecFilterData->dwNumFilterSpecs) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTERDATA_FILTERS_TITLE); PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTERDATA_FILTERS_TITLE_UNDERLINE); } for (DWORD k=0;k<pIpsecFilterData->dwNumFilterSpecs;k++) { dwReturn = PrintFilterSpecList(pIpsecFilterData->ppFilterSpecs[k],bResolveDNS,bWide);
if(dwReturn == ERROR_OUTOFMEMORY) { BAIL_OUT; } } } } error: return dwReturn; }
////////////////////////////////////////////////////////////////////
//
//Function: PrintFilterSpecList()
//
//Date of Creation: 21st Aug 2001
//
//Parameters:
// IN PIPSEC_FILTER_SPEC pIpsecFilterSpec,
// IN BOOL bResolveDNS,
// IN BOOL bWide
//
//Return: DWORD
//
//Description:
// This function prints the Filter Spec details
//
//Revision History:
//
//Date Author Comments
//
////////////////////////////////////////////////////////////////////
DWORD PrintFilterSpecList( IN PIPSEC_FILTER_SPEC pIpsecFilterSpec, IN BOOL bResolveDNS, IN BOOL bWide ) { DWORD dwReturn = ERROR_SUCCESS; _TCHAR pszStrTruncated[BUFFER_SIZE]={0}; PFILTERDNS pFilterDNS= new FILTERDNS ;
if(pFilterDNS==NULL) { dwReturn = ERROR_OUTOFMEMORY; BAIL_OUT; }
GetFilterDNSDetails(pIpsecFilterSpec, pFilterDNS);
if (pFilterDNS) { //desc
if ( WcsCmp0(pIpsecFilterSpec->pszDescription,_TEXT(""))!=0) { TruncateString(pIpsecFilterSpec->pszDescription,pszStrTruncated,POL_TRUNC_LEN_TABLE_VER,bWide); PrintMessageFromModule(g_hModule,SHW_STATIC_PRTPOLICY_POL_DESC_STR, pszStrTruncated); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTPOLICY_POL_DESC_NONE); } //mirrored
if(pIpsecFilterSpec->dwMirrorFlag) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_MIR_YES_STR); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_MIR_NO_STR); } //special server and me
if ((pFilterDNS->FilterSrcNameID==FILTER_MYADDRESS)&&(pIpsecFilterSpec->Filter.SrcAddr==0)) { if((pIpsecFilterSpec->Filter.ExType == EXT_NORMAL)||((pIpsecFilterSpec->Filter.ExType & EXT_DEST)== EXT_DEST)) { //me
PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTER_SRCIP_ME); } else if((pIpsecFilterSpec->Filter.ExType & EXT_DEST) != EXT_DEST) { if((pIpsecFilterSpec->Filter.ExType & EXT_DEFAULT_GATEWAY)==EXT_DEFAULT_GATEWAY) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTER_SRCIP_DEFGATEWAY); } else if((pIpsecFilterSpec->Filter.ExType & EXT_DHCP_SERVER)==EXT_DHCP_SERVER) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTER_SRCIP_DHCPSERVER); } else if((pIpsecFilterSpec->Filter.ExType & EXT_WINS_SERVER)== EXT_WINS_SERVER) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTER_SRCIP_WINSSERVER); } else if((pIpsecFilterSpec->Filter.ExType & EXT_DNS_SERVER)==EXT_DNS_SERVER) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTER_SRCIP_DNSSERVER); } } }
else if ((pFilterDNS->FilterSrcNameID==FILTER_ANYADDRESS)&&(pIpsecFilterSpec->Filter.SrcAddr==0)) { //any
PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTER_SRCIP_ANY); } else { //other IP address
PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTER_SRCIP_STR); if(bResolveDNS && (WcsCmp0(pIpsecFilterSpec->pszSrcDNSName,_TEXT("")) != 0)) { PrintIPAddrDNS(pIpsecFilterSpec->Filter.SrcAddr); PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTER_RESOLVES,pIpsecFilterSpec->pszSrcDNSName); } else { PrintIPAddrList(pIpsecFilterSpec->Filter.SrcAddr); } } //mask
PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTER_SRCIP_MASK); PrintIPAddrList(pIpsecFilterSpec->Filter.SrcMask);
switch(pFilterDNS->FilterSrcNameID) { //dns name
case FILTER_MYADDRESS : { if((pIpsecFilterSpec->Filter.ExType == EXT_NORMAL)||((pIpsecFilterSpec->Filter.ExType & EXT_DEST)== EXT_DEST)) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_SRCDNS_ME); } else if((pIpsecFilterSpec->Filter.ExType & EXT_DEST) != EXT_DEST) { if((pIpsecFilterSpec->Filter.ExType & EXT_DEFAULT_GATEWAY)==EXT_DEFAULT_GATEWAY) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_SRCDNS_DEFGATEWAY); } else if((pIpsecFilterSpec->Filter.ExType & EXT_DHCP_SERVER)==EXT_DHCP_SERVER) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_SRCDNS_DHCPSERVER); } else if((pIpsecFilterSpec->Filter.ExType & EXT_WINS_SERVER)== EXT_WINS_SERVER) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_SRCDNS_WINSSERVER); } else if((pIpsecFilterSpec->Filter.ExType & EXT_DNS_SERVER)==EXT_DNS_SERVER) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_SRCDNS_DNSSERVER); } } } break; case FILTER_DNSADDRESS: { if(!bResolveDNS) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_SRCDNS_STR, pIpsecFilterSpec->pszSrcDNSName); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_SRCDNS_RESOLVE, pIpsecFilterSpec->pszSrcDNSName); dwReturn = PrintResolveDNS(pIpsecFilterSpec->pszSrcDNSName); if(dwReturn == ERROR_OUTOFMEMORY) { BAIL_OUT; } } } break; case FILTER_ANYADDRESS: PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_SRCDNS_ANY); break; case FILTER_IPADDRESS : PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_SRCDNS_SPECIFIC_IP); break; case FILTER_IPSUBNET : PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_SRCDNS_SPECIFIC_SUBNET); break; default: PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_SRCDNS_ANY); break; };
//destination details
if ((pFilterDNS->FilterDestNameID==FILTER_MYADDRESS)&&(pIpsecFilterSpec->Filter.DestAddr==0)) { if((pIpsecFilterSpec->Filter.ExType == EXT_NORMAL)||((pIpsecFilterSpec->Filter.ExType & EXT_DEST) != EXT_DEST)) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTER_DSTIP_ME); } else if((pIpsecFilterSpec->Filter.ExType & EXT_DEST) == EXT_DEST) { // server types
if((pIpsecFilterSpec->Filter.ExType & EXT_DEFAULT_GATEWAY)==EXT_DEFAULT_GATEWAY) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTER_DSTIP_DEFGATEWAY); } else if((pIpsecFilterSpec->Filter.ExType & EXT_DHCP_SERVER)==EXT_DHCP_SERVER) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTER_DSTIP_DHCPSERVER); } else if((pIpsecFilterSpec->Filter.ExType & EXT_WINS_SERVER)==EXT_WINS_SERVER) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTER_DSTIP_WINSSERVER); } else if((pIpsecFilterSpec->Filter.ExType & EXT_DNS_SERVER)==EXT_DNS_SERVER) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTER_DSTIP_DNSSERVER); } } } else if ((pFilterDNS->FilterDestNameID==FILTER_ANYADDRESS)&&(pIpsecFilterSpec->Filter.DestAddr==0)) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTER_DSTIP_ANY); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTER_DSTIP_STR); if(bResolveDNS && (WcsCmp0(pIpsecFilterSpec->pszDestDNSName,_TEXT("")) != 0)) { PrintIPAddrDNS(pIpsecFilterSpec->Filter.DestAddr); PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTER_RESOLVES,pIpsecFilterSpec->pszDestDNSName); } else { PrintIPAddrList(pIpsecFilterSpec->Filter.DestAddr); } }
PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTER_DSTIP_MASK); PrintIPAddrList(pIpsecFilterSpec->Filter.DestMask); switch(pFilterDNS->FilterDestNameID) { case FILTER_MYADDRESS : { if((pIpsecFilterSpec->Filter.ExType == EXT_NORMAL)||((pIpsecFilterSpec->Filter.ExType & EXT_DEST) != EXT_DEST)) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_DSTDNS_ME); } else if((pIpsecFilterSpec->Filter.ExType & EXT_DEST) == EXT_DEST) { if((pIpsecFilterSpec->Filter.ExType & EXT_DEFAULT_GATEWAY)==EXT_DEFAULT_GATEWAY) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_DSTDNS_DEFGATEWAY); } else if((pIpsecFilterSpec->Filter.ExType & EXT_DHCP_SERVER)==EXT_DHCP_SERVER) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_DSTDNS_DHCPSERVER); } else if((pIpsecFilterSpec->Filter.ExType & EXT_WINS_SERVER)==EXT_WINS_SERVER) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_DSTDNS_WINSSERVER); } else if((pIpsecFilterSpec->Filter.ExType & EXT_DNS_SERVER)==EXT_DNS_SERVER) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_DSTDNS_DNSSERVER); } } } break; case FILTER_DNSADDRESS: { if(!bResolveDNS) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_DSTDNS_STR, pIpsecFilterSpec->pszDestDNSName); } else // resolve DNS address
{ PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_DST_DNS_RESOLVE, pIpsecFilterSpec->pszDestDNSName); dwReturn = PrintResolveDNS(pIpsecFilterSpec->pszDestDNSName); if(dwReturn == ERROR_OUTOFMEMORY) { BAIL_OUT; }
} } break; case FILTER_ANYADDRESS: //any
PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_DSTDNS_ANY); break; case FILTER_IPADDRESS : //a specific IP
PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_DSTDNS_SPECIFIC_IP); break; case FILTER_IPSUBNET : //a specific IP subnet
PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_DSTDNS_SPECIFIC_SUBNET); break; default: PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_DSTDNS_ANY); break; };
//print protocol
PrintProtocolNameList(pIpsecFilterSpec->Filter.Protocol);
if(pIpsecFilterSpec->Filter.SrcPort) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTER_SRCPORT_STR,pIpsecFilterSpec->Filter.SrcPort); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTER_SRCPORT_ANY); }
if(pIpsecFilterSpec->Filter.DestPort) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTER_DSTPORT_STR,pIpsecFilterSpec->Filter.DestPort); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTER_DSTPORT_ANY); }
delete pFilterDNS; PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_NEWLINE); } error: return dwReturn; }
////////////////////////////////////////////////////////////////////
//
//Function: PrintProtocolNameList()
//
//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 PrintProtocolNameList( DWORD dwProtocol ) { switch(dwProtocol) { case PROT_ID_ICMP : PrintMessageFromModule(g_hModule, SHW_STATIC_PRTPROTOCOL_ICMP); break; case PROT_ID_TCP : PrintMessageFromModule(g_hModule, SHW_STATIC_PRTPROTOCOL_TCP); break; case PROT_ID_UDP : PrintMessageFromModule(g_hModule, SHW_STATIC_PRTPROTOCOL_UDP); break; case PROT_ID_RAW : PrintMessageFromModule(g_hModule, SHW_STATIC_PRTPROTOCOL_RAW); break; case PROT_ID_ANY : PrintMessageFromModule(g_hModule, SHW_STATIC_PRTPROTOCOL_ANY); break; default: PrintMessageFromModule(g_hModule, SHW_STATIC_PRTPROTOCOL_OTHER, dwProtocol); break; }; }
////////////////////////////////////////////////////////////////////
//
//Function: PrintISAKMPDataList()
//
//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 PrintISAKMPDataList( IN PIPSEC_ISAKMP_DATA pIpsecISAKMPData ) { if(pIpsecISAKMPData) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTISAKMP_MMSEC_ORDER_TITLE); PrintMessageFromModule(g_hModule,SHW_STATIC_PRTISAKMP_ALGO_TITLE_STR); PrintMessageFromModule(g_hModule,SHW_STATIC_PRTISAKMP_ALGO_TITLE_UNDERLINE); for (DWORD Loop=0;Loop<pIpsecISAKMPData->dwNumISAKMPSecurityMethods;Loop++) { // print mmsec details
if(pIpsecISAKMPData->pSecurityMethods) { PrintISAKAMPSecurityMethodsList(pIpsecISAKMPData->pSecurityMethods[Loop]); } } } }
////////////////////////////////////////////////////////////////////
//
//Function: PrintISAKAMPSecurityMethodsList()
//
//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 PrintISAKAMPSecurityMethodsList( IN CRYPTO_BUNDLE SecurityMethods ) { // print encription detail
if(SecurityMethods.EncryptionAlgorithm.AlgorithmIdentifier==CONF_ALGO_DES) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTISAKMPSEC_DES_STR); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTISAKMPSEC_3DES_STR); }
// print hash detail
if(SecurityMethods.HashAlgorithm.AlgorithmIdentifier==AUTH_ALGO_SHA1) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTISAKMPSEC_SHA1_STR); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTISAKMPSEC_MD5_STR); } // print DH group detail
if(SecurityMethods.OakleyGroup==POTF_OAKLEY_GROUP1) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTISAKMPSEC_DH_LOW_STR); } else if (SecurityMethods.OakleyGroup==POTF_OAKLEY_GROUP2) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTISAKMPSEC_DH_MED_STR); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTISAKMPSEC_DH_2048_STR); } }
////////////////////////////////////////////////////////////////////
//
//Function: PrintGPOList()
//
//Date of Creation: 21st Aug 2001
//
//Parameters:
// IN PGPO pGPO,
// IN BOOL bVerb
//
//Return: VOID
//
//Description:
// This function prints the details of GPO .
//
//Revision History:
//
//Date Author Comments
//
////////////////////////////////////////////////////////////////////
VOID PrintGPOList( IN PGPO pGPO ) { if(!pGPO) { BAIL_OUT; }
if(_tcscmp(pGPO->pszLocalMachineName, _TEXT(""))!=0) //machine name
{ PrintMessageFromModule(g_hModule, SHW_STATIC_ASSIGNEDGPO_SRCMACHINE,pGPO->pszLocalMachineName); } else if(pGPO->pszDomainName) //domain name
{ PrintMessageFromModule(g_hModule,SHW_STATIC_ASSIGNEDGPO_SRCDOMAIN,pGPO->pszDomainName); if (pGPO->pszDCName) //DC name
{ PrintMessageFromModule(g_hModule,SHW_STATIC_ASSIGNEDGPO_DC_NAME,pGPO->pszDCName); } }
if( pGPO->pszGPODisplayName ) // gpo name
{ if (pGPO->bDNPolicyOverrides && pGPO->pszGPODNName) //gpo DN
{ PrintMessageFromModule(g_hModule,SHW_STATIC_ASSIGNEDGPO_GPO_NAME_STR,pGPO->pszGPODNName); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_ASSIGNEDGPO_GPO_NAME_STR,pGPO->pszGPODisplayName); } }
if(_tcscmp(pGPO->pszGPODisplayName,LocalGPOName)==0) // policy active - status
{ if(pGPO->bDNPolicyOverrides && (_tcscmp(pGPO->pszGPODisplayName,LocalGPOName)==0)) { if(pGPO->pszLocalPolicyName) //local policy name
{ PrintMessageFromModule(g_hModule,SHW_STATIC_ASSIGNEDGPO_LOCAL_POL_NAME_STR,pGPO->pszLocalPolicyName); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_ASSIGNEDGPO_LOC_POL_NAME_NONE); }
if(pGPO->pszPolicyName) { PrintMessageFromModule(g_hModule,SHW_STATIC_ASSIGNEDGPO_AD_POL_NAME_STR,pGPO->pszPolicyName); }
if(pGPO->pszPolicyDNName) // policy DN
{ PrintMessageFromModule(g_hModule,SHW_STATIC_ASSIGNEDGPO_AD_POL_DN_NAME,pGPO->pszPolicyDNName); } PrintMessageFromModule(g_hModule,SHW_STATIC_ASSIGNEDGPO_LOC_OPOL_ACTIVE_AD); } else if (_tcscmp(pGPO->pszGPODisplayName,LocalGPOName)==0) { if(pGPO->pszPolicyName) { PrintMessageFromModule(g_hModule,SHW_STATIC_ASSIGNEDGPO_LOCAL_POL_NAME_STR,pGPO->pszPolicyName); } if(pGPO->pszPolicyDNName) // policy DN
{ PrintMessageFromModule(g_hModule,SHW_STATIC_ASSIGNEDGPO_LOC_POL_ACTIVE_STR,pGPO->pszPolicyDNName); }
PrintMessageFromModule(g_hModule,SHW_STATIC_ASSIGNEDGPO_AD_POL_NAME_NONE);
PrintMessageFromModule(g_hModule,SHW_STATIC_ASSIGNEDGPO_POL_ACTIVE_STR); }
} else // if domain policy is active
{ if(pGPO->pszGPODNName) //gpo DN
{ PrintMessageFromModule(g_hModule,SHW_STATIC_ASSIGNEDGPO_GPO_DN_NAME,pGPO->pszGPODNName); } if(pGPO->pszOULink) // OU link
{ PrintMessageFromModule(g_hModule,SHW_STATIC_ASSIGNEDGPO_GPO_OU_LINK,pGPO->pszOULink); }
if(pGPO->pszPolicyName) { PrintMessageFromModule(g_hModule,SHW_STATIC_ASSIGNEDGPO_POL_NAME_STR,pGPO->pszPolicyName); }
if(pGPO->pszPolicyDNName) //Policy DN
{ PrintMessageFromModule(g_hModule,SHW_STATIC_ASSIGNEDGPO_POL_DN_STR,pGPO->pszPolicyDNName); } PrintMessageFromModule(g_hModule,SHW_STATIC_ASSIGNEDGPO_POL_ACTIVE_STR); }
error: return; }
////////////////////////////////////////////////////////////////////
//
//Function: PrintIPAddrList()
//
//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 PrintIPAddrList( 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_FORMAT_NEWLINE,szIPAddr); }
////////////////////////////////////////////////////////////////////
//
//Function: PrintStorageInfoList()
//
//Date of Creation: 21st Aug 2001
//
//Parameters:
// IN BOOL bDeleteAll
//
//Return: DWORD
//
//Description:
// This function prints out the the Security Methods information.
//
//Revision History:
//
//Date Author Comments
//
////////////////////////////////////////////////////////////////////
DWORD PrintStorageInfoList( IN BOOL bDeleteAll ) { DWORD dwReturn = ERROR_SUCCESS , dwStrLength = 0, dwStoreId;
if(g_StorageLocation.dwLocation!=IPSEC_DIRECTORY_PROVIDER) // if it is local GPO
{ if(_tcscmp(g_StorageLocation.pszMachineName,_TEXT(""))!=0) { if(!bDeleteAll) { if (g_StorageLocation.dwLocation == IPSEC_REGISTRY_PROVIDER) { dwStoreId = SHW_STATIC_POLICY_STORE_RM_NAME_STR; } else { dwStoreId = SHW_STATIC_POLICY_STORE_RM_NAME_STRP; }
PrintMessageFromModule(g_hModule,dwStoreId,g_StorageLocation.pszMachineName); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_POLICY_RM_STR,g_StorageLocation.pszMachineName); } } else { _TCHAR pszLocalMachineName[MAXSTRLEN] = {0}; DWORD MaxStringLen=MAXSTRLEN;
// Get the computer name
GetComputerName(pszLocalMachineName,&MaxStringLen);
if(!bDeleteAll) { if(_tcscmp(pszLocalMachineName,_TEXT(""))!=0) { if (g_StorageLocation.dwLocation == IPSEC_REGISTRY_PROVIDER) { dwStoreId = SHW_STATIC_POLICY_STORE_LM_NAME_STR; } else { dwStoreId = SHW_STATIC_POLICY_STORE_LM_NAME_STRP; }
PrintMessageFromModule(g_hModule,dwStoreId,pszLocalMachineName); } else { if (g_StorageLocation.dwLocation == IPSEC_REGISTRY_PROVIDER) { dwStoreId = SHW_STATIC_POLICY_STORE_LM_STR; } else { dwStoreId = SHW_STATIC_POLICY_STORE_LM_STRP; }
PrintMessageFromModule(g_hModule,dwStoreId); } } else { if(_tcscmp(pszLocalMachineName,_TEXT(""))!=0) { PrintMessageFromModule(g_hModule,SHW_STATIC_POLICY_LM_STR,pszLocalMachineName); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_POLICY_LM); } }
} } else if(g_StorageLocation.dwLocation==IPSEC_DIRECTORY_PROVIDER) // if remote GPO
{ if(_tcscmp(g_StorageLocation.pszDomainName,_TEXT(""))!=0) { if(!bDeleteAll) { PrintMessageFromModule(g_hModule,SHW_STATIC_POLICY_STORE_LD_NAME_STR,g_StorageLocation.pszDomainName); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_POLICY_RD_STR,g_StorageLocation.pszDomainName); } } else { PDOMAIN_CONTROLLER_INFO pDomainControllerInfo = NULL; LPTSTR pszDomainName = NULL; DWORD Flags = DS_DIRECTORY_SERVICE_REQUIRED | DS_RETURN_DNS_NAME | DS_FORCE_REDISCOVERY;
// get the domain name and DC name
dwReturn = DsGetDcName(NULL, //machine name
NULL, NULL, NULL, Flags, &pDomainControllerInfo ) ;
if(dwReturn==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(!bDeleteAll) { if(pszDomainName) { PrintMessageFromModule(g_hModule,SHW_STATIC_POLICY_STORE_RD_NAME_STR,pszDomainName); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_POLICY_STORE_LD_STR); } } else { if(pszDomainName) { PrintMessageFromModule(g_hModule,SHW_STATIC_POLICY_LD_STR,pszDomainName); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_POLICY_LD); } }
if(pszDomainName) delete [] pszDomainName; } } error: return dwReturn; }
////////////////////////////////////////////////////////////////////
//
//Function: PrintResolveDNS()
//
//Date of Creation: 21st Aug 2001
//
//Parameters:
// LPWSTR pszDNSName,
// IPAddr *pIpAddr
//
//Return: DWORD
//
//Description:
// This function prints DNS resolution details
//
//Revision History:
//
//Date Author Comments
//
////////////////////////////////////////////////////////////////////
DWORD PrintResolveDNS( LPWSTR pszDNSName ) { DNSIPADDR *pAddress=NULL; struct addrinfo *pAddrInfo = NULL,*pNext=NULL; char szDNSName[MAX_STR_LEN] = {0}; DWORD dwBufferSize=MAX_STR_LEN; int iReturn=ERROR_SUCCESS; DWORD dwReturn = ERROR_SUCCESS;
if(pszDNSName && _tcscmp(pszDNSName,_TEXT(""))!=0) { pAddress=new DNSIPADDR; if(pAddress==NULL) { dwReturn = ERROR_OUTOFMEMORY; BAIL_OUT; }
iReturn = WideCharToMultiByte(CP_THREAD_ACP, 0, pszDNSName, -1, szDNSName,dwBufferSize,NULL,NULL);
if(iReturn == 0) { //conversion failed due to some error. dont proceed . dive out of the function
BAIL_OUT; }
// call this to resolve DNS name
iReturn = getaddrinfo((const char*)szDNSName,NULL,NULL,&pAddrInfo);
if (iReturn == ERROR_SUCCESS) { pNext = pAddrInfo; for(DWORD i=1;pNext=pNext->ai_next;i++);
pAddress->dwNumIpAddresses = i;
pAddress->puIpAddr = new ULONG[pAddress->dwNumIpAddresses];
if(pAddress->puIpAddr==NULL) { dwReturn = ERROR_OUTOFMEMORY; BAIL_OUT; } // careful : the output of getaddrinfo is linked list not array of pointers
pNext = pAddrInfo;
for(DWORD n=0;pNext; n++) { memcpy(&(pAddress->puIpAddr[n]),(ULONG *) &(((sockaddr_in *)(pNext->ai_addr))->sin_addr.S_un.S_addr), sizeof(ULONG)); PrintIPAddrDNS(pAddress->puIpAddr[n]);
if(n<(i-1)) { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_SPACE_COMMA); } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFSPEC_NEWLINE); }
pNext=pNext->ai_next; }
// free pAddrInfo after usage
if (pAddrInfo) { freeaddrinfo(pAddrInfo); } } else { PrintMessageFromModule(g_hModule,SHW_STATIC_PRTFILTER_DNS_FAILED); } error:
if(pAddress) { delete pAddress; } } return dwReturn; } ////////////////////////////////////////////////////////////////////
//
//Function: PrintIPAddrDNS()
//
//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 PrintIPAddrDNS( 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_FORMAT_NO_NEWLINE,szIPAddr); }
|