/*++ Copyright (c) 1997-1999 Microsoft Corporation Module Name: rndnt.h Abstract: Definitions for CNTDirectory class that handles NTDS access. Author: Mu Han (muhan) 12-5-1997 --*/ #ifndef __RNDNT_H #define __RNDNT_H #pragma once #include "rndcommc.h" #include "rndobjsf.h" #include "rndutil.h" ///////////////////////////////////////////////////////////////////////////// // CNTDirectory ///////////////////////////////////////////////////////////////////////////// const WCHAR DEFAULT_DS_SERVER[] = L""; const WCHAR DS_USER_FILTER_FORMAT[] = L"(&(SamAccountName=%s)(objectclass=user)(!(objectclass=computer)))"; // The following are no longer used: // const WCHAR USERS_CONTAINER[] = L"cn=Users,"; // const WCHAR MEETINGSS_CONTAINER[] = L"cn=Meetings,cn=System,"; // const WCHAR DS_CONF_DN_FORMAT[] = L"cn=%s,cn=Meetings,cn=system,%s"; const WORD GLOBAL_CATALOG_PORT = 3268; class CNTDirectory : public CComDualImpl, public CComObjectRootEx, public CObjectSafeImpl { DECLARE_GET_CONTROLLING_UNKNOWN() public: BEGIN_COM_MAP(CNTDirectory) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(ITDirectory) COM_INTERFACE_ENTRY(IObjectSafety) COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pFTM) END_COM_MAP() //DECLARE_NOT_AGGREGATABLE(CNTDirectory) // Remove the comment from the line above if you don't want your object to // support aggregation. // ITDirectory STDMETHOD (get_DirectoryType) ( OUT DIRECTORY_TYPE * pDirectoryType ); STDMETHOD (get_DisplayName) ( OUT BSTR *ppName ); STDMETHOD (get_IsDynamic) ( OUT VARIANT_BOOL *pfDynamic ); STDMETHOD (get_DefaultObjectTTL) ( OUT long *pTTL // in seconds ); STDMETHOD (put_DefaultObjectTTL) ( IN long TTL // in sechods ); STDMETHOD (EnableAutoRefresh) ( IN VARIANT_BOOL fEnable ); STDMETHOD (Connect) ( IN VARIANT_BOOL fSecure ); STDMETHOD (Bind) ( IN BSTR pDomainName, IN BSTR pUserName, IN BSTR pPassword, IN long lFlags ); STDMETHOD (AddDirectoryObject) ( IN ITDirectoryObject *pDirectoryObject ); STDMETHOD (ModifyDirectoryObject) ( IN ITDirectoryObject *pDirectoryObject ); STDMETHOD (RefreshDirectoryObject) ( IN ITDirectoryObject *pDirectoryObject ); STDMETHOD (DeleteDirectoryObject) ( IN ITDirectoryObject *pDirectoryObject ); STDMETHOD (get_DirectoryObjects) ( IN DIRECTORY_OBJECT_TYPE DirectoryObjectType, IN BSTR pName, OUT VARIANT * pVariant ); STDMETHOD (EnumerateDirectoryObjects) ( IN DIRECTORY_OBJECT_TYPE DirectoryObjectType, IN BSTR pName, OUT IEnumDirectoryObject ** ppEnumObject ); public: CNTDirectory() : m_Type(DT_NTDS), m_ldap(NULL), m_ldapNonGC(NULL), m_NamingContext(NULL), m_IsSsl(FALSE), m_wPort(GLOBAL_CATALOG_PORT), m_pFTM(NULL) {} ~CNTDirectory() { if ( m_ldap ) { ldap_unbind(m_ldap); } if ( m_ldapNonGC ) { ldap_unbind(m_ldapNonGC); } if ( m_pFTM ) { m_pFTM->Release(); } delete m_NamingContext; } HRESULT FinalConstruct(void); protected: HRESULT LdapSearchUser( IN TCHAR * pName, OUT LDAPMessage ** ppLdapMsg ); HRESULT MakeUserDNs( IN TCHAR * pName, OUT TCHAR *** pppDNs, OUT DWORD * pdwNumDNs ); HRESULT AddUserIPPhone( IN ITDirectoryObject * pDirectoryObject ); HRESULT DeleteUserIPPhone( IN ITDirectoryObject * pDirectoryObject ); HRESULT CreateUser( IN LDAPMessage * pEntry, IN ITDirectoryObject ** ppObject ); HRESULT SearchUser( IN BSTR pName, OUT ITDirectoryObject *** pppDirectoryObject, OUT DWORD * pdwSize ); private: CCritSection m_lock; DIRECTORY_TYPE m_Type; LDAP * m_ldap; LDAP * m_ldapNonGC; TCHAR * m_NamingContext; BOOL m_IsSsl; WORD m_wPort; IUnknown * m_pFTM; // pointer to the free threaded marshaler }; #endif