tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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    };