2 * Copyright (c) 2000-2001 Apple Computer, Inc. All Rights Reserved.
4 * The contents of this file constitute Original Code as defined in and are
5 * subject to the Apple Public Source License Version 1.2 (the 'License').
6 * You may not use this file except in compliance with the License. Please obtain
7 * a copy of the License at http://www.apple.com/publicsource and read it before
10 * This Original Code and all software distributed under the License are
11 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS
12 * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT
13 * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
14 * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the
15 * specific language governing rights and limitations under the License.
23 Contains: Module Directory Services Data Types and API.
25 Copyright: (c) 1999 Apple Computer, Inc., all rights reserved.
27 This is the C API wrapper for the C++ MDS implementation. Most of this file
28 could also be generated by the same perl script that generates the plugin
33 #include "MDSSession.h"
39 static CSSM_RETURN CSSMAPI
cssm_DataGetFirst(CSSM_DL_DB_HANDLE DLDBHandle
,
40 const CSSM_QUERY
*Query
,
41 CSSM_HANDLE_PTR ResultsHandle
,
42 CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes
,
44 CSSM_DB_UNIQUE_RECORD_PTR
*UniqueId
)
47 if (!(Required(ResultsHandle
) = findHandle
<MDSSession
>(DLDBHandle
.DLHandle
).DataGetFirst(DLDBHandle
.DBHandle
,
48 DLQuery::optional(Query
),
50 CssmData::optional(Data
),
52 return CSSMERR_DL_ENDOFDATA
;
56 static CSSM_RETURN CSSMAPI
cssm_DataModify(CSSM_DL_DB_HANDLE DLDBHandle
,
57 CSSM_DB_RECORDTYPE RecordType
,
58 CSSM_DB_UNIQUE_RECORD_PTR UniqueRecordIdentifier
,
59 const CSSM_DB_RECORD_ATTRIBUTE_DATA
*AttributesToBeModified
,
60 const CSSM_DATA
*DataToBeModified
,
61 CSSM_DB_MODIFY_MODE ModifyMode
)
64 findHandle
<MDSSession
>(DLDBHandle
.DLHandle
).DataModify(DLDBHandle
.DBHandle
,
66 Required(UniqueRecordIdentifier
),
67 AttributesToBeModified
,
68 CssmData::optional(DataToBeModified
),
73 static CSSM_RETURN CSSMAPI
cssm_GetDbNameFromHandle(CSSM_DL_DB_HANDLE DLDBHandle
,
77 findHandle
<MDSSession
>(DLDBHandle
.DLHandle
).GetDbNameFromHandle(DLDBHandle
.DBHandle
,
82 static CSSM_RETURN CSSMAPI
cssm_DataAbortQuery(CSSM_DL_DB_HANDLE DLDBHandle
,
83 CSSM_HANDLE ResultsHandle
)
86 findHandle
<MDSSession
>(DLDBHandle
.DLHandle
).DataAbortQuery(DLDBHandle
.DBHandle
,
91 static CSSM_RETURN CSSMAPI
cssm_DestroyRelation(CSSM_DL_DB_HANDLE DLDBHandle
,
92 CSSM_DB_RECORDTYPE RelationID
)
95 findHandle
<MDSSession
>(DLDBHandle
.DLHandle
).DestroyRelation(DLDBHandle
.DBHandle
,
100 static CSSM_RETURN CSSMAPI
cssm_DataDelete(CSSM_DL_DB_HANDLE DLDBHandle
,
101 const CSSM_DB_UNIQUE_RECORD
*UniqueRecordIdentifier
)
104 findHandle
<MDSSession
>(DLDBHandle
.DLHandle
).DataDelete(DLDBHandle
.DBHandle
,
105 Required(UniqueRecordIdentifier
));
109 static CSSM_RETURN CSSMAPI
cssm_DataInsert(CSSM_DL_DB_HANDLE DLDBHandle
,
110 CSSM_DB_RECORDTYPE RecordType
,
111 const CSSM_DB_RECORD_ATTRIBUTE_DATA
*Attributes
,
112 const CSSM_DATA
*Data
,
113 CSSM_DB_UNIQUE_RECORD_PTR
*UniqueId
)
116 findHandle
<MDSSession
>(DLDBHandle
.DLHandle
).DataInsert(DLDBHandle
.DBHandle
,
119 CssmData::optional(Data
),
124 static CSSM_RETURN CSSMAPI
cssm_DataGetFromUniqueRecordId(CSSM_DL_DB_HANDLE DLDBHandle
,
125 const CSSM_DB_UNIQUE_RECORD
*UniqueRecord
,
126 CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes
,
130 findHandle
<MDSSession
>(DLDBHandle
.DLHandle
).DataGetFromUniqueRecordId(DLDBHandle
.DBHandle
,
131 Required(UniqueRecord
),
133 CssmData::optional(Data
));
138 static CSSM_RETURN CSSMAPI
cssm_GetDbOwner(CSSM_DL_DB_HANDLE DLDBHandle
,
139 CSSM_ACL_OWNER_PROTOTYPE_PTR Owner
)
142 findHandle
<MDSSession
>(DLDBHandle
.DLHandle
).GetDbOwner(DLDBHandle
.DBHandle
,
148 static CSSM_RETURN CSSMAPI
cssm_CreateRelation(CSSM_DL_DB_HANDLE DLDBHandle
,
149 CSSM_DB_RECORDTYPE RelationID
,
150 const char *RelationName
,
151 uint32 NumberOfAttributes
,
152 const CSSM_DB_SCHEMA_ATTRIBUTE_INFO
*pAttributeInfo
,
153 uint32 NumberOfIndexes
,
154 const CSSM_DB_SCHEMA_INDEX_INFO
*pIndexInfo
)
157 findHandle
<MDSSession
>(DLDBHandle
.DLHandle
).CreateRelation(DLDBHandle
.DBHandle
,
161 Required(pAttributeInfo
),
163 Required(pIndexInfo
));
168 static CSSM_RETURN CSSMAPI
cssm_GetDbAcl(CSSM_DL_DB_HANDLE DLDBHandle
,
169 const CSSM_STRING
*SelectionTag
,
170 uint32
*NumberOfAclInfos
,
171 CSSM_ACL_ENTRY_INFO_PTR
*AclInfos
)
174 findHandle
<MDSSession
>(DLDBHandle
.DLHandle
).GetDbAcl(DLDBHandle
.DBHandle
,
176 Required(NumberOfAclInfos
),
181 static CSSM_RETURN CSSMAPI
cssm_ChangeDbOwner(CSSM_DL_DB_HANDLE DLDBHandle
,
182 const CSSM_ACCESS_CREDENTIALS
*AccessCred
,
183 const CSSM_ACL_OWNER_PROTOTYPE
*NewOwner
)
186 findHandle
<MDSSession
>(DLDBHandle
.DLHandle
).ChangeDbOwner(DLDBHandle
.DBHandle
,
187 AccessCredentials::required(AccessCred
),
192 static CSSM_RETURN CSSMAPI
cssm_PassThrough(CSSM_DL_DB_HANDLE DLDBHandle
,
193 uint32 PassThroughId
,
194 const void *InputParams
,
198 findHandle
<MDSSession
>(DLDBHandle
.DLHandle
).PassThrough(DLDBHandle
.DBHandle
,
206 static CSSM_RETURN CSSMAPI
cssm_FreeUniqueRecord(CSSM_DL_DB_HANDLE DLDBHandle
,
207 CSSM_DB_UNIQUE_RECORD_PTR UniqueRecord
)
210 findHandle
<MDSSession
>(DLDBHandle
.DLHandle
).FreeUniqueRecord(DLDBHandle
.DBHandle
,
211 Required(UniqueRecord
));
215 static CSSM_RETURN CSSMAPI
cssm_DbOpen(CSSM_DL_HANDLE DLHandle
,
217 const CSSM_NET_ADDRESS
*DbLocation
,
218 CSSM_DB_ACCESS_TYPE AccessRequest
,
219 const CSSM_ACCESS_CREDENTIALS
*AccessCred
,
220 const void *OpenParameters
,
221 CSSM_DB_HANDLE
*DbHandle
)
224 findHandle
<MDSSession
>(DLHandle
).DbOpen(DbName
,
227 AccessCredentials::optional(AccessCred
),
233 static CSSM_RETURN CSSMAPI
cssm_DataGetNext(CSSM_DL_DB_HANDLE DLDBHandle
,
234 CSSM_HANDLE ResultsHandle
,
235 CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes
,
237 CSSM_DB_UNIQUE_RECORD_PTR
*UniqueId
)
240 if (!findHandle
<MDSSession
>(DLDBHandle
.DLHandle
).DataGetNext(DLDBHandle
.DBHandle
,
243 CssmData::optional(Data
),
245 return CSSMERR_DL_ENDOFDATA
;
250 static CSSM_RETURN CSSMAPI
cssm_DbDelete(CSSM_DL_HANDLE DLHandle
,
252 const CSSM_NET_ADDRESS
*DbLocation
,
253 const CSSM_ACCESS_CREDENTIALS
*AccessCred
)
256 findHandle
<MDSSession
>(DLHandle
).DbDelete(DbName
,
258 AccessCredentials::optional(AccessCred
));
262 static CSSM_RETURN CSSMAPI
cssm_DbCreate(CSSM_DL_HANDLE DLHandle
,
264 const CSSM_NET_ADDRESS
*DbLocation
,
265 const CSSM_DBINFO
*DBInfo
,
266 CSSM_DB_ACCESS_TYPE AccessRequest
,
267 const CSSM_RESOURCE_CONTROL_CONTEXT
*CredAndAclEntry
,
268 const void *OpenParameters
,
269 CSSM_DB_HANDLE
*DbHandle
)
272 findHandle
<MDSSession
>(DLHandle
).DbCreate(DbName
,
283 static CSSM_RETURN CSSMAPI
cssm_GetDbNames(CSSM_DL_HANDLE DLHandle
,
284 CSSM_NAME_LIST_PTR
*NameList
)
287 findHandle
<MDSSession
>(DLHandle
).GetDbNames(Required(NameList
));
291 static CSSM_RETURN CSSMAPI
cssm_DbClose(CSSM_DL_DB_HANDLE DLDBHandle
)
294 findHandle
<MDSSession
>(DLDBHandle
.DLHandle
).DbClose(DLDBHandle
.DBHandle
);
299 static CSSM_RETURN CSSMAPI
cssm_ChangeDbAcl(CSSM_DL_DB_HANDLE DLDBHandle
,
300 const CSSM_ACCESS_CREDENTIALS
*AccessCred
,
301 const CSSM_ACL_EDIT
*AclEdit
)
304 findHandle
<MDSSession
>(DLDBHandle
.DLHandle
).ChangeDbAcl(DLDBHandle
.DBHandle
,
305 AccessCredentials::required(AccessCred
),
310 static CSSM_RETURN CSSMAPI
cssm_Authenticate(CSSM_DL_DB_HANDLE DLDBHandle
,
311 CSSM_DB_ACCESS_TYPE AccessRequest
,
312 const CSSM_ACCESS_CREDENTIALS
*AccessCred
)
315 findHandle
<MDSSession
>(DLDBHandle
.DLHandle
).Authenticate(DLDBHandle
.DBHandle
,
317 AccessCredentials::required(AccessCred
));
322 static CSSM_RETURN CSSMAPI
cssm_FreeNameList(CSSM_DL_HANDLE DLHandle
,
323 CSSM_NAME_LIST_PTR NameList
)
326 findHandle
<MDSSession
>(DLHandle
).FreeNameList(Required(NameList
));
330 static MDS_FUNCS gMDSFunctionTable
=
335 cssm_GetDbNameFromHandle
,
343 cssm_DataGetFromUniqueRecordId
,
344 cssm_FreeUniqueRecord
,
346 cssm_DestroyRelation
,
355 MDS_Initialize (const CSSM_GUID
*inCallerGuid
,
356 const CSSM_MEMORY_FUNCS
*inMemoryFunctions
,
357 MDS_FUNCS_PTR outDlFunctions
,
358 MDS_HANDLE
*outMDSHandle
)
361 Required (outDlFunctions
);
362 Required (outMDSHandle
) = (new MDSSession (Guid::optional(inCallerGuid
),
363 Required(inMemoryFunctions
)))->handle ();
364 *outDlFunctions
= gMDSFunctionTable
;
369 MDS_Terminate (MDS_HANDLE inMDSHandle
)
372 auto_ptr
<MDSSession
> aMDSSession (&killHandle
<MDSSession
> (inMDSHandle
));
373 aMDSSession
->terminate (); // Even if terminate throws the MDSSession object will be deleted.
378 MDS_Install (MDS_HANDLE inMDSHandle
)
381 findHandle
<MDSSession
> (inMDSHandle
).install ();
386 MDS_Uninstall (MDS_HANDLE inMDSHandle
)
389 findHandle
<MDSSession
> (inMDSHandle
).uninstall ();