Blame usr/sbin/pkcsslotd/pkcsslotd_util.c

Packit 8681c6
/*
Packit 8681c6
 * This program is provided under the terms of the Common Public License,
Packit 8681c6
 * version 1.0 (CPL-1.0). Any use, reproduction or distribution for this
Packit 8681c6
 * software constitutes recipient's acceptance of CPL-1.0 terms which can be
Packit 8681c6
 * found in the file LICENSE file or at
Packit 8681c6
 * https://opensource.org/licenses/cpl1.0.php
Packit 8681c6
 */
Packit 8681c6
Packit 8681c6
/* (C) COPYRIGHT Google Inc. 2013 */
Packit 8681c6
Packit 8681c6
#include <stdlib.h>
Packit 8681c6
#include <string.h>
Packit 8681c6
#include <stdio.h>
Packit 8681c6
Packit 8681c6
#include "slotmgr.h"
Packit 8681c6
#include "log.h"
Packit 8681c6
#include "pkcsslotd.h"
Packit 8681c6
Packit 8681c6
void PopulateCKInfo(CK_INFO_PTR_64 ckinf)
Packit 8681c6
{
Packit 8681c6
    CK_VERSION_PTR ckver;
Packit 8681c6
    char *package_version_tmp;
Packit 8681c6
    char *tok_str;
Packit 8681c6
    CK_BYTE lib_major;
Packit 8681c6
    CK_BYTE lib_minor;
Packit 8681c6
Packit 8681c6
    ckver = &(ckinf->cryptokiVersion);
Packit 8681c6
Packit 8681c6
    ckver->major = CRYPTOKI_API_MAJOR_V;
Packit 8681c6
    ckver->minor = CRYPTOKI_API_MINOR_V;
Packit 8681c6
Packit 8681c6
    memset(ckinf->manufacturerID, ' ', sizeof(ckinf->manufacturerID));
Packit 8681c6
    memset(ckinf->libraryDescription, ' ', sizeof(ckinf->libraryDescription));
Packit 8681c6
Packit 8681c6
    memcpy(ckinf->manufacturerID, MFG, strlen(MFG));
Packit 8681c6
    memcpy(ckinf->libraryDescription, LIB, strlen(LIB));
Packit 8681c6
Packit 8681c6
    ckver = &(ckinf->libraryVersion);
Packit 8681c6
Packit 8681c6
    ckver->major = LIB_MAJOR_V;
Packit 8681c6
    ckver->minor = LIB_MINOR_V;
Packit 8681c6
Packit 8681c6
#ifdef PACKAGE_VERSION
Packit 8681c6
    package_version_tmp = malloc(strlen(PACKAGE_VERSION) + 1);
Packit 8681c6
    if (package_version_tmp) {
Packit 8681c6
        strcpy(package_version_tmp, PACKAGE_VERSION);
Packit 8681c6
        tok_str = strtok(package_version_tmp, ".");
Packit 8681c6
        if (tok_str) {
Packit 8681c6
            lib_major = (CK_BYTE) atoi(tok_str);
Packit 8681c6
            tok_str = strtok(NULL, ".");
Packit 8681c6
            if (tok_str) {
Packit 8681c6
                lib_minor = (CK_BYTE) atoi(tok_str);
Packit 8681c6
                ckver->major = lib_major;
Packit 8681c6
                ckver->minor = lib_minor;
Packit 8681c6
            }
Packit 8681c6
        }
Packit 8681c6
        free(package_version_tmp);
Packit 8681c6
    }
Packit 8681c6
#endif
Packit 8681c6
Packit 8681c6
}
Packit 8681c6
Packit 8681c6
void PopulateSlotInfo(Slot_Info_t_64 *slot_info, unsigned int *processed)
Packit 8681c6
{
Packit 8681c6
    CK_SLOT_ID id;
Packit 8681c6
    unsigned int slot_count = 0;
Packit 8681c6
Packit 8681c6
    /*
Packit 8681c6
     *  populate the Slot entries...
Packit 8681c6
     */
Packit 8681c6
Packit 8681c6
    for (id = 0; id < NUMBER_SLOTS_MANAGED; id++) {
Packit 8681c6
Packit 8681c6
        if (sinfo[id].present == FALSE) {
Packit 8681c6
            /* skip empty slots and just note the slot number */
Packit 8681c6
            slot_info[id].slot_number = id;
Packit 8681c6
        } else {
Packit 8681c6
            slot_info[id].slot_number = sinfo[id].slot_number;
Packit 8681c6
            slot_info[id].present = sinfo[id].present;
Packit 8681c6
            slot_info[id].pk_slot.flags = sinfo[id].pk_slot.flags;
Packit 8681c6
Packit 8681c6
            memcpy(slot_info[id].dll_location,
Packit 8681c6
                   sinfo[id].dll_location, strlen(sinfo[id].dll_location));
Packit 8681c6
Packit 8681c6
            memcpy(slot_info[id].confname, sinfo[id].confname,
Packit 8681c6
                   strlen(sinfo[id].confname));
Packit 8681c6
Packit 8681c6
            memcpy(slot_info[id].tokname, sinfo[id].tokname,
Packit 8681c6
                   strlen(sinfo[id].tokname));
Packit 8681c6
Packit 8681c6
            memcpy(slot_info[id].pk_slot.slotDescription,
Packit 8681c6
                   sinfo[id].pk_slot.slotDescription,
Packit 8681c6
                   sizeof(sinfo[id].pk_slot.slotDescription));
Packit 8681c6
Packit 8681c6
            memcpy(slot_info[id].pk_slot.manufacturerID,
Packit 8681c6
                   sinfo[id].pk_slot.manufacturerID,
Packit 8681c6
                   sizeof(sinfo[id].pk_slot.manufacturerID));
Packit 8681c6
Packit 8681c6
            memcpy(&slot_info[id].pk_slot.hardwareVersion,
Packit 8681c6
                   &sinfo[id].pk_slot.hardwareVersion,
Packit 8681c6
                   sizeof(sinfo[id].pk_slot.hardwareVersion));
Packit 8681c6
Packit 8681c6
            memcpy(&slot_info[id].pk_slot.firmwareVersion,
Packit 8681c6
                   &sinfo[id].pk_slot.firmwareVersion,
Packit 8681c6
                   sizeof(sinfo[id].pk_slot.firmwareVersion));
Packit 8681c6
Packit 8681c6
            slot_info[id].version = sinfo[id].version;
Packit 8681c6
Packit 8681c6
            slot_count++;
Packit 8681c6
        }
Packit 8681c6
    }
Packit 8681c6
    *processed = slot_count;
Packit 8681c6
}