]> git.saurik.com Git - apple/security.git/blob - cdsa/cdsa_utilities/DbContext.cpp
Security-54.1.tar.gz
[apple/security.git] / cdsa / cdsa_utilities / DbContext.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 #ifdef __MWERKS__
20 #define _CPP_DBCONTEXT
21 #endif
22 #include <Security/DbContext.h>
23
24 #include <Security/Database.h>
25
26 #include <Security/cssmerr.h>
27 #include <Security/utilities.h>
28
29 DbContext::DbContext (Database &inDatabase,
30 DatabaseSession &inDatabaseSession,
31 CSSM_DB_ACCESS_TYPE inAccessRequest,
32 const CSSM_ACCESS_CREDENTIALS *inAccessCred) :
33 mDatabase (inDatabase),
34 mDatabaseSession (inDatabaseSession),
35 mAccessRequest (inAccessRequest)
36 {
37 // XXX Copy the ACL.
38 //mAccessCred = inAccessCred;
39 }
40
41 DbContext::~DbContext ()
42 {
43 //delete mAccessCred;
44 // XXX How do we delete these?
45 }
46
47 #if 0
48 CSSM_HANDLE
49 DbContext::dataGetFirst(const DLQuery *inQuery,
50 CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR inoutAttributes,
51 CssmData *inoutData,
52 CSSM_DB_UNIQUE_RECORD_PTR &outUniqueRecord)
53 {
54 auto_ptr<DbQuery> aQuery(mDatabase.makeQuery(const DLQuery *inQuery));
55 try
56 {
57 mDatabase.dataGetNext(*aQuery, inoutAttributes, inoutData, outUniqueRecord);
58
59 StLock<Mutex> _(mDbQuerySet);
60 mDbQuerySet.insert(aQuery.get());
61 }
62 catch(...)
63 {
64 mDatabase.dataAbortQuery(*aQuery);
65 throw;
66 }
67
68 return reinterpret_cast<CSSM_HANDLE>(aQuery.release());
69 }
70
71 void
72 DbContext::dataGetNext(CSSM_HANDLE inResultsHandle,
73 CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR inoutAttributes,
74 CssmData *inoutData,
75 CSSM_DB_UNIQUE_RECORD_PTR &outUniqueRecord)
76 {
77 DbQuery *aQuery = reinterpret_cast<DbQuery *>(inResultsHandle);
78 {
79 StLock<Mutex> _(mDbQuerySet);
80 DbQuerySet::iterator it = mDbQuerySet.find(aQuery);
81 if (it == mDbContextMap.end())
82 CssmError::throwMe(CSSMERR_DL_INVALID_RESULTS_HANDLE);
83 }
84
85 try
86 {
87 mDatabase.dataGetNext(*aQuery, inoutAttributes, inoutData, outUniqueRecord);
88 }
89 catch(...)
90 {
91 {
92 StLock<Mutex> _(mDbQuerySet);
93 mDbQuerySet.erase(aQuery);
94 }
95 try
96 {
97 mDatabase.dataAbortQuery(*aQuery);
98 }
99 catch(...) {}
100 delete aQuery;
101 throw;
102 }
103 }
104
105 void
106 DbContext::dataAbortQuery(CSSM_HANDLE inResultsHandle)
107 {
108 DbQuery *aQuery = reinterpret_cast<DbQuery *>(inResultsHandle);
109 {
110 StLock<Mutex> _(mDbQuerySet);
111 DbQuerySet::iterator it = mDbQuerySet.find(aQuery);
112 if (it == mDbContextMap.end())
113 CssmError::throwMe(CSSMERR_DL_INVALID_RESULTS_HANDLE);
114 mDbContextMap.erase(it);
115 }
116
117 try
118 {
119 mDatabase.dataAbortQuery(*aQuery);
120 }
121 catch(...)
122 {
123 delete aQuery;
124 throw;
125 }
126 delete aQuery;
127 }
128 #endif