windows-nt/Source/XPSP1/NT/ds/adsi/ldapc/ldaputil.hxx

614 lines
11 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
#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;