202 lines
8.4 KiB
C++
202 lines
8.4 KiB
C++
//
|
|
|
|
// Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
|
|
//
|
|
// ***************************************************************************
|
|
//
|
|
// Original Author: Rajesh Rao
|
|
//
|
|
// $Author: rajeshr $
|
|
// $Date: 6/11/98 4:43p $
|
|
// $Workfile:ldaphelp.h $
|
|
//
|
|
// $Modtime: 6/11/98 11:21a $
|
|
// $Revision: 1 $
|
|
// $Nokeywords: $
|
|
//
|
|
//
|
|
// Description: Contains the declaration for the CLDAPHelper class. This is
|
|
// a class that has many static helper functions pertaining to ADSI LDAP Provider
|
|
//***************************************************************************
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef LDAP_HELPER_H
|
|
#define LDAP_HELPER_H
|
|
|
|
class CLDAPHelper
|
|
{
|
|
|
|
public:
|
|
|
|
//***************************************************************************
|
|
//
|
|
// CLDAPHelper :: GetLDAPClassFromLDAPName
|
|
//
|
|
// Purpose : To fill in a CADSIClass object on a class/property provided by the LDAP Provider
|
|
// Parameters:
|
|
// pDirectorySearchSchemaContainer : The IDirectorySearch interface where the schema object should be looked for
|
|
// lpszSchemaContainerSuffix : The suffix to be used. The actual object fetched will be:
|
|
// LDAP://CN=<lpszCommonName>,<lpszSchemaContainerSuffix>, where lpszCommonName is the
|
|
// 'cn' attribute of the object having the ldapdisplayname attribute as lpszLDAPObjectName
|
|
// pSearchInfo: An array of ADS_SEARCHPREF_INFO to be used in the search
|
|
// dwSearchInfoCount : The number of elements in the above array
|
|
// lpszLDAPObjectName : The LDAPDisplayName of the LDAP class or property to be fetched.
|
|
// ppLDAPObject : The address where the pointer to IDirectoryObject will be stored
|
|
// It is the caller's responsibility to delete the object when done with it
|
|
//
|
|
// Return Value: The COM status value indicating the status of the request.
|
|
//***************************************************************************
|
|
static HRESULT GetLDAPClassFromLDAPName(
|
|
IDirectorySearch *pDirectorySearchSchemaContainer,
|
|
LPCWSTR lpszSchemaContainerSuffix,
|
|
PADS_SEARCHPREF_INFO pSearchInfo,
|
|
DWORD dwSearchInfoCount,
|
|
CADSIClass *pADSIClass);
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// CLDAPHelper :: GetLDAPSchemaObjectFromCommonName
|
|
//
|
|
// Purpose : To fetch the IDirectoryObject interface on a class/property provided by the LDAP Provider
|
|
// Parameters:
|
|
// lpszSchemaContainerSuffix : The suffix to be used. The actual object fetced will be:
|
|
// LDAP://CN=<lpszCommonName>,<lpszSchemaContainerSuffix>
|
|
// lpszCommonName : The 'cn' attribute of the LDAP class or property to be fetched.
|
|
// ppLDAPObject : The address where the pointer to IDirectoryObject will be stored
|
|
// It is the caller's responsibility to delete the object when done with it
|
|
//
|
|
// Return Value: The COM status value indicating the status of the request.
|
|
//***************************************************************************
|
|
static HRESULT GetLDAPSchemaObjectFromCommonName(
|
|
LPCWSTR lpszSchemaContainerSuffix,
|
|
LPCWSTR lpszCommonName,
|
|
IDirectoryObject **ppLDAPObject);
|
|
|
|
//***************************************************************************
|
|
//
|
|
// CLDAPHelper :: GetLDAPClassNameFromCN
|
|
//
|
|
// Purpose : To fetch the LDAPDisplayNAme of a class from its path
|
|
// Parameters:
|
|
//
|
|
// Return Value: The COM status value indicating the status of the request. The user should delete the
|
|
// name returned, when done
|
|
//***************************************************************************
|
|
static HRESULT GetLDAPClassNameFromCN(LPCWSTR lpszLDAPClassPath,
|
|
LPWSTR *lppszLDAPName);
|
|
|
|
//***************************************************************************
|
|
//
|
|
// CLDAPHelper :: EnumerateClasses
|
|
//
|
|
// Purpose : To fetch the list of names of subclasses (immediate) of an LDAP class
|
|
// Parameters:
|
|
// pDirectorySearchSchemaContainer : The IDirectorySearch interface where the schema object should be looked for
|
|
// lpszSchemaContainerSuffix : The suffix to be used. The actual object fetced will be:
|
|
// LDAP://CN=<lpszObjectName>,<lpszSchemaContainerSuffix>
|
|
// pSearchInfo: An array of ADS_SEARCHPREF_INFO to be used in the search
|
|
// dwSearchInfoCount : The number of elements in the above array
|
|
// lppszLDAPSuperClass : The immediate superclass of the classes to be retreived. This is optional
|
|
// and is ignored if NULL
|
|
// bDeep : Indicates whether a deep enumeration is required. Otherwise a shallow enumeration is done
|
|
// pppszClassNames : The address of the array of LPWSTR pointers where the resulting objects will be
|
|
// placed. The user should deallocate this array as well as its contents when done with them.
|
|
// pdwNumRows : The number of elements in the above array returned
|
|
//
|
|
// Return Value: The COM status value indicating the status of the request.
|
|
//***************************************************************************
|
|
static HRESULT EnumerateClasses(
|
|
IDirectorySearch *pDirectorySearchSchemaContainer,
|
|
LPCWSTR lpszSchemaContainerSuffix,
|
|
PADS_SEARCHPREF_INFO pSearchInfo,
|
|
DWORD dwSearchInfoCount,
|
|
LPCWSTR lpszSuperClass,
|
|
BOOLEAN bDeep,
|
|
LPWSTR **pppszClassNames,
|
|
DWORD *pdwNumRows,
|
|
BOOLEAN bArtificialClass);
|
|
|
|
// Gets the IDIrectoryObject interface on an ADSI instance
|
|
static HRESULT GetADSIInstance(LPCWSTR szADSIPath, CADSIInstance **ppADSIInstance, ProvDebugLog *pLogObject);
|
|
|
|
//***************************************************************************
|
|
//
|
|
// CLDAPHelper :: ExecuteQuery
|
|
//
|
|
// Purpose : To fetch the IDirectoryObject interface on a class/property provided by the LDAP Provider
|
|
// Parameters:
|
|
// pszPathToRoot : The ADSI path to the node from which the search should start
|
|
// pSearchInfo: A pointer to a ADS_SEARCHPREF_INFO to be used in the search
|
|
// dwSearchInfoCount: The number of elements in pSearchInfo array
|
|
// pszLDAPQuery : The LDAP query to be executed
|
|
// pppADSIInstances : The address of the array of CADSIInstance pointers where the resulting objects will be
|
|
// placed. The user should deallocate this array as well as its contents when done with them.
|
|
// pdwNumRows : The number of elements in the above array returned
|
|
//
|
|
// Return Value: The COM status value indicating the status of the request.
|
|
//***************************************************************************
|
|
static HRESULT ExecuteQuery(
|
|
LPCWSTR pszPathToRoot,
|
|
PADS_SEARCHPREF_INFO pSearchInfo,
|
|
DWORD dwSearchInfoCount,
|
|
LPCWSTR pszLDAPQuery,
|
|
CADSIInstance ***pppADSIInstances,
|
|
DWORD *pdwNumRows,
|
|
ProvDebugLog *pLogObject);
|
|
|
|
// Helper functions to delete a ADS_ATTR_INFO structure
|
|
static void DeleteAttributeContents(PADS_ATTR_INFO pAttribute);
|
|
static void DeleteADsValueContents(PADSVALUE pValue);
|
|
|
|
|
|
//***************************************************************************
|
|
//
|
|
// CLDAPHelper :: UnmangleWBEMNameToLDAP
|
|
//
|
|
// Purpose : Converts a mangled WBEM name to LDAP
|
|
// An underscore in LDAP maps to two underscores in WBEM
|
|
// An hyphen in LDAP maps to one underscore in WBEM
|
|
//
|
|
// Parameters:
|
|
// lpszWBEMName : The WBEM class or property name
|
|
//
|
|
// Return Value: The LDAP name to the class or property object. This has to
|
|
// be deallocated by the user
|
|
//***************************************************************************
|
|
static LPWSTR UnmangleWBEMNameToLDAP(LPCWSTR lpszWBEMName);
|
|
|
|
//***************************************************************************
|
|
//
|
|
// CLDAPHelper :: MangleLDAPNameToWBEM
|
|
//
|
|
// Purpose : Converts a LDAP name to WBEM by mangling it
|
|
// An underscore in LDAP maps to two underscores in WBEM
|
|
// An hyphen in LDAP maps to one underscore in WBEM
|
|
//
|
|
// Parameters:
|
|
// lpszLDAPName : The LDAP class or property name
|
|
//
|
|
// Return Value: The LDAP name to the class or property object. This has to
|
|
// be deallocated by the user
|
|
//***************************************************************************
|
|
static LPWSTR MangleLDAPNameToWBEM(LPCWSTR lpszLDAPName, BOOLEAN bArtificalName = FALSE);
|
|
|
|
private:
|
|
|
|
// Forms the ADSI path from a class or property name
|
|
static LPWSTR CreateADSIPath(LPCWSTR lpszLDAPSchemaObjectName, LPCWSTR lpszSchemaContainerSuffix);
|
|
|
|
// Some literals
|
|
static LPCWSTR LDAP_CN_EQUALS;
|
|
static LPCWSTR LDAP_DISP_NAME_EQUALS;
|
|
static LPCWSTR OBJECT_CATEGORY_EQUALS_CLASS_SCHEMA;
|
|
static LPCWSTR SUB_CLASS_OF_EQUALS;
|
|
static LPCWSTR NOT_LDAP_NAME_EQUALS;
|
|
static LPCWSTR LEFT_BRACKET_AND;
|
|
static LPCWSTR GOVERNS_ID_EQUALS;
|
|
static LPCWSTR CLASS_SCHEMA;
|
|
static LPCWSTR CN_EQUALS;
|
|
};
|
|
|
|
#endif /* LDAP_HELPER_H */ |