Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Firefox/security/nss/lib/ckfw/dbm/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 4 kB image not shown  

Quelle  slot.c   Sprache: C

 
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */


#include "ckdbm.h"

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

static void
nss_dbm_mdSlot_Destroy(
    NSSCKMDSlot *mdSlot,
    NSSCKFWSlot *fwSlot,
    NSSCKMDInstance *mdInstance,
    NSSCKFWInstance *fwInstance)
{
    nss_dbm_slot_t *slot = (nss_dbm_slot_t *)mdSlot->etc;

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

static NSSUTF8 *
nss_dbm_mdSlot_GetSlotDescription(
    NSSCKMDSlot *mdSlot,
    NSSCKFWSlot *fwSlot,
    NSSCKMDInstance *mdInstance,
    NSSCKFWInstance *fwInstance,
    CK_RV *pError)
{
    return "Database";
}

static NSSUTF8 *
nss_dbm_mdSlot_GetManufacturerID(
    NSSCKMDSlot *mdSlot,
    NSSCKFWSlot *fwSlot,
    NSSCKMDInstance *mdInstance,
    NSSCKFWInstance *fwInstance,
    CK_RV *pError)
{
    return "Berkeley";
}

static CK_BBOOL
nss_dbm_mdSlot_GetTokenPresent(
    NSSCKMDSlot *mdSlot,
    NSSCKFWSlot *fwSlot,
    NSSCKMDInstance *mdInstance,
    NSSCKFWInstance *fwInstance)
{
    nss_dbm_slot_t *slot = (nss_dbm_slot_t *)mdSlot->etc;

    if ((nss_dbm_db_t *)NULL == slot->token_db) {
        return CK_FALSE;
    } else {
        return CK_TRUE;
    }
}

static CK_BBOOL
nss_dbm_mdSlot_GetRemovableDevice(
    NSSCKMDSlot *mdSlot,
    NSSCKFWSlot *fwSlot,
    NSSCKMDInstance *mdInstance,
    NSSCKFWInstance *fwInstance)
{
    /*
     * Well, this supports "tokens" (databases) that aren't there, so in
     * that sense they're removable.  It'd be nice to handle databases
     * that suddenly disappear (NFS-mounted home directories and network
     * errors, for instance) but that's a harder problem.  We'll say
     * we support removable devices, badly.
     */


    return CK_TRUE;
}

/* nss_dbm_mdSlot_GetHardwareSlot defaults to CK_FALSE */
/*
 * nss_dbm_mdSlot_GetHardwareVersion
 * nss_dbm_mdSlot_GetFirmwareVersion
 *
 * These are kinda fuzzy concepts here.  I suppose we could return the
 * Berkeley DB version for one of them, if we had an actual number we
 * were confident in.  But mcom's "dbm" has been hacked enough that I
 * don't really know from what "real" version it stems..
 */


static NSSCKMDToken *
nss_dbm_mdSlot_GetToken(
    NSSCKMDSlot *mdSlot,
    NSSCKFWSlot *fwSlot,
    NSSCKMDInstance *mdInstance,
    NSSCKFWInstance *fwInstance,
    CK_RV *pError)
{
    nss_dbm_slot_t *slot = (nss_dbm_slot_t *)mdSlot->etc;
    return nss_dbm_mdToken_factory(slot, pError);
}

NSS_IMPLEMENT NSSCKMDSlot *
nss_dbm_mdSlot_factory(
    nss_dbm_instance_t *instance,
    char *filename,
    int flags,
    CK_RV *pError)
{
    nss_dbm_slot_t *slot;
    NSSCKMDSlot *rv;

    slot = nss_ZNEW(instance->arena, nss_dbm_slot_t);
    if ((nss_dbm_slot_t *)NULL == slot) {
        *pError = CKR_HOST_MEMORY;
        return (NSSCKMDSlot *)NULL;
    }

    slot->instance = instance;
    slot->filename = filename;
    slot->flags = flags;
    slot->token_db = (nss_dbm_db_t *)NULL;

    rv = nss_ZNEW(instance->arena, NSSCKMDSlot);
    if ((NSSCKMDSlot *)NULL == rv) {
        *pError = CKR_HOST_MEMORY;
        return (NSSCKMDSlot *)NULL;
    }

    rv->etc = (void *)slot;
    rv->Initialize = nss_dbm_mdSlot_Initialize;
    rv->Destroy = nss_dbm_mdSlot_Destroy;
    rv->GetSlotDescription = nss_dbm_mdSlot_GetSlotDescription;
    rv->GetManufacturerID = nss_dbm_mdSlot_GetManufacturerID;
    rv->GetTokenPresent = nss_dbm_mdSlot_GetTokenPresent;
    rv->GetRemovableDevice = nss_dbm_mdSlot_GetRemovableDevice;
    /*  GetHardwareSlot */
    /*  GetHardwareVersion */
    /*  GetFirmwareVersion */
    rv->GetToken = nss_dbm_mdSlot_GetToken;
    rv->null = (void *)NULL;

    return rv;
}

Messung V0.5
C=96 H=100 G=97

¤ Dauer der Verarbeitung: 0.24 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.