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

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     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_mdSlot_Initialize
     9 (
    10   NSSCKMDSlot *mdSlot,
    11   NSSCKFWSlot *fwSlot,
    12   NSSCKMDInstance *mdInstance,                                    
    13   NSSCKFWInstance *fwInstance
    14 )
    15 {
    16   nss_dbm_slot_t *slot = (nss_dbm_slot_t *)mdSlot->etc;
    17   nss_dbm_instance_t *instance = (nss_dbm_instance_t *)mdInstance->etc;
    18   CK_RV rv = CKR_OK;
    20   slot->token_db = nss_dbm_db_open(instance->arena, fwInstance, slot->filename, 
    21                                    slot->flags, &rv);
    22   if( (nss_dbm_db_t *)NULL == slot->token_db ) {
    23     if( CKR_TOKEN_NOT_PRESENT == rv ) {
    24       /* This is not an error-- just means "the token isn't there" */
    25       rv = CKR_OK;
    26     }
    27   }
    29   return rv;
    30 }
    32 static void
    33 nss_dbm_mdSlot_Destroy
    34 (
    35   NSSCKMDSlot *mdSlot,
    36   NSSCKFWSlot *fwSlot,
    37   NSSCKMDInstance *mdInstance,                                    
    38   NSSCKFWInstance *fwInstance
    39 )
    40 {
    41   nss_dbm_slot_t *slot = (nss_dbm_slot_t *)mdSlot->etc;
    43   if( (nss_dbm_db_t *)NULL != slot->token_db ) {
    44     nss_dbm_db_close(slot->token_db);
    45     slot->token_db = (nss_dbm_db_t *)NULL;
    46   }
    47 }
    49 static NSSUTF8 *
    50 nss_dbm_mdSlot_GetSlotDescription
    51 (
    52   NSSCKMDSlot *mdSlot,
    53   NSSCKFWSlot *fwSlot,
    54   NSSCKMDInstance *mdInstance,                                    
    55   NSSCKFWInstance *fwInstance,
    56   CK_RV *pError
    57 )
    58 {
    59   return "Database";
    60 }
    62 static NSSUTF8 *
    63 nss_dbm_mdSlot_GetManufacturerID
    64 (
    65   NSSCKMDSlot *mdSlot,
    66   NSSCKFWSlot *fwSlot,
    67   NSSCKMDInstance *mdInstance,                                    
    68   NSSCKFWInstance *fwInstance,
    69   CK_RV *pError
    70 )
    71 {
    72   return "Berkeley";
    73 }
    75 static CK_BBOOL
    76 nss_dbm_mdSlot_GetTokenPresent
    77 (
    78   NSSCKMDSlot *mdSlot,
    79   NSSCKFWSlot *fwSlot,
    80   NSSCKMDInstance *mdInstance,                                    
    81   NSSCKFWInstance *fwInstance
    82 )
    83 {
    84   nss_dbm_slot_t *slot = (nss_dbm_slot_t *)mdSlot->etc;
    86   if( (nss_dbm_db_t *)NULL == slot->token_db ) {
    87     return CK_FALSE;
    88   } else {
    89     return CK_TRUE;
    90   }
    91 }
    93 static CK_BBOOL
    94 nss_dbm_mdSlot_GetRemovableDevice
    95 (
    96   NSSCKMDSlot *mdSlot,
    97   NSSCKFWSlot *fwSlot,
    98   NSSCKMDInstance *mdInstance,                                    
    99   NSSCKFWInstance *fwInstance
   100 )
   101 {
   102   /*
   103    * Well, this supports "tokens" (databases) that aren't there, so in
   104    * that sense they're removable.  It'd be nice to handle databases
   105    * that suddenly disappear (NFS-mounted home directories and network
   106    * errors, for instance) but that's a harder problem.  We'll say
   107    * we support removable devices, badly.
   108    */
   110   return CK_TRUE;
   111 }
   113 /* nss_dbm_mdSlot_GetHardwareSlot defaults to CK_FALSE */
   114 /* 
   115  * nss_dbm_mdSlot_GetHardwareVersion
   116  * nss_dbm_mdSlot_GetFirmwareVersion
   117  *
   118  * These are kinda fuzzy concepts here.  I suppose we could return the
   119  * Berkeley DB version for one of them, if we had an actual number we
   120  * were confident in.  But mcom's "dbm" has been hacked enough that I
   121  * don't really know from what "real" version it stems..
   122  */
   124 static NSSCKMDToken *
   125 nss_dbm_mdSlot_GetToken
   126 (
   127   NSSCKMDSlot *mdSlot,
   128   NSSCKFWSlot *fwSlot,
   129   NSSCKMDInstance *mdInstance,                                    
   130   NSSCKFWInstance *fwInstance,
   131   CK_RV *pError
   132 )
   133 {
   134   nss_dbm_slot_t *slot = (nss_dbm_slot_t *)mdSlot->etc;
   135   return nss_dbm_mdToken_factory(slot, pError);
   136 }
   138 NSS_IMPLEMENT NSSCKMDSlot *
   139 nss_dbm_mdSlot_factory
   140 (
   141   nss_dbm_instance_t *instance,
   142   char *filename,
   143   int flags,
   144   CK_RV *pError
   145 )
   146 {
   147   nss_dbm_slot_t *slot;
   148   NSSCKMDSlot *rv;
   150   slot = nss_ZNEW(instance->arena, nss_dbm_slot_t);
   151   if( (nss_dbm_slot_t *)NULL == slot ) {
   152     *pError = CKR_HOST_MEMORY;
   153     return (NSSCKMDSlot *)NULL;
   154   }
   156   slot->instance = instance;
   157   slot->filename = filename;
   158   slot->flags = flags;
   159   slot->token_db = (nss_dbm_db_t *)NULL;
   161   rv = nss_ZNEW(instance->arena, NSSCKMDSlot);
   162   if( (NSSCKMDSlot *)NULL == rv ) {
   163     *pError = CKR_HOST_MEMORY;
   164     return (NSSCKMDSlot *)NULL;
   165   }
   167   rv->etc = (void *)slot;
   168   rv->Initialize = nss_dbm_mdSlot_Initialize;
   169   rv->Destroy = nss_dbm_mdSlot_Destroy;
   170   rv->GetSlotDescription = nss_dbm_mdSlot_GetSlotDescription;
   171   rv->GetManufacturerID = nss_dbm_mdSlot_GetManufacturerID;
   172   rv->GetTokenPresent = nss_dbm_mdSlot_GetTokenPresent;
   173   rv->GetRemovableDevice = nss_dbm_mdSlot_GetRemovableDevice;
   174   /*  GetHardwareSlot */
   175   /*  GetHardwareVersion */
   176   /*  GetFirmwareVersion */
   177   rv->GetToken = nss_dbm_mdSlot_GetToken;
   178   rv->null = (void *)NULL;
   180   return rv;
   181 }

mercurial