1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/security/nss/lib/ckfw/dbm/instance.c Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,163 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +#include "ckdbm.h" 1.9 + 1.10 +static CK_RV 1.11 +nss_dbm_mdInstance_Initialize 1.12 +( 1.13 + NSSCKMDInstance *mdInstance, 1.14 + NSSCKFWInstance *fwInstance, 1.15 + NSSUTF8 *configurationData 1.16 +) 1.17 +{ 1.18 + CK_RV rv = CKR_OK; 1.19 + NSSArena *arena; 1.20 + nss_dbm_instance_t *instance; 1.21 + 1.22 + arena = NSSCKFWInstance_GetArena(fwInstance, &rv); 1.23 + if( ((NSSArena *)NULL == arena) && (CKR_OK != rv) ) { 1.24 + return rv; 1.25 + } 1.26 + 1.27 + instance = nss_ZNEW(arena, nss_dbm_instance_t); 1.28 + if( (nss_dbm_instance_t *)NULL == instance ) { 1.29 + return CKR_HOST_MEMORY; 1.30 + } 1.31 + 1.32 + instance->arena = arena; 1.33 + 1.34 + /* 1.35 + * This should parse the configuration data for information on 1.36 + * number and locations of databases, modes (e.g. readonly), etc. 1.37 + * But for now, we'll have one slot with a creatable read-write 1.38 + * database called "cert8.db." 1.39 + */ 1.40 + 1.41 + instance->nSlots = 1; 1.42 + instance->filenames = nss_ZNEWARRAY(arena, char *, instance->nSlots); 1.43 + if( (char **)NULL == instance->filenames ) { 1.44 + return CKR_HOST_MEMORY; 1.45 + } 1.46 + 1.47 + instance->flags = nss_ZNEWARRAY(arena, int, instance->nSlots); 1.48 + if( (int *)NULL == instance->flags ) { 1.49 + return CKR_HOST_MEMORY; 1.50 + } 1.51 + 1.52 + instance->filenames[0] = "cert8.db"; 1.53 + instance->flags[0] = O_RDWR|O_CREAT; 1.54 + 1.55 + mdInstance->etc = (void *)instance; 1.56 + return CKR_OK; 1.57 +} 1.58 + 1.59 +/* nss_dbm_mdInstance_Finalize is not required */ 1.60 + 1.61 +static CK_ULONG 1.62 +nss_dbm_mdInstance_GetNSlots 1.63 +( 1.64 + NSSCKMDInstance *mdInstance, 1.65 + NSSCKFWInstance *fwInstance, 1.66 + CK_RV *pError 1.67 +) 1.68 +{ 1.69 + nss_dbm_instance_t *instance = (nss_dbm_instance_t *)mdInstance->etc; 1.70 + return instance->nSlots; 1.71 +} 1.72 + 1.73 +static CK_VERSION 1.74 +nss_dbm_mdInstance_GetCryptokiVersion 1.75 +( 1.76 + NSSCKMDInstance *mdInstance, 1.77 + NSSCKFWInstance *fwInstance 1.78 +) 1.79 +{ 1.80 + static CK_VERSION rv = { 2, 1 }; 1.81 + return rv; 1.82 +} 1.83 + 1.84 +static NSSUTF8 * 1.85 +nss_dbm_mdInstance_GetManufacturerID 1.86 +( 1.87 + NSSCKMDInstance *mdInstance, 1.88 + NSSCKFWInstance *fwInstance, 1.89 + CK_RV *pError 1.90 +) 1.91 +{ 1.92 + return "Mozilla Foundation"; 1.93 +} 1.94 + 1.95 +static NSSUTF8 * 1.96 +nss_dbm_mdInstance_GetLibraryDescription 1.97 +( 1.98 + NSSCKMDInstance *mdInstance, 1.99 + NSSCKFWInstance *fwInstance, 1.100 + CK_RV *pError 1.101 +) 1.102 +{ 1.103 + return "Berkeley Database Module"; 1.104 +} 1.105 + 1.106 +static CK_VERSION 1.107 +nss_dbm_mdInstance_GetLibraryVersion 1.108 +( 1.109 + NSSCKMDInstance *mdInstance, 1.110 + NSSCKFWInstance *fwInstance 1.111 +) 1.112 +{ 1.113 + static CK_VERSION rv = { 1, 0 }; /* My own version number */ 1.114 + return rv; 1.115 +} 1.116 + 1.117 +static CK_BBOOL 1.118 +nss_dbm_mdInstance_ModuleHandlesSessionObjects 1.119 +( 1.120 + NSSCKMDInstance *mdInstance, 1.121 + NSSCKFWInstance *fwInstance 1.122 +) 1.123 +{ 1.124 + return CK_TRUE; 1.125 +} 1.126 + 1.127 +static CK_RV 1.128 +nss_dbm_mdInstance_GetSlots 1.129 +( 1.130 + NSSCKMDInstance *mdInstance, 1.131 + NSSCKFWInstance *fwInstance, 1.132 + NSSCKMDSlot *slots[] 1.133 +) 1.134 +{ 1.135 + nss_dbm_instance_t *instance = (nss_dbm_instance_t *)mdInstance->etc; 1.136 + CK_ULONG i; 1.137 + CK_RV rv = CKR_OK; 1.138 + 1.139 + for( i = 0; i < instance->nSlots; i++ ) { 1.140 + slots[i] = nss_dbm_mdSlot_factory(instance, instance->filenames[i], 1.141 + instance->flags[i], &rv); 1.142 + if( (NSSCKMDSlot *)NULL == slots[i] ) { 1.143 + return rv; 1.144 + } 1.145 + } 1.146 + 1.147 + return rv; 1.148 +} 1.149 + 1.150 +/* nss_dbm_mdInstance_WaitForSlotEvent is not relevant */ 1.151 + 1.152 +NSS_IMPLEMENT_DATA NSSCKMDInstance 1.153 +nss_dbm_mdInstance = { 1.154 + NULL, /* etc; filled in later */ 1.155 + nss_dbm_mdInstance_Initialize, 1.156 + NULL, /* nss_dbm_mdInstance_Finalize */ 1.157 + nss_dbm_mdInstance_GetNSlots, 1.158 + nss_dbm_mdInstance_GetCryptokiVersion, 1.159 + nss_dbm_mdInstance_GetManufacturerID, 1.160 + nss_dbm_mdInstance_GetLibraryDescription, 1.161 + nss_dbm_mdInstance_GetLibraryVersion, 1.162 + nss_dbm_mdInstance_ModuleHandlesSessionObjects, 1.163 + nss_dbm_mdInstance_GetSlots, 1.164 + NULL, /* nss_dbm_mdInstance_WaitForSlotEvent */ 1.165 + NULL /* terminator */ 1.166 +};