]> git.saurik.com Git - apple/security.git/blob - cdsa/mds/mdsapi.cpp
Security-30.1.tar.gz
[apple/security.git] / cdsa / mds / mdsapi.cpp
1 /*
2 * Copyright (c) 2000-2001 Apple Computer, Inc. All Rights Reserved.
3 *
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
8 * using this file.
9 *
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.
16 */
17
18
19 /*
20
21 File: mds.h
22
23 Contains: Module Directory Services Data Types and API.
24
25 Copyright: (c) 1999 Apple Computer, Inc., all rights reserved.
26
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
29 C wrapper code.
30
31 */
32
33 #include "MDSSession.h"
34
35 #include <memory>
36
37 using namespace std;
38
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,
43 CSSM_DATA_PTR Data,
44 CSSM_DB_UNIQUE_RECORD_PTR *UniqueId)
45 {
46 BEGIN_API
47 if (!(Required(ResultsHandle) = findHandle<MDSSession>(DLDBHandle.DLHandle).DataGetFirst(DLDBHandle.DBHandle,
48 DLQuery::optional(Query),
49 Attributes,
50 CssmData::optional(Data),
51 Required(UniqueId))))
52 return CSSMERR_DL_ENDOFDATA;
53 END_API(MDS)
54 }
55
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)
62 {
63 BEGIN_API
64 findHandle<MDSSession>(DLDBHandle.DLHandle).DataModify(DLDBHandle.DBHandle,
65 RecordType,
66 Required(UniqueRecordIdentifier),
67 AttributesToBeModified,
68 CssmData::optional(DataToBeModified),
69 ModifyMode);
70 END_API(MDS)
71 }
72
73 static CSSM_RETURN CSSMAPI cssm_GetDbNameFromHandle(CSSM_DL_DB_HANDLE DLDBHandle,
74 char **DbName)
75 {
76 BEGIN_API
77 findHandle<MDSSession>(DLDBHandle.DLHandle).GetDbNameFromHandle(DLDBHandle.DBHandle,
78 DbName);
79 END_API(MDS)
80 }
81
82 static CSSM_RETURN CSSMAPI cssm_DataAbortQuery(CSSM_DL_DB_HANDLE DLDBHandle,
83 CSSM_HANDLE ResultsHandle)
84 {
85 BEGIN_API
86 findHandle<MDSSession>(DLDBHandle.DLHandle).DataAbortQuery(DLDBHandle.DBHandle,
87 ResultsHandle);
88 END_API(MDS)
89 }
90
91 static CSSM_RETURN CSSMAPI cssm_DestroyRelation(CSSM_DL_DB_HANDLE DLDBHandle,
92 CSSM_DB_RECORDTYPE RelationID)
93 {
94 BEGIN_API
95 findHandle<MDSSession>(DLDBHandle.DLHandle).DestroyRelation(DLDBHandle.DBHandle,
96 RelationID);
97 END_API(MDS)
98 }
99
100 static CSSM_RETURN CSSMAPI cssm_DataDelete(CSSM_DL_DB_HANDLE DLDBHandle,
101 const CSSM_DB_UNIQUE_RECORD *UniqueRecordIdentifier)
102 {
103 BEGIN_API
104 findHandle<MDSSession>(DLDBHandle.DLHandle).DataDelete(DLDBHandle.DBHandle,
105 Required(UniqueRecordIdentifier));
106 END_API(MDS)
107 }
108
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)
114 {
115 BEGIN_API
116 findHandle<MDSSession>(DLDBHandle.DLHandle).DataInsert(DLDBHandle.DBHandle,
117 RecordType,
118 Attributes,
119 CssmData::optional(Data),
120 Required(UniqueId));
121 END_API(MDS)
122 }
123
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,
127 CSSM_DATA_PTR Data)
128 {
129 BEGIN_API
130 findHandle<MDSSession>(DLDBHandle.DLHandle).DataGetFromUniqueRecordId(DLDBHandle.DBHandle,
131 Required(UniqueRecord),
132 Attributes,
133 CssmData::optional(Data));
134 END_API(MDS)
135 }
136
137 #if 0
138 static CSSM_RETURN CSSMAPI cssm_GetDbOwner(CSSM_DL_DB_HANDLE DLDBHandle,
139 CSSM_ACL_OWNER_PROTOTYPE_PTR Owner)
140 {
141 BEGIN_API
142 findHandle<MDSSession>(DLDBHandle.DLHandle).GetDbOwner(DLDBHandle.DBHandle,
143 Required(Owner));
144 END_API(MDS)
145 }
146 #endif
147
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)
155 {
156 BEGIN_API
157 findHandle<MDSSession>(DLDBHandle.DLHandle).CreateRelation(DLDBHandle.DBHandle,
158 RelationID,
159 RelationName,
160 NumberOfAttributes,
161 Required(pAttributeInfo),
162 NumberOfIndexes,
163 Required(pIndexInfo));
164 END_API(MDS)
165 }
166
167 #if 0
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)
172 {
173 BEGIN_API
174 findHandle<MDSSession>(DLDBHandle.DLHandle).GetDbAcl(DLDBHandle.DBHandle,
175 SelectionTag,
176 Required(NumberOfAclInfos),
177 Required(AclInfos));
178 END_API(MDS)
179 }
180
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)
184 {
185 BEGIN_API
186 findHandle<MDSSession>(DLDBHandle.DLHandle).ChangeDbOwner(DLDBHandle.DBHandle,
187 AccessCredentials::required(AccessCred),
188 Required(NewOwner));
189 END_API(MDS)
190 }
191
192 static CSSM_RETURN CSSMAPI cssm_PassThrough(CSSM_DL_DB_HANDLE DLDBHandle,
193 uint32 PassThroughId,
194 const void *InputParams,
195 void **OutputParams)
196 {
197 BEGIN_API
198 findHandle<MDSSession>(DLDBHandle.DLHandle).PassThrough(DLDBHandle.DBHandle,
199 PassThroughId,
200 InputParams,
201 OutputParams);
202 END_API(MDS)
203 }
204 #endif
205
206 static CSSM_RETURN CSSMAPI cssm_FreeUniqueRecord(CSSM_DL_DB_HANDLE DLDBHandle,
207 CSSM_DB_UNIQUE_RECORD_PTR UniqueRecord)
208 {
209 BEGIN_API
210 findHandle<MDSSession>(DLDBHandle.DLHandle).FreeUniqueRecord(DLDBHandle.DBHandle,
211 Required(UniqueRecord));
212 END_API(MDS)
213 }
214
215 static CSSM_RETURN CSSMAPI cssm_DbOpen(CSSM_DL_HANDLE DLHandle,
216 const char *DbName,
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)
222 {
223 BEGIN_API
224 findHandle<MDSSession>(DLHandle).DbOpen(DbName,
225 DbLocation,
226 AccessRequest,
227 AccessCredentials::optional(AccessCred),
228 OpenParameters,
229 Required(DbHandle));
230 END_API(MDS)
231 }
232
233 static CSSM_RETURN CSSMAPI cssm_DataGetNext(CSSM_DL_DB_HANDLE DLDBHandle,
234 CSSM_HANDLE ResultsHandle,
235 CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes,
236 CSSM_DATA_PTR Data,
237 CSSM_DB_UNIQUE_RECORD_PTR *UniqueId)
238 {
239 BEGIN_API
240 if (!findHandle<MDSSession>(DLDBHandle.DLHandle).DataGetNext(DLDBHandle.DBHandle,
241 ResultsHandle,
242 Attributes,
243 CssmData::optional(Data),
244 Required(UniqueId)))
245 return CSSMERR_DL_ENDOFDATA;
246 END_API(MDS)
247 }
248
249 #if 0
250 static CSSM_RETURN CSSMAPI cssm_DbDelete(CSSM_DL_HANDLE DLHandle,
251 const char *DbName,
252 const CSSM_NET_ADDRESS *DbLocation,
253 const CSSM_ACCESS_CREDENTIALS *AccessCred)
254 {
255 BEGIN_API
256 findHandle<MDSSession>(DLHandle).DbDelete(DbName,
257 DbLocation,
258 AccessCredentials::optional(AccessCred));
259 END_API(MDS)
260 }
261
262 static CSSM_RETURN CSSMAPI cssm_DbCreate(CSSM_DL_HANDLE DLHandle,
263 const char *DbName,
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)
270 {
271 BEGIN_API
272 findHandle<MDSSession>(DLHandle).DbCreate(DbName,
273 DbLocation,
274 Required(DBInfo),
275 AccessRequest,
276 CredAndAclEntry,
277 OpenParameters,
278 Required(DbHandle));
279 END_API(MDS)
280 }
281 #endif
282
283 static CSSM_RETURN CSSMAPI cssm_GetDbNames(CSSM_DL_HANDLE DLHandle,
284 CSSM_NAME_LIST_PTR *NameList)
285 {
286 BEGIN_API
287 findHandle<MDSSession>(DLHandle).GetDbNames(Required(NameList));
288 END_API(MDS)
289 }
290
291 static CSSM_RETURN CSSMAPI cssm_DbClose(CSSM_DL_DB_HANDLE DLDBHandle)
292 {
293 BEGIN_API
294 findHandle<MDSSession>(DLDBHandle.DLHandle).DbClose(DLDBHandle.DBHandle);
295 END_API(MDS)
296 }
297
298 #if 0
299 static CSSM_RETURN CSSMAPI cssm_ChangeDbAcl(CSSM_DL_DB_HANDLE DLDBHandle,
300 const CSSM_ACCESS_CREDENTIALS *AccessCred,
301 const CSSM_ACL_EDIT *AclEdit)
302 {
303 BEGIN_API
304 findHandle<MDSSession>(DLDBHandle.DLHandle).ChangeDbAcl(DLDBHandle.DBHandle,
305 AccessCredentials::required(AccessCred),
306 Required(AclEdit));
307 END_API(MDS)
308 }
309
310 static CSSM_RETURN CSSMAPI cssm_Authenticate(CSSM_DL_DB_HANDLE DLDBHandle,
311 CSSM_DB_ACCESS_TYPE AccessRequest,
312 const CSSM_ACCESS_CREDENTIALS *AccessCred)
313 {
314 BEGIN_API
315 findHandle<MDSSession>(DLDBHandle.DLHandle).Authenticate(DLDBHandle.DBHandle,
316 AccessRequest,
317 AccessCredentials::required(AccessCred));
318 END_API(MDS)
319 }
320 #endif
321
322 static CSSM_RETURN CSSMAPI cssm_FreeNameList(CSSM_DL_HANDLE DLHandle,
323 CSSM_NAME_LIST_PTR NameList)
324 {
325 BEGIN_API
326 findHandle<MDSSession>(DLHandle).FreeNameList(Required(NameList));
327 END_API(MDS)
328 }
329
330 static MDS_FUNCS gMDSFunctionTable =
331 {
332 cssm_DbOpen,
333 cssm_DbClose,
334 cssm_GetDbNames,
335 cssm_GetDbNameFromHandle,
336 cssm_FreeNameList,
337 cssm_DataInsert,
338 cssm_DataDelete,
339 cssm_DataModify,
340 cssm_DataGetFirst,
341 cssm_DataGetNext,
342 cssm_DataAbortQuery,
343 cssm_DataGetFromUniqueRecordId,
344 cssm_FreeUniqueRecord,
345 cssm_CreateRelation,
346 cssm_DestroyRelation,
347 };
348
349
350 #ifdef __MWERKS__
351 #pragma export on
352 #endif
353
354 CSSM_RETURN CSSMAPI
355 MDS_Initialize (const CSSM_GUID *inCallerGuid,
356 const CSSM_MEMORY_FUNCS *inMemoryFunctions,
357 MDS_FUNCS_PTR outDlFunctions,
358 MDS_HANDLE *outMDSHandle)
359 {
360 BEGIN_API
361 Required (outDlFunctions);
362 Required (outMDSHandle) = (new MDSSession (Guid::optional(inCallerGuid),
363 Required(inMemoryFunctions)))->handle ();
364 *outDlFunctions = gMDSFunctionTable;
365 END_API(MDS)
366 }
367
368 CSSM_RETURN CSSMAPI
369 MDS_Terminate (MDS_HANDLE inMDSHandle)
370 {
371 BEGIN_API
372 auto_ptr<MDSSession> aMDSSession (&killHandle<MDSSession> (inMDSHandle));
373 aMDSSession->terminate (); // Even if terminate throws the MDSSession object will be deleted.
374 END_API(MDS)
375 }
376
377 CSSM_RETURN CSSMAPI
378 MDS_Install (MDS_HANDLE inMDSHandle)
379 {
380 BEGIN_API
381 findHandle<MDSSession> (inMDSHandle).install ();
382 END_API(MDS)
383 }
384
385 CSSM_RETURN CSSMAPI
386 MDS_Uninstall (MDS_HANDLE inMDSHandle)
387 {
388 BEGIN_API
389 findHandle<MDSSession> (inMDSHandle).uninstall ();
390 END_API(MDS)
391 }
392
393 #ifdef __MWERKS__
394 #pragma export off
395 #endif