#ifndef __CLDAPv3Configs_h__
#define __CLDAPv3Configs_h__ 1
#include <stdio.h>
#include <map>
#include <set>
#include <string>
#include <list>
#include <sys/types.h> //for getaddrinfo
#include <sys/socket.h> //for getaddrinfo
#include <netdb.h> //for getaddrinfo
#include <lber.h>
#include <ldap.h>
#include <CoreFoundation/CoreFoundation.h> //for CF classes and property lists - XML config data
#include "PrivateTypes.h"
#include "CPlugInRef.h" // config data table
using namespace std;
#define kXMLLDAPVersionKey "LDAP PlugIn Version"
#define kXMLConfigArrayKey "LDAP Server Configs"
#define kXMLDHCPConfigArrayKey "LDAP DHCP Server Configs"
#define kXMLServerConfigKey "LDAP Server Config"
#define kXMLEnableUseFlagKey "Enable Use"
#define kXMLUserDefinedNameKey "UI Name"
#define kXMLOpenCloseTimeoutSecsKey "OpenClose Timeout in seconds"
#define kXMLIdleTimeoutMinsKey "Idle Timeout in minutes"
#define kXMLDelayedRebindTrySecsKey "Delay Rebind Try 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 kXMLReplicaHostnameListArrayKey "Replica Hostname List"
#define kXMLWriteableHostnameListArrayKey "Writeable Hostname List"
#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"
#define kXMLReferralFlagKey "LDAP Referrals"
#define kLDAPDefaultOpenCloseTimeoutInSeconds 15
#define kLDAPDefaultSearchTimeoutInSeconds 120
typedef list<string> listOfStrings;
typedef listOfStrings::const_iterator listOfStringsCI;
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 sReplicaInfo {
struct addrinfo *fAddrInfo; bool bWriteable; bool bUsedLast; CFStringRef hostname; sReplicaInfo *fNext; } sReplicaInfo;
typedef struct sLDAPConfigData {
char *fName; char *fServerName; sReplicaInfo *fReplicaHosts; CFMutableArrayRef fReplicaHostnames; CFMutableArrayRef fWriteableHostnames; bool bBuildReplicaList; int fOpenCloseTimeout; int fIdleTimeout; int fDelayRebindTry; 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; bool bReferrals; char *fMapSearchBase;
bool bGetServerMappings; CFMutableArrayRef fSASLmethods;
} sLDAPConfigData;
class CLDAPv3Configs
{
public:
CLDAPv3Configs ( void );
sInt32 Init ( CPlugInRef *inConfigTable,
uInt32 &inConfigTableLen );
virtual ~CLDAPv3Configs ( void );
sInt32 CleanLDAPConfigData ( sLDAPConfigData *inConfig,
bool inServerMappings = false);
sInt32 AddToConfig ( CFDataRef xmlData );
sInt32 SetXMLConfig ( CFDataRef xmlData );
CFDataRef CopyXMLConfig ( void );
sInt32 WriteXMLConfig ( void );
char *ExtractRecMap ( const char *inRecType,
CFArrayRef inRecordTypeMapCFArray,
int inIndex,
bool *outOCGroup,
CFArrayRef *outOCListCFArray,
ber_int_t *outScope );
char *ExtractAttrMap ( const char *inRecType,
const char *inAttrType,
CFArrayRef inRecordTypeMapCFArray,
CFArrayRef inAttrTypeMapCFArray,
int inIndex );
char *ExtractStdAttr ( char *inRecType,
CFArrayRef inRecordTypeMapCFArray,
CFArrayRef inAttrTypeMapCFArray,
int &inputIndex );
int AttrMapsCount ( const char *inRecType,
const char *inAttrType,
CFArrayRef inRecordTypeMapCFArray,
CFArrayRef inAttrTypeMapCFArray );
sInt32 UpdateLDAPConfigWithServerMappings
( char *inServer,
char *inMapSearchBase,
int inPortNumber,
bool inIsSSL,
bool inMakeDefLDAP,
bool inReferrals,
LDAP *inServerHost = nil );
sInt32 MakeServerBasedMappingsLDAPConfig
( char *inServer,
char *inMapSearchBase,
int inOpenCloseTO,
int inIdleTO,
int inDelayRebindTry,
int inSearchTO,
int inPortNumber,
bool inIsSSL,
bool inMakeDefLDAP,
bool inReferrals );
sInt32 WriteServerMappings ( char* userName,
char* password,
CFDataRef inMappings );
CFDataRef ReadServerMappings ( LDAP *serverHost,
CFDataRef inMappings );
void XMLConfigLock ( void );
void XMLConfigUnlock ( void );
sInt32 UpdateReplicaList ( char *inServerName,
CFMutableArrayRef inReplicaHostnames,
CFMutableArrayRef inWriteableHostnames);
protected:
CFDataRef RetrieveServerMappings
( char *inServer,
char *inMapSearchBase,
int inPortNumber,
bool inIsSSL,
bool inReferrals,
LDAP *inServerHost = nil );
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 );
sLDAPConfigData *MakeLDAPConfigData ( char *inName,
char *inServerName,
int inOpenCloseTO,
int inIdleTO,
int inDelayRebindTry,
int inSearchTO,
int inPortNum,
bool inUseSecure,
char *inAccount,
char *inPassword,
bool inMakeDefLDAP,
bool inServerMappings,
bool inIsSSL,
char *inMapSearchBase,
bool inReferrals,
sLDAPConfigData *inLDAPConfigData = nil );
sInt32 ConfigLDAPServers ( void );
sInt32 AddLDAPServer ( CFDataRef inXMLData );
CFDataRef VerifyAndUpdateServerLocation
( char *inServer,
int inPortNumber,
bool inIsSSL,
bool inMakeDefLDAP,
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 );
CFArrayRef GetReplicaHostnameListArray
( CFDictionaryRef configDict );
CFArrayRef GetWriteableHostnameListArray
( CFDictionaryRef configDict );
sInt32 MakeLDAPConfig ( CFDictionaryRef ldapDict,
sInt32 inIndex,
bool inEnsureServerMappings = false );
sInt32 BuildLDAPMap ( sLDAPConfigData *inConfig,
CFDictionaryRef ldapDict,
bool inServerMapppings );
bool CheckForConfig ( char *inServerName,
uInt32 &inConfigTableIndex);
sInt32 ReadXMLConfig ( void );
bool ConvertLDAPv2Config ( void );
bool CreatePrefDirectory ( void );
private:
CPlugInRef *pConfigTable;
uInt32 fConfigTableLen;
CFDataRef fXMLData;
DSMutexSemaphore *pXMLConfigLock;
};
#endif // __CLDAPv3Configs_h__