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