Ejemplo n.º 1
0
static CK_RV
nss_dbm_mdToken_InitToken
(
  NSSCKMDToken *mdToken,
  NSSCKFWToken *fwToken,
  NSSCKMDInstance *mdInstance,
  NSSCKFWInstance *fwInstance,
  NSSItem *pin,
  NSSUTF8 *label
)
{
  nss_dbm_token_t *token = (nss_dbm_token_t *)mdToken->etc;
  nss_dbm_instance_t *instance = (nss_dbm_instance_t *)mdInstance->etc;
  CK_RV rv;

  /* Wipe the session object data */
  
  if( (nss_dbm_db_t *)NULL != token->session_db ) {
    nss_dbm_db_close(token->session_db);
  }

  token->session_db = nss_dbm_db_open(token->arena, fwInstance, (char *)NULL, 
                                      O_RDWR|O_CREAT, &rv);
  if( (nss_dbm_db_t *)NULL == token->session_db ) {
    return rv;
  }

  /* Wipe the token object data */

  if( token->slot->flags & O_RDWR ) {
    if( (nss_dbm_db_t *)NULL != token->slot->token_db ) {
      nss_dbm_db_close(token->slot->token_db);
    }

    token->slot->token_db = nss_dbm_db_open(instance->arena, fwInstance, 
                                            token->slot->filename,
                                            token->slot->flags | O_CREAT | O_TRUNC, 
                                            &rv);
    if( (nss_dbm_db_t *)NULL == token->slot->token_db ) {
      return rv;
    }

    /* PIN is irrelevant */

    rv = nss_dbm_db_set_label(token->slot->token_db, label);
    if( CKR_OK != rv ) {
      return rv;
    }
  }

  return CKR_OK;
}
Ejemplo n.º 2
0
static CK_RV
nss_dbm_mdToken_Setup(
    NSSCKMDToken *mdToken,
    NSSCKFWToken *fwToken,
    NSSCKMDInstance *mdInstance,
    NSSCKFWInstance *fwInstance)
{
    nss_dbm_token_t *token = (nss_dbm_token_t *)mdToken->etc;
    CK_RV rv = CKR_OK;

    token->arena = NSSCKFWToken_GetArena(fwToken, &rv);
    token->session_db = nss_dbm_db_open(token->arena, fwInstance, (char *)NULL,
                                        O_RDWR | O_CREAT, &rv);
    if ((nss_dbm_db_t *)NULL == token->session_db) {
        return rv;
    }

    /* Add a label record if there isn't one? */

    return CKR_OK;
}
Ejemplo n.º 3
0
static CK_RV
nss_dbm_mdSlot_Initialize
(
    NSSCKMDSlot *mdSlot,
    NSSCKFWSlot *fwSlot,
    NSSCKMDInstance *mdInstance,
    NSSCKFWInstance *fwInstance
)
{
    nss_dbm_slot_t *slot = (nss_dbm_slot_t *)mdSlot->etc;
    nss_dbm_instance_t *instance = (nss_dbm_instance_t *)mdInstance->etc;
    CK_RV rv = CKR_OK;

    slot->token_db = nss_dbm_db_open(instance->arena, fwInstance, slot->filename,
                                     slot->flags, &rv);
    if( (nss_dbm_db_t *)NULL == slot->token_db ) {
        if( CKR_TOKEN_NOT_PRESENT == rv ) {
            /* This is not an error-- just means "the token isn't there" */
            rv = CKR_OK;
        }
    }

    return rv;
}