michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #include "ckdbm.h" michael@0: michael@0: static CK_RV michael@0: nss_dbm_mdInstance_Initialize michael@0: ( michael@0: NSSCKMDInstance *mdInstance, michael@0: NSSCKFWInstance *fwInstance, michael@0: NSSUTF8 *configurationData michael@0: ) michael@0: { michael@0: CK_RV rv = CKR_OK; michael@0: NSSArena *arena; michael@0: nss_dbm_instance_t *instance; michael@0: michael@0: arena = NSSCKFWInstance_GetArena(fwInstance, &rv); michael@0: if( ((NSSArena *)NULL == arena) && (CKR_OK != rv) ) { michael@0: return rv; michael@0: } michael@0: michael@0: instance = nss_ZNEW(arena, nss_dbm_instance_t); michael@0: if( (nss_dbm_instance_t *)NULL == instance ) { michael@0: return CKR_HOST_MEMORY; michael@0: } michael@0: michael@0: instance->arena = arena; michael@0: michael@0: /* michael@0: * This should parse the configuration data for information on michael@0: * number and locations of databases, modes (e.g. readonly), etc. michael@0: * But for now, we'll have one slot with a creatable read-write michael@0: * database called "cert8.db." michael@0: */ michael@0: michael@0: instance->nSlots = 1; michael@0: instance->filenames = nss_ZNEWARRAY(arena, char *, instance->nSlots); michael@0: if( (char **)NULL == instance->filenames ) { michael@0: return CKR_HOST_MEMORY; michael@0: } michael@0: michael@0: instance->flags = nss_ZNEWARRAY(arena, int, instance->nSlots); michael@0: if( (int *)NULL == instance->flags ) { michael@0: return CKR_HOST_MEMORY; michael@0: } michael@0: michael@0: instance->filenames[0] = "cert8.db"; michael@0: instance->flags[0] = O_RDWR|O_CREAT; michael@0: michael@0: mdInstance->etc = (void *)instance; michael@0: return CKR_OK; michael@0: } michael@0: michael@0: /* nss_dbm_mdInstance_Finalize is not required */ michael@0: michael@0: static CK_ULONG michael@0: nss_dbm_mdInstance_GetNSlots michael@0: ( michael@0: NSSCKMDInstance *mdInstance, michael@0: NSSCKFWInstance *fwInstance, michael@0: CK_RV *pError michael@0: ) michael@0: { michael@0: nss_dbm_instance_t *instance = (nss_dbm_instance_t *)mdInstance->etc; michael@0: return instance->nSlots; michael@0: } michael@0: michael@0: static CK_VERSION michael@0: nss_dbm_mdInstance_GetCryptokiVersion michael@0: ( michael@0: NSSCKMDInstance *mdInstance, michael@0: NSSCKFWInstance *fwInstance michael@0: ) michael@0: { michael@0: static CK_VERSION rv = { 2, 1 }; michael@0: return rv; michael@0: } michael@0: michael@0: static NSSUTF8 * michael@0: nss_dbm_mdInstance_GetManufacturerID michael@0: ( michael@0: NSSCKMDInstance *mdInstance, michael@0: NSSCKFWInstance *fwInstance, michael@0: CK_RV *pError michael@0: ) michael@0: { michael@0: return "Mozilla Foundation"; michael@0: } michael@0: michael@0: static NSSUTF8 * michael@0: nss_dbm_mdInstance_GetLibraryDescription michael@0: ( michael@0: NSSCKMDInstance *mdInstance, michael@0: NSSCKFWInstance *fwInstance, michael@0: CK_RV *pError michael@0: ) michael@0: { michael@0: return "Berkeley Database Module"; michael@0: } michael@0: michael@0: static CK_VERSION michael@0: nss_dbm_mdInstance_GetLibraryVersion michael@0: ( michael@0: NSSCKMDInstance *mdInstance, michael@0: NSSCKFWInstance *fwInstance michael@0: ) michael@0: { michael@0: static CK_VERSION rv = { 1, 0 }; /* My own version number */ michael@0: return rv; michael@0: } michael@0: michael@0: static CK_BBOOL michael@0: nss_dbm_mdInstance_ModuleHandlesSessionObjects michael@0: ( michael@0: NSSCKMDInstance *mdInstance, michael@0: NSSCKFWInstance *fwInstance michael@0: ) michael@0: { michael@0: return CK_TRUE; michael@0: } michael@0: michael@0: static CK_RV michael@0: nss_dbm_mdInstance_GetSlots michael@0: ( michael@0: NSSCKMDInstance *mdInstance, michael@0: NSSCKFWInstance *fwInstance, michael@0: NSSCKMDSlot *slots[] michael@0: ) michael@0: { michael@0: nss_dbm_instance_t *instance = (nss_dbm_instance_t *)mdInstance->etc; michael@0: CK_ULONG i; michael@0: CK_RV rv = CKR_OK; michael@0: michael@0: for( i = 0; i < instance->nSlots; i++ ) { michael@0: slots[i] = nss_dbm_mdSlot_factory(instance, instance->filenames[i], michael@0: instance->flags[i], &rv); michael@0: if( (NSSCKMDSlot *)NULL == slots[i] ) { michael@0: return rv; michael@0: } michael@0: } michael@0: michael@0: return rv; michael@0: } michael@0: michael@0: /* nss_dbm_mdInstance_WaitForSlotEvent is not relevant */ michael@0: michael@0: NSS_IMPLEMENT_DATA NSSCKMDInstance michael@0: nss_dbm_mdInstance = { michael@0: NULL, /* etc; filled in later */ michael@0: nss_dbm_mdInstance_Initialize, michael@0: NULL, /* nss_dbm_mdInstance_Finalize */ michael@0: nss_dbm_mdInstance_GetNSlots, michael@0: nss_dbm_mdInstance_GetCryptokiVersion, michael@0: nss_dbm_mdInstance_GetManufacturerID, michael@0: nss_dbm_mdInstance_GetLibraryDescription, michael@0: nss_dbm_mdInstance_GetLibraryVersion, michael@0: nss_dbm_mdInstance_ModuleHandlesSessionObjects, michael@0: nss_dbm_mdInstance_GetSlots, michael@0: NULL, /* nss_dbm_mdInstance_WaitForSlotEvent */ michael@0: NULL /* terminator */ michael@0: };