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