// // 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=,, 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 : 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=, // 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 */