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