/* * Copyright (c) 2000-2001 Apple Computer, Inc. All Rights Reserved. * * The contents of this file constitute Original Code as defined in and are * subject to the Apple Public Source License Version 1.2 (the 'License'). * You may not use this file except in compliance with the License. Please obtain * a copy of the License at http://www.apple.com/publicsource and read it before * using this file. * * This Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the * specific language governing rights and limitations under the License. */ /* File: mds.h Contains: Module Directory Services Data Types and API. Copyright: (c) 1999 Apple Computer, Inc., all rights reserved. This is the C API wrapper for the C++ MDS implementation. Most of this file could also be generated by the same perl script that generates the plugin C wrapper code. */ #include "MDSSession.h" #include using namespace std; static CSSM_RETURN CSSMAPI cssm_DataGetFirst(CSSM_DL_DB_HANDLE DLDBHandle, const CSSM_QUERY *Query, CSSM_HANDLE_PTR ResultsHandle, CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes, CSSM_DATA_PTR Data, CSSM_DB_UNIQUE_RECORD_PTR *UniqueId) { BEGIN_API if (!(Required(ResultsHandle) = findHandle(DLDBHandle.DLHandle).DataGetFirst(DLDBHandle.DBHandle, DLQuery::optional(Query), Attributes, CssmData::optional(Data), Required(UniqueId)))) return CSSMERR_DL_ENDOFDATA; END_API(MDS) } static CSSM_RETURN CSSMAPI cssm_DataModify(CSSM_DL_DB_HANDLE DLDBHandle, CSSM_DB_RECORDTYPE RecordType, CSSM_DB_UNIQUE_RECORD_PTR UniqueRecordIdentifier, const CSSM_DB_RECORD_ATTRIBUTE_DATA *AttributesToBeModified, const CSSM_DATA *DataToBeModified, CSSM_DB_MODIFY_MODE ModifyMode) { BEGIN_API findHandle(DLDBHandle.DLHandle).DataModify(DLDBHandle.DBHandle, RecordType, Required(UniqueRecordIdentifier), AttributesToBeModified, CssmData::optional(DataToBeModified), ModifyMode); END_API(MDS) } static CSSM_RETURN CSSMAPI cssm_GetDbNameFromHandle(CSSM_DL_DB_HANDLE DLDBHandle, char **DbName) { BEGIN_API findHandle(DLDBHandle.DLHandle).GetDbNameFromHandle(DLDBHandle.DBHandle, DbName); END_API(MDS) } static CSSM_RETURN CSSMAPI cssm_DataAbortQuery(CSSM_DL_DB_HANDLE DLDBHandle, CSSM_HANDLE ResultsHandle) { BEGIN_API findHandle(DLDBHandle.DLHandle).DataAbortQuery(DLDBHandle.DBHandle, ResultsHandle); END_API(MDS) } static CSSM_RETURN CSSMAPI cssm_DestroyRelation(CSSM_DL_DB_HANDLE DLDBHandle, CSSM_DB_RECORDTYPE RelationID) { BEGIN_API findHandle(DLDBHandle.DLHandle).DestroyRelation(DLDBHandle.DBHandle, RelationID); END_API(MDS) } static CSSM_RETURN CSSMAPI cssm_DataDelete(CSSM_DL_DB_HANDLE DLDBHandle, const CSSM_DB_UNIQUE_RECORD *UniqueRecordIdentifier) { BEGIN_API findHandle(DLDBHandle.DLHandle).DataDelete(DLDBHandle.DBHandle, Required(UniqueRecordIdentifier)); END_API(MDS) } static CSSM_RETURN CSSMAPI cssm_DataInsert(CSSM_DL_DB_HANDLE DLDBHandle, CSSM_DB_RECORDTYPE RecordType, const CSSM_DB_RECORD_ATTRIBUTE_DATA *Attributes, const CSSM_DATA *Data, CSSM_DB_UNIQUE_RECORD_PTR *UniqueId) { BEGIN_API findHandle(DLDBHandle.DLHandle).DataInsert(DLDBHandle.DBHandle, RecordType, Attributes, CssmData::optional(Data), Required(UniqueId)); END_API(MDS) } static CSSM_RETURN CSSMAPI cssm_DataGetFromUniqueRecordId(CSSM_DL_DB_HANDLE DLDBHandle, const CSSM_DB_UNIQUE_RECORD *UniqueRecord, CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes, CSSM_DATA_PTR Data) { BEGIN_API findHandle(DLDBHandle.DLHandle).DataGetFromUniqueRecordId(DLDBHandle.DBHandle, Required(UniqueRecord), Attributes, CssmData::optional(Data)); END_API(MDS) } static CSSM_RETURN CSSMAPI cssm_CreateRelation(CSSM_DL_DB_HANDLE DLDBHandle, CSSM_DB_RECORDTYPE RelationID, const char *RelationName, uint32 NumberOfAttributes, const CSSM_DB_SCHEMA_ATTRIBUTE_INFO *pAttributeInfo, uint32 NumberOfIndexes, const CSSM_DB_SCHEMA_INDEX_INFO *pIndexInfo) { BEGIN_API findHandle(DLDBHandle.DLHandle).CreateRelation(DLDBHandle.DBHandle, RelationID, RelationName, NumberOfAttributes, Required(pAttributeInfo), NumberOfIndexes, Required(pIndexInfo)); END_API(MDS) } static CSSM_RETURN CSSMAPI cssm_FreeUniqueRecord(CSSM_DL_DB_HANDLE DLDBHandle, CSSM_DB_UNIQUE_RECORD_PTR UniqueRecord) { BEGIN_API findHandle(DLDBHandle.DLHandle).FreeUniqueRecord(DLDBHandle.DBHandle, Required(UniqueRecord)); END_API(MDS) } static CSSM_RETURN CSSMAPI cssm_DbOpen(CSSM_DL_HANDLE DLHandle, const char *DbName, const CSSM_NET_ADDRESS *DbLocation, CSSM_DB_ACCESS_TYPE AccessRequest, const CSSM_ACCESS_CREDENTIALS *AccessCred, const void *OpenParameters, CSSM_DB_HANDLE *DbHandle) { BEGIN_API findHandle(DLHandle).DbOpen(DbName, DbLocation, AccessRequest, AccessCredentials::optional(AccessCred), OpenParameters, Required(DbHandle)); END_API(MDS) } static CSSM_RETURN CSSMAPI cssm_DataGetNext(CSSM_DL_DB_HANDLE DLDBHandle, CSSM_HANDLE ResultsHandle, CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes, CSSM_DATA_PTR Data, CSSM_DB_UNIQUE_RECORD_PTR *UniqueId) { BEGIN_API if (!findHandle(DLDBHandle.DLHandle).DataGetNext(DLDBHandle.DBHandle, ResultsHandle, Attributes, CssmData::optional(Data), Required(UniqueId))) return CSSMERR_DL_ENDOFDATA; END_API(MDS) } static CSSM_RETURN CSSMAPI cssm_GetDbNames(CSSM_DL_HANDLE DLHandle, CSSM_NAME_LIST_PTR *NameList) { BEGIN_API findHandle(DLHandle).GetDbNames(Required(NameList)); END_API(MDS) } static CSSM_RETURN CSSMAPI cssm_DbClose(CSSM_DL_DB_HANDLE DLDBHandle) { BEGIN_API findHandle(DLDBHandle.DLHandle).DbClose(DLDBHandle.DBHandle); END_API(MDS) } static CSSM_RETURN CSSMAPI cssm_FreeNameList(CSSM_DL_HANDLE DLHandle, CSSM_NAME_LIST_PTR NameList) { BEGIN_API findHandle(DLHandle).FreeNameList(Required(NameList)); END_API(MDS) } static MDS_FUNCS gMDSFunctionTable = { cssm_DbOpen, cssm_DbClose, cssm_GetDbNames, cssm_GetDbNameFromHandle, cssm_FreeNameList, cssm_DataInsert, cssm_DataDelete, cssm_DataModify, cssm_DataGetFirst, cssm_DataGetNext, cssm_DataAbortQuery, cssm_DataGetFromUniqueRecordId, cssm_FreeUniqueRecord, cssm_CreateRelation, cssm_DestroyRelation, }; #ifdef __MWERKS__ #pragma export on #endif CSSM_RETURN CSSMAPI MDS_Initialize (const CSSM_GUID *inCallerGuid, const CSSM_MEMORY_FUNCS *inMemoryFunctions, MDS_FUNCS_PTR outDlFunctions, MDS_HANDLE *outMDSHandle) { BEGIN_API Required (outDlFunctions); Required (outMDSHandle) = (new MDSSession (Guid::optional(inCallerGuid), Required(inMemoryFunctions)))->handle (); *outDlFunctions = gMDSFunctionTable; END_API(MDS) } CSSM_RETURN CSSMAPI MDS_Terminate (MDS_HANDLE inMDSHandle) { BEGIN_API auto_ptr aMDSSession (&killHandle (inMDSHandle)); aMDSSession->terminate (); // Even if terminate throws the MDSSession object will be deleted. END_API(MDS) } CSSM_RETURN CSSMAPI MDS_Install (MDS_HANDLE inMDSHandle) { BEGIN_API findHandle (inMDSHandle).install (); END_API(MDS) } CSSM_RETURN CSSMAPI MDS_Uninstall (MDS_HANDLE inMDSHandle) { BEGIN_API findHandle (inMDSHandle).uninstall (); END_API(MDS) } #ifdef __MWERKS__ #pragma export off #endif