You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
3.7 KiB
115 lines
3.7 KiB
//--------------------------------------------------------------------------------------------
|
|
//
|
|
// Copyright (c) Microsoft Corporation, 1996
|
|
//
|
|
// Description:
|
|
//
|
|
// Microsoft Internet LDAP Client private header
|
|
//
|
|
// History:
|
|
// davidsan 05/08/96 Created
|
|
//
|
|
//--------------------------------------------------------------------------------------------
|
|
|
|
#ifndef _LDAPCLIP_H
|
|
#define _LDAPCLIP_H
|
|
|
|
// transaction type
|
|
const DWORD xtypeNil = 0;
|
|
const DWORD xtypeBind = 1;
|
|
const DWORD xtypeSearch = 2;
|
|
const DWORD xtypeUnbind = 3;
|
|
const DWORD xtypeAbandon = 4;
|
|
const DWORD xtypeBindSSPINegotiate = 5;
|
|
const DWORD xtypeBindSSPIResponse = 6;
|
|
const DWORD xtypeModify = 7;
|
|
const DWORD xtypeAdd = 8;
|
|
const DWORD xtypeModifyRDN = 9;
|
|
const DWORD xtypeCompare = 10;
|
|
const DWORD xtypeDelete = 11;
|
|
|
|
class CLdapClient : public ILdapClient
|
|
{
|
|
public:
|
|
CLdapClient(int iVerLdap);
|
|
~CLdapClient();
|
|
|
|
STDMETHODIMP QueryInterface(REFIID riid, LPVOID FAR *ppvObj);
|
|
STDMETHODIMP_(ULONG) AddRef(void);
|
|
STDMETHODIMP_(ULONG) Release(void);
|
|
|
|
STDMETHODIMP HrConnect(char *szServer, USHORT usPort);
|
|
STDMETHODIMP HrDisconnect(void);
|
|
STDMETHODIMP HrIsConnected(void);
|
|
|
|
STDMETHODIMP HrBindSimple(char *szDN, char *szPass, PXID pxid);
|
|
STDMETHODIMP HrGetBindResponse(XID xid, DWORD timeout);
|
|
STDMETHODIMP HrUnbind(void);
|
|
|
|
STDMETHODIMP HrBindSSPI(char *szDN, char *szUser, char *szPass, BOOL fPrompt, DWORD timeout);
|
|
STDMETHODIMP HrSendSSPINegotiate(char *szDN, char *szUser, char *szPass, BOOL fPrompt, PXID pxid);
|
|
STDMETHODIMP HrGetSSPIChallenge(XID xid, BYTE *pbBuf, int cbBuf, int *pcbChallenge, DWORD timeout);
|
|
STDMETHODIMP HrSendSSPIResponse(BYTE *pbChallenge, int cbChallenge, PXID pxid);
|
|
|
|
STDMETHODIMP HrSearch(PSP psp, PXID pxid);
|
|
STDMETHODIMP HrGetSearchResponse(XID xid, DWORD timeout, POBJ *ppobj);
|
|
STDMETHODIMP HrFreePobjList(POBJ pobj);
|
|
|
|
STDMETHODIMP HrModify(char *szDN, PMOD pmod, PXID pxid);
|
|
STDMETHODIMP HrGetModifyResponse(XID xid, DWORD timeout);
|
|
|
|
STDMETHODIMP HrAdd(char *szDN, PATTR pattr, PXID pxid);
|
|
STDMETHODIMP HrGetAddResponse(XID xid, DWORD timeout);
|
|
|
|
STDMETHODIMP HrDelete(char *szDN, PXID pxid);
|
|
STDMETHODIMP HrGetDeleteResponse(XID xid, DWORD timeout);
|
|
|
|
STDMETHODIMP HrModifyRDN(char *szDN, char *szNewRDN, BOOL fDeleteOldRDN, PXID pxid);
|
|
STDMETHODIMP HrGetModifyRDNResponse(XID xid, DWORD timeout);
|
|
|
|
STDMETHODIMP HrCompare(char *szDN, char *szAttrib, char *szValue, PXID pxid);
|
|
STDMETHODIMP HrGetCompareResponse(XID xid, DWORD timeout);
|
|
|
|
STDMETHODIMP HrCancelXid(XID xid);
|
|
|
|
protected:
|
|
friend void ReceiveData(PVOID, PVOID, int, int *);
|
|
void ReceiveData(PVOID pv, int cb, int *pcbReceived);
|
|
|
|
private:
|
|
HRESULT HrEncodeFilter(LBER *plber, PFILTER pfilter);
|
|
HRESULT HrEncodePattr(LBER *plber, PATTR pattr);
|
|
HRESULT HrEncodePmod(LBER *plber, PMOD pmod);
|
|
|
|
HRESULT HrWaitForPxd(PXD pxd, DWORD timeout, BOOL *pfDel);
|
|
|
|
HRESULT HrGetSimpleResponse(XID xid, DWORD xtype, ULONG ulTagResult, DWORD timeout);
|
|
HRESULT HrFromLdapResult(int iResult);
|
|
|
|
CRITICAL_SECTION m_cs;
|
|
CRITICAL_SECTION m_csRef;
|
|
|
|
PSOCK m_psock;
|
|
BOOL m_fConnected;
|
|
|
|
ULONG m_cRef;
|
|
int m_iVerLdap;
|
|
char m_szServer[MAX_PATH];
|
|
|
|
// SSPI stuff
|
|
HRESULT HrGetCredentials(char *szUser, char *szPass);
|
|
HRESULT HrSendBindMsg(XID xid, char *szDN, int iAuth, void *pv, int cb);
|
|
CredHandle m_hCred;
|
|
CtxtHandle m_hCtxt;
|
|
BOOL m_fHasCred;
|
|
BOOL m_fHasCtxt;
|
|
};
|
|
|
|
#define VERIFY(fncall) \
|
|
if (FAILED(hr = fncall)) \
|
|
{ \
|
|
Assert(FALSE); \
|
|
goto LBail; \
|
|
}
|
|
|
|
#endif // _LDAPCLIP_H
|