Windows2003-3790/inetcore/outlookexpress/wabw/wabapi/_ldapcnt.h
2020-09-30 16:53:55 +02:00

458 lines
15 KiB
C

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