windows-nt/Source/XPSP1/NT/net/mmc/dialinusr/rasdial.h
2020-09-26 16:20:57 +08:00

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_)