1686 lines
45 KiB
C++
1686 lines
45 KiB
C++
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
Copyright (C) Microsoft Corporation, 1998 - 2001
|
|
|
|
Module Name: rapwiz.cpp
|
|
|
|
Abstract:
|
|
We implement the class needed to handle the property pages for a RAP Policy wizard.
|
|
|
|
Revision History:
|
|
History: Created Header 05/04/00 4:31:52 PM
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "Precompiled.h"
|
|
#include "iasattrlist.h"
|
|
#include "condlist.h"
|
|
#include "eaphlp.h"
|
|
#include "rapwiz.h"
|
|
#include "NapUtil.h"
|
|
#include "PolicyNode.h"
|
|
#include "PoliciesNode.h"
|
|
#include "ChangeNotification.h"
|
|
#include "dialinusr.h"
|
|
#include "safearray.h"
|
|
#include "rrascfg.h"
|
|
#include "proxyres.h"
|
|
|
|
const IID IID_IEAPProviderConfig = {0x66A2DB19,0xD706,0x11D0,{0xA3,0x7B,0x00,0xC0,0x4F,0xC9,0xDA,0x04}};
|
|
|
|
//=======================================================================================
|
|
//
|
|
//
|
|
// CRapWizardData
|
|
//
|
|
//
|
|
//=======================================================================================
|
|
// page sequence information
|
|
// page id array ends with 0
|
|
DWORD __SCEN_NAME_GRP_AUTH_ENCY__[] = {
|
|
IDD_NEWRAPWIZ_WELCOME,
|
|
IDD_NEWRAPWIZ_NAME,
|
|
IDD_NEWRAPWIZ_SCENARIO,
|
|
IDD_NEWRAPWIZ_GROUP,
|
|
IDD_NEWRAPWIZ_AUTHENTICATION,
|
|
IDD_NEWRAPWIZ_ENCRYPTION,
|
|
IDD_NEWRAPWIZ_COMPLETION,
|
|
0};
|
|
|
|
DWORD __SCEN_NAME_GRP_AUTH_ENCY_VPN__[] = {
|
|
IDD_NEWRAPWIZ_WELCOME,
|
|
IDD_NEWRAPWIZ_NAME,
|
|
IDD_NEWRAPWIZ_SCENARIO,
|
|
IDD_NEWRAPWIZ_GROUP,
|
|
IDD_NEWRAPWIZ_AUTHENTICATION,
|
|
IDD_NEWRAPWIZ_ENCRYPTION_VPN,
|
|
IDD_NEWRAPWIZ_COMPLETION,
|
|
0};
|
|
|
|
DWORD __SCEN_NAME_GRP_EAP_ENCY_WIRELESS__[] = {
|
|
IDD_NEWRAPWIZ_WELCOME,
|
|
IDD_NEWRAPWIZ_NAME,
|
|
IDD_NEWRAPWIZ_SCENARIO,
|
|
IDD_NEWRAPWIZ_GROUP,
|
|
IDD_NEWRAPWIZ_EAP,
|
|
IDD_NEWRAPWIZ_ENCRYPTION_WIRELESS,
|
|
IDD_NEWRAPWIZ_COMPLETION,
|
|
0};
|
|
|
|
|
|
DWORD __SCEN_NAME_GRP_EAP_ENCY__[] = {
|
|
IDD_NEWRAPWIZ_WELCOME,
|
|
IDD_NEWRAPWIZ_NAME,
|
|
IDD_NEWRAPWIZ_SCENARIO,
|
|
IDD_NEWRAPWIZ_GROUP,
|
|
IDD_NEWRAPWIZ_EAP,
|
|
IDD_NEWRAPWIZ_ENCRYPTION,
|
|
IDD_NEWRAPWIZ_COMPLETION,
|
|
0};
|
|
|
|
DWORD __SCEN_NAME_GRP_EAP__[] = {
|
|
IDD_NEWRAPWIZ_WELCOME,
|
|
IDD_NEWRAPWIZ_NAME,
|
|
IDD_NEWRAPWIZ_SCENARIO,
|
|
IDD_NEWRAPWIZ_GROUP,
|
|
IDD_NEWRAPWIZ_EAP,
|
|
IDD_NEWRAPWIZ_COMPLETION,
|
|
0};
|
|
|
|
DWORD __SCEN_NAME_COND_ALLW_PROF__[] = {
|
|
IDD_NEWRAPWIZ_WELCOME,
|
|
IDD_NEWRAPWIZ_NAME,
|
|
IDD_NEWRAPWIZ_CONDITION,
|
|
IDD_NEWRAPWIZ_ALLOWDENY,
|
|
IDD_NEWRAPWIZ_EDITPROFILE,
|
|
IDD_NEWRAPWIZ_COMPLETION,
|
|
0};
|
|
// ID No encr,E_EAP, C_EAP, Pre-condition, bSDO, pagelist
|
|
|
|
// top scenarios
|
|
CRapWizScenario Scenario_Senarios = {
|
|
IDC_NEWRAPWIZ_NAME_SCENARIO, FALSE, TRUE, FALSE, VPN_PORT_CONDITION, TRUE, __SCEN_NAME_GRP_AUTH_ENCY__};
|
|
|
|
CRapWizScenario Scenario_Manual = {
|
|
IDC_NEWRAPWIZ_NAME_MANUAL, DONT_CARE, DONT_CARE, DONT_CARE, NULL, FALSE, __SCEN_NAME_COND_ALLW_PROF__};
|
|
|
|
// sub scenarios
|
|
CRapWizScenario Scenario_VPN = {
|
|
IDC_NEWRAPWIZ_SCENARIO_VPN, FALSE, TRUE, FALSE, VPN_PORT_CONDITION, TRUE, __SCEN_NAME_GRP_AUTH_ENCY_VPN__};
|
|
|
|
CRapWizScenario Scenario_DialUp = {
|
|
IDC_NEWRAPWIZ_SCENARIO_DIALUP, TRUE, TRUE, TRUE, DIALUP_PORT_CONDITION, TRUE, __SCEN_NAME_GRP_AUTH_ENCY__};
|
|
|
|
CRapWizScenario Scenario_Wireless = {
|
|
IDC_NEWRAPWIZ_SCENARIO_WIRELESS,FALSE, TRUE, FALSE, WIRELESS_PORT_CONDITION,TRUE, __SCEN_NAME_GRP_EAP_ENCY_WIRELESS__};
|
|
|
|
CRapWizScenario Scenario_Switch = {
|
|
IDC_NEWRAPWIZ_SCENARIO_SWITCH, DONT_CARE, TRUE, TRUE, SWITCH_PORT_CONDITION, TRUE, __SCEN_NAME_GRP_EAP__};
|
|
|
|
|
|
CRapWizScenario*
|
|
CRapWizardData::m_Scenarios[] = {
|
|
&Scenario_Senarios,
|
|
&Scenario_Manual,
|
|
&Scenario_VPN,
|
|
&Scenario_DialUp,
|
|
&Scenario_Wireless,
|
|
&Scenario_Switch,
|
|
NULL};
|
|
|
|
|
|
CRapWizardData::CRapWizardData():
|
|
// scenario
|
|
m_dwScenarioIndex(0),
|
|
// user / group
|
|
m_dwUserOrGroup(IDC_NEWRAPWIZ_GROUP_GROUP),
|
|
|
|
// authentication
|
|
m_bMSCHAP(FALSE),
|
|
m_bMSCHAP2(TRUE),
|
|
m_bEAP(FALSE),
|
|
m_dwEAPProvider(0),
|
|
|
|
// encryption
|
|
m_bEncrypt_No(FALSE),
|
|
m_bEncrypt_Basic(TRUE),
|
|
m_bEncrypt_Strong(TRUE),
|
|
m_bEncrypt_Strongest(TRUE),
|
|
m_pPolicyNode(NULL)
|
|
{
|
|
}
|
|
|
|
void CRapWizardData::SetInfo(LPCTSTR czMachine, CPolicyNode* pNode, ISdoDictionaryOld* pDic, ISdo* pPolicy, ISdo* pProfile, ISdoCollection* pPolicyCol, ISdoCollection* pProfileCol, ISdoServiceControl* pServiceCtrl, CIASAttrList* pAttrList)
|
|
{
|
|
// related to MMC
|
|
m_pPolicyNode = pNode;
|
|
|
|
m_NTGroups.m_bstrServerName = czMachine;
|
|
|
|
// SDO pointers
|
|
m_spDictionarySdo = pDic;
|
|
m_spPolicySdo = pPolicy;
|
|
m_spProfileSdo = pProfile;
|
|
m_spPoliciesCollectionSdo = pPolicyCol;
|
|
m_spProfilesCollectionSdo = pProfileCol;
|
|
m_spSdoServiceControl = pServiceCtrl;
|
|
m_pAttrList = pAttrList;
|
|
}
|
|
|
|
DWORD CRapWizardData::GetNextPageId(LPCTSTR pszCurrTemplate)
|
|
{
|
|
DWORD* pdwPages = m_Scenarios[m_dwScenarioIndex]->m_pdwPages;
|
|
if ( pdwPages == NULL )
|
|
return 0;
|
|
|
|
if (pszCurrTemplate == MAKEINTRESOURCE(0))
|
|
return pdwPages[0];
|
|
|
|
int i = 0;
|
|
while ( pdwPages[i] != 0 && MAKEINTRESOURCE(pdwPages[i]) != pszCurrTemplate ) i++;
|
|
|
|
if ( MAKEINTRESOURCE(pdwPages[i]) == pszCurrTemplate )
|
|
{
|
|
if (pdwPages[i+1] == 0)
|
|
// this allows the page to finish
|
|
return TRUE;
|
|
else
|
|
return pdwPages[i+1];
|
|
}
|
|
else
|
|
return NULL;
|
|
}
|
|
|
|
DWORD CRapWizardData::GetPrevPageId(LPCTSTR pszCurrTemplate)
|
|
{
|
|
DWORD* pdwPages = m_Scenarios[m_dwScenarioIndex]->m_pdwPages;
|
|
// when there is no previous page
|
|
if ( pdwPages == NULL || pszCurrTemplate == MAKEINTRESOURCE(0) || MAKEINTRESOURCE(pdwPages[0]) == pszCurrTemplate)
|
|
return NULL;
|
|
|
|
int i = 0;
|
|
while ( pdwPages[i] != 0 && MAKEINTRESOURCE(pdwPages[i]) != pszCurrTemplate ) i++;
|
|
|
|
if ( MAKEINTRESOURCE(pdwPages[i]) == pszCurrTemplate )
|
|
return pdwPages[i - 1];
|
|
else
|
|
return NULL;
|
|
}
|
|
|
|
BOOL CRapWizardData::SetScenario(DWORD dwScenario)
|
|
{
|
|
BOOL bRet = FALSE;
|
|
|
|
int i = 0;
|
|
|
|
while (m_Scenarios[i] != 0)
|
|
{
|
|
if (m_Scenarios[i]->m_dwScenarioID == dwScenario)
|
|
{
|
|
m_dwScenarioIndex = i;
|
|
if (m_Scenarios[i]->m_bAllowClear == FALSE)
|
|
m_bEncrypt_No = FALSE;
|
|
else if (m_Scenarios[i]->m_bAllowClear == DONT_CARE)
|
|
{
|
|
// this will cause finish not to populate the attribute
|
|
m_bEncrypt_No = TRUE;
|
|
m_bEncrypt_Basic = TRUE;
|
|
m_bEncrypt_Strong = TRUE;
|
|
m_bEncrypt_Strongest = TRUE;
|
|
}
|
|
bRet = TRUE;
|
|
break;
|
|
}
|
|
i++;
|
|
}
|
|
return bRet;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CRapWizardData::GetSettingsText
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
BOOL CRapWizardData::GetSettingsText(::CString& settingsText)
|
|
{
|
|
BOOL bRet = TRUE;
|
|
::CString strOutput;
|
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
|
|
|
try{
|
|
strOutput.LoadString(IDS_NEWRAPWIZ_COMPLETION_CONDITION);
|
|
|
|
|
|
// condition text -- get condition text from sdo
|
|
// Policy name.
|
|
CComBSTR policyName;
|
|
policyName = m_strPolicyName;
|
|
|
|
//get the condition collection for this SDO
|
|
CComPtr<ISdoCollection> spConditions;
|
|
|
|
// ====================
|
|
// conditions
|
|
::GetSdoInterfaceProperty(
|
|
m_spPolicySdo,
|
|
PROPERTY_POLICY_CONDITIONS_COLLECTION,
|
|
IID_ISdoCollection,
|
|
(void **)&spConditions);
|
|
|
|
// List of conditions.
|
|
ConditionList condList;
|
|
condList.finalConstruct(
|
|
NULL,
|
|
m_pAttrList,
|
|
ALLOWEDINCONDITION,
|
|
m_spDictionarySdo,
|
|
spConditions,
|
|
m_pPolicyNode->m_pszServerAddress,
|
|
policyName
|
|
);
|
|
strOutput += condList.getDisplayText();
|
|
|
|
|
|
// profile text
|
|
// if manual , then only display information -- it was set manually
|
|
::CString temp1;
|
|
if (!m_Scenarios[m_dwScenarioIndex]->m_bSheetWriteSDO)
|
|
{
|
|
temp1.LoadString(IDS_NEWRAPWIZ_COMPLETION_MANUALSET);
|
|
strOutput += temp1;
|
|
}
|
|
else
|
|
{
|
|
::CString sep;
|
|
|
|
// authentication
|
|
temp1.LoadString(IDS_NEWRAPWIZ_COMPLETION_AUTHEN);
|
|
strOutput += temp1;
|
|
|
|
if (m_bEAP)
|
|
{
|
|
::CString temp2;
|
|
|
|
temp1.LoadString(IDS_AUTHEN_METHOD_EAP);
|
|
temp2.Format(temp1, m_strEAPProvider);
|
|
strOutput += temp2;
|
|
sep.LoadString(IDS_NEWRAPWIZ_ITEM_SEP);
|
|
}
|
|
|
|
if (m_bMSCHAP)
|
|
{
|
|
temp1.LoadString(IDS_AUTHEN_METHOD_MSCHAP);
|
|
|
|
strOutput += sep;
|
|
strOutput += temp1;
|
|
sep.LoadString(IDS_NEWRAPWIZ_ITEM_SEP);
|
|
}
|
|
|
|
if (m_bMSCHAP2)
|
|
{
|
|
temp1.LoadString(IDS_AUTHEN_METHOD_MSCHAP2);
|
|
|
|
strOutput += sep;
|
|
strOutput += temp1;
|
|
}
|
|
|
|
// encryption
|
|
temp1.LoadString(IDS_NEWRAPWIZ_COMPLETION_ENCRY);
|
|
strOutput += temp1;
|
|
sep = L"";
|
|
|
|
if (m_bEncrypt_Basic)
|
|
{
|
|
temp1.LoadString(IDS_ENCYP_METHOD_BASIC);
|
|
|
|
strOutput += sep;
|
|
strOutput += temp1;
|
|
sep.LoadString(IDS_NEWRAPWIZ_ITEM_SEP);
|
|
}
|
|
|
|
if (m_bEncrypt_Strong)
|
|
{
|
|
temp1.LoadString(IDS_ENCYP_METHOD_STRONG);
|
|
|
|
strOutput += sep;
|
|
strOutput += temp1;
|
|
sep.LoadString(IDS_NEWRAPWIZ_ITEM_SEP);
|
|
}
|
|
|
|
if (m_bEncrypt_Strongest)
|
|
{
|
|
temp1.LoadString(IDS_ENCYP_METHOD_STRONGEST);
|
|
|
|
strOutput += sep;
|
|
strOutput += temp1;
|
|
sep.LoadString(IDS_NEWRAPWIZ_ITEM_SEP);
|
|
}
|
|
|
|
if (m_bEncrypt_No)
|
|
{
|
|
temp1.LoadString(IDS_ENCYP_METHOD_NO);
|
|
|
|
strOutput += sep;
|
|
strOutput += temp1;
|
|
}
|
|
}
|
|
settingsText = strOutput;
|
|
}
|
|
catch(...)
|
|
{
|
|
bRet = FALSE;
|
|
}
|
|
|
|
return bRet;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CRapWizardData::OnWizardPreFinish
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
BOOL CRapWizardData::OnWizardPreFinish(HWND hWnd)
|
|
{
|
|
|
|
HRESULT hr = S_OK;
|
|
//
|
|
// when on manual scenario, the condition and profile data are already written in SDO -- but no persisted yet
|
|
// when on other scenario, the data are kept in RapWizardData, so we need to write the data to sdo
|
|
if (!m_Scenarios[m_dwScenarioIndex]->m_bSheetWriteSDO) // no write the addtional data into SDO
|
|
return TRUE;
|
|
|
|
// clean up profile, and policy object -- in case use used manual
|
|
//get the condition collection for this SDO
|
|
CComPtr<ISdoCollection> spConditions;
|
|
CComPtr<ISdoCollection> spProfileProperties;
|
|
VARIANT var;
|
|
VariantInit(&var);
|
|
CComBSTR bstrName;
|
|
CComPtr<IDispatch> spDisp;
|
|
CComPtr<ISdo> spCond;
|
|
|
|
// ====================
|
|
// conditions
|
|
hr = ::GetSdoInterfaceProperty(
|
|
m_spPolicySdo,
|
|
PROPERTY_POLICY_CONDITIONS_COLLECTION,
|
|
IID_ISdoCollection,
|
|
(void **)&spConditions);
|
|
|
|
if ( FAILED(hr) )
|
|
{
|
|
ErrorTrace(ERROR_NAPMMC_POLICYPAGE1, "Can't get condition collection Sdo, err = %x", hr);
|
|
return FALSE;
|
|
}
|
|
|
|
// clean up conditions
|
|
spConditions->RemoveAll();
|
|
|
|
// preconditions based on scenario
|
|
if ( m_Scenarios[m_dwScenarioIndex]->m_lpszPreCond)
|
|
{
|
|
bstrName = L"PreCondition0";
|
|
|
|
// prepare new condition
|
|
spDisp.Release();
|
|
hr = spConditions->Add(bstrName, &spDisp);
|
|
ASSERT(hr == S_OK);
|
|
spCond.Release();
|
|
hr = spDisp->QueryInterface(IID_ISdo, (void**)&spCond);
|
|
ASSERT(hr == S_OK);
|
|
|
|
VariantClear(&var);
|
|
V_VT(&var) = VT_BSTR;
|
|
V_BSTR(&var) = SysAllocString(m_Scenarios[m_dwScenarioIndex]->m_lpszPreCond);
|
|
|
|
// put condition with SDO
|
|
hr = spCond->PutProperty(PROPERTY_CONDITION_TEXT, &var);
|
|
VariantClear(&var);
|
|
|
|
if( FAILED (hr) )
|
|
{
|
|
ErrorTrace(DEBUG_NAPMMC_POLICYPAGE1, "Couldn't save this condition, err = %x", hr);
|
|
ShowErrorDialog( hWnd
|
|
, IDS_ERROR_SDO_ERROR_PUTPROP_CONDTEXT
|
|
, NULL
|
|
, hr
|
|
);
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
// windows group condition
|
|
if(m_dwUserOrGroup == IDC_NEWRAPWIZ_GROUP_GROUP)
|
|
{
|
|
|
|
bstrName = L"GrpCondition";
|
|
|
|
// prepare new condition
|
|
spDisp.Release();
|
|
hr = spConditions->Add(bstrName, &spDisp);
|
|
ASSERT(hr == S_OK);
|
|
spCond.Release();
|
|
hr = spDisp->QueryInterface(IID_ISdo, (void**)&spCond);
|
|
ASSERT(hr == S_OK);
|
|
|
|
m_NTGroups.PopulateVariantFromGroups(&var);
|
|
::CString str;
|
|
|
|
// now form the condition text
|
|
str = NTG_PREFIX;
|
|
str += _T("(\"");
|
|
str += V_BSTR(&var);
|
|
str += _T("\")");
|
|
VariantClear(&var);
|
|
V_VT(&var) = VT_BSTR;
|
|
V_BSTR(&var) = SysAllocString((LPCTSTR)str);
|
|
|
|
// put condition with SDO
|
|
hr = spCond->PutProperty(PROPERTY_CONDITION_TEXT, &var);
|
|
VariantClear(&var);
|
|
|
|
if( FAILED (hr) )
|
|
{
|
|
ErrorTrace(DEBUG_NAPMMC_POLICYPAGE1, "Couldn't save this condition, err = %x", hr);
|
|
ShowErrorDialog( hWnd
|
|
, IDS_ERROR_SDO_ERROR_PUTPROP_CONDTEXT
|
|
, NULL
|
|
, hr
|
|
);
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
|
|
// ====================
|
|
// profile properties
|
|
hr = ::GetSdoInterfaceProperty(
|
|
m_spProfileSdo,
|
|
PROPERTY_PROFILE_ATTRIBUTES_COLLECTION,
|
|
IID_ISdoCollection,
|
|
(void **)&spProfileProperties);
|
|
|
|
if ( FAILED(hr) )
|
|
{
|
|
ErrorTrace(ERROR_NAPMMC_POLICYPAGE1, "Can't get property collection Sdo, err = %x", hr);
|
|
return FALSE;
|
|
}
|
|
|
|
// clean up profiles -- in case use went to manual mode first, and then came back to other scenarios
|
|
spProfileProperties->RemoveAll();
|
|
|
|
// populate default properties
|
|
((CPoliciesNode*)m_pPolicyNode->m_pParentNode)->AddDefaultProfileAttrs(m_spProfileSdo, EXCLUDE_AUTH_TYPE);
|
|
|
|
// authentication -- attributes
|
|
DWORD MyArray[6];
|
|
DWORD dwNextCel = 0;
|
|
|
|
if (m_bEAP && m_dwEAPProvider != 0)
|
|
{
|
|
MyArray[dwNextCel++] = IAS_AUTH_EAP;
|
|
V_VT(&var) = VT_I4;
|
|
V_I4(&var) = m_dwEAPProvider;
|
|
|
|
((CPoliciesNode*)m_pPolicyNode->m_pParentNode)->AddProfAttr(spProfileProperties, IAS_ATTRIBUTE_NP_ALLOWED_EAP_TYPE, &var);
|
|
|
|
VariantClear(&var);
|
|
}
|
|
|
|
if (m_bMSCHAP)
|
|
{
|
|
MyArray[dwNextCel++] = IAS_AUTH_MSCHAP;
|
|
MyArray[dwNextCel++] = IAS_AUTH_MSCHAP_CPW;
|
|
}
|
|
|
|
if (m_bMSCHAP2)
|
|
{
|
|
MyArray[dwNextCel++] = IAS_AUTH_MSCHAP2;
|
|
MyArray[dwNextCel++] = IAS_AUTH_MSCHAP2_CPW;
|
|
}
|
|
|
|
// put new value
|
|
CSafeArray<CComVariant, VT_VARIANT> Values = Dim(dwNextCel); // 2 values
|
|
|
|
Values.Lock();
|
|
|
|
for ( int i = 0; i < dwNextCel; i++)
|
|
{
|
|
VariantClear(&var);
|
|
V_VT(&var) = VT_I4;
|
|
V_I4(&var) = MyArray[i];
|
|
Values[i] = var;
|
|
VariantClear(&var);
|
|
}
|
|
|
|
|
|
Values.Unlock();
|
|
|
|
|
|
if(dwNextCel > 0)
|
|
{
|
|
SAFEARRAY sa = (SAFEARRAY)Values;
|
|
V_VT(&var) = VT_ARRAY | VT_VARIANT;
|
|
V_ARRAY(&var) = &sa;
|
|
|
|
((CPoliciesNode*)m_pPolicyNode->m_pParentNode)->AddProfAttr(spProfileProperties, IAS_ATTRIBUTE_NP_AUTHENTICATION_TYPE, &var);
|
|
|
|
// not to call VariantClear, since the SAFEARRAY is not allocated using normal way
|
|
VariantInit(&var);
|
|
}
|
|
|
|
// encryption
|
|
DWORD EncPolicy = 0;
|
|
DWORD EncType = 0;
|
|
|
|
// ignore the default case -- allow anything, -- remove the attributes
|
|
if (!(m_bEncrypt_No && m_bEncrypt_Basic && m_bEncrypt_Strong && m_bEncrypt_Strongest))
|
|
{
|
|
|
|
if(m_bEncrypt_No)
|
|
EncPolicy = RAS_EP_ALLOW;
|
|
else
|
|
EncPolicy = RAS_EP_REQUIRE;
|
|
|
|
if ( m_bEncrypt_Basic )
|
|
EncType |= RAS_ET_BASIC;
|
|
|
|
if ( m_bEncrypt_Strong )
|
|
EncType |= RAS_ET_STRONG;
|
|
|
|
if ( m_bEncrypt_Strongest )
|
|
EncType |= RAS_ET_STRONGEST;
|
|
|
|
|
|
V_VT(&var) = VT_I4;
|
|
V_I4(&var) = EncType;
|
|
((CPoliciesNode*)m_pPolicyNode->m_pParentNode)->AddProfAttr(spProfileProperties, RAS_ATTRIBUTE_ENCRYPTION_TYPE, &var);
|
|
VariantClear(&var);
|
|
|
|
V_VT(&var) = VT_I4;
|
|
V_I4(&var) = EncPolicy;
|
|
|
|
((CPoliciesNode*)m_pPolicyNode->m_pParentNode)->AddProfAttr(spProfileProperties, RAS_ATTRIBUTE_ENCRYPTION_POLICY, &var);
|
|
VariantClear(&var);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CRapWizardData::OnWizardFinish
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
BOOL CRapWizardData::OnWizardFinish(HWND hWnd)
|
|
{
|
|
|
|
HRESULT hr = S_OK;
|
|
try
|
|
{
|
|
|
|
// We should just be able to Apply here because the user has hit the Finish button.
|
|
hr = m_spPolicySdo->Apply();
|
|
if( FAILED( hr ) )
|
|
{
|
|
// can't commit on Policy
|
|
ErrorTrace(ERROR_NAPMMC_POLICYPAGE1, "PolicySdo->Apply() failed, err = %x", hr);
|
|
if(hr == DB_E_NOTABLE) // assume, the RPC connection has problem
|
|
ShowErrorDialog( hWnd, IDS_ERROR__NOTABLE_TO_WRITE_SDO );
|
|
else if(hr == HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS))
|
|
ShowErrorDialog( hWnd, IDS_ERROR_INVALID_POLICYNAME );
|
|
else
|
|
ShowErrorDialog( hWnd, IDS_ERROR_SDO_ERROR_POLICY_APPLY, NULL, hr );
|
|
throw hr;
|
|
}
|
|
|
|
hr = m_spProfileSdo->Apply();
|
|
|
|
if( FAILED( hr ) )
|
|
{
|
|
if(hr == DB_E_NOTABLE) // assume, the RPC connection has problem
|
|
ShowErrorDialog( hWnd, IDS_ERROR__NOTABLE_TO_WRITE_SDO );
|
|
else
|
|
{
|
|
// can't commit on Profiles
|
|
ErrorTrace(ERROR_NAPMMC_POLICYPAGE1, "ProfileSdo->Apply() failed, err = %x", hr);
|
|
ShowErrorDialog( hWnd, IDS_ERROR_SDO_ERROR_PROFILE_APPLY, NULL, hr );
|
|
}
|
|
throw hr;
|
|
}
|
|
|
|
|
|
// Tell the service to reload data.
|
|
HRESULT hrTemp = m_spSdoServiceControl->ResetService();
|
|
if( FAILED( hrTemp ) )
|
|
{
|
|
ErrorTrace(ERROR_NAPMMC_POLICYPAGE1, "ISdoServiceControl::ResetService() failed, err = %x", hrTemp);
|
|
}
|
|
|
|
|
|
// Make sure the node object knows about any changes we made to SDO while in proppage.
|
|
m_pPolicyNode->LoadSdoData();
|
|
|
|
// Add the child to the UI's list of nodes and end this dialog.
|
|
DebugTrace(DEBUG_NAPMMC_POLICYPAGE1, "Adding the brand new node...");
|
|
CPoliciesNode* pPoliciesNode = (CPoliciesNode*)(m_pPolicyNode->m_pParentNode);
|
|
pPoliciesNode->AddSingleChildToListAndCauseViewUpdate( m_pPolicyNode );
|
|
|
|
}
|
|
catch(...)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
// reset the dirty bit
|
|
return TRUE;
|
|
}
|
|
|
|
//=======================================================================================
|
|
//
|
|
//
|
|
// CPolicyWizard_Scenarios
|
|
//
|
|
//
|
|
//=======================================================================================
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: CPolicyWizard_Scenarios
|
|
// History: Created Header 05/04/00 4:31:52 PM
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
CPolicyWizard_Scenarios::CPolicyWizard_Scenarios( CRapWizardData* pWizData, LONG_PTR hNotificationHandle,
|
|
TCHAR* pTitle, BOOL bOwnsNotificationHandle
|
|
)
|
|
: m_spWizData(pWizData)
|
|
, CIASWizard97Page<CPolicyWizard_Scenarios, IDS_NEWRAPWIZ_SCENARIO_TITLE, IDS_NEWRAPWIZ_SCENARIO_SUBTITLE>( hNotificationHandle, pTitle, bOwnsNotificationHandle )
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Scenarios::CPolicyWizard_Scenarios");
|
|
_ASSERTE(WizData);
|
|
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: CPolicyWizard_Scenarios
|
|
// History: Created Header 05/04/00 4:31:52 PM
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
CPolicyWizard_Scenarios::~CPolicyWizard_Scenarios()
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Scenarios::~CPolicyWizard_Scenarios");
|
|
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Scenarios::OnInitDialog
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Scenarios::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Scenarios::OnInitDialog");
|
|
|
|
// uncheck all
|
|
|
|
// check the default selected one
|
|
CheckDlgButton(IDC_NEWRAPWIZ_SCENARIO_VPN, BST_CHECKED);
|
|
|
|
// clean dirty bit
|
|
SetModified(FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Scenarios::OnDialinCheck
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Scenarios::OnScenario(UINT uMsg, WPARAM wParam, HWND hWnd, BOOL& bHandled)
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Scenarios::OnScenario");
|
|
|
|
SetModified(TRUE);
|
|
|
|
return 0;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Scenarios::OnWizardNext
|
|
|
|
// History: Created Header 05/04/00 4:31:52 PM
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
BOOL CPolicyWizard_Scenarios::OnWizardNext()
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Scenarios::OnWizardNext");
|
|
DWORD dwScenaro = 0;
|
|
CRapWizScenario** pS = m_spWizData->GetAllScenarios();
|
|
|
|
while(*pS != NULL)
|
|
{
|
|
if (IsDlgButtonChecked((*pS)->m_dwScenarioID))
|
|
{
|
|
dwScenaro = (*pS)->m_dwScenarioID;
|
|
break;
|
|
}
|
|
pS++;
|
|
}
|
|
|
|
if (dwScenaro == 0)
|
|
return FALSE;
|
|
|
|
// reset the dirty bit
|
|
SetModified(FALSE);
|
|
m_spWizData->SetScenario(dwScenaro);
|
|
|
|
return m_spWizData->GetNextPageId(((PROPSHEETPAGE*)(*this))->pszTemplate);
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Scenarios::OnSetActive
|
|
|
|
Return values:
|
|
|
|
TRUE if the page can be made active
|
|
FALSE if the page should be be skipped and the next page should be looked at.
|
|
|
|
Remarks:
|
|
|
|
If you want to change which pages are visited based on a user's
|
|
choices in a previous page, return FALSE here as appropriate.
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
BOOL CPolicyWizard_Scenarios::OnSetActive()
|
|
{
|
|
ATLTRACE(_T("# CPolicyWizard_Scenarios::OnSetActive\n"));
|
|
|
|
// MSDN docs say you need to use PostMessage here rather than SendMessage.
|
|
::PropSheet_SetWizButtons(GetParent(), PSWIZB_NEXT | PSWIZB_BACK);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
|
|
|
|
//=======================================================================================
|
|
//
|
|
//
|
|
// CPolicyWizard_Groups
|
|
//
|
|
//
|
|
//=======================================================================================
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: CPolicyWizard_Groups
|
|
// History: Created Header 05/04/00 4:31:52 PM
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
CPolicyWizard_Groups::CPolicyWizard_Groups( CRapWizardData* pWizData, LONG_PTR hNotificationHandle,
|
|
TCHAR* pTitle, BOOL bOwnsNotificationHandle
|
|
)
|
|
: m_spWizData(pWizData)
|
|
, CIASWizard97Page<CPolicyWizard_Groups, IDS_NEWRAPWIZ_GROUP_TITLE, IDS_NEWRAPWIZ_GROUP_SUBTITLE>( hNotificationHandle, pTitle, bOwnsNotificationHandle )
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Scenarios::CPolicyWizard_Scenarios");
|
|
_ASSERTE(pWizData);
|
|
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: CPolicyWizard_Scenarios
|
|
// History: Created Header 05/04/00 4:31:52 PM
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
CPolicyWizard_Groups::~CPolicyWizard_Groups()
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Groups::~CPolicyWizard_Groups");
|
|
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Groups::OnInitDialog
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Groups::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Groups::OnInitDialog");
|
|
|
|
// uncheck all
|
|
CheckDlgButton(IDC_NEWRAPWIZ_GROUP_USER, BST_UNCHECKED);
|
|
CheckDlgButton(IDC_NEWRAPWIZ_GROUP_GROUP, BST_UNCHECKED);
|
|
|
|
// check the default selected one
|
|
CheckDlgButton(m_spWizData->m_dwUserOrGroup, BST_CHECKED);
|
|
|
|
// BOOL bEnable = IsDlgButtonChecked(IDC_NEWRAPWIZ_GROUP_GROUP);
|
|
// ::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_GROUP_GROUPS), bEnable);
|
|
SetBtnState();
|
|
// ::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_GROUP_ADDGROUP), bEnable);
|
|
|
|
// listview init
|
|
HWND hList = GetDlgItem(IDC_NEWRAPWIZ_GROUP_GROUPS);
|
|
|
|
//
|
|
// first, set the list box to 2 columns
|
|
//
|
|
LVCOLUMN lvc;
|
|
int iCol;
|
|
WCHAR achColumnHeader[256];
|
|
HINSTANCE hInst;
|
|
|
|
// initialize the LVCOLUMN structure
|
|
lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
|
|
lvc.fmt = LVCFMT_LEFT;
|
|
|
|
lvc.cx = 300;
|
|
lvc.pszText = achColumnHeader;
|
|
|
|
// first column header: name
|
|
hInst = _Module.GetModuleInstance();
|
|
|
|
::LoadStringW(hInst, IDS_DISPLAY_GROUPS_FIRSTCOLUMN, achColumnHeader, sizeof(achColumnHeader)/sizeof(achColumnHeader[0]));
|
|
lvc.iSubItem = 0;
|
|
ListView_InsertColumn(hList, 0, &lvc);
|
|
|
|
// Set the listview control so that double-click anywhere in row selects.
|
|
ListView_SetExtendedListViewStyleEx(hList, LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
|
|
|
|
//
|
|
|
|
// link the list view with help class
|
|
m_spWizData->m_NTGroups.SetListView(GetDlgItem(IDC_NEWRAPWIZ_GROUP_GROUPS), this->m_hWnd);
|
|
|
|
m_spWizData->m_NTGroups.PopulateGroupList( 0 );
|
|
|
|
// Set some items based on whether the list is empty or not.
|
|
if( m_spWizData->m_NTGroups.size() )
|
|
{
|
|
|
|
// Select the first item.
|
|
ListView_SetItemState(hList, 0, LVIS_SELECTED, LVIS_SELECTED);
|
|
|
|
}
|
|
else
|
|
{
|
|
// Make sure the Remove button is not enabled initially.
|
|
::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_GROUP_REMOVEGROUP), FALSE);
|
|
}
|
|
|
|
|
|
// clean dirty bit
|
|
SetModified(FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Scenarios::OnUserOrGroup
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Groups::OnUserOrGroup(UINT uMsg, WPARAM wParam, HWND hWnd, BOOL& bHandled)
|
|
{
|
|
BOOL bGroup = IsDlgButtonChecked(IDC_NEWRAPWIZ_GROUP_GROUP);
|
|
|
|
// ::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_GROUP_GROUPS), bGroup);
|
|
SetBtnState();
|
|
// ::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_GROUP_ADDGROUP), bGroup);
|
|
|
|
SetModified(TRUE);
|
|
|
|
return 0;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Scenarios::OnUserOrGroup
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Groups::OnRemoveGroup(UINT uMsg, WPARAM wParam, HWND hWnd, BOOL& bHandled)
|
|
{
|
|
m_spWizData->m_NTGroups.RemoveSelectedGroups();
|
|
SetBtnState();
|
|
SetModified(TRUE);
|
|
|
|
|
|
return 0;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Scenarios::OnUserOrGroup
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Groups::OnAddGroups(UINT uMsg, WPARAM wParam, HWND hWnd, BOOL& bHandled)
|
|
{
|
|
m_spWizData->m_NTGroups.AddMoreGroups();
|
|
SetBtnState();
|
|
SetModified(TRUE);
|
|
|
|
return 0;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CNewRAPWiz_AllowDeny::OnWizardNext
|
|
|
|
// History: Created Header 05/04/00 4:31:52 PM
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
BOOL CPolicyWizard_Groups::OnWizardNext()
|
|
{
|
|
DWORD dwScenaro = 0;
|
|
|
|
if (IsDlgButtonChecked(IDC_NEWRAPWIZ_GROUP_GROUP))
|
|
m_spWizData->m_dwUserOrGroup = IDC_NEWRAPWIZ_GROUP_GROUP;
|
|
else if (IsDlgButtonChecked(IDC_NEWRAPWIZ_GROUP_USER))
|
|
m_spWizData->m_dwUserOrGroup = IDC_NEWRAPWIZ_GROUP_USER;
|
|
else
|
|
return FALSE;
|
|
|
|
// reset the dirty bit
|
|
SetModified(FALSE);
|
|
|
|
return m_spWizData->GetNextPageId(((PROPSHEETPAGE*)(*this))->pszTemplate);
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Groups::OnSetActive
|
|
|
|
Return values:
|
|
|
|
TRUE if the page can be made active
|
|
FALSE if the page should be be skipped and the next page should be looked at.
|
|
|
|
Remarks:
|
|
|
|
If you want to change which pages are visited based on a user's
|
|
choices in a previous page, return FALSE here as appropriate.
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
BOOL CPolicyWizard_Groups::OnSetActive()
|
|
{
|
|
ATLTRACE(_T("# CPolicyWizard_Groups::OnSetActive\n"));
|
|
|
|
// MSDN docs say you need to use PostMessage here rather than SendMessage.
|
|
SetBtnState();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Groups::OnListViewItemChanged
|
|
|
|
We enable or disable the Remove button depending on whether an item is selected.
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Groups::OnListViewItemChanged(int idCtrl,
|
|
LPNMHDR pnmh,
|
|
BOOL& bHandled)
|
|
{
|
|
SetBtnState();
|
|
|
|
bHandled = FALSE;
|
|
return 0;
|
|
}
|
|
|
|
void CPolicyWizard_Groups::SetBtnState()
|
|
{
|
|
BOOL bGroup = IsDlgButtonChecked(IDC_NEWRAPWIZ_GROUP_GROUP);
|
|
|
|
::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_GROUP_GROUPS), bGroup);
|
|
::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_GROUP_GROUPTEXT), bGroup);
|
|
::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_GROUP_ADDGROUP), bGroup);
|
|
|
|
// remove button
|
|
// Find out what's selected.
|
|
int iSelected = ListView_GetNextItem(GetDlgItem(IDC_NEWRAPWIZ_GROUP_GROUPS), -1, LVNI_SELECTED);
|
|
|
|
|
|
if (-1 == iSelected || !bGroup)
|
|
{
|
|
if( ::GetFocus() == GetDlgItem(IDC_NEWRAPWIZ_GROUP_REMOVEGROUP))
|
|
::SetFocus(GetDlgItem(IDC_NEWRAPWIZ_GROUP_ADDGROUP));
|
|
|
|
// The user selected nothing, let's disable the remove button.
|
|
::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_GROUP_REMOVEGROUP), FALSE);
|
|
}
|
|
else
|
|
{
|
|
// Yes, enable the remove button.
|
|
::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_GROUP_REMOVEGROUP), TRUE);
|
|
}
|
|
|
|
// next button
|
|
if(bGroup && m_spWizData->m_NTGroups.size() < 1)
|
|
::PropSheet_SetWizButtons(GetParent(), PSWIZB_BACK);
|
|
else
|
|
::PropSheet_SetWizButtons(GetParent(), PSWIZB_BACK | PSWIZB_NEXT);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//=======================================================================================
|
|
//
|
|
//
|
|
// CPolicyWizard_Authentication
|
|
//
|
|
//
|
|
//=======================================================================================
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: CPolicyWizard_Authentication
|
|
// History: Created Header 05/04/00 4:31:52 PM
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
CPolicyWizard_Authentication::CPolicyWizard_Authentication( CRapWizardData* pWizData, LONG_PTR hNotificationHandle,
|
|
TCHAR* pTitle, BOOL bOwnsNotificationHandle
|
|
)
|
|
: m_spWizData(pWizData)
|
|
, CIASWizard97Page<CPolicyWizard_Authentication, IDS_NEWRAPWIZ_AUTHENTICATION_TITLE, IDS_NEWRAPWIZ_AUTHENTICATION_SUBTITLE>( hNotificationHandle, pTitle, bOwnsNotificationHandle )
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Authentication::CPolicyWizard_Authentication");
|
|
_ASSERTE(pWizData);
|
|
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: CPolicyWizard_Authentication
|
|
// History: Created Header 05/04/00 4:31:52 PM
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
CPolicyWizard_Authentication::~CPolicyWizard_Authentication()
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Authentication::~CPolicyWizard_Authentication");
|
|
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Authentication::OnInitDialog
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Authentication::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Authentication::OnInitDialog");
|
|
|
|
// check the default values ...
|
|
if (m_spWizData->m_bMSCHAP)
|
|
CheckDlgButton(IDC_NEWRAPWIZ_AUTH_MSCHAP, BST_CHECKED);
|
|
|
|
if (m_spWizData->m_bMSCHAP2)
|
|
CheckDlgButton(IDC_NEWRAPWIZ_AUTH_MSCHAP2, BST_CHECKED);
|
|
|
|
if (m_spWizData->m_bEAP)
|
|
CheckDlgButton(IDC_NEWRAPWIZ_AUTH_EAP, BST_CHECKED);
|
|
|
|
::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_AUTH_EAP_COMBO), m_spWizData->m_bEAP);
|
|
::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_AUTH_CONFIGEAP), m_spWizData->m_bEAP);
|
|
|
|
// populate EAP providers
|
|
HRESULT hr = GetEapProviders(m_spWizData->m_pPolicyNode->m_pszServerAddress, &m_EAPProviders);
|
|
m_EapBox.Attach(GetDlgItem (IDC_NEWRAPWIZ_AUTH_EAP_COMBO));
|
|
|
|
ResetEAPList();
|
|
|
|
// clean dirty bit
|
|
SetModified(FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Authentication::ResetEAPlist
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
void CPolicyWizard_Authentication::ResetEAPList()
|
|
{
|
|
m_EapBox.ResetContent();
|
|
for(int i = 0; i < m_EAPProviders.GetSize(); i++)
|
|
{
|
|
// VPN only shows the ones support encryption
|
|
BOOL bAdd = FALSE;
|
|
|
|
if (m_EAPProviders[i].m_fSupportsEncryption && m_spWizData->GetScenario()->m_bAllowEncryptionEAP)
|
|
{
|
|
int iComboIndex = m_EapBox.AddString( m_EAPProviders[i].m_stTitle );
|
|
|
|
if(iComboIndex != CB_ERR)
|
|
m_EapBox.SetItemData(iComboIndex, i);
|
|
}
|
|
|
|
if (!m_EAPProviders[i].m_fSupportsEncryption && m_spWizData->GetScenario()->m_bAllowClearEAP)
|
|
{
|
|
int iComboIndex = m_EapBox.AddString( m_EAPProviders[i].m_stTitle );
|
|
|
|
if(iComboIndex != CB_ERR)
|
|
m_EapBox.SetItemData(iComboIndex, i);
|
|
}
|
|
};
|
|
|
|
if(m_EAPProviders.GetSize() > 0)
|
|
m_EapBox.SetCurSel(0);
|
|
|
|
BOOL b;
|
|
OnSelectedEAPChanged(0,0,0, b);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Authentication::OnUserOrGroup
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Authentication::OnAuthSelect(UINT uMsg, WPARAM wParam, HWND hWnd, BOOL& bHandled)
|
|
{
|
|
m_spWizData->m_bEAP = IsDlgButtonChecked(IDC_NEWRAPWIZ_AUTH_EAP);
|
|
m_spWizData->m_bMSCHAP2 = IsDlgButtonChecked(IDC_NEWRAPWIZ_AUTH_MSCHAP2);
|
|
m_spWizData->m_bMSCHAP = IsDlgButtonChecked(IDC_NEWRAPWIZ_AUTH_MSCHAP);
|
|
|
|
::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_AUTH_EAP_COMBO), m_spWizData->m_bEAP);
|
|
|
|
if(m_spWizData->m_bEAP)
|
|
{
|
|
BOOL b;
|
|
OnSelectedEAPChanged(0,0,0, b);
|
|
}
|
|
else
|
|
::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_AUTH_CONFIGEAP), m_spWizData->m_bEAP);
|
|
|
|
SetModified(TRUE);
|
|
|
|
// Find out what's selected.
|
|
int iSelected = m_EapBox.GetCurSel();;
|
|
|
|
if ((m_spWizData->m_bEAP && iSelected != -1)|| m_spWizData->m_bMSCHAP2 || m_spWizData->m_bMSCHAP)
|
|
// MSDN docs say you need to use PostMessage here rather than SendMessage.
|
|
::PropSheet_SetWizButtons(GetParent(), PSWIZB_BACK | PSWIZB_NEXT);
|
|
else
|
|
::PropSheet_SetWizButtons(GetParent(), PSWIZB_BACK);
|
|
|
|
return 0;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Authentication::OnConfigEAP
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Authentication::OnConfigEAP(UINT uMsg, WPARAM wParam, HWND hWnd, BOOL& bHandled)
|
|
{
|
|
|
|
// Find out what's selected.
|
|
int iSelected = m_EapBox.GetCurSel();;
|
|
|
|
if (iSelected == -1 && m_EAPProviders[m_EapBox.GetItemData(iSelected)].m_stConfigCLSID.IsEmpty())
|
|
return S_OK;
|
|
|
|
AuthProviderData * pData = NULL;
|
|
CComPtr<IEAPProviderConfig> spEAPConfig;
|
|
|
|
GUID guid;
|
|
HRESULT hr = S_OK;
|
|
ULONG_PTR uConnection = 0;
|
|
DWORD dwId;
|
|
DWORD index = m_EapBox.GetItemData(iSelected);
|
|
|
|
|
|
hr = CLSIDFromString((LPTSTR) (LPCTSTR)(m_EAPProviders[index].m_stConfigCLSID), &guid);
|
|
|
|
if (FAILED(hr )) goto L_ERR;
|
|
|
|
// Create the EAP provider object
|
|
// ----------------------------------------------------------------
|
|
hr = CoCreateInstance(guid,
|
|
NULL,
|
|
CLSCTX_INPROC_SERVER,
|
|
IID_IEAPProviderConfig,
|
|
(LPVOID *) &spEAPConfig);
|
|
if (FAILED(hr )) goto L_ERR;
|
|
|
|
// Configure this EAP provider
|
|
// ----------------------------------------------------------------
|
|
// EAP configure displays its own error message, so no hr is kept
|
|
dwId = _ttol(m_EAPProviders[index].m_stKey);
|
|
if ( !FAILED(spEAPConfig->Initialize(m_spWizData->m_pPolicyNode->m_pszServerAddress, dwId, &uConnection)) )
|
|
{
|
|
spEAPConfig->ServerInvokeConfigUI(dwId, uConnection, m_hWnd, 0, 0);
|
|
spEAPConfig->Uninitialize(dwId, uConnection);
|
|
}
|
|
|
|
if ( hr == E_NOTIMPL )
|
|
hr = S_OK;
|
|
|
|
L_ERR:
|
|
if ( FAILED(hr) )
|
|
{
|
|
// Bring up an error message
|
|
// ------------------------------------------------------------
|
|
ShowErrorDialog( m_hWnd, IDS_FAILED_CONFIG_EAP, NULL, hr, 0);
|
|
}
|
|
|
|
SetModified(TRUE);
|
|
|
|
|
|
return 0;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Authentication::OnWizardNext
|
|
|
|
// History: Created Header 05/04/00 4:31:52 PM
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
BOOL CPolicyWizard_Authentication::OnWizardNext()
|
|
{
|
|
// reset the dirty bit
|
|
SetModified(FALSE);
|
|
|
|
return m_spWizData->GetNextPageId(((PROPSHEETPAGE*)(*this))->pszTemplate);
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Groups::OnSetActive
|
|
|
|
Return values:
|
|
|
|
TRUE if the page can be made active
|
|
FALSE if the page should be be skipped and the next page should be looked at.
|
|
|
|
Remarks:
|
|
|
|
If you want to change which pages are visited based on a user's
|
|
choices in a previous page, return FALSE here as appropriate.
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
BOOL CPolicyWizard_Authentication::OnSetActive()
|
|
{
|
|
ATLTRACE(_T("# CPolicyWizard_Groups::OnSetActive\n"));
|
|
|
|
ResetEAPList();
|
|
|
|
// Find out what's selected.
|
|
int iSelected = m_EapBox.GetCurSel();;
|
|
if( m_spWizData->m_bEAP && iSelected == -1)
|
|
::PropSheet_SetWizButtons(GetParent(), PSWIZB_BACK);
|
|
else
|
|
::PropSheet_SetWizButtons(GetParent(), PSWIZB_BACK | PSWIZB_NEXT);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Groups::OnListViewItemChanged
|
|
|
|
We enable or disable the Remove button depending on whether an item is selected.
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Authentication::OnSelectedEAPChanged(
|
|
UINT uMsg
|
|
, WPARAM wParam
|
|
, HWND hwnd
|
|
, BOOL& bHandled
|
|
)
|
|
{
|
|
// Find out what's selected.
|
|
int iSelected = m_EapBox.GetCurSel();;
|
|
|
|
|
|
if (-1 == iSelected )
|
|
{
|
|
if( ::GetFocus() == GetDlgItem(IDC_NEWRAPWIZ_AUTH_CONFIGEAP))
|
|
::SetFocus(GetDlgItem(IDC_NEWRAPWIZ_AUTH_EAP_COMBO));
|
|
|
|
// The user selected nothing, let's disable the remove button.
|
|
::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_AUTH_CONFIGEAP), FALSE);
|
|
|
|
m_spWizData->m_dwEAPProvider = 0;
|
|
}
|
|
else
|
|
{
|
|
// enable configure button if it's configrable
|
|
DWORD index = m_EapBox.GetItemData(iSelected);
|
|
m_spWizData->m_dwEAPProvider = _ttol(m_EAPProviders[index].m_stKey);
|
|
m_spWizData->m_strEAPProvider = m_EAPProviders[index].m_stTitle;
|
|
|
|
::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_AUTH_CONFIGEAP), (!m_EAPProviders[index].m_stConfigCLSID.IsEmpty()));
|
|
}
|
|
|
|
|
|
bHandled = FALSE;
|
|
return 0;
|
|
}
|
|
|
|
|
|
//=======================================================================================
|
|
//
|
|
//
|
|
// CPolicyWizard_EAP
|
|
//
|
|
//
|
|
//=======================================================================================
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_EAP::OnInitDialog
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_EAP::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_EAP::OnInitDialog");
|
|
|
|
m_spWizData->m_bEAP = TRUE;
|
|
m_spWizData->m_bMSCHAP2 = FALSE;
|
|
m_spWizData->m_bMSCHAP = FALSE;
|
|
// populate EAP providers
|
|
HRESULT hr = GetEapProviders(m_spWizData->m_pPolicyNode->m_pszServerAddress, &m_EAPProviders);
|
|
m_EapBox.Attach(GetDlgItem (IDC_NEWRAPWIZ_AUTH_EAP_COMBO));
|
|
|
|
ResetEAPList();
|
|
|
|
// clean dirty bit
|
|
SetModified(FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_EAP::OnSetActive
|
|
|
|
Return values:
|
|
|
|
TRUE if the page can be made active
|
|
FALSE if the page should be be skipped and the next page should be looked at.
|
|
|
|
Remarks:
|
|
|
|
If you want to change which pages are visited based on a user's
|
|
choices in a previous page, return FALSE here as appropriate.
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
BOOL CPolicyWizard_EAP::OnSetActive()
|
|
{
|
|
ATLTRACE(_T("# CPolicyWizard_Groups::OnSetActive\n"));
|
|
|
|
ResetEAPList();
|
|
|
|
::PropSheet_SetWizButtons(GetParent(), PSWIZB_BACK | PSWIZB_NEXT);
|
|
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
//=======================================================================================
|
|
//
|
|
//
|
|
// CPolicyWizard_Encryption
|
|
//
|
|
//
|
|
//=======================================================================================
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: CPolicyWizard_Encryption
|
|
// History: Created Header 05/04/00 4:31:52 PM
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
CPolicyWizard_Encryption::CPolicyWizard_Encryption( CRapWizardData* pWizData, LONG_PTR hNotificationHandle,
|
|
TCHAR* pTitle, BOOL bOwnsNotificationHandle
|
|
)
|
|
: m_spWizData(pWizData)
|
|
, CIASWizard97Page<CPolicyWizard_Encryption, IDS_NEWRAPWIZ_ENCRYPTION_TITLE, IDS_NEWRAPWIZ_ENCRYPTION_SUBTITLE>( hNotificationHandle, pTitle, bOwnsNotificationHandle )
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Encryption::CPolicyWizard_Encryption");
|
|
_ASSERTE(pWizData);
|
|
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: CPolicyWizard_Encryption
|
|
// History: Created Header 05/04/00 4:31:52 PM
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
CPolicyWizard_Encryption::~CPolicyWizard_Encryption()
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Encryption::~CPolicyWizard_Encryption");
|
|
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Encryption::OnInitDialog
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Encryption::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Encryption::OnInitDialog");
|
|
|
|
// don't show No encryption with VPN IDC_NEWRAPWIZ_ENCRY_NO_STATIC
|
|
if (m_spWizData->GetScenario()->m_bAllowClear)
|
|
{
|
|
::ShowWindow(GetDlgItem(IDC_NEWRAPWIZ_ENCRY_NO), SW_SHOW);
|
|
}
|
|
else
|
|
{
|
|
::ShowWindow(GetDlgItem(IDC_NEWRAPWIZ_ENCRY_NO), SW_HIDE);
|
|
}
|
|
|
|
// check the default values ...
|
|
if (m_spWizData->m_bEncrypt_No)
|
|
CheckDlgButton(IDC_NEWRAPWIZ_ENCRY_NO, BST_CHECKED);
|
|
|
|
if (m_spWizData->m_bEncrypt_Basic)
|
|
CheckDlgButton(IDC_NEWRAPWIZ_ENCRY_BASIC, BST_CHECKED);
|
|
|
|
if (m_spWizData->m_bEncrypt_Strong)
|
|
CheckDlgButton(IDC_NEWRAPWIZ_ENCRY_STRONG, BST_CHECKED);
|
|
|
|
if (m_spWizData->m_bEncrypt_Strongest)
|
|
CheckDlgButton(IDC_NEWRAPWIZ_ENCRY_STRONGEST, BST_CHECKED);
|
|
|
|
// clean dirty bit
|
|
SetModified(FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Encryption::OnEncryptionSelect
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Encryption::OnEncryptionSelect(UINT uMsg, WPARAM wParam, HWND hWnd, BOOL& bHandled)
|
|
{
|
|
m_spWizData->m_bEncrypt_No = IsDlgButtonChecked(IDC_NEWRAPWIZ_ENCRY_NO);
|
|
m_spWizData->m_bEncrypt_Basic = IsDlgButtonChecked(IDC_NEWRAPWIZ_ENCRY_BASIC);
|
|
m_spWizData->m_bEncrypt_Strong = IsDlgButtonChecked(IDC_NEWRAPWIZ_ENCRY_STRONG);
|
|
m_spWizData->m_bEncrypt_Strongest = IsDlgButtonChecked(IDC_NEWRAPWIZ_ENCRY_STRONGEST);
|
|
|
|
// reset the dirty bit
|
|
SetModified(TRUE);
|
|
|
|
if (m_spWizData->m_bEncrypt_No || m_spWizData->m_bEncrypt_Basic || m_spWizData->m_bEncrypt_Strong || m_spWizData->m_bEncrypt_Strongest)
|
|
// MSDN docs say you need to use PostMessage here rather than SendMessage.
|
|
::PropSheet_SetWizButtons(GetParent(), PSWIZB_BACK | PSWIZB_NEXT );
|
|
else
|
|
::PropSheet_SetWizButtons(GetParent(), PSWIZB_BACK);
|
|
|
|
|
|
return 0;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Encryption::OnWizardNext
|
|
|
|
// History: Created Header 05/04/00 4:31:52 PM
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
BOOL CPolicyWizard_Encryption::OnWizardNext()
|
|
{
|
|
m_spWizData->m_bEncrypt_No = IsDlgButtonChecked(IDC_NEWRAPWIZ_ENCRY_NO);
|
|
m_spWizData->m_bEncrypt_Basic = IsDlgButtonChecked(IDC_NEWRAPWIZ_ENCRY_BASIC);
|
|
m_spWizData->m_bEncrypt_Strong = IsDlgButtonChecked(IDC_NEWRAPWIZ_ENCRY_STRONG);
|
|
m_spWizData->m_bEncrypt_Strongest = IsDlgButtonChecked(IDC_NEWRAPWIZ_ENCRY_STRONGEST);
|
|
|
|
// reset the dirty bit
|
|
SetModified(FALSE);
|
|
|
|
return m_spWizData->GetNextPageId(((PROPSHEETPAGE*)(*this))->pszTemplate);
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Encryption::OnSetActive
|
|
|
|
Return values:
|
|
|
|
TRUE if the page can be made active
|
|
FALSE if the page should be be skipped and the next page should be looked at.
|
|
|
|
Remarks:
|
|
|
|
If you want to change which pages are visited based on a user's
|
|
choices in a previous page, return FALSE here as appropriate.
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
BOOL CPolicyWizard_Encryption::OnSetActive()
|
|
{
|
|
// MSDN docs say you need to use PostMessage here rather than SendMessage.
|
|
if (m_spWizData->m_bEncrypt_No || m_spWizData->m_bEncrypt_Basic || m_spWizData->m_bEncrypt_Strong || m_spWizData->m_bEncrypt_Strongest)
|
|
// MSDN docs say you need to use PostMessage here rather than SendMessage.
|
|
::PropSheet_SetWizButtons(GetParent(), PSWIZB_BACK | PSWIZB_NEXT );
|
|
else
|
|
::PropSheet_SetWizButtons(GetParent(), PSWIZB_BACK);
|
|
|
|
|
|
// don't show No encryption with VPN IDC_NEWRAPWIZ_ENCRY_NO_STATIC
|
|
if (m_spWizData->GetScenario()->m_bAllowClear)
|
|
{
|
|
::ShowWindow(GetDlgItem(IDC_NEWRAPWIZ_ENCRY_NO), SW_SHOW);
|
|
}
|
|
else
|
|
{
|
|
::ShowWindow(GetDlgItem(IDC_NEWRAPWIZ_ENCRY_NO), SW_HIDE);
|
|
}
|
|
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
void SetWizardLargeFont(HWND hWnd, int controlId)
|
|
{
|
|
static CFont largeFont;
|
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
|
|
|
CWnd wnd;
|
|
wnd.Attach(::GetDlgItem(hWnd, controlId));
|
|
if (wnd.m_hWnd)
|
|
{
|
|
::CString FontSize;
|
|
::CString FontName;
|
|
|
|
FontSize.LoadString(IDS_LARGE_FONT_SIZE);
|
|
FontName.LoadString(IDS_LARGE_FONT_NAME);
|
|
// If we don't have the large font yet, ...
|
|
if (!(HFONT)largeFont)
|
|
{
|
|
// ... create it.
|
|
largeFont.CreatePointFont(
|
|
10 * _wtoi((LPCTSTR)FontSize),
|
|
FontName
|
|
);
|
|
}
|
|
|
|
wnd.SetFont(&largeFont);
|
|
wnd.Detach();
|
|
}
|
|
}
|
|
|