BaseDirectoryPlugin.h [plain text]
#ifndef _BASEDIRECTORYPLUGIN_H
#define _BASEDIRECTORYPLUGIN_H
#include <CoreFoundation/CoreFoundation.h>
#include <DirectoryServiceCore/DSEventSemaphore.h>
#include <DirectoryServiceCore/DSMutexSemaphore.h>
#include <DirectoryServiceCore/CLog.h>
#include <DirectoryServiceCore/BaseDirectoryPluginTypes.h>
#if defined(SERVERINTERNAL)
#include "CServerPlugin.h"
#else
#include <DirectoryServiceCore/CDSServerModule.h>
#include <DirectoryServiceCore/ServerModuleLib.h>
#define CServerPlugin CDSServerModule
#endif
#include <DirectoryServiceCore/CDSAuthParams.h>
class CContinue;
class CPlugInRef;
class BaseDirectoryPlugin : public CServerPlugin
{
public:
#ifdef SERVERINTERNAL
BaseDirectoryPlugin ( FourCharCode inSig, const char *inName );
#else
BaseDirectoryPlugin ( const char *inName );
#endif
virtual ~BaseDirectoryPlugin ( void );
virtual SInt32 Initialize ( void );
virtual SInt32 SetPluginState ( const UInt32 inState );
virtual CDSAuthParams* NewAuthParamObject ( void );
virtual SInt32 PeriodicTask ( void ) = 0;
virtual SInt32 ProcessRequest ( void *inData );
static tDirStatus FillBuffer ( CFMutableArrayRef inRecordList, BDPIOpaqueBuffer inData );
static const char *GetCStringFromCFString ( CFStringRef inCFString, char **outCString );
static void FilterAttributes ( CFMutableDictionaryRef inRecord, CFArrayRef inRequestedAttribs, CFStringRef inNodeName );
char *GetRecordTypeFromRef ( tRecordReference inRecRef );
protected:
virtual void NetworkTransition ( void );
virtual CFDataRef CopyConfiguration ( void ) = 0;
virtual bool NewConfiguration ( const char *inData, UInt32 inLength ) = 0;
virtual bool CheckConfiguration ( const char *inData, UInt32 inLength ) = 0;
virtual tDirStatus HandleCustomCall ( sBDPINodeContext *pContext, sDoPlugInCustomCall *inData ) = 0;
virtual bool IsConfigureNodeName ( CFStringRef inNodeName ) = 0;
virtual BDPIVirtualNode *CreateNodeForPath ( CFStringRef inPath, uid_t inUID, uid_t inEffectiveUID ) = 0;
virtual tDirStatus DoPlugInCustomCall ( sDoPlugInCustomCall *inData );
virtual tDirStatus RegisterNode ( CFStringRef inNodeName, eDirNodeType inType );
virtual tDirStatus UnregisterNode ( CFStringRef inNodeName, eDirNodeType inType );
virtual tDirStatus OpenDirNode ( sOpenDirNode *inData );
virtual tDirStatus CloseDirNode ( sCloseDirNode *inData );
virtual tDirStatus GetDirNodeInfo ( sGetDirNodeInfo *inData );
virtual tDirStatus GetRecordList ( sGetRecordList *inData );
virtual tDirStatus GetRecordEntry ( sGetRecordEntry *inData );
virtual tDirStatus CreateRecord ( sCreateRecord *inData );
virtual tDirStatus OpenRecord ( sOpenRecord *inData );
virtual tDirStatus CloseRecord ( sCloseRecord *inData );
virtual tDirStatus SetRecordType ( sSetRecordType *inData );
virtual tDirStatus DeleteRecord ( sDeleteRecord *inData );
virtual tDirStatus SetRecordName ( sSetRecordName *inData );
virtual tDirStatus FlushRecord ( sFlushRecord *inData );
virtual tDirStatus GetRecRefInfo ( sGetRecRefInfo *inData );
virtual tDirStatus GetRecAttribInfo ( sGetRecAttribInfo *inData );
virtual tDirStatus GetRecAttrValueByValue ( sGetRecordAttributeValueByValue *inData );
virtual tDirStatus GetRecAttrValueByIndex ( sGetRecordAttributeValueByIndex *inData );
virtual tDirStatus GetRecAttrValueByID ( sGetRecordAttributeValueByID *inData );
virtual tDirStatus GetAttributeEntry ( sGetAttributeEntry *inData );
virtual tDirStatus AddAttribute ( sAddAttribute *inData, const char *inRecTypeStr );
virtual tDirStatus RemoveAttribute ( sRemoveAttribute *inData, const char *inRecTypeStr );
virtual tDirStatus CloseAttributeList ( sCloseAttributeList *inData );
virtual tDirStatus GetAttributeValue ( sGetAttributeValue *inData );
virtual tDirStatus AddAttributeValue ( sAddAttributeValue *inData, const char *inRecTypeStr );
virtual tDirStatus SetAttributeValue ( sSetAttributeValue *inData, const char *inRecTypeStr );
virtual tDirStatus RemoveAttributeValue ( sRemoveAttributeValue *inData, const char *inRecTypeStr );
virtual tDirStatus CloseAttributeValueList ( sCloseAttributeValueList *inData );
virtual tDirStatus DoAttributeValueSearch ( sDoAttrValueSearch *inData );
virtual tDirStatus DoAttributeValueSearchWithData ( sDoAttrValueSearchWithData *inData );
virtual tDirStatus ReleaseContinueData ( sReleaseContinueData *continueData );
virtual tDirStatus DoAuthentication ( sDoDirNodeAuth *inData, const char *inRecTypeStr,
CDSAuthParams &inParams );
virtual tDirStatus DoSimpleAuthentication ( sBDPINodeContext *inContext, CFStringRef inRecordType, tDataBuffer *inAuthData, bool bAuthOnly );
virtual tDirStatus DoExtendedAuthentication( sBDPINodeContext *inContext, CFStringRef inRecordType, CFStringRef inAuthMethod,
tDataBuffer *inAuthData, tDataBuffer *inOutAuthResponse, bool bAuthOnly );
virtual tDirStatus DoSimplePasswordChange ( sBDPINodeContext *inContext, CFStringRef inRecordType, tDataBuffer *inAuthData );
virtual tDirStatus DoExtendedPasswordChange( sBDPINodeContext *inContext, tDataBuffer *inAuthData, tDataBuffer *inOutAuthResponse,
bool bAuthOnly );
virtual tDirStatus DoAuthGetPolicy ( sBDPINodeContext *inContext, CFStringRef inRecordType, unsigned int uiMethod, tDataBuffer *inAuthData,
tDataBuffer *outAuthResponse );
CFArrayRef CreateAuthArrayFromBuffer ( tDataBufferPtr inAuthBuff );
static void *MakeContextData ( CntxDataType dataType );
static tDirStatus CleanContextData ( void *inContext );
static void ContextDeallocProc ( void *inContextData );
protected:
DSMutexSemaphore *fKerberosMutex;
DSEventSemaphore *fReadyForRequests;
char *fPluginPrefix;
int fPluginPrefixLen;
CFStringRef fPluginPrefixCF;
DSMutexSemaphore fBasePluginMutex;
CFRunLoopRef fPluginRunLoop;
UInt32 fState;
CFRunLoopTimerRef fTransitionTimer;
UInt32 fCustomCallReadConfigSize;
UInt32 fCustomCallReadConfig;
UInt32 fCustomCallWriteConfig;
UInt32 fCustomCallVerifyConfig;
CPlugInRef *fContextHash;
CContinue *fContinueHash;
private:
static void BDPIHandleNetTransition( CFRunLoopTimerRef timer, void *info );
static CFMutableArrayRef CreateCFArrayFromList( tDataListPtr attribList );
static CFDataRef GetDSBufferFromDictionary( CFDictionaryRef inDictionary );
};
#endif