Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(902)

Side by Side Diff: mozilla/security/nss/lib/ckfw/find.c

Issue 14249009: Change the NSS and NSPR source tree to the new directory structure to be (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/nss/
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « mozilla/security/nss/lib/ckfw/crypto.c ('k') | mozilla/security/nss/lib/ckfw/hash.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4
5 #ifdef DEBUG
6 static const char CVS_ID[] = "@(#) $RCSfile: find.c,v $ $Revision: 1.10 $ $Date: 2012/04/25 14:49:28 $";
7 #endif /* DEBUG */
8
9 /*
10 * find.c
11 *
12 * This file implements the nssCKFWFindObjects type and methods.
13 */
14
15 #ifndef CK_H
16 #include "ck.h"
17 #endif /* CK_H */
18
19 /*
20 * NSSCKFWFindObjects
21 *
22 * -- create/destroy --
23 * nssCKFWFindObjects_Create
24 * nssCKFWFindObjects_Destroy
25 *
26 * -- public accessors --
27 * NSSCKFWFindObjects_GetMDFindObjects
28 *
29 * -- implement public accessors --
30 * nssCKFWFindObjects_GetMDFindObjects
31 *
32 * -- private accessors --
33 *
34 * -- module fronts --
35 * nssCKFWFindObjects_Next
36 */
37
38 struct NSSCKFWFindObjectsStr {
39 NSSCKFWMutex *mutex; /* merely to serialise the MDObject calls */
40 NSSCKMDFindObjects *mdfo1;
41 NSSCKMDFindObjects *mdfo2;
42 NSSCKFWSession *fwSession;
43 NSSCKMDSession *mdSession;
44 NSSCKFWToken *fwToken;
45 NSSCKMDToken *mdToken;
46 NSSCKFWInstance *fwInstance;
47 NSSCKMDInstance *mdInstance;
48
49 NSSCKMDFindObjects *mdFindObjects; /* varies */
50 };
51
52 #ifdef DEBUG
53 /*
54 * But first, the pointer-tracking stuff.
55 *
56 * NOTE: the pointer-tracking support in NSS/base currently relies
57 * upon NSPR's CallOnce support. That, however, relies upon NSPR's
58 * locking, which is tied into the runtime. We need a pointer-tracker
59 * implementation that uses the locks supplied through C_Initialize.
60 * That support, however, can be filled in later. So for now, I'll
61 * just do these routines as no-ops.
62 */
63
64 static CK_RV
65 findObjects_add_pointer
66 (
67 const NSSCKFWFindObjects *fwFindObjects
68 )
69 {
70 return CKR_OK;
71 }
72
73 static CK_RV
74 findObjects_remove_pointer
75 (
76 const NSSCKFWFindObjects *fwFindObjects
77 )
78 {
79 return CKR_OK;
80 }
81
82 NSS_IMPLEMENT CK_RV
83 nssCKFWFindObjects_verifyPointer
84 (
85 const NSSCKFWFindObjects *fwFindObjects
86 )
87 {
88 return CKR_OK;
89 }
90
91 #endif /* DEBUG */
92
93 /*
94 * nssCKFWFindObjects_Create
95 *
96 */
97 NSS_EXTERN NSSCKFWFindObjects *
98 nssCKFWFindObjects_Create
99 (
100 NSSCKFWSession *fwSession,
101 NSSCKFWToken *fwToken,
102 NSSCKFWInstance *fwInstance,
103 NSSCKMDFindObjects *mdFindObjects1,
104 NSSCKMDFindObjects *mdFindObjects2,
105 CK_RV *pError
106 )
107 {
108 NSSCKFWFindObjects *fwFindObjects = NULL;
109 NSSCKMDSession *mdSession;
110 NSSCKMDToken *mdToken;
111 NSSCKMDInstance *mdInstance;
112
113 mdSession = nssCKFWSession_GetMDSession(fwSession);
114 mdToken = nssCKFWToken_GetMDToken(fwToken);
115 mdInstance = nssCKFWInstance_GetMDInstance(fwInstance);
116
117 fwFindObjects = nss_ZNEW(NULL, NSSCKFWFindObjects);
118 if (!fwFindObjects) {
119 *pError = CKR_HOST_MEMORY;
120 goto loser;
121 }
122
123 fwFindObjects->mdfo1 = mdFindObjects1;
124 fwFindObjects->mdfo2 = mdFindObjects2;
125 fwFindObjects->fwSession = fwSession;
126 fwFindObjects->mdSession = mdSession;
127 fwFindObjects->fwToken = fwToken;
128 fwFindObjects->mdToken = mdToken;
129 fwFindObjects->fwInstance = fwInstance;
130 fwFindObjects->mdInstance = mdInstance;
131
132 fwFindObjects->mutex = nssCKFWInstance_CreateMutex(fwInstance, NULL, pError);
133 if (!fwFindObjects->mutex) {
134 goto loser;
135 }
136
137 #ifdef DEBUG
138 *pError = findObjects_add_pointer(fwFindObjects);
139 if( CKR_OK != *pError ) {
140 goto loser;
141 }
142 #endif /* DEBUG */
143
144 return fwFindObjects;
145
146 loser:
147 if( fwFindObjects ) {
148 if( NULL != mdFindObjects1 ) {
149 if( NULL != mdFindObjects1->Final ) {
150 fwFindObjects->mdFindObjects = mdFindObjects1;
151 mdFindObjects1->Final(mdFindObjects1, fwFindObjects, mdSession,
152 fwSession, mdToken, fwToken, mdInstance, fwInstance);
153 }
154 }
155
156 if( NULL != mdFindObjects2 ) {
157 if( NULL != mdFindObjects2->Final ) {
158 fwFindObjects->mdFindObjects = mdFindObjects2;
159 mdFindObjects2->Final(mdFindObjects2, fwFindObjects, mdSession,
160 fwSession, mdToken, fwToken, mdInstance, fwInstance);
161 }
162 }
163
164 nss_ZFreeIf(fwFindObjects);
165 }
166
167 if( CKR_OK == *pError ) {
168 *pError = CKR_GENERAL_ERROR;
169 }
170
171 return (NSSCKFWFindObjects *)NULL;
172 }
173
174
175 /*
176 * nssCKFWFindObjects_Destroy
177 *
178 */
179 NSS_EXTERN void
180 nssCKFWFindObjects_Destroy
181 (
182 NSSCKFWFindObjects *fwFindObjects
183 )
184 {
185 #ifdef NSSDEBUG
186 if( CKR_OK != nssCKFWFindObjects_verifyPointer(fwFindObjects) ) {
187 return;
188 }
189 #endif /* NSSDEBUG */
190
191 (void)nssCKFWMutex_Destroy(fwFindObjects->mutex);
192
193 if (fwFindObjects->mdfo1) {
194 if (fwFindObjects->mdfo1->Final) {
195 fwFindObjects->mdFindObjects = fwFindObjects->mdfo1;
196 fwFindObjects->mdfo1->Final(fwFindObjects->mdfo1, fwFindObjects,
197 fwFindObjects->mdSession, fwFindObjects->fwSession,
198 fwFindObjects->mdToken, fwFindObjects->fwToken,
199 fwFindObjects->mdInstance, fwFindObjects->fwInstance);
200 }
201 }
202
203 if (fwFindObjects->mdfo2) {
204 if (fwFindObjects->mdfo2->Final) {
205 fwFindObjects->mdFindObjects = fwFindObjects->mdfo2;
206 fwFindObjects->mdfo2->Final(fwFindObjects->mdfo2, fwFindObjects,
207 fwFindObjects->mdSession, fwFindObjects->fwSession,
208 fwFindObjects->mdToken, fwFindObjects->fwToken,
209 fwFindObjects->mdInstance, fwFindObjects->fwInstance);
210 }
211 }
212
213 nss_ZFreeIf(fwFindObjects);
214
215 #ifdef DEBUG
216 (void)findObjects_remove_pointer(fwFindObjects);
217 #endif /* DEBUG */
218
219 return;
220 }
221
222 /*
223 * nssCKFWFindObjects_GetMDFindObjects
224 *
225 */
226 NSS_EXTERN NSSCKMDFindObjects *
227 nssCKFWFindObjects_GetMDFindObjects
228 (
229 NSSCKFWFindObjects *fwFindObjects
230 )
231 {
232 #ifdef NSSDEBUG
233 if( CKR_OK != nssCKFWFindObjects_verifyPointer(fwFindObjects) ) {
234 return (NSSCKMDFindObjects *)NULL;
235 }
236 #endif /* NSSDEBUG */
237
238 return fwFindObjects->mdFindObjects;
239 }
240
241 /*
242 * nssCKFWFindObjects_Next
243 *
244 */
245 NSS_EXTERN NSSCKFWObject *
246 nssCKFWFindObjects_Next
247 (
248 NSSCKFWFindObjects *fwFindObjects,
249 NSSArena *arenaOpt,
250 CK_RV *pError
251 )
252 {
253 NSSCKMDObject *mdObject;
254 NSSCKFWObject *fwObject = (NSSCKFWObject *)NULL;
255 NSSArena *objArena;
256
257 #ifdef NSSDEBUG
258 if (!pError) {
259 return (NSSCKFWObject *)NULL;
260 }
261
262 *pError = nssCKFWFindObjects_verifyPointer(fwFindObjects);
263 if( CKR_OK != *pError ) {
264 return (NSSCKFWObject *)NULL;
265 }
266 #endif /* NSSDEBUG */
267
268 *pError = nssCKFWMutex_Lock(fwFindObjects->mutex);
269 if( CKR_OK != *pError ) {
270 return (NSSCKFWObject *)NULL;
271 }
272
273 if (fwFindObjects->mdfo1) {
274 if (fwFindObjects->mdfo1->Next) {
275 fwFindObjects->mdFindObjects = fwFindObjects->mdfo1;
276 mdObject = fwFindObjects->mdfo1->Next(fwFindObjects->mdfo1,
277 fwFindObjects, fwFindObjects->mdSession, fwFindObjects->fwSession,
278 fwFindObjects->mdToken, fwFindObjects->fwToken,
279 fwFindObjects->mdInstance, fwFindObjects->fwInstance,
280 arenaOpt, pError);
281 if (!mdObject) {
282 if( CKR_OK != *pError ) {
283 goto done;
284 }
285
286 /* All done. */
287 fwFindObjects->mdfo1->Final(fwFindObjects->mdfo1, fwFindObjects,
288 fwFindObjects->mdSession, fwFindObjects->fwSession,
289 fwFindObjects->mdToken, fwFindObjects->fwToken,
290 fwFindObjects->mdInstance, fwFindObjects->fwInstance);
291 fwFindObjects->mdfo1 = (NSSCKMDFindObjects *)NULL;
292 } else {
293 goto wrap;
294 }
295 }
296 }
297
298 if (fwFindObjects->mdfo2) {
299 if (fwFindObjects->mdfo2->Next) {
300 fwFindObjects->mdFindObjects = fwFindObjects->mdfo2;
301 mdObject = fwFindObjects->mdfo2->Next(fwFindObjects->mdfo2,
302 fwFindObjects, fwFindObjects->mdSession, fwFindObjects->fwSession,
303 fwFindObjects->mdToken, fwFindObjects->fwToken,
304 fwFindObjects->mdInstance, fwFindObjects->fwInstance,
305 arenaOpt, pError);
306 if (!mdObject) {
307 if( CKR_OK != *pError ) {
308 goto done;
309 }
310
311 /* All done. */
312 fwFindObjects->mdfo2->Final(fwFindObjects->mdfo2, fwFindObjects,
313 fwFindObjects->mdSession, fwFindObjects->fwSession,
314 fwFindObjects->mdToken, fwFindObjects->fwToken,
315 fwFindObjects->mdInstance, fwFindObjects->fwInstance);
316 fwFindObjects->mdfo2 = (NSSCKMDFindObjects *)NULL;
317 } else {
318 goto wrap;
319 }
320 }
321 }
322
323 /* No more objects */
324 *pError = CKR_OK;
325 goto done;
326
327 wrap:
328 /*
329 * This seems is less than ideal-- we should determine if it's a token
330 * object or a session object, and use the appropriate arena.
331 * But that duplicates logic in nssCKFWObject_IsTokenObject.
332 * Also we should lookup the real session the object was created on
333 * if the object was a session object... however this code is actually
334 * correct because nssCKFWObject_Create will return a cached version of
335 * the object from it's hash. This is necessary because 1) we don't want
336 * to create an arena style leak (where our arena grows with every search),
337 * and 2) we want the same object to always have the same ID. This means
338 * the only case the nssCKFWObject_Create() will need the objArena and the
339 * Session is in the case of token objects (session objects should already
340 * exist in the cache from their initial creation). So this code is correct,
341 * but it depends on nssCKFWObject_Create caching all objects.
342 */
343 objArena = nssCKFWToken_GetArena(fwFindObjects->fwToken, pError);
344 if (!objArena) {
345 if( CKR_OK == *pError ) {
346 *pError = CKR_HOST_MEMORY;
347 }
348 goto done;
349 }
350
351 fwObject = nssCKFWObject_Create(objArena, mdObject,
352 NULL, fwFindObjects->fwToken,
353 fwFindObjects->fwInstance, pError);
354 if (!fwObject) {
355 if( CKR_OK == *pError ) {
356 *pError = CKR_GENERAL_ERROR;
357 }
358 }
359
360 done:
361 (void)nssCKFWMutex_Unlock(fwFindObjects->mutex);
362 return fwObject;
363 }
364
365 /*
366 * NSSCKFWFindObjects_GetMDFindObjects
367 *
368 */
369
370 NSS_EXTERN NSSCKMDFindObjects *
371 NSSCKFWFindObjects_GetMDFindObjects
372 (
373 NSSCKFWFindObjects *fwFindObjects
374 )
375 {
376 #ifdef DEBUG
377 if( CKR_OK != nssCKFWFindObjects_verifyPointer(fwFindObjects) ) {
378 return (NSSCKMDFindObjects *)NULL;
379 }
380 #endif /* DEBUG */
381
382 return nssCKFWFindObjects_GetMDFindObjects(fwFindObjects);
383 }
OLDNEW
« no previous file with comments | « mozilla/security/nss/lib/ckfw/crypto.c ('k') | mozilla/security/nss/lib/ckfw/hash.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698