Thu, 22 Jan 2015 13:21:57 +0100
Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6
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/. */
5 #include "ckdbm.h"
7 static CK_RV
8 nss_dbm_mdInstance_Initialize
9 (
10 NSSCKMDInstance *mdInstance,
11 NSSCKFWInstance *fwInstance,
12 NSSUTF8 *configurationData
13 )
14 {
15 CK_RV rv = CKR_OK;
16 NSSArena *arena;
17 nss_dbm_instance_t *instance;
19 arena = NSSCKFWInstance_GetArena(fwInstance, &rv);
20 if( ((NSSArena *)NULL == arena) && (CKR_OK != rv) ) {
21 return rv;
22 }
24 instance = nss_ZNEW(arena, nss_dbm_instance_t);
25 if( (nss_dbm_instance_t *)NULL == instance ) {
26 return CKR_HOST_MEMORY;
27 }
29 instance->arena = arena;
31 /*
32 * This should parse the configuration data for information on
33 * number and locations of databases, modes (e.g. readonly), etc.
34 * But for now, we'll have one slot with a creatable read-write
35 * database called "cert8.db."
36 */
38 instance->nSlots = 1;
39 instance->filenames = nss_ZNEWARRAY(arena, char *, instance->nSlots);
40 if( (char **)NULL == instance->filenames ) {
41 return CKR_HOST_MEMORY;
42 }
44 instance->flags = nss_ZNEWARRAY(arena, int, instance->nSlots);
45 if( (int *)NULL == instance->flags ) {
46 return CKR_HOST_MEMORY;
47 }
49 instance->filenames[0] = "cert8.db";
50 instance->flags[0] = O_RDWR|O_CREAT;
52 mdInstance->etc = (void *)instance;
53 return CKR_OK;
54 }
56 /* nss_dbm_mdInstance_Finalize is not required */
58 static CK_ULONG
59 nss_dbm_mdInstance_GetNSlots
60 (
61 NSSCKMDInstance *mdInstance,
62 NSSCKFWInstance *fwInstance,
63 CK_RV *pError
64 )
65 {
66 nss_dbm_instance_t *instance = (nss_dbm_instance_t *)mdInstance->etc;
67 return instance->nSlots;
68 }
70 static CK_VERSION
71 nss_dbm_mdInstance_GetCryptokiVersion
72 (
73 NSSCKMDInstance *mdInstance,
74 NSSCKFWInstance *fwInstance
75 )
76 {
77 static CK_VERSION rv = { 2, 1 };
78 return rv;
79 }
81 static NSSUTF8 *
82 nss_dbm_mdInstance_GetManufacturerID
83 (
84 NSSCKMDInstance *mdInstance,
85 NSSCKFWInstance *fwInstance,
86 CK_RV *pError
87 )
88 {
89 return "Mozilla Foundation";
90 }
92 static NSSUTF8 *
93 nss_dbm_mdInstance_GetLibraryDescription
94 (
95 NSSCKMDInstance *mdInstance,
96 NSSCKFWInstance *fwInstance,
97 CK_RV *pError
98 )
99 {
100 return "Berkeley Database Module";
101 }
103 static CK_VERSION
104 nss_dbm_mdInstance_GetLibraryVersion
105 (
106 NSSCKMDInstance *mdInstance,
107 NSSCKFWInstance *fwInstance
108 )
109 {
110 static CK_VERSION rv = { 1, 0 }; /* My own version number */
111 return rv;
112 }
114 static CK_BBOOL
115 nss_dbm_mdInstance_ModuleHandlesSessionObjects
116 (
117 NSSCKMDInstance *mdInstance,
118 NSSCKFWInstance *fwInstance
119 )
120 {
121 return CK_TRUE;
122 }
124 static CK_RV
125 nss_dbm_mdInstance_GetSlots
126 (
127 NSSCKMDInstance *mdInstance,
128 NSSCKFWInstance *fwInstance,
129 NSSCKMDSlot *slots[]
130 )
131 {
132 nss_dbm_instance_t *instance = (nss_dbm_instance_t *)mdInstance->etc;
133 CK_ULONG i;
134 CK_RV rv = CKR_OK;
136 for( i = 0; i < instance->nSlots; i++ ) {
137 slots[i] = nss_dbm_mdSlot_factory(instance, instance->filenames[i],
138 instance->flags[i], &rv);
139 if( (NSSCKMDSlot *)NULL == slots[i] ) {
140 return rv;
141 }
142 }
144 return rv;
145 }
147 /* nss_dbm_mdInstance_WaitForSlotEvent is not relevant */
149 NSS_IMPLEMENT_DATA NSSCKMDInstance
150 nss_dbm_mdInstance = {
151 NULL, /* etc; filled in later */
152 nss_dbm_mdInstance_Initialize,
153 NULL, /* nss_dbm_mdInstance_Finalize */
154 nss_dbm_mdInstance_GetNSlots,
155 nss_dbm_mdInstance_GetCryptokiVersion,
156 nss_dbm_mdInstance_GetManufacturerID,
157 nss_dbm_mdInstance_GetLibraryDescription,
158 nss_dbm_mdInstance_GetLibraryVersion,
159 nss_dbm_mdInstance_ModuleHandlesSessionObjects,
160 nss_dbm_mdInstance_GetSlots,
161 NULL, /* nss_dbm_mdInstance_WaitForSlotEvent */
162 NULL /* terminator */
163 };