security/nss/lib/ckfw/dbm/instance.c

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

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

mercurial