#ifndef __CLDAPv3Configs_h__
#define __CLDAPv3Configs_h__ 1
#include <stdio.h>
#include <map>
#include <set>
#include <string>
#include <LDAP/lber.h>
#include <LDAP/ldap.h>
#include <CoreFoundation/CoreFoundation.h> //for CF classes and property lists - XML config data
#include <DirectoryServiceCore/PrivateTypes.h>
#include <DirectoryServiceCore/CPlugInRef.h> // config data table
using namespace std;
#define kXMLLDAPVersionKey "LDAP PlugIn Version"
#define kXMLConfigArrayKey "LDAP Server Configs"
#define kXMLEnableUseFlagKey "Enable Use"
#define kXMLUserDefinedNameKey "UI Name"
#define kXMLOpenCloseTimeoutSecsKey "OpenClose Timeout in seconds"
#define kXMLPortNumberKey "Port Number"
#define kXMLSearchTimeoutSecsKey "Search Timeout in seconds"
#define kXMLSecureUseFlagKey "Secure Use"
#define kXMLServerKey "Server"
#define kXMLServerAccountKey "Server Account"
#define kXMLServerPasswordKey "Server Password"
#define kXMLStdMapUseFlagKey "Standard Map Use"
#define kXMLDefaultAttrTypeMapArrayKey "Default Attribute Type Map"
#define kXMLDefaultRecordTypeMapArrayKey "Default Record Type Map"
#define kXMLAttrTypeMapArrayKey "Attribute Type Map"
#define kXMLRecordTypeMapArrayKey "Record Type Map"
#define kXMLNativeMapArrayKey "Native Map"
#define kXMLStdNameKey "Standard Name"
#define kXMLSearchBase "Search Base"
#define kXMLOneLevelSearchScope "One Level Search Scope"
#define kXMLObjectClasses "Object Classes"
#define kXMLGroupObjectClasses "Group Object Classes"
#define kXMLMakeDefLDAPFlagKey "Default LDAP Search Path"
#define kXMLServerMappingsFlagKey "Server Mappings"
#define kXMLIsSSLFlagKey "SSL"
#define kXMLMapSearchBase "Map Search Base"
typedef set<string> AttrSet;
typedef AttrSet::const_iterator AttrSetCI;
typedef struct sObjectClassSchema {
AttrSet fParentOCs; AttrSet fOtherNames; AttrSet fRequiredAttrs; AttrSet fAllowedAttrs; uInt16 fType; uInt32 fDummy;
} sObjectClassSchema;
typedef map<string,sObjectClassSchema*> ObjectClassMap;
typedef ObjectClassMap::const_iterator ObjectClassMapCI;
typedef struct sPtrString {
char *fName; sPtrString *fSubNative; int fGroupSubNative; sPtrString *pNext; } sPtrString;
typedef struct sMapTuple {
char *fStandard; sPtrString *fNative; sMapTuple *pNext; } sMapTuple;
typedef struct sLDAPConfigData {
char *fName; sMapTuple *pAttributeMapTuple; char *fServerName; bool bUseStdMapping; sMapTuple *pRecordMapTuple; int fOpenCloseTimeout; char *fServerPassword; int fSearchTimeout; char *fServerAccount; int fServerPort; bool bSecureUse; bool bAvail; bool bUpdated; ObjectClassMap *fObjectClassSchema; bool bOCBuilt; CFArrayRef fRecordTypeMapCFArray;
CFArrayRef fAttrTypeMapCFArray;
bool bUseAsDefaultLDAP; bool bServerMappings; bool bIsSSL; } sLDAPConfigData;
class CLDAPv3Configs
{
public:
CLDAPv3Configs ( void );
sInt32 Init ( CPlugInRef *inConfigTable,
uInt32 &inConfigTableLen,
sMapTuple **inStdAttributeMapTuple,
sMapTuple **inStdRecordMapTuple );
virtual ~CLDAPv3Configs ( void );
sInt32 CleanLDAPConfigData ( sLDAPConfigData *inConfig );
sInt32 SetXMLConfig ( CFDataRef xmlData );
CFDataRef GetXMLConfig ( void );
sInt32 WriteXMLConfig ( void );
char *ExtractRecMap ( char *inRecType,
CFArrayRef inRecordTypeMapCFArray,
int inIndex,
bool *outOCGroup,
CFArrayRef *outOCListCFArray,
ber_int_t *outScope );
char *ExtractAttrMap ( char *inRecType,
char *inAttrType,
CFArrayRef inRecordTypeMapCFArray,
CFArrayRef inAttrTypeMapCFArray,
int inIndex );
char *ExtractStdAttr ( char *inRecType,
CFArrayRef inRecordTypeMapCFArray,
CFArrayRef inAttrTypeMapCFArray,
int &inputIndex );
int AttrMapsCount ( char *inRecType,
char *inAttrType,
CFArrayRef inRecordTypeMapCFArray,
CFArrayRef inAttrTypeMapCFArray );
void ConfigDHCPObtainedLDAPServer
( char *inServer,
char *inMapSearchBase,
int inPortNumber,
bool inIsSSL,
uInt32 &inConfigTableLen );
sInt32 WriteServerMappings ( char* userName,
char* password,
CFDataRef inMappings );
CFDataRef ReadServerMappings ( LDAP *serverHost,
CFDataRef inMappings );
void XMLConfigLock ( void );
void XMLConfigUnlock ( void );
protected:
CFDataRef RetrieveServerMappings
( char *inServer,
char *inMapSearchBase,
int inPortNumber,
bool inIsSSL );
CFDictionaryRef CheckForServerMappings
( CFDictionaryRef ldapDict );
char *ExtractAttrMapFromArray
( CFStringRef inAttrTypeRef,
CFArrayRef inAttrTypeMapCFArray,
int inIndex,
bool *bNoRecSpecificAttrMap );
int AttrMapFromArrayCount
( CFStringRef inAttrTypeRef,
CFArrayRef inAttrTypeMapCFArray,
bool *bNoRecSpecificAttrMap );
bool VerifyXML ( void );
sInt32 BuildDefaultStdAttributeMap
( void );
sInt32 BuildDefaultStdRecordMap
( void );
sInt32 CleanMapTuple ( sMapTuple *inMapTuple );
sLDAPConfigData *MakeLDAPConfigData ( char *inName,
char *inServerName,
bool inUseStd,
int inOpenCloseTO,
int inSearchTO,
int inPortNum,
bool inUseSecure,
char *inAccount,
char *inPassword,
bool inMakeDefLDAP,
bool inServerMappings,
bool inIsSSL );
sInt32 ConfigLDAPServers ( void );
sInt32 AddDefaultLDAPServer( CFDataRef inXMLData );
CFDataRef VerifyAndUpdateServerLocation
( char *inServer,
int inPortNumber,
bool inIsSSL,
CFDataRef inXMLData );
char *GetVersion ( CFDictionaryRef configDict );
CFArrayRef GetConfigArray ( CFDictionaryRef configDict );
CFArrayRef GetRecordTypeMapArray
( CFDictionaryRef configDict );
CFArrayRef GetAttributeTypeMapArray
( CFDictionaryRef configDict );
CFArrayRef GetNativeTypeMapArray
( CFDictionaryRef configDict );
CFArrayRef GetDefaultRecordTypeMapArray
( CFDictionaryRef configDict );
CFArrayRef GetDefaultAttrTypeMapArray
( CFDictionaryRef configDict );
sInt32 MakeLDAPConfig ( CFDictionaryRef ldapDict,
sInt32 inIndex );
sInt32 BuildLDAPMap ( sLDAPConfigData *inConfig,
CFDictionaryRef ldapDict );
sMapTuple *BuildMapTuple ( CFArrayRef inArray );
bool CheckForConfig ( char *inServerName,
uInt32 &inConfigTableIndex);
sInt32 ReadXMLConfig ( void );
sInt32 AddDefaultArrays ( CFMutableDictionaryRef inDict );
private:
CPlugInRef *pConfigTable;
sMapTuple *pStdAttributeMapTuple;
sMapTuple *pStdRecordMapTuple;
uInt32 fConfigTableLen;
CFDataRef fXMLData;
DSMutexSemaphore *pXMLConfigLock;
};
#endif // __CLDAPv3Configs_h__