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