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.
187 lines
5.9 KiB
187 lines
5.9 KiB
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright(C) 2000 Microsoft Corporation all rights reserved.
|
|
//
|
|
// Module: updatemschap.cpp
|
|
//
|
|
// Project: Windows 2000 IAS
|
|
//
|
|
// Description: add the authentication types RAS_AT_MSCHAPPASS and
|
|
// RAS_AT_MSCHAP2PASS when RAS_AT_MSCHAP and RAS_AT_MSCHAP2
|
|
// are in the profiles.
|
|
//
|
|
// Author: tperraut 11/30/2000
|
|
//
|
|
// Revision
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
#include "stdafx.h"
|
|
|
|
#include "GlobalData.h"
|
|
#include "updatemschap.h"
|
|
#include "Objects.h"
|
|
#include "Properties.h"
|
|
#include "sdoias.h"
|
|
|
|
|
|
void CUpdateMSCHAP::UpdateProperties(const LONG CurrentProfileIdentity)
|
|
{
|
|
_bstr_t AuthenticationName = L"msNPAuthenticationType2";
|
|
|
|
// Now get the properties for the current profile
|
|
_bstr_t PropertyName;
|
|
_bstr_t PropertyValue;
|
|
|
|
LONG Type = 0;
|
|
bool ChapSet = false;
|
|
bool Chap2Set = false;
|
|
bool ChapPassSet = false;
|
|
bool Chap2PassSet = false;
|
|
|
|
LONG IndexProperty = 0;
|
|
HRESULT hr = m_GlobalData.m_pProperties->GetProperty(
|
|
CurrentProfileIdentity,
|
|
PropertyName,
|
|
Type,
|
|
PropertyValue
|
|
);
|
|
|
|
while ( SUCCEEDED(hr) )
|
|
{
|
|
|
|
// msNPAuthenticationType2 property found
|
|
if ( PropertyName == AuthenticationName )
|
|
{
|
|
if ( Type != VT_I4 )
|
|
{
|
|
_com_issue_error(E_UNEXPECTED);
|
|
}
|
|
|
|
|
|
LONG AuthenticationType = _wtol(static_cast<wchar_t*>(PropertyValue));
|
|
switch (AuthenticationType)
|
|
{
|
|
case IAS_AUTH_MSCHAP:
|
|
{
|
|
ChapSet = true;
|
|
break;
|
|
}
|
|
case IAS_AUTH_MSCHAP2:
|
|
{
|
|
Chap2Set = true;
|
|
break;
|
|
}
|
|
case IAS_AUTH_MSCHAP_CPW:
|
|
{
|
|
ChapPassSet = true;
|
|
break;
|
|
}
|
|
case IAS_AUTH_MSCHAP2_CPW:
|
|
{
|
|
Chap2PassSet = true;
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
++IndexProperty;
|
|
|
|
hr = m_GlobalData.m_pProperties->GetNextProperty(
|
|
CurrentProfileIdentity,
|
|
PropertyName,
|
|
Type,
|
|
PropertyValue,
|
|
IndexProperty
|
|
);
|
|
}
|
|
|
|
// No property or no more properties for this profile
|
|
|
|
// Insert the newproperties if necessary
|
|
if ( ChapSet && !ChapPassSet )
|
|
{
|
|
// RAS_AT_MSCHAPPASS = 9
|
|
wchar_t buffer[34]; // can convert 33 char max
|
|
_ltow(IAS_AUTH_MSCHAP_CPW, buffer, 10); // radix 10
|
|
|
|
_bstr_t ChapPasswordValue(buffer);
|
|
// now insert the new properties if needed
|
|
m_GlobalData.m_pProperties->InsertProperty(
|
|
CurrentProfileIdentity,
|
|
AuthenticationName,
|
|
VT_I4,
|
|
ChapPasswordValue
|
|
);
|
|
}
|
|
|
|
if ( Chap2Set && !Chap2PassSet )
|
|
{
|
|
// RAS_AT_MSCHAP2PASS = 10
|
|
wchar_t buffer[34]; // can convert 33 char max
|
|
_ltow(IAS_AUTH_MSCHAP2_CPW, buffer, 10); // radix 10
|
|
|
|
_bstr_t Chap2PasswordValue(buffer);
|
|
// now insert the new properties if needed
|
|
m_GlobalData.m_pProperties->InsertProperty(
|
|
CurrentProfileIdentity,
|
|
AuthenticationName,
|
|
VT_I4,
|
|
Chap2PasswordValue
|
|
);
|
|
}
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// Execute
|
|
//
|
|
// For each profile, if msNPAuthenticationType2 is RAS_AT_MSCHAP then add the
|
|
// msNPAuthenticationType2 RAS_AT_MSCHAPPASS
|
|
// if msNPAuthenticationType2 is RAS_AT_MSCHAP2 then add the
|
|
// msNPAuthenticationType2 RAS_AT_MSCHAP2PASS
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
void CUpdateMSCHAP::Execute()
|
|
{
|
|
// Get the Profiles container identity
|
|
const WCHAR ProfilesPath[] =
|
|
L"Root\0"
|
|
L"Microsoft Internet Authentication Service\0"
|
|
L"RadiusProfiles\0";
|
|
|
|
LONG ProfilesIdentity;
|
|
m_GlobalData.m_pObjects->WalkPath(ProfilesPath, ProfilesIdentity);
|
|
|
|
|
|
// Get the first Profile (if any)
|
|
_bstr_t CurrentProfileName;
|
|
LONG CurrentProfileIdentity;
|
|
|
|
HRESULT hr = m_GlobalData.m_pObjects->GetObject(
|
|
CurrentProfileName,
|
|
CurrentProfileIdentity,
|
|
ProfilesIdentity
|
|
);
|
|
// for each profiles in ias.mdb, execute the changes.
|
|
LONG IndexObject = 0;
|
|
|
|
// if hr is not S_OK, there's no profile, nothing to do
|
|
while ( SUCCEEDED(hr) )
|
|
{
|
|
UpdateProperties(CurrentProfileIdentity);
|
|
|
|
// now get the next profile
|
|
++IndexObject;
|
|
hr = m_GlobalData.m_pObjects->GetNextObject(
|
|
CurrentProfileName,
|
|
CurrentProfileIdentity,
|
|
ProfilesIdentity,
|
|
IndexObject
|
|
);
|
|
}
|
|
}
|
|
|