|
|
#define GET_LDAPDN_FROM_PATH( pszPath ) (_tcschr( pszPath + 2, TEXT('\\')) + 1)
//
// Opening a connection
//
HRESULT LdapOpen( WCHAR *domainName, WCHAR *hostname, int portno, ADS_LDP *pld, DWORD dwFlags );
//
// Authenticating to the directory
//
HRESULT LdapBindS( ADS_LDP *ld, WCHAR *dn, WCHAR *passwd, BOOL fSimple );
//
// Closing the connection
//
HRESULT LdapUnbind( ADS_LDP *ld );
//
// Search
//
HRESULT LdapSearchS( ADS_LDP *ld, WCHAR *base, int scope, WCHAR *filter, WCHAR *attrs[], int attrsonly, LDAPMessage **res );
HRESULT LdapSearchST( ADS_LDP *ld, WCHAR *base, int scope, WCHAR *filter, WCHAR *attrs[], int attrsonly, struct l_timeval *timeout, LDAPMessage **res );
HRESULT LdapSearch( ADS_LDP *ld, WCHAR *base, int scope, WCHAR *filter, WCHAR *attrs[], int attrsonly, int *msgid );
//
// Modifying an entry
//
HRESULT LdapModifyS( ADS_LDP *ld, WCHAR *dn, LDAPModW *mods[] );
//
// Modifying the RDN of an entry
//
HRESULT LdapModRdnS( ADS_LDP *ld, WCHAR *dn, WCHAR *newrdn );
//
// Modifying the DN of an entry
//
HRESULT LdapModDnS( ADS_LDP *ld, WCHAR *dn, WCHAR *newdn, int deleteoldrdn );
//
// Adding an entry
//
HRESULT LdapAddS( ADS_LDP *ld, WCHAR *dn, LDAPModW *attrs[] );
//
// Adding an entry with controls
//
HRESULT LdapAddExtS( ADS_LDP *ld, WCHAR *dn, LDAPModW *attrs[], PLDAPControlW * ServerControls, PLDAPControlW *ClientControls );
//
// Deleting an entry
//
HRESULT LdapDeleteS( ADS_LDP *ld, WCHAR *dn );
//
// Calls for abandoning an operation
//
HRESULT LdapAbandon( ADS_LDP *ld, int msgid );
//
// Calls for obtaining results
//
HRESULT LdapResult( ADS_LDP *ld, int msgid, int all, struct l_timeval *timeout, LDAPMessage **res, int *restype );
void LdapMsgFree( LDAPMessage *res );
//
// Calls for error handling
//
int LdapResult2Error( ADS_LDP *ld, LDAPMessage *res, int freeit );
int LdapError2String( int err, WCHAR **pszError );
//
// Calls for parsing search entries
//
HRESULT LdapFirstEntry( ADS_LDP *ld, LDAPMessage *res, LDAPMessage **pfirst );
HRESULT LdapNextEntry( ADS_LDP *ld, LDAPMessage *entry, LDAPMessage **pnext );
int LdapCountEntries( ADS_LDP *ld, LDAPMessage *res );
HRESULT LdapFirstAttribute( ADS_LDP *ld, LDAPMessage *entry, void **ptr, WCHAR **pattr );
HRESULT LdapNextAttribute( ADS_LDP *ld, LDAPMessage *entry, void *ptr, WCHAR **pattr );
HRESULT LdapGetValues( ADS_LDP *ld, LDAPMessage *entry, WCHAR *attr, WCHAR ***pvalues, int *pcount );
HRESULT LdapGetValuesLen( ADS_LDP *ld, LDAPMessage *entry, WCHAR *attr, struct berval ***pvalues, int *pcount );
void LdapValueFree( WCHAR **vals );
void LdapValueFreeLen( struct berval **vals );
void LdapMemFree( WCHAR *pszString );
void LdapAttributeFree( WCHAR *pszString );
HRESULT LdapGetDn( ADS_LDP *ld, LDAPMessage *entry, WCHAR **pdn );
//
// Misc
//
HRESULT LdapOpenObject( LPWSTR szLDAPServer, LPWSTR szLDAPDn, ADS_LDP **ld, CCredentials& Credentials, DWORD dwPort );
HRESULT LdapOpenObject2( LPWSTR szDomainName, LPWSTR szLDAPServer, LPWSTR szLDAPDn, ADS_LDP **ld, CCredentials& Credentials, DWORD dwPort );
void LdapCloseObject( ADS_LDP *ld );
void LdapCacheAddRef( ADS_LDP *ld ); HRESULT LdapReadAttribute( WCHAR *szLDAPPath, LPWSTR szLDAPDn, WCHAR *szAttr, WCHAR ***aValues, int *nCount, CCredentials& Credentials, DWORD dwPort );
HRESULT LdapReadAttribute2( WCHAR *szDomainName, WCHAR *szServerName, LPWSTR szLDAPDn, WCHAR *szAttr, WCHAR ***aValues, int *nCount, CCredentials& Credentials, DWORD dwPort, LPWSTR szfilter = NULL // defaulted to NULL
);
// Fast version of read attribute
// uses the already open handle instead
// of going through LDAPOpenObject
HRESULT LdapReadAttributeFast( IN ADS_LDP *ld, IN LPWSTR szLDAPDn, IN WCHAR *szAttr, OUT WCHAR ***aValues, IN OUT int *nCount );
int ConvertToUnicode( char *pszAscii, WCHAR **pszUnicode );
void LdapGetCredentialsFromRegistry( CCredentials& Credentials );
HRESULT LdapOpenBindWithDefaultCredentials( WCHAR *szDomainName, WCHAR *szServerName, CCredentials& Credentials, PADS_LDP pCacheEntry, DWORD dwPort );
HRESULT LdapOpenBindWithDefaultCredentials( WCHAR *szDomainName, WCHAR *szServerName, CCredentials& Credentials, PADS_LDP pCacheEntry, DWORD dwPort );
HRESULT LdapOpenBindWithCredentials( WCHAR *szServerName, CCredentials& Credentials, PADS_LDP pCacheEntry, DWORD dwPort );
HRESULT LdapOpenBindWithCredentials( WCHAR *szDomainName, WCHAR *szServerName, CCredentials& Credentials, PADS_LDP pCacheEntry, DWORD dwPort );
HRESULT LdapCrackUserDNtoNTLMUser( LPWSTR pszDN, LPWSTR * ppszNTLMUser, LPWSTR * ppszNTLMDomain );
//
// Handle domain\user case properly
//
HRESULT LdapCrackUserDNtoNTLMUser2( IN LPWSTR pszDN, OUT LPWSTR * ppszNTLMUser, OUT LPWSTR * ppszNTLMDomain );
VOID CheckAndSetExtendedError( LDAP *ld, HRESULT *perr, int ldaperr, LDAPMessage *ldapResMsg = NULL );
BOOL LdapConnectionErr( int err, int ldaperr, BOOL *fTryRebind );
HRESULT LdapSearchExtS( ADS_LDP *ld, WCHAR *base, int scope, WCHAR *filter, WCHAR *attrs[], int attrsonly, PLDAPControlW * ServerControls, PLDAPControlW *ClientControls, struct l_timeval *timeout, ULONG SizeLimit, LDAPMessage **res );
HRESULT LdapSearchExt( ADS_LDP *ld, WCHAR *base, int scope, WCHAR *filter, WCHAR *attrs[], int attrsonly, PLDAPControlW *ServerControls, PLDAPControlW *ClientControls, ULONG TimeLimit, ULONG SizeLimit, ULONG *MessageNumber );
ULONG _cdecl QueryForConnection( PLDAP PrimaryConnection, PLDAP ReferralFromConnection, PWCHAR NewDN, PCHAR HostName, ULONG PortNumber, PVOID SecAuthIdentity, // if null, use CurrentUser below
PVOID CurrentUserToken, // pointer to current user's LUID
PLDAP *ConnectionToUse );
BOOLEAN _cdecl NotifyNewConnection( PLDAP PrimaryConnection, PLDAP ReferralFromConnection, PWCHAR NewDN, PCHAR HostName, PLDAP NewConnection, ULONG PortNumber, PVOID SecAuthIdentity, // if null, use CurrentUser below
PVOID CurrentUser, // pointer to current user's LUID
ULONG ErrorCodeFromBind );
ULONG _cdecl DereferenceConnection( PLDAP PrimaryConnection, PLDAP ConnectionToDereference );
HRESULT LdapSearchInitPage( ADS_LDP *ld, PWCHAR base, ULONG scope, PWCHAR filter, PWCHAR attrs[], ULONG attrsonly, PLDAPControlW *serverControls, PLDAPControlW *clientControls, ULONG pageSizeLimit, ULONG totalSizeLimit, PLDAPSortKeyW *sortKeys, PLDAPSearch *ppSearch );
HRESULT LdapGetNextPage( ADS_LDP *ld, PLDAPSearch searchHandle, ULONG pageSize, ULONG *pMessageNumber );
HRESULT LdapGetNextPageS( ADS_LDP *ld, PLDAPSearch searchHandle, struct l_timeval *timeout, ULONG pageSize, ULONG *totalCount, LDAPMessage **results );
HRESULT LdapGetPagedCount( ADS_LDP *ld, PLDAPSearch searchBlock, ULONG *totalCount, PLDAPMessage results );
HRESULT LdapSearchAbandonPage( ADS_LDP *ld, PLDAPSearch searchBlock );
HRESULT LdapEncodeSortControl( ADS_LDP *ld, PLDAPSortKeyW *SortKeys, PLDAPControlW Control, BOOLEAN Criticality );
BOOL IsGCNamespace( LPWSTR szADsPath );
HRESULT LdapModifyExtS( ADS_LDP *ld, WCHAR *dn, LDAPModW *mods[], PLDAPControlW * ServerControls, PLDAPControlW * ClientControls );
HRESULT LdapDeleteExtS( ADS_LDP *ld, WCHAR *dn, PLDAPControlW * ServerControls, PLDAPControlW * ClientControls );
//
// Extnded rename/move operation which will move objects across namesapces
//
HRESULT LdapRenameExtS( ADS_LDP *ld, WCHAR *dn, WCHAR *newRDN, WCHAR *newParent, int deleteOldRDN, PLDAPControlW * ServerControls, PLDAPControlW * ClientControls );
HRESULT LdapCreatePageControl( ADS_LDP *ld, ULONG dwPageSize, struct berval *Cookie, BOOL fIsCritical, PLDAPControl *Control // Use LdapControlFree to free
);
HRESULT LdapParsePageControl( ADS_LDP *ld, PLDAPControl *ServerControls, ULONG *TotalCount, struct berval **Cookie // Use BerBvFree to free
);
HRESULT LdapCreateVLVControl( ADS_LDP *pld, PLDAPVLVInfo pVLVInfo, UCHAR fCritical, PLDAPControl *ppControl // Use LdapControlFree to free
);
HRESULT LdapParseVLVControl( ADS_LDP *pld, PLDAPControl *ppServerControls, ULONG *pTargetPos, ULONG *pListCount, struct berval **ppCookie // Use BerBvFree to free
);
HRESULT LdapParseResult( ADS_LDP *ld, LDAPMessage *ResultMessage, ULONG *ReturnCode OPTIONAL, // returned by server
PWCHAR *MatchedDNs OPTIONAL, // free with LdapMemFree
PWCHAR *ErrorMessage OPTIONAL, // free with LdapMemFree
PWCHAR **Referrals OPTIONAL, // free with LdapValueFree
PLDAPControlW **ServerControls OPTIONAL, // free with LdapFreeControls
BOOL Freeit );
//
// Wrapper API for ldap_compare_extsW
//
HRESULT LdapCompareExt( ADS_LDP *ld, const LPWSTR pszDn, const LPWSTR pszAttribute, const LPWSTR pszValue, struct berval *berData = NULL, PLDAPControlW * ServerControls = NULL, PLDAPControlW * ClientControls = NULL );
void LdapControlsFree( PLDAPControl *ppControl );
void LdapControlFree( PLDAPControl pControl );
void BerBvFree( struct berval *bv );
HRESULT LdapcSetStickyServer( LPWSTR pszDomainName, LPWSTR pszServerName ); // Keeps track of global name to try first for severless case.
// If domainName is also set, then server is used for the
// domain specified.
extern LPWSTR gpszServerName; extern LPWSTR gpszDomainName;
|