302 lines
8.3 KiB
C++
302 lines
8.3 KiB
C++
/**********************************************************************/
|
|
/** Microsoft Windows/NT **/
|
|
/** Copyright(c) Microsoft Corporation, 1997 - 1999 **/
|
|
/**********************************************************************/
|
|
|
|
/*
|
|
rasdial.h
|
|
Definition of CRASProfile class and CRASUser class
|
|
|
|
CRASProfile handles operations related to profile object in DS,
|
|
including: load, save, enumerate all the profiles
|
|
|
|
CRASUser handles operations related to RASUser object in DS,
|
|
including: load, save
|
|
|
|
|
|
FILE HISTORY:
|
|
|
|
*/
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#if !defined(AFX_RASPROFILE_H__484FE2B0_20A8_11D1_8531_00C04FC31FD3__INCLUDED_)
|
|
#define AFX_RASPROFILE_H__484FE2B0_20A8_11D1_8531_00C04FC31FD3__INCLUDED_
|
|
|
|
#if _MSC_VER >= 1000
|
|
#pragma once
|
|
#endif // _MSC_VER >= 1000
|
|
|
|
#include <dialinusr.h>
|
|
//#include <rassapi.h>
|
|
#include "helper.h"
|
|
#include <sdowrap.h>
|
|
#include "sharesdo.h"
|
|
#include <rtutils.h>
|
|
|
|
extern DWORD g_dwTraceHandle;
|
|
|
|
class CRASUSER;
|
|
class CRASProfile;
|
|
|
|
// constant definitions for the dialogs
|
|
#define MIN_METRIC 1
|
|
#define MAX_METRIC 0x7fffffff
|
|
#define MIN_PREFIXLEN 1
|
|
#define MAX_PREFIXLEN 32
|
|
|
|
// constraint dialog
|
|
#define MAX_LOGINS (UD_MAXVAL - 1)
|
|
#define MAX_IDLETIMEOUT (UD_MAXVAL - 1)
|
|
#define MAX_SESSIONTIME (UD_MAXVAL - 1)
|
|
|
|
#define MAX_PORTLIMIT (UD_MAXVAL - 1)
|
|
#define MAX_PERCENT 100
|
|
#define MAX_TIME (UD_MAXVAL - 1)
|
|
|
|
// copy from IPSEC
|
|
//TODO get rid of these bogus error codes!
|
|
// These are made up numbers so I can get useful information back to
|
|
// IPSECDS clients.
|
|
#define E_IPSEC_DS_DATA_VERSION 0x800f0001
|
|
#define E_IPSEC_DS_ADSI_EXCEPTION 0x800f0002
|
|
#define E_IPSEC_DS_NO_ADMIN_ACCESS 0x800f0003
|
|
#define E_IPSEC_DS_NOT_FOUND 0x800f0004
|
|
#define E_IPSEC_DS_STORAGE_NOT_OPEN 0x800f0005
|
|
|
|
// These are error codes I get back from ADSI which are not
|
|
// defined anywhere, so I made my own defines for them.
|
|
// Unfortunately, this means that I have no guarantee that these
|
|
// error codes won't change in the future.
|
|
#define E_IPSEC_DS_ALREADY_EXISTS 0x800700b7
|
|
#define E_IPSEC_DS_SCHEMA_LOCKED 0x800703eb
|
|
|
|
#define E_RAS
|
|
|
|
enum RasEnvType
|
|
{
|
|
RASUSER_ENV_LOCAL = 1,
|
|
RASUSER_ENV_DS
|
|
};
|
|
|
|
// Port Types definition
|
|
struct CName_Code{
|
|
LPCTSTR m_pszName;
|
|
int m_nCode;
|
|
};
|
|
|
|
extern CName_Code PortTypes[];
|
|
#ifdef _TUNNEL
|
|
extern CName_Code TunnelTypes[];
|
|
extern CName_Code TunnelMediumTypes[];
|
|
#endif
|
|
// enumeration buffer size
|
|
#define MAX_ENUM_IADS 20
|
|
|
|
//
|
|
//
|
|
// CRASProfile class encapsulate the RASProfile object in DS
|
|
//
|
|
// Data type mapping:
|
|
// interger32 --> DWORD, BSTR (String) --> CString
|
|
// BSTR (String) multi-value --> CStrArray
|
|
// BOOLEAN --> BOOL
|
|
//
|
|
// Member Functions:
|
|
// Load(LPCWSTR pcswzUserPath)
|
|
// Purpose: Load the data from DS, and fill the data members
|
|
// pcswzUserPath: the ADsPath to the user object that contains
|
|
// Save(LPCWSTR pcswzUserPath)
|
|
// Purpose: Save the data to DS under specified user object
|
|
// pcswzUserPath: the ADsPath for the container, when NULL, the ADsPath
|
|
// used for loading is used.
|
|
//
|
|
|
|
#define EAPTYPE_KEY_EMPTY (-1)
|
|
#define IF_KEY_SUPPORT_ENCRYPTION(k) ((k) != EAPTYPE_KEY_EMPTY && (k) != 0)
|
|
|
|
// profile attribute bit flags PABF
|
|
#define PABF_msNPTimeOfDay 0x00000002
|
|
#define PABF_msNPCalledStationId 0x00000004
|
|
#define PABF_msNPAllowedPortTypes 0x00000008
|
|
#define PABF_msRADIUSIdleTimeout 0x00000010
|
|
#define PABF_msRADIUSSessionTimeout 0x00000020
|
|
#define PABF_msRADIUSFramedIPAddress 0x00000040
|
|
#define PABF_msRADIUSPortLimit 0x00000080
|
|
#define PABF_msRASBapRequired 0x00000100
|
|
#define PABF_msRASBapLinednLimit 0x00000200
|
|
#define PABF_msRASBapLinednTime 0x00000400
|
|
#define PABF_msNPAuthenticationType 0x00000800
|
|
#define PABF_msNPAllowedEapType 0x00001000
|
|
#define PABF_msRASEncryptionType 0x00002000
|
|
#define PABF_msRASAllowEncryption 0x00004000
|
|
#define PAFB_msRASFilter 0x00008000
|
|
|
|
class CRASProfileMerge
|
|
{
|
|
public:
|
|
HRESULT Save(); // To SDO
|
|
HRESULT Load(); // Using SDO
|
|
|
|
CRASProfileMerge(ISdo* pIProfile, ISdoDictionaryOld* pIDictionary)
|
|
{
|
|
ASSERT(pIProfile);
|
|
ASSERT(pIDictionary);
|
|
|
|
m_spIProfile = pIProfile;
|
|
m_spIDictionary = pIDictionary;
|
|
m_nEAPTypeKey = EAPTYPE_KEY_EMPTY;
|
|
m_dwAttributeFlags = 0;
|
|
m_nFiltersSize = 0;
|
|
}
|
|
|
|
virtual ~CRASProfileMerge()
|
|
{
|
|
}
|
|
|
|
public:
|
|
// BIT flag for each attribute
|
|
DWORD m_dwAttributeFlags;
|
|
|
|
// networking page
|
|
DWORD m_dwFramedIPAddress;
|
|
CBSTR m_cbstrFilters;
|
|
UINT m_nFiltersSize; // in bytes
|
|
|
|
// constraints page
|
|
CDWArray m_dwArrayAllowedPortTypes;
|
|
DWORD m_dwSessionTimeout;
|
|
DWORD m_dwIdleTimeout;
|
|
CStrArray m_strArrayCalledStationId;
|
|
DWORD m_dwSessionAllowed;
|
|
CStrArray m_strArrayTimeOfDay;
|
|
|
|
// authentication page
|
|
CDWArray m_dwArrayAuthenticationTypes;
|
|
DWORD m_dwEapType;
|
|
|
|
// multilink page
|
|
DWORD m_dwPortLimit;
|
|
DWORD m_dwBapLineDnLimit;
|
|
DWORD m_dwBapLineDnTime;
|
|
BOOL m_dwBapRequired;
|
|
|
|
// encryption page
|
|
DWORD m_dwEncryptionType;
|
|
DWORD m_dwEncryptionPolicy;
|
|
|
|
public:
|
|
// EAP type list -- !!! Need to implement
|
|
HRESULT GetEapTypeList(CStrArray& EapTypes, CDWArray& EapIds, CDWArray& EapTypeKeys, AuthProviderArray* pProvList);
|
|
|
|
|
|
// to detect if driver level support 128 bit encryption,
|
|
HRESULT GetRasNdiswanDriverCaps(RAS_NDISWAN_DRIVER_INFO *pInfo);
|
|
|
|
|
|
// Medium Type list -- !! Need to implement
|
|
HRESULT GetPortTypeList(CStrArray& Names, CDWArray& MediumIds);
|
|
|
|
void SetMachineName(LPCWSTR pMachineName){ m_strMachineName = pMachineName;};
|
|
|
|
// the management key of the current EAP type, -1, not set
|
|
int m_nEAPTypeKey;
|
|
|
|
public:
|
|
CComPtr<ISdo> m_spIProfile;
|
|
CComPtr<ISdoDictionaryOld> m_spIDictionary;
|
|
CSdoWrapper m_SdoWrapper;
|
|
|
|
CString m_strMachineName;
|
|
};
|
|
|
|
//
|
|
// CRASUser class encapsulate the RASUser object contained in user objectin DS
|
|
//
|
|
// Data type mapping:
|
|
// interger32 --> DWORD, BSTR (String) --> CString
|
|
// BSTR (String) multi-value --> CStrArray
|
|
// BOOLEAN --> BOOL
|
|
//
|
|
// Member Functions:
|
|
// Load(LPCWSTR pcswzUserPath)
|
|
// Purpose: Load the data from DS, and fill the data members
|
|
// pcswzUserPath: the ADsPath to the user object that contains
|
|
// Save(LPCWSTR pcswzUserPath)
|
|
// Purpose: Save the data to DS under specified user object
|
|
// pcswzUserPath: the ADsPath for the container, when NULL, the ADsPath
|
|
// used for loading is used.
|
|
// ChangeProfile(LPCWSTR pcswzProfilePath)
|
|
// Purpose: use profile specified in the path
|
|
// pcswzProfilePath: the ADsPath of the profile
|
|
//
|
|
class CMarshalSdoServer;
|
|
class CRASUserMerge
|
|
{
|
|
public:
|
|
CRASUserMerge(RasEnvType type, LPCWSTR location, LPCWSTR userPath);
|
|
|
|
~CRASUserMerge()
|
|
{
|
|
// to test if problem is within here, to explicitly
|
|
m_spISdoServer.Release();
|
|
};
|
|
|
|
// read or write information from DS
|
|
virtual HRESULT Load();
|
|
virtual HRESULT Save();
|
|
|
|
#ifdef SINGLE_SDO_CONNECTION // for share the same sdo connection for multiple users
|
|
CMarshalSdoServer* GetMarshalSdoServerHolder() { return &m_MarshalSdoServer;};
|
|
#endif
|
|
|
|
HRESULT HrGetDCName(CString& DcName);
|
|
protected:
|
|
BOOL IfAccessAttribute(ULONG id);
|
|
HRESULT SetRegistryFootPrint();
|
|
HRESULT HrIsInMixedDomain();
|
|
BOOL IsFocusOnLocalUser(){ return (!m_strMachine.IsEmpty());};
|
|
|
|
protected:
|
|
// data members for the RAS User attribute defined in DS
|
|
|
|
// this defines if dialin is allowed, and also the policy for callback
|
|
// RAS_CALLBACK_CALLERSET, RAS_CALLBACK_SECURE is the mask
|
|
DWORD m_dwDialinPermit; //1: allow, 0: deny, -1: not defined
|
|
DWORD m_dwDefinedAttribMask;
|
|
|
|
// static IP address
|
|
// when m_bStaticIPAddress == false, m_dwFramedIPAddress is invalide
|
|
// m_bStaticIPAddress is not an attribute in DS
|
|
DWORD m_dwFramedIPAddress;
|
|
|
|
// 10/20/97 weijiang removed -- use m_dwAllowDialin to hold this value
|
|
// BOOL m_bStaticIPAddress;
|
|
|
|
// CALLBACK
|
|
CString m_strCallbackNumber;
|
|
|
|
// the static routes
|
|
CStrArray m_strArrayFramedRoute;
|
|
|
|
// caller id
|
|
CStrArray m_strArrayCallingStationId;
|
|
|
|
|
|
protected:
|
|
// CComPtr<ISdo> m_spIRasUser;
|
|
CComPtr<ISdoMachine> m_spISdoServer;
|
|
CUserSdoWrapper m_SdoWrapper;
|
|
|
|
CString m_strUserPath; // the container's ADsPath
|
|
CString m_strMachine; // when it's for a machine with NO DS, this will be useful
|
|
RasEnvType m_type;
|
|
#ifdef SINGLE_SDO_CONNECTION // for share the same sdo connection for multiple users
|
|
CMarshalSdoServer m_MarshalSdoServer;
|
|
#endif
|
|
};
|
|
|
|
#endif // !defined(AFX_RASPROFILE_H__484FE2B0_20A8_11D1_8531_00C04FC31FD3__INCLUDED_)
|
|
|
|
|
|
|