metaGeneral.c revision f66d273d14eede3a1bb803a39414588d8f143a98
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2005 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
/*
* General-Purpose Functions
* (as defined in PKCS#11 spec section 11.4)
*/
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include "metaGlobal.h"
extern meta_session_t *meta_sessionlist_head;
struct CK_FUNCTION_LIST metaslot_functionList = {
{ 2, 20 }, /* version */
};
/*
* meta_Initialize
*
* This function is never called by the application. It is only
* called by uCF to initialize metaslot. The pInitArgs argument is ignored.
*
*/
/*ARGSUSED*/
{
/* Make sure function hasn't been called twice */
(void) pthread_mutex_lock(&initmutex);
(void) pthread_mutex_unlock(&initmutex);
return (rv);
}
(void) meta_slotManager_finalize();
(void) pthread_mutex_unlock(&initmutex);
return (rv);
}
(void) meta_slotManager_finalize();
(void) meta_mechManager_finalize();
(void) pthread_mutex_unlock(&initmutex);
return (rv);
}
(void) meta_slotManager_finalize();
(void) meta_mechManager_finalize();
(void) meta_objectManager_finalize();
(void) pthread_mutex_unlock(&initmutex);
return (rv);
}
/* Initialize the object_to_be_freed list */
obj_delay_freed.count = 0;
/* Initialize the session_to_be_freed list */
ses_delay_freed.count = 0;
(void) pthread_mutex_unlock(&initmutex);
return (CKR_OK);
}
/*
* meta_Finalize
*
* Called by uCF only, "pReserved" argument is ignored.
*/
/*ARGSUSED*/
{
return (CKR_ARGUMENTS_BAD);
(void) pthread_mutex_lock(&initmutex);
/*
* free all entries in the delay_freed list
*/
while (delay_free_obj != NULL) {
}
while (delay_free_ses != NULL) {
}
(void) pthread_mutex_unlock(&initmutex);
return (rv);
}
/*
* meta_GetInfo
*
* NOTE: This function will never be called by applications because it's
* hidden behind the uCF C_GetInfo. So, it is not implemented.
*/
/*ARGSUSED*/
{
return (CKR_FUNCTION_NOT_SUPPORTED);
}
/*
* meta_GetFunctionList
*
* This function is not implemented because metaslot is part of the framework,
* so, the framework can just do a static assignment to metaslot's
* function list instead of calling this function.
*/
/*ARGSUSED*/
{
return (CKR_FUNCTION_NOT_SUPPORTED);
}
/*
* Parallel Function Management Function
* (as defined in PKCS#11 spec section 11.16)
*/
/*
* This function is no longer supported in this revision of the PKCS#11
* standard. It is maintained for backwards compatibility only.
*/
/* ARGSUSED */
{
return (CKR_FUNCTION_NOT_PARALLEL);
}
/*
* This function is no longer supported in this revision of the PKCS#11
* standard. It is maintained for backwards compatibility only.
*/
/* ARGSUSED */
{
return (CKR_FUNCTION_NOT_PARALLEL);
}
/*
* Perform a write that can handle EINTR.
*/
int
{
char *p = buf;
if (len == 0)
return (0);
do {
if (cc < 0) {
continue;
return (cc);
} else if (cc == 0) {
return (len2);
} else {
p += cc;
}
} while (len > 0);
return (len2);
}
/*
* Perform a read that can handle EINTR.
*/
int
{
char *p = buf;
do {
if (cc < 0) {
continue;
return (cc); /* errno is already set */
} else if (cc == 0) {
return (len2);
} else {
p += cc;
}
} while (len > 0);
return (len2);
}