/*********************************************************************** * * _LDAPCNT.H * * Header file for code in LDAPCONT.C * * Copyright 1996 Microsoft Corporation. All Rights Reserved. * ***********************************************************************/ /* * ABContainer for LDAP object. (i.e. IAB::OpenEntry() with an * lpEntryID of NULL). */ #undef INTERFACE #define INTERFACE struct _LDAPCONT #undef MAPIMETHOD_ #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, LDAPCONT_) MAPI_IUNKNOWN_METHODS(IMPL) MAPI_IMAPIPROP_METHODS(IMPL) MAPI_IMAPICONTAINER_METHODS(IMPL) MAPI_IABCONTAINER_METHODS(IMPL) #undef MAPIMETHOD_ #define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, LDAPCONT_) MAPI_IUNKNOWN_METHODS(IMPL) MAPI_IMAPIPROP_METHODS(IMPL) MAPI_IMAPICONTAINER_METHODS(IMPL) MAPI_IABCONTAINER_METHODS(IMPL) #undef MAPIMETHOD_ #define MAPIMETHOD_(type, method) STDMETHOD_(type, method) DECLARE_MAPI_INTERFACE(LDAPCONT_) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(IMPL) MAPI_IMAPIPROP_METHODS(IMPL) MAPI_IMAPICONTAINER_METHODS(IMPL) MAPI_IABCONTAINER_METHODS(IMPL) }; typedef struct _LDAPCONT { MAILUSER_BASE_MEMBERS(LDAPCONT) ULONG ulType; } LDAPCONT, *LPLDAPCONT; #define CBLDAP sizeof(LDAPCONT) #define LDAPCONT_cInterfaces 3 /*============================================================================ * LDAPVUE (table view class) functions * * Function prototypes for functions to override in the LDAPVUE vtable. */ STDMETHODIMP LDAPVUE_FindRow( LPVUE lpvue, LPSRestriction lpres, BOOKMARK bkOrigin, ULONG ulFlags ); STDMETHODIMP LDAPVUE_Restrict( LPVUE lpvue, LPSRestriction lpres, ULONG ulFlags ); // Definitions #define LDAP_AUTH_METHOD_ANONYMOUS LDAP_AUTH_ANONYMOUS // Anonymous binding #define LDAP_AUTH_METHOD_SIMPLE LDAP_AUTH_PASSWORD // LDAP_AUTH_SIMPLE binding #define LDAP_AUTH_METHOD_SICILY LDAP_AUTH_MEMBER_SYSTEM // Use Sicily (challenge-response) authentication #define LDAP_USERNAME_LEN 256 // Maximum length for username/DN #define LDAP_PASSWORD_LEN 256 // Maximum length for password #define LDAP_ERROR 0xffffffff // Generic LDAP error code. #define COUNTRY_STR_LEN 2 // Size of country string for ldap_search base #define LDAP_SEARCH_SIZE_LIMIT 100 // Maximum number of entries to return from a search #define LDAP_SEARCH_TIME_LIMIT 60 // Maximum number of seconds for server to spend on a search #define LDAP_SEARCH_TIMER_ID 1 // ID of timer used for asynch LDAP searches #define LDAP_BIND_TIMER_ID 2 // ID of timer used for asynch LDAP bind #define LDAP_SEARCH_TIMER_DELAY 100 // Number of milliseconds to wait between polls for asynch LDAP searches #define SEARCH_CANCEL_DIALOG_DELAY 2000// Number of milliseconds to wait before displaying cancel dialog #define MAX_ULONG 0xffffffff #define LDAP_DEFAULT_PORT 389 // structure for getting proc addresses of api functions typedef struct _APIFCN { PVOID * ppFcnPtr; LPCSTR pszName; } APIFCN; // structure to hold MAPI property to LDAP attibute mapping typedef struct _ATTRMAP { ULONG ulPropTag; // MAPI property tag const TCHAR * pszAttr; // LDAP attribute name } ATTRMAP; // structure to hold LDAP server parameters // as read in from the registry through the account manager // typedef struct _LDAPSERVERPARAMS { DWORD dwSearchSizeLimit; DWORD dwSearchTimeLimit; DWORD dwAuthMethod; LPTSTR lpszUserName; LPTSTR lpszPassword; LPTSTR lpszURL; // URL for server information LPTSTR lpszLogoPath; // path to the logo bitmap for this server BOOL fResolve; // Resolve against this server if TRUE LPTSTR lpszBase; // Search Base LPTSTR lpszName; // Actual server name or IP address DWORD dwID; // Unique server ID (order specifier) DWORD dwPort; // Port to connect to - 389 is default but this could be different DWORD dwUseBindDN; DWORD dwUseSSL; DWORD dwPagedResult; LPTSTR lpszAdvancedSearchAttr; // List of searchable attributes for advanced searching DWORD dwIsNTDS; // used to determine if this is an NTDS or not .. IF_WIN32(BOOL fSimpleSearch;) // If specified, we use a very very simple filter ... IF_WIN16(DWORD fSimpleSearch;) // BOOL is defined as DWORD // in WIN32 while it is UINT in WIN16. } LDAPSERVERPARAMS, FAR* LPLDAPSERVERPARAMS; BOOL fUseSynchronousSearch; #define LSP_ShowAnim 0x00000001 #define LSP_ResolveMultiple 0x00000002 #define LSP_UseSynchronousBind 0x00000004 #define LSP_InitDll 0x00000008 #define LSP_AbandonSearch 0x00000010 #define LSP_SimpleSearch 0x00000020 #define LSP_UseSynchronousSearch 0x00000040 #define LSP_PagedResults 0x00000080 #define LSP_NoPagedResults 0x00000100 #define LSP_IsNTDS 0x00000200 #define LSP_IsNotNTDS 0x00000400 // structure to pass data back from IDD_DIALOG_LDAPCANCEL handler typedef struct _LDAPSEARCHPARAMS { ULONG ulTimeout; ULONG ulTimeElapsed; ULONG ulMsgID; ULONG ulResult; ULONG ulError; LDAP** ppLDAP; LPTSTR szBase; ULONG ulScope; LPTSTR szFilter; LPTSTR szNTFilter; LPTSTR* ppszAttrs; ULONG ulAttrsonly; LDAPMessage** lplpResult; LPTSTR lpszServer; ULONG ulEntryIndex; UINT unTimerID; LPADRLIST lpAdrList; LPFlagList lpFlagList; HWND hDlgCancel; ULONG ulFlags; ULONG ulLDAPValue; LPTSTR lpszBindDN; DWORD dwAuthType; struct berval * pCookie; BOOL bUnicode; } LDAPSEARCHPARAMS, * PLDAPSEARCHPARAMS; typedef struct _SERVER_NAME { LPTSTR lpszName; DWORD dwOrder; /*UNALIGNED */struct _SERVER_NAME * lpNext; } SERVER_NAME, *LPSERVER_NAME; // Creates an LDAP URL by deconstructing the LDAP entryid and using information from // it to fill in gaps in the URL void CreateLDAPURLFromEntryID(ULONG cbEntryID, LPENTRYID lpEntryID, LPTSTR * lppBuf, BOOL * lpbIsNTDSEntry); // LDAP function typedefs // ldap_open typedef LDAP* (__cdecl LDAPOPEN)( LPTSTR HostName, ULONG PortNumber ); typedef LDAPOPEN FAR *LPLDAPOPEN; //ldap_connect typedef ULONG (__cdecl LDAPCONNECT)( LDAP *ld, LDAP_TIMEVAL *timeout); typedef LDAPCONNECT FAR *LPLDAPCONNECT; //ldap_init typedef LDAP* (__cdecl LDAPINIT)( LPTSTR HostName, ULONG PortNumber ); typedef LDAPINIT FAR *LPLDAPINIT; // ldap_sslinit typedef LDAP* (__cdecl LDAPSSLINIT)( LPTSTR HostName, ULONG PortNumber , int Secure); typedef LDAPSSLINIT FAR *LPLDAPSSLINIT; // ldap_set_option typedef ULONG (__cdecl LDAPSETOPTION)( LDAP *ld, int option, void *invalue ); typedef LDAPSETOPTION FAR *LPLDAPSETOPTION; // ldap_bind_s typedef ULONG (__cdecl LDAPBINDS)(LDAP *ld, LPTSTR dn, LPTSTR cred, ULONG method); typedef LDAPBINDS FAR *LPLDAPBINDS; // ldap_bind typedef ULONG (__cdecl LDAPBIND)( LDAP *ld, LPTSTR dn, LPTSTR cred, ULONG method ); typedef LDAPBIND FAR *LPLDAPBIND; //ldap_unbind typedef ULONG (__cdecl LDAPUNBIND)(LDAP* ld); typedef LDAPUNBIND FAR *LPLDAPUNBIND; // ldap_search typedef ULONG (__cdecl LDAPSEARCH)( LDAP *ld, LPTSTR base, ULONG scope, LPTSTR filter, LPTSTR attrs[], ULONG attrsonly ); typedef LDAPSEARCH FAR *LPLDAPSEARCH; // ldap_search_s typedef ULONG (__cdecl LDAPSEARCHS)( LDAP *ld, LPTSTR base, ULONG scope, LPTSTR filter, LPTSTR attrs[], ULONG attrsonly, LDAPMessage **res ); typedef LDAPSEARCHS FAR *LPLDAPSEARCHS; // ldap_search_st typedef ULONG (__cdecl LDAPSEARCHST)( LDAP *ld, LPTSTR base, ULONG scope, LPTSTR filter, LPTSTR attrs[], ULONG attrsonly, struct l_timeval *timeout, LDAPMessage **res ); typedef LDAPSEARCHST FAR *LPLDAPSEARCHST; // ldap_abandon typedef ULONG (__cdecl LDAPABANDON)( LDAP *ld, ULONG msgid ); typedef LDAPABANDON FAR *LPLDAPABANDON; // ldap_result typedef ULONG (__cdecl LDAPRESULT)( LDAP *ld, ULONG msgid, ULONG all, struct l_timeval *timeout, LDAPMessage **res ); typedef LDAPRESULT FAR *LPLDAPRESULT; // ldap_result2error typedef ULONG (__cdecl LDAPRESULT2ERROR)( LDAP *ld, LDAPMessage *res, ULONG freeit // boolean.. free the message? ); typedef LDAPRESULT2ERROR FAR *LPLDAPRESULT2ERROR; // ldap_msgfree typedef ULONG (__cdecl LDAPMSGFREE)(LDAPMessage *res); typedef LDAPMSGFREE FAR *LPLDAPMSGFREE; // ldap_first_entry typedef LDAPMessage* (__cdecl LDAPFIRSTENTRY)(LDAP *ld, LDAPMessage *res); typedef LDAPFIRSTENTRY FAR *LPLDAPFIRSTENTRY; // ldap_next_entry typedef LDAPMessage* (__cdecl LDAPNEXTENTRY)(LDAP *ld, LDAPMessage *entry); typedef LDAPNEXTENTRY FAR *LPLDAPNEXTENTRY; // ldap_count_entries typedef ULONG (__cdecl LDAPCOUNTENTRIES)(LDAP *ld, LDAPMessage *res); typedef LDAPCOUNTENTRIES FAR *LPLDAPCOUNTENTRIES; // ldap_first_attribute typedef LPTSTR (__cdecl LDAPFIRSTATTR)( LDAP *ld, LDAPMessage *entry, BerElement **ptr ); typedef LDAPFIRSTATTR FAR *LPLDAPFIRSTATTR; // ldap_next_attribute typedef LPTSTR (__cdecl LDAPNEXTATTR)( LDAP *ld, LDAPMessage *entry, BerElement *ptr ); typedef LDAPNEXTATTR FAR *LPLDAPNEXTATTR; // ldap_get_values typedef LPTSTR* (__cdecl LDAPGETVALUES)( LDAP *ld, LDAPMessage *entry, LPTSTR attr ); typedef LDAPGETVALUES FAR *LPLDAPGETVALUES; // ldap_get_values_len typedef struct berval** (__cdecl LDAPGETVALUESLEN)( LDAP *ExternalHandle, LDAPMessage *Message, LPTSTR attr ); typedef LDAPGETVALUESLEN FAR *LPLDAPGETVALUESLEN; // ldap_count_values typedef ULONG (__cdecl LDAPCOUNTVALUES)(LPTSTR *vals); typedef LDAPCOUNTVALUES FAR *LPLDAPCOUNTVALUES; // ldap_count_values_len typedef ULONG (__cdecl LDAPCOUNTVALUESLEN)(struct berval **vals); typedef LDAPCOUNTVALUESLEN FAR *LPLDAPCOUNTVALUESLEN; // ldap_value_free typedef ULONG (__cdecl LDAPVALUEFREE)(LPTSTR *vals); typedef LDAPVALUEFREE FAR *LPLDAPVALUEFREE; // ldap_value_free_len typedef ULONG (__cdecl LDAPVALUEFREELEN)(struct berval **vals); typedef LDAPVALUEFREELEN FAR *LPLDAPVALUEFREELEN; // ldap_get_dn typedef LPTSTR (__cdecl LDAPGETDN)(LDAP *ld, LDAPMessage *entry); typedef LDAPGETDN FAR *LPLDAPGETDN; // ldap_memfree typedef VOID (__cdecl LDAPMEMFREE)(LPTSTR Block); typedef LDAPMEMFREE FAR *LPLDAPMEMFREE; // ldap_err2string typedef LPTSTR (__cdecl LDAPERR2STRING)(ULONG err); typedef LDAPERR2STRING FAR *LPLDAPERR2STRING; //ldap_create_page_control typedef ULONG (__cdecl LDAPCREATEPAGECONTROL)( LDAP * pExternalHandle, ULONG PageSize, struct berval *Cookie, UCHAR IsCritical, PLDAPControlA *Control); typedef LDAPCREATEPAGECONTROL FAR *LPLDAPCREATEPAGECONTROL; //ldap_search_ext_s typedef ULONG (__cdecl LDAPSEARCHEXT_S)( LDAP *ld, LPTSTR base, ULONG scope, LPTSTR filter, LPTSTR attrs[], ULONG attrsonly, PLDAPControlA *ServerControls, PLDAPControlA *ClientControls, struct l_timeval *timeout, ULONG SizeLimit, LDAPMessage **res); typedef LDAPSEARCHEXT_S FAR * LPLDAPSEARCHEXT_S; typedef ULONG (__cdecl LDAPSEARCHEXT)( LDAP *ld, LPTSTR base, ULONG scope, LPTSTR filter, LPTSTR attrs[], ULONG attrsonly, PLDAPControlA *ServerControls, PLDAPControlA *ClientControls, ULONG TimeLimit, ULONG SizeLimit, ULONG *MessageNumber); typedef LDAPSEARCHEXT FAR * LPLDAPSEARCHEXT; //ldap_parse_result typedef ULONG (__cdecl LDAPPARSERESULT)( LDAP *Connection, LDAPMessage *ResultMessage, ULONG *ReturnCode OPTIONAL, PWCHAR *MatchedDNs OPTIONAL, PWCHAR *ErrorMessage OPTIONAL, PWCHAR **Referrals OPTIONAL, PLDAPControl **ServerControls OPTIONAL, BOOLEAN Freeit); typedef LDAPPARSERESULT FAR *LPLDAPPARSERESULT; //ldap_parse_page_control typedef ULONG (__cdecl LDAPPARSEPAGECONTROL)( PLDAP ExternalHandle, PLDAPControlA *ServerControls, ULONG *TotalCount, struct berval **Cookie // Use ber_bvfree to free ); typedef LDAPPARSEPAGECONTROL FAR * LPLDAPPARSEPAGECONTROL; typedef ULONG (__cdecl LDAPCONTROLFREE)( LDAPControl *Control); typedef LDAPCONTROLFREE FAR * LPLDAPCONTROLFREE; typedef ULONG (__cdecl LDAPCONTROLSFREE)( LDAPControl **Control); typedef LDAPCONTROLSFREE FAR * LPLDAPCONTROLSFREE; // Public functions in ldapcont.c BOOL InitLDAPClientLib(void); ULONG DeinitLDAPClientLib(void); HRESULT LDAPResolveName(LPADRBOOK lpAddrBook, LPADRLIST lpAdrList, LPFlagList lpFlagList, LPAMBIGUOUS_TABLES lpAmbiguousTables, ULONG ulFlags); HRESULT LDAP_OpenMAILUSER(LPIAB lpIAB, ULONG cbEntryID, LPENTRYID lpEntryID, LPCIID lpInterface, ULONG ulFlags, ULONG * lpulObjType, LPUNKNOWN * lppUnk); BOOL GetLDAPServerParams(LPTSTR lpszServer, LPLDAPSERVERPARAMS lspParams); HRESULT SetLDAPServerParams(LPTSTR lpszServer, LPLDAPSERVERPARAMS lspParams); void FreeLDAPServerParams(LDAPSERVERPARAMS Params); DWORD GetLDAPNextServerID(DWORD dwSet); BOOL GetApiProcAddresses(HMODULE hModDLL,APIFCN * pApiProcList,UINT nApiProcs); void UninitAccountManager(void); HRESULT InitAccountManager(LPIAB lpIAB, IImnAccountManager2 ** lppAccountManager, GUID * pguidUser); HRESULT AddToServerList(UNALIGNED LPSERVER_NAME * lppServerNames, LPTSTR szBuf, DWORD dwOrder); HRESULT EnumerateLDAPtoServerList(IImnAccountManager2 * lpAccountManager, LPSERVER_NAME * lppServerNames, LPULONG lpcServers); extern const LPTSTR szAllLDAPServersValueName;