Fix most of warnings shown when building on Linux and mingw

This commit fixes most of warnings shown by GCC on 64-bit Linux, 32-bit and
64-bit mingw builds (with SM and OpenSSL enabled).

These warnings were mostly caused by missing casts.

In minidriver there was also a bit of unused variables and dead code.

Remaining warnings on mingw are mostly caused by GCC not recognizing on
this platform "ll" size specifier (present at least since
Visual Studio 2005, also in mingw own CRT) and "z" size specifier (this one
will be fixed in next commits).

There is also a warning about pointer truncation on Win64 when making
PKCS#11 object handle from pointer to this object.
This is a legitimate warning, since it could result in the same handles
being generated from different pointers and so from different objects.

Signed-off-by: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
This commit is contained in:
Maciej S. Szmigiero 2017-01-25 23:27:27 +01:00 committed by Frank Morgner
parent 1b4c626d78
commit 7f778ccff8
11 changed files with 76 additions and 158 deletions

View File

@ -430,8 +430,9 @@ static int cac_read_file(sc_card_t *card, int file_type, u8 **out_buf, size_t *o
goto fail; goto fail;
left = size = lebytes2ushort(count); left = size = lebytes2ushort(count);
sc_debug(card->ctx, SC_LOG_DEBUG_VERBOSE, "got %d bytes out_ptr=%lx count&=%lx count[0]=0x%02x count[1]=0x%02x, len=0x%04x (%d)", sc_debug(card->ctx, SC_LOG_DEBUG_VERBOSE,
len, (unsigned long) out_ptr, (unsigned long)&count, count[0], count[1], size, size); "got %d bytes out_ptr=%p count&=%p count[0]=0x%02x count[1]=0x%02x, len=0x%04x (%d)",
len, out_ptr, &count, count[0], count[1], size, size);
out = out_ptr = malloc(size); out = out_ptr = malloc(size);
if (out == NULL) { if (out == NULL) {
r = SC_ERROR_OUT_OF_MEMORY; r = SC_ERROR_OUT_OF_MEMORY;
@ -983,8 +984,8 @@ static int cac_select_file_by_type(sc_card_t *card, const sc_path_t *in_path, sc
in_path->aid.value[4], in_path->aid.value[5], in_path->aid.value[6], in_path->aid.len, in_path->aid.value[4], in_path->aid.value[5], in_path->aid.value[6], in_path->aid.len,
in_path->value[0], in_path->value[1], in_path->value[2], in_path->value[3], in_path->len, in_path->value[0], in_path->value[1], in_path->value[2], in_path->value[3], in_path->len,
in_path->type, in_path->type); in_path->type, in_path->type);
sc_debug(card->ctx, SC_LOG_DEBUG_VERBOSE,"file_out=%lx index=%d count=%d\n",(unsigned long) file_out, sc_debug(card->ctx, SC_LOG_DEBUG_VERBOSE, "file_out=%p index=%d count=%d\n",
in_path->index, in_path->count); file_out, in_path->index, in_path->count);
/* Sigh, sc_key_select expects paths to keys to have specific formats. There is no override. /* Sigh, sc_key_select expects paths to keys to have specific formats. There is no override.
* we have to add some bytes to the path to make it happy. A better fix would be to give sc_key_file * we have to add some bytes to the path to make it happy. A better fix would be to give sc_key_file

View File

@ -1243,7 +1243,7 @@ sc_card_sm_load(struct sc_card *card, const char *module_path, const char *in_mo
char *module = NULL; char *module = NULL;
#ifdef _WIN32 #ifdef _WIN32
char temp_path[PATH_MAX]; char temp_path[PATH_MAX];
int temp_len; size_t temp_len;
const char path_delim = '\\'; const char path_delim = '\\';
#else #else
const char path_delim = '/'; const char path_delim = '/';

View File

@ -141,8 +141,7 @@ sc_ctx_win32_get_config_value(char *name_env, char *name_reg, char *name_key,
#ifdef _WIN32 #ifdef _WIN32
char temp[PATH_MAX + 1]; char temp[PATH_MAX + 1];
char *value = NULL; char *value = NULL;
int temp_len = PATH_MAX; DWORD temp_len = PATH_MAX;
int rv = SC_ERROR_INTERNAL;
long rc; long rc;
HKEY hKey; HKEY hKey;

View File

@ -20,6 +20,7 @@
*/ */
#include <string.h> #include <string.h>
#include <stdint.h>
#include <stdlib.h> #include <stdlib.h>
#include "internal.h" #include "internal.h"
@ -693,7 +694,7 @@ iasecc_sm_delete_file(struct sc_card *card, unsigned se_num, unsigned int file_i
rv = iasecc_sm_initialize(card, se_num, SM_CMD_FILE_DELETE); rv = iasecc_sm_initialize(card, se_num, SM_CMD_FILE_DELETE);
LOG_TEST_RET(ctx, rv, "iasecc_sm_delete_file() SM INITIALIZE failed"); LOG_TEST_RET(ctx, rv, "iasecc_sm_delete_file() SM INITIALIZE failed");
sm_info->cmd_data = (void *)(long)file_id; sm_info->cmd_data = (void *)(uintptr_t)file_id;
sc_remote_data_init(&rdata); sc_remote_data_init(&rdata);
rv = iasecc_sm_cmd(card, &rdata); rv = iasecc_sm_cmd(card, &rdata);

View File

@ -49,12 +49,28 @@
#define SCARD_CLASS_SYSTEM 0x7fff #define SCARD_CLASS_SYSTEM 0x7fff
#define SCARD_ATTR_VALUE(Class, Tag) ((((ULONG)(Class)) << 16) | ((ULONG)(Tag))) #define SCARD_ATTR_VALUE(Class, Tag) ((((ULONG)(Class)) << 16) | ((ULONG)(Tag)))
#ifndef SCARD_ATTR_DEVICE_FRIENDLY_NAME_A
#define SCARD_ATTR_DEVICE_FRIENDLY_NAME_A SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0003) #define SCARD_ATTR_DEVICE_FRIENDLY_NAME_A SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0003)
#endif
#ifndef SCARD_ATTR_DEVICE_SYSTEM_NAME_A
#define SCARD_ATTR_DEVICE_SYSTEM_NAME_A SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0004) #define SCARD_ATTR_DEVICE_SYSTEM_NAME_A SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0004)
#endif
#define SCARD_CLASS_VENDOR_INFO 1 #define SCARD_CLASS_VENDOR_INFO 1
#ifndef SCARD_ATTR_VENDOR_NAME
#define SCARD_ATTR_VENDOR_NAME SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0100) /**< Vendor name. */ #define SCARD_ATTR_VENDOR_NAME SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0100) /**< Vendor name. */
#endif
#ifndef SCARD_ATTR_VENDOR_IFD_TYPE
#define SCARD_ATTR_VENDOR_IFD_TYPE SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0101) /**< Vendor-supplied interface device type (model designation of reader). */ #define SCARD_ATTR_VENDOR_IFD_TYPE SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0101) /**< Vendor-supplied interface device type (model designation of reader). */
#endif
#ifndef SCARD_ATTR_VENDOR_IFD_VERSION
#define SCARD_ATTR_VENDOR_IFD_VERSION SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0102) /**< Vendor-supplied interface device version (DWORD in the form 0xMMmmbbbb where MM = major version, mm = minor version, and bbbb = build number). */ #define SCARD_ATTR_VENDOR_IFD_VERSION SCARD_ATTR_VALUE(SCARD_CLASS_VENDOR_INFO, 0x0102) /**< Vendor-supplied interface device version (DWORD in the form 0xMMmmbbbb where MM = major version, mm = minor version, and bbbb = build number). */
#endif
/* Logging */ /* Logging */
#define PCSC_TRACE(reader, desc, rv) do { sc_log(reader->ctx, "%s:" desc ": 0x%08lx\n", reader->name, (unsigned long)((ULONG)rv)); } while (0) #define PCSC_TRACE(reader, desc, rv) do { sc_log(reader->ctx, "%s:" desc ": 0x%08lx\n", reader->name, (unsigned long)((ULONG)rv)); } while (0)
@ -836,7 +852,7 @@ static int pcsc_finish(sc_context_t *ctx)
LOG_FUNC_CALLED(ctx); LOG_FUNC_CALLED(ctx);
if (gpriv) { if (gpriv) {
if (gpriv->pcsc_ctx != -1 && !(ctx->flags & SC_CTX_FLAG_TERMINATE)) if (gpriv->pcsc_ctx != (SCARDCONTEXT)-1 && !(ctx->flags & SC_CTX_FLAG_TERMINATE))
gpriv->SCardReleaseContext(gpriv->pcsc_ctx); gpriv->SCardReleaseContext(gpriv->pcsc_ctx);
if (gpriv->dlhandle != NULL) if (gpriv->dlhandle != NULL)
sc_dlclose(gpriv->dlhandle); sc_dlclose(gpriv->dlhandle);
@ -1170,7 +1186,7 @@ static int pcsc_detect_readers(sc_context_t *ctx)
sc_log(ctx, "Probing PC/SC readers"); sc_log(ctx, "Probing PC/SC readers");
do { do {
if (gpriv->pcsc_ctx == -1) { if (gpriv->pcsc_ctx == (SCARDCONTEXT)-1) {
/* /*
* Cannot call SCardListReaders with -1 * Cannot call SCardListReaders with -1
* context as in Windows ERROR_INVALID_HANDLE * context as in Windows ERROR_INVALID_HANDLE
@ -1220,7 +1236,7 @@ static int pcsc_detect_readers(sc_context_t *ctx)
goto out; goto out;
} }
for (reader_name = reader_buf; *reader_name != '\x0'; reader_name += strlen(reader_name) + 1) { for (reader_name = reader_buf; *reader_name != '\x0'; reader_name += strlen(reader_name) + 1) {
sc_reader_t *reader = NULL, *old_reader; sc_reader_t *reader = NULL, *old_reader = NULL;
struct pcsc_private_data *priv = NULL; struct pcsc_private_data *priv = NULL;
scconf_block *conf_block = NULL; scconf_block *conf_block = NULL;
int found = 0; int found = 0;
@ -2226,8 +2242,6 @@ static int cardmod_connect(sc_reader_t *reader)
static int cardmod_disconnect(sc_reader_t * reader) static int cardmod_disconnect(sc_reader_t * reader)
{ {
struct pcsc_private_data *priv = GET_PRIV_DATA(reader);
reader->flags = 0; reader->flags = 0;
return SC_SUCCESS; return SC_SUCCESS;
} }
@ -2334,8 +2348,8 @@ int cardmod_use_reader(sc_context_t *ctx, void * pcsc_context_handle, void * pcs
scconf_block *conf_block = NULL; scconf_block *conf_block = NULL;
struct pcsc_global_private_data *gpriv = (struct pcsc_global_private_data *) ctx->reader_drv_data; struct pcsc_global_private_data *gpriv = (struct pcsc_global_private_data *) ctx->reader_drv_data;
LONG rv; LONG rv;
char reader_name[128]; BYTE reader_name[128];
DWORD rcount, feature_len, display_ioctl, reader_name_size = sizeof(reader_name); DWORD rcount, feature_len, display_ioctl = 0, reader_name_size = sizeof(reader_name);
int ret = SC_ERROR_INTERNAL; int ret = SC_ERROR_INTERNAL;
unsigned int i; unsigned int i;
@ -2384,7 +2398,7 @@ int cardmod_use_reader(sc_context_t *ctx, void * pcsc_context_handle, void * pcs
reader->drv_data = priv; reader->drv_data = priv;
reader->ops = &cardmod_ops; reader->ops = &cardmod_ops;
reader->driver = &cardmod_drv; reader->driver = &cardmod_drv;
if ((reader->name = strdup(reader_name)) == NULL) { if ((reader->name = strdup((const char *)reader_name)) == NULL) {
ret = SC_ERROR_OUT_OF_MEMORY; ret = SC_ERROR_OUT_OF_MEMORY;
goto err1; goto err1;
} }

View File

@ -241,7 +241,6 @@ static const struct sc_asn1_entry c_asn1_md_container[C_ASN1_MD_CONTAINER_SIZE]
static int associate_card(PCARD_DATA pCardData); static int associate_card(PCARD_DATA pCardData);
static int disassociate_card(PCARD_DATA pCardData); static int disassociate_card(PCARD_DATA pCardData);
static DWORD md_get_cardcf(PCARD_DATA pCardData, CARD_CACHE_FILE_FORMAT **out);
static DWORD md_pkcs15_delete_object(PCARD_DATA pCardData, struct sc_pkcs15_object *obj); static DWORD md_pkcs15_delete_object(PCARD_DATA pCardData, struct sc_pkcs15_object *obj);
static DWORD md_fs_init(PCARD_DATA pCardData); static DWORD md_fs_init(PCARD_DATA pCardData);
@ -327,17 +326,6 @@ static void loghex(PCARD_DATA pCardData, int level, PBYTE data, size_t len)
logprintf(pCardData, level, " %04X %s\n", a, line); logprintf(pCardData, level, " %04X %s\n", a, line);
} }
static void print_werror(PCARD_DATA pCardData, PSTR str)
{
void *buf;
FormatMessageA(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, GetLastError(), 0, (LPSTR) &buf, 0, NULL);
logprintf(pCardData, 0, "%s%s\n", str, (PSTR) buf);
LocalFree(buf);
}
/* /*
* check if the card has been removed, or the * check if the card has been removed, or the
* caller has changed the handles. * caller has changed the handles.
@ -532,25 +520,6 @@ md_is_supports_container_key_import(PCARD_DATA pCardData)
return md_get_config_bool(pCardData, "md_supports_container_key_import", MD_STATIC_FLAG_CREATE_CONTAINER_KEY_IMPORT, TRUE); return md_get_config_bool(pCardData, "md_supports_container_key_import", MD_STATIC_FLAG_CREATE_CONTAINER_KEY_IMPORT, TRUE);
} }
/* Check if specified PIN has been verified */
static BOOL
md_is_pin_set(PCARD_DATA pCardData, DWORD role)
{
VENDOR_SPECIFIC *vs;
CARD_CACHE_FILE_FORMAT *cardcf = NULL;
if (!pCardData)
return FALSE;
vs = pCardData->pvVendorSpecific;
if (md_get_cardcf(pCardData, &cardcf) != SCARD_S_SUCCESS)
return FALSE;
return IS_PIN_SET(cardcf->bPinsFreshness, role);
}
/* generate unique key label (GUID)*/ /* generate unique key label (GUID)*/
static VOID md_generate_guid( __in_ecount(MAX_CONTAINER_NAME_LEN+1) PSTR szGuid) { static VOID md_generate_guid( __in_ecount(MAX_CONTAINER_NAME_LEN+1) PSTR szGuid) {
RPC_CSTR szRPCGuid = NULL; RPC_CSTR szRPCGuid = NULL;
@ -618,21 +587,6 @@ md_contguid_delete_conversion(PCARD_DATA pCardData, __in_ecount(MAX_CONTAINER_NA
} }
} }
/* this function take the guid in input and search if it should be replaced
Return if it has been replaced or not */
static BOOL
md_contguid_find_conversion(PCARD_DATA pCardData, __in_ecount(MAX_CONTAINER_NAME_LEN+1) PSTR szGuid)
{
int i;
for (i = 0; i < MD_MAX_CONVERSIONS; i++) {
if (strcmp(md_static_conversions[i].szOpenSCGuid,szGuid) == 0) {
strcpy_s(szGuid, MAX_CONTAINER_NAME_LEN+1, md_static_conversions[i].szWindowsGuid);
return TRUE;
}
}
return FALSE;
}
/* build key args from the minidriver guid */ /* build key args from the minidriver guid */
static VOID static VOID
md_contguid_build_key_args_from_cont_guid(PCARD_DATA pCardData, __in_ecount(MAX_CONTAINER_NAME_LEN+1) PSTR szGuid, md_contguid_build_key_args_from_cont_guid(PCARD_DATA pCardData, __in_ecount(MAX_CONTAINER_NAME_LEN+1) PSTR szGuid,
@ -658,12 +612,9 @@ md_contguid_build_key_args_from_cont_guid(PCARD_DATA pCardData, __in_ecount(MAX_
static DWORD static DWORD
md_contguid_build_cont_guid_from_key(PCARD_DATA pCardData, struct sc_pkcs15_object *key_obj, __in_ecount(MAX_CONTAINER_NAME_LEN+1) PSTR szGuid) md_contguid_build_cont_guid_from_key(PCARD_DATA pCardData, struct sc_pkcs15_object *key_obj, __in_ecount(MAX_CONTAINER_NAME_LEN+1) PSTR szGuid)
{ {
VENDOR_SPECIFIC *vs;
struct sc_pkcs15_prkey_info *prkey_info = (struct sc_pkcs15_prkey_info *)key_obj->data; struct sc_pkcs15_prkey_info *prkey_info = (struct sc_pkcs15_prkey_info *)key_obj->data;
DWORD dwret = SCARD_S_SUCCESS; DWORD dwret = SCARD_S_SUCCESS;
vs = (VENDOR_SPECIFIC*) pCardData->pvVendorSpecific;
szGuid[0] = '\0'; szGuid[0] = '\0';
/* priorize the use of the key id over the key label as a container name */ /* priorize the use of the key id over the key label as a container name */
if (md_is_guid_as_id(pCardData) && prkey_info->id.len > 0 && prkey_info->id.len <= MAX_CONTAINER_NAME_LEN) { if (md_is_guid_as_id(pCardData) && prkey_info->id.len > 0 && prkey_info->id.len <= MAX_CONTAINER_NAME_LEN) {
@ -724,7 +675,7 @@ md_fs_find_directory(PCARD_DATA pCardData, struct md_directory *parent, char *na
dir = parent->subdirs; dir = parent->subdirs;
while(dir) { while(dir) {
if (strlen(name) > sizeof dir->name if (strlen(name) > sizeof dir->name
|| !strncmp(dir->name, name, sizeof dir->name)) || !strncmp((char *)dir->name, name, sizeof dir->name))
break; break;
dir = dir->next; dir = dir->next;
} }
@ -756,7 +707,7 @@ md_fs_add_directory(PCARD_DATA pCardData, struct md_directory **head, char *name
return SCARD_E_NO_MEMORY; return SCARD_E_NO_MEMORY;
memset(new_dir, 0, sizeof(struct md_directory)); memset(new_dir, 0, sizeof(struct md_directory));
strncpy_s(new_dir->name, sizeof(new_dir->name), name, sizeof(new_dir->name) - 1); strncpy_s((char *)new_dir->name, sizeof(new_dir->name), name, sizeof(new_dir->name) - 1);
new_dir->acl = acl; new_dir->acl = acl;
if (*head == NULL) { if (*head == NULL) {
@ -780,7 +731,6 @@ md_fs_add_directory(PCARD_DATA pCardData, struct md_directory **head, char *name
static DWORD static DWORD
md_fs_find_file(PCARD_DATA pCardData, char *parent, char *name, struct md_file **out) md_fs_find_file(PCARD_DATA pCardData, char *parent, char *name, struct md_file **out)
{ {
VENDOR_SPECIFIC *vs;
struct md_file *file = NULL; struct md_file *file = NULL;
struct md_directory *dir = NULL; struct md_directory *dir = NULL;
DWORD dwret; DWORD dwret;
@ -791,8 +741,6 @@ md_fs_find_file(PCARD_DATA pCardData, char *parent, char *name, struct md_file *
if (!pCardData || !name) if (!pCardData || !name)
return SCARD_E_INVALID_PARAMETER; return SCARD_E_INVALID_PARAMETER;
vs = pCardData->pvVendorSpecific;
dwret = md_fs_find_directory(pCardData, NULL, parent, &dir); dwret = md_fs_find_directory(pCardData, NULL, parent, &dir);
if (dwret != SCARD_S_SUCCESS) { if (dwret != SCARD_S_SUCCESS) {
logprintf(pCardData, 2, "find directory '%s' error: %X\n", parent ? parent : "<null>", dwret); logprintf(pCardData, 2, "find directory '%s' error: %X\n", parent ? parent : "<null>", dwret);
@ -805,7 +753,7 @@ md_fs_find_file(PCARD_DATA pCardData, char *parent, char *name, struct md_file *
for (file = dir->files; file!=NULL;) { for (file = dir->files; file!=NULL;) {
if (sizeof file->name < strlen(name) if (sizeof file->name < strlen(name)
|| !strncmp(file->name, name, sizeof file->name)) || !strncmp((char *)file->name, name, sizeof file->name))
break; break;
file = file->next; file = file->next;
} }
@ -834,7 +782,7 @@ md_fs_add_file(PCARD_DATA pCardData, struct md_file **head, char *name, CARD_FIL
return SCARD_E_NO_MEMORY; return SCARD_E_NO_MEMORY;
memset(new_file, 0, sizeof(struct md_file)); memset(new_file, 0, sizeof(struct md_file));
strncpy_s(new_file->name, sizeof(new_file->name), name, sizeof(new_file->name) - 1); strncpy_s((char *)new_file->name, sizeof(new_file->name), name, sizeof(new_file->name) - 1);
new_file->size = size; new_file->size = size;
new_file->acl = acl; new_file->acl = acl;
@ -911,7 +859,7 @@ md_fs_delete_file(PCARD_DATA pCardData, char *parent, char *name)
} }
if (sizeof dir->files->name < strlen(name) if (sizeof dir->files->name < strlen(name)
|| !strncmp(dir->files->name, name, sizeof dir->files->name)) { || !strncmp((char *)dir->files->name, name, sizeof dir->files->name)) {
file_to_rm = dir->files; file_to_rm = dir->files;
dir->files = dir->files->next; dir->files = dir->files->next;
md_fs_free_file(pCardData, file_to_rm); md_fs_free_file(pCardData, file_to_rm);
@ -922,7 +870,7 @@ md_fs_delete_file(PCARD_DATA pCardData, char *parent, char *name)
if (!file->next) if (!file->next)
break; break;
if (sizeof file->next->name < strlen(name) if (sizeof file->next->name < strlen(name)
|| !strncmp(file->next->name, name, sizeof file->next->name)) { || !strncmp((char *)file->next->name, name, sizeof file->next->name)) {
file_to_rm = file->next; file_to_rm = file->next;
file->next = file->next->next; file->next = file->next->next;
md_fs_free_file(pCardData, file_to_rm); md_fs_free_file(pCardData, file_to_rm);
@ -995,7 +943,6 @@ md_pkcs15_update_containers(PCARD_DATA pCardData, unsigned char *blob, size_t si
{ {
VENDOR_SPECIFIC *vs; VENDOR_SPECIFIC *vs;
CONTAINER_MAP_RECORD *pp; CONTAINER_MAP_RECORD *pp;
DWORD dwret = SCARD_F_INTERNAL_ERROR;
int nn_records, idx; int nn_records, idx;
if (!pCardData || !blob || size < sizeof(CONTAINER_MAP_RECORD)) if (!pCardData || !blob || size < sizeof(CONTAINER_MAP_RECORD))
@ -1109,7 +1056,7 @@ md_fs_set_content(PCARD_DATA pCardData, struct md_file *file, unsigned char *blo
CopyMemory(file->blob, blob, size); CopyMemory(file->blob, blob, size);
file->size = size; file->size = size;
if (!strcmp(file->name, "cmapfile")) if (!strcmp((char *)file->name, "cmapfile"))
return md_pkcs15_update_containers(pCardData, blob, size); return md_pkcs15_update_containers(pCardData, blob, size);
return SCARD_S_SUCCESS; return SCARD_S_SUCCESS;
@ -1167,14 +1114,12 @@ md_fs_read_msroots_file(PCARD_DATA pCardData, char *parent, struct md_file *file
{ {
CERT_BLOB dbStore = {0}; CERT_BLOB dbStore = {0};
HCERTSTORE hCertStore = NULL; HCERTSTORE hCertStore = NULL;
DWORD dwret = 0;
VENDOR_SPECIFIC *vs; VENDOR_SPECIFIC *vs;
int rv, ii, cert_num; int rv, ii, cert_num;
struct sc_pkcs15_object *prkey_objs[MD_MAX_KEY_CONTAINERS]; struct sc_pkcs15_object *prkey_objs[MD_MAX_KEY_CONTAINERS];
hCertStore = CertOpenStore(CERT_STORE_PROV_MEMORY, X509_ASN_ENCODING, (HCRYPTPROV_LEGACY) NULL, 0, NULL); hCertStore = CertOpenStore(CERT_STORE_PROV_MEMORY, X509_ASN_ENCODING, (HCRYPTPROV_LEGACY) NULL, 0, NULL);
if (!hCertStore) { if (!hCertStore) {
dwret = GetLastError();
goto Ret; goto Ret;
} }
@ -1213,14 +1158,12 @@ md_fs_read_msroots_file(PCARD_DATA pCardData, char *parent, struct md_file *file
CERT_STORE_SAVE_TO_MEMORY, CERT_STORE_SAVE_TO_MEMORY,
&dbStore, &dbStore,
0)) { 0)) {
dwret = GetLastError();
goto Ret; goto Ret;
} }
dbStore.pbData = (PBYTE) pCardData->pfnCspAlloc(dbStore.cbData); dbStore.pbData = (PBYTE) pCardData->pfnCspAlloc(dbStore.cbData);
if (NULL == dbStore.pbData) { if (NULL == dbStore.pbData) {
dwret = ERROR_NOT_ENOUGH_MEMORY;
goto Ret; goto Ret;
} }
@ -1231,7 +1174,6 @@ md_fs_read_msroots_file(PCARD_DATA pCardData, char *parent, struct md_file *file
&dbStore, &dbStore,
0)) 0))
{ {
dwret = GetLastError();
goto Ret; goto Ret;
} }
file->size = dbStore.cbData; file->size = dbStore.cbData;
@ -1272,12 +1214,12 @@ md_fs_read_content(PCARD_DATA pCardData, char *parent, struct md_file *file)
return; return;
} }
if (!strcmp(dir->name, "mscp")) { if (!strcmp((char *)dir->name, "mscp")) {
int idx, rv; int idx, rv;
if(sscanf_s(file->name, "ksc%d", &idx) > 0) { if(sscanf_s((char *)file->name, "ksc%d", &idx) > 0) {
} }
else if(sscanf_s(file->name, "kxc%d", &idx) > 0) { else if(sscanf_s((char *)file->name, "kxc%d", &idx) > 0) {
} }
else { else {
idx = -1; idx = -1;
@ -1300,7 +1242,7 @@ md_fs_read_content(PCARD_DATA pCardData, char *parent, struct md_file *file)
CopyMemory(file->blob, cert->data.value, cert->data.len); CopyMemory(file->blob, cert->data.value, cert->data.len);
sc_pkcs15_free_certificate(cert); sc_pkcs15_free_certificate(cert);
} }
if (!strcmp(file->name, "msroots")) { if (!strcmp((char *)file->name, "msroots")) {
md_fs_read_msroots_file(pCardData, parent, file); md_fs_read_msroots_file(pCardData, parent, file);
} }
} }
@ -1319,17 +1261,12 @@ md_fs_read_content(PCARD_DATA pCardData, char *parent, struct md_file *file)
static DWORD static DWORD
md_set_cardcf(PCARD_DATA pCardData, struct md_file *file) md_set_cardcf(PCARD_DATA pCardData, struct md_file *file)
{ {
VENDOR_SPECIFIC *vs;
char *last_update = NULL;
CARD_CACHE_FILE_FORMAT empty = {0}; CARD_CACHE_FILE_FORMAT empty = {0};
size_t empty_len = sizeof(empty);
DWORD dwret; DWORD dwret;
if (!pCardData || !file) if (!pCardData || !file)
return SCARD_E_INVALID_PARAMETER; return SCARD_E_INVALID_PARAMETER;
vs = pCardData->pvVendorSpecific;
dwret = md_fs_set_content(pCardData, file, (unsigned char *)(&empty), MD_CARDCF_LENGTH); dwret = md_fs_set_content(pCardData, file, (unsigned char *)(&empty), MD_CARDCF_LENGTH);
if (dwret != SCARD_S_SUCCESS) if (dwret != SCARD_S_SUCCESS)
return dwret; return dwret;
@ -1339,31 +1276,6 @@ md_set_cardcf(PCARD_DATA pCardData, struct md_file *file)
return SCARD_S_SUCCESS; return SCARD_S_SUCCESS;
} }
/*
* Return content of the 'soft' 'cardcf' file
*/
static DWORD
md_get_cardcf(PCARD_DATA pCardData, CARD_CACHE_FILE_FORMAT **out)
{
struct md_file *file = NULL;
if (!pCardData)
return SCARD_E_INVALID_PARAMETER;
md_fs_find_file(pCardData, NULL, "cardcf", &file);
if (!file) {
logprintf(pCardData, 2, "file 'cardcf' not found\n");
return SCARD_E_FILE_NOT_FOUND;
}
if (!file->blob || file->size < MD_CARDCF_LENGTH)
return SCARD_E_INVALID_VALUE;
if (out)
*out = (CARD_CACHE_FILE_FORMAT *)file->blob;
return SCARD_S_SUCCESS;
}
static DWORD static DWORD
md_set_cardapps(PCARD_DATA pCardData, struct md_file *file) md_set_cardapps(PCARD_DATA pCardData, struct md_file *file)
{ {
@ -1429,7 +1341,6 @@ md_set_cmapfile(PCARD_DATA pCardData, struct md_file *file)
{ {
VENDOR_SPECIFIC *vs; VENDOR_SPECIFIC *vs;
PCONTAINER_MAP_RECORD p; PCONTAINER_MAP_RECORD p;
sc_pkcs15_pubkey_t *pubkey = NULL;
unsigned char *cmap_buf = NULL; unsigned char *cmap_buf = NULL;
size_t cmap_len; size_t cmap_len;
DWORD dwret; DWORD dwret;
@ -1459,7 +1370,7 @@ md_set_cmapfile(PCARD_DATA pCardData, struct md_file *file)
/* Initialize the P15 container array with the existing keys */ /* Initialize the P15 container array with the existing keys */
for(ii = 0; ii < conts_num; ii++) { for(ii = 0; ii < conts_num; ii++) {
struct sc_pkcs15_object *key_obj = prkey_objs[ii], *cert_obj = NULL; struct sc_pkcs15_object *key_obj = prkey_objs[ii];
struct sc_pkcs15_prkey_info *prkey_info = (struct sc_pkcs15_prkey_info *)key_obj->data; struct sc_pkcs15_prkey_info *prkey_info = (struct sc_pkcs15_prkey_info *)key_obj->data;
struct md_pkcs15_container *cont = &vs->p15_containers[ii]; struct md_pkcs15_container *cont = &vs->p15_containers[ii];
@ -1566,8 +1477,6 @@ md_set_cmapfile(PCARD_DATA pCardData, struct md_file *file)
/* Initialize 'CMAPFILE' content from the P15 containers */ /* Initialize 'CMAPFILE' content from the P15 containers */
p = (PCONTAINER_MAP_RECORD)cmap_buf; p = (PCONTAINER_MAP_RECORD)cmap_buf;
for (ii=0; ii<MD_MAX_KEY_CONTAINERS; ii++) { for (ii=0; ii<MD_MAX_KEY_CONTAINERS; ii++) {
struct sc_pkcs15_object *cert_obj = NULL;
if (!(vs->p15_containers[ii].flags & CONTAINER_MAP_VALID_CONTAINER)) if (!(vs->p15_containers[ii].flags & CONTAINER_MAP_VALID_CONTAINER))
continue; continue;
@ -1930,15 +1839,15 @@ md_pkcs15_generate_key(PCARD_DATA pCardData, DWORD idx, DWORD key_type, DWORD ke
if ((key_type == AT_ECDSA_P256)|| (key_type == AT_ECDHE_P256)) { if ((key_type == AT_ECDSA_P256)|| (key_type == AT_ECDHE_P256)) {
keygen_args.prkey_args.key.u.ec.params.named_curve = "secp256r1"; keygen_args.prkey_args.key.u.ec.params.named_curve = "secp256r1";
keygen_args.prkey_args.key.u.ec.params.der.len = 10; keygen_args.prkey_args.key.u.ec.params.der.len = 10;
keygen_args.prkey_args.key.u.ec.params.der.value = "\x06\x08\x2A\x86\x48\xCE\x3D\x03\x01\x07"; keygen_args.prkey_args.key.u.ec.params.der.value = (unsigned char *)"\x06\x08\x2A\x86\x48\xCE\x3D\x03\x01\x07";
} else if ((key_type == AT_ECDSA_P384)|| (key_type == AT_ECDHE_P384)) { } else if ((key_type == AT_ECDSA_P384)|| (key_type == AT_ECDHE_P384)) {
keygen_args.prkey_args.key.u.ec.params.named_curve = "secp384r1"; keygen_args.prkey_args.key.u.ec.params.named_curve = "secp384r1";
keygen_args.prkey_args.key.u.ec.params.der.len = 7; keygen_args.prkey_args.key.u.ec.params.der.len = 7;
keygen_args.prkey_args.key.u.ec.params.der.value = "\x06\x05\x2B\x81\x04\x00\x22"; keygen_args.prkey_args.key.u.ec.params.der.value = (unsigned char *)"\x06\x05\x2B\x81\x04\x00\x22";
} else if ((key_type == AT_ECDSA_P521)|| (key_type == AT_ECDHE_P521)) { } else if ((key_type == AT_ECDSA_P521)|| (key_type == AT_ECDHE_P521)) {
keygen_args.prkey_args.key.u.ec.params.named_curve = "secp521r1"; keygen_args.prkey_args.key.u.ec.params.named_curve = "secp521r1";
keygen_args.prkey_args.key.u.ec.params.der.len = 7; keygen_args.prkey_args.key.u.ec.params.der.len = 7;
keygen_args.prkey_args.key.u.ec.params.der.value = "\x06\x05\x2B\x81\x04\x00\x23"; keygen_args.prkey_args.key.u.ec.params.der.value = (unsigned char *)"\x06\x05\x2B\x81\x04\x00\x23";
} }
} }
@ -2033,7 +1942,7 @@ md_pkcs15_store_key(PCARD_DATA pCardData, DWORD idx, DWORD key_type, BYTE *blob,
vs = (VENDOR_SPECIFIC*)(pCardData->pvVendorSpecific); vs = (VENDOR_SPECIFIC*)(pCardData->pvVendorSpecific);
card = vs->p15card->card; card = vs->p15card->card;
pkey = b2i_PrivateKey(&ptr, blob_size); pkey = b2i_PrivateKey((const unsigned char **)&ptr, blob_size);
if (!pkey) { if (!pkey) {
logprintf(pCardData, 1, "MdStoreKey() MSBLOB key parse error"); logprintf(pCardData, 1, "MdStoreKey() MSBLOB key parse error");
return SCARD_E_INVALID_PARAMETER; return SCARD_E_INVALID_PARAMETER;
@ -2172,10 +2081,9 @@ md_pkcs15_store_certificate(PCARD_DATA pCardData, char *file_name, unsigned char
/* use container's ID as ID of certificate to store */ /* use container's ID as ID of certificate to store */
idx = -1; idx = -1;
if(sscanf_s(file_name, "ksc%d", &idx) > 0) if(sscanf_s(file_name, "ksc%d", &idx) > 0) {
; } else if(sscanf_s(file_name, "kxc%d", &idx) > 0) {
else if(sscanf_s(file_name, "kxc%d", &idx) > 0) }
;
if (idx >= 0 && idx < MD_MAX_KEY_CONTAINERS) { if (idx >= 0 && idx < MD_MAX_KEY_CONTAINERS) {
cont = &(vs->p15_containers[idx]); cont = &(vs->p15_containers[idx]);
@ -2223,7 +2131,7 @@ md_query_key_sizes(PCARD_DATA pCardData, DWORD dwKeySpec, CARD_KEY_SIZES *pKeySi
{ {
VENDOR_SPECIFIC *vs = NULL; VENDOR_SPECIFIC *vs = NULL;
struct sc_algorithm_info* algo_info; struct sc_algorithm_info* algo_info;
int count = 0, i, key_algo = 0, keysize = 0, flag; int count = 0, i, keysize = 0, flag;
if (!pKeySizes) if (!pKeySizes)
return SCARD_E_INVALID_PARAMETER; return SCARD_E_INVALID_PARAMETER;
@ -2453,7 +2361,6 @@ md_dialog_perform_pin_operation(PCARD_DATA pCardData, int operation, struct sc_p
{ {
LONG_PTR parameter[10]; LONG_PTR parameter[10];
INT_PTR result = 0; INT_PTR result = 0;
HWND hWndDlg = 0;
int rv = 0; int rv = 0;
VENDOR_SPECIFIC* pv = (VENDOR_SPECIFIC*)(pCardData->pvVendorSpecific); VENDOR_SPECIFIC* pv = (VENDOR_SPECIFIC*)(pCardData->pvVendorSpecific);
/* stack the parameters */ /* stack the parameters */
@ -2652,12 +2559,10 @@ DWORD WINAPI CardCreateContainer(__in PCARD_DATA pCardData,
__in DWORD dwKeySize, __in DWORD dwKeySize,
__in PBYTE pbKeyData) __in PBYTE pbKeyData)
{ {
VENDOR_SPECIFIC *vs = NULL;
DWORD dwret; DWORD dwret;
if (!pCardData) if (!pCardData)
return SCARD_E_INVALID_PARAMETER; return SCARD_E_INVALID_PARAMETER;
vs = (VENDOR_SPECIFIC*)(pCardData->pvVendorSpecific);
logprintf(pCardData, 1, "\nP:%d T:%d pCardData:%p ",GetCurrentProcessId(), GetCurrentThreadId(), pCardData); logprintf(pCardData, 1, "\nP:%d T:%d pCardData:%p ",GetCurrentProcessId(), GetCurrentThreadId(), pCardData);
logprintf(pCardData, 1, "CardCreateContainer(idx:%i,flags:%X,type:%X,size:%i,data:%p)\n", logprintf(pCardData, 1, "CardCreateContainer(idx:%i,flags:%X,type:%X,size:%i,data:%p)\n",
@ -2745,7 +2650,7 @@ DWORD WINAPI CardGetContainerInfo(__in PCARD_DATA pCardData, __in BYTE bContaine
return SCARD_E_INVALID_PARAMETER; return SCARD_E_INVALID_PARAMETER;
if (bContainerIndex >= MD_MAX_KEY_CONTAINERS) if (bContainerIndex >= MD_MAX_KEY_CONTAINERS)
return SCARD_E_NO_KEY_CONTAINER; return SCARD_E_NO_KEY_CONTAINER;
if (pContainerInfo->dwVersion < 0 || pContainerInfo->dwVersion > CONTAINER_INFO_CURRENT_VERSION) if (pContainerInfo->dwVersion > CONTAINER_INFO_CURRENT_VERSION)
return ERROR_REVISION_MISMATCH; return ERROR_REVISION_MISMATCH;
pContainerInfo->dwVersion = CONTAINER_INFO_CURRENT_VERSION; pContainerInfo->dwVersion = CONTAINER_INFO_CURRENT_VERSION;
@ -3189,8 +3094,6 @@ DWORD WINAPI CardReadFile(__in PCARD_DATA pCardData,
__deref_out_bcount_opt(*pcbData) PBYTE *ppbData, __deref_out_bcount_opt(*pcbData) PBYTE *ppbData,
__out PDWORD pcbData) __out PDWORD pcbData)
{ {
VENDOR_SPECIFIC *vs;
struct md_directory *dir = NULL;
struct md_file *file = NULL; struct md_file *file = NULL;
logprintf(pCardData, 1, "\nP:%d T:%d pCardData:%p ",GetCurrentProcessId(), GetCurrentThreadId(), pCardData); logprintf(pCardData, 1, "\nP:%d T:%d pCardData:%p ",GetCurrentProcessId(), GetCurrentThreadId(), pCardData);
@ -3201,8 +3104,6 @@ DWORD WINAPI CardReadFile(__in PCARD_DATA pCardData,
if (!ppbData || !pcbData) if (!ppbData || !pcbData)
return SCARD_E_INVALID_PARAMETER; return SCARD_E_INVALID_PARAMETER;
vs = (VENDOR_SPECIFIC*)(pCardData->pvVendorSpecific);
logprintf(pCardData, 2, "pszDirectoryName = %s, pszFileName = %s, dwFlags = %X, pcbData=%u, *ppbData=%X\n", logprintf(pCardData, 2, "pszDirectoryName = %s, pszFileName = %s, dwFlags = %X, pcbData=%u, *ppbData=%X\n",
NULLSTR(pszDirectoryName), NULLSTR(pszFileName), dwFlags, *pcbData, *ppbData); NULLSTR(pszDirectoryName), NULLSTR(pszFileName), dwFlags, *pcbData, *ppbData);
@ -3290,7 +3191,6 @@ DWORD WINAPI CardDeleteFile(__in PCARD_DATA pCardData,
__in LPSTR pszFileName, __in LPSTR pszFileName,
__in DWORD dwFlags) __in DWORD dwFlags)
{ {
struct md_file *file = NULL;
DWORD dwret; DWORD dwret;
logprintf(pCardData, 1, "\nP:%d T:%d pCardData:%p ",GetCurrentProcessId(), GetCurrentThreadId(), pCardData); logprintf(pCardData, 1, "\nP:%d T:%d pCardData:%p ",GetCurrentProcessId(), GetCurrentThreadId(), pCardData);
@ -3351,8 +3251,8 @@ DWORD WINAPI CardEnumFiles(__in PCARD_DATA pCardData,
file = dir->files; file = dir->files;
for (offs = 0; file != NULL && offs < sizeof(mstr) - 10;) { for (offs = 0; file != NULL && offs < sizeof(mstr) - 10;) {
logprintf(pCardData, 2, "enum files(): file name '%s'\n", file->name); logprintf(pCardData, 2, "enum files(): file name '%s'\n", file->name);
strcpy_s(mstr+offs, sizeof(mstr) - offs, file->name); strcpy_s(mstr+offs, sizeof(mstr) - offs, (char *)file->name);
offs += strlen(file->name) + 1; offs += strlen((char *)file->name) + 1;
file = file->next; file = file->next;
} }
mstr[offs] = 0; mstr[offs] = 0;
@ -3373,15 +3273,11 @@ DWORD WINAPI CardGetFileInfo(__in PCARD_DATA pCardData,
__in LPSTR pszFileName, __in LPSTR pszFileName,
__inout PCARD_FILE_INFO pCardFileInfo) __inout PCARD_FILE_INFO pCardFileInfo)
{ {
VENDOR_SPECIFIC *vs = NULL;
struct md_directory *dir = NULL;
struct md_file *file = NULL; struct md_file *file = NULL;
logprintf(pCardData, 1, "\nP:%d T:%d pCardData:%p ",GetCurrentProcessId(), GetCurrentThreadId(), pCardData); logprintf(pCardData, 1, "\nP:%d T:%d pCardData:%p ",GetCurrentProcessId(), GetCurrentThreadId(), pCardData);
logprintf(pCardData, 1, "CardGetFileInfo(dirName:'%s',fileName:'%s', out %p)\n", NULLSTR(pszDirectoryName), NULLSTR(pszFileName), pCardFileInfo); logprintf(pCardData, 1, "CardGetFileInfo(dirName:'%s',fileName:'%s', out %p)\n", NULLSTR(pszDirectoryName), NULLSTR(pszFileName), pCardFileInfo);
vs = (VENDOR_SPECIFIC*)(pCardData->pvVendorSpecific);
md_fs_find_file(pCardData, pszDirectoryName, pszFileName, &file); md_fs_find_file(pCardData, pszDirectoryName, pszFileName, &file);
if (!file) { if (!file) {
logprintf(pCardData, 2, "CardWriteFile(): file '%s' not found in '%s'\n", NULLSTR(pszFileName), NULLSTR(pszDirectoryName)); logprintf(pCardData, 2, "CardWriteFile(): file '%s' not found in '%s'\n", NULLSTR(pszFileName), NULLSTR(pszDirectoryName));
@ -3399,7 +3295,6 @@ DWORD WINAPI CardGetFileInfo(__in PCARD_DATA pCardData,
DWORD WINAPI CardQueryFreeSpace(__in PCARD_DATA pCardData, __in DWORD dwFlags, DWORD WINAPI CardQueryFreeSpace(__in PCARD_DATA pCardData, __in DWORD dwFlags,
__inout PCARD_FREE_SPACE_INFO pCardFreeSpaceInfo) __inout PCARD_FREE_SPACE_INFO pCardFreeSpaceInfo)
{ {
VENDOR_SPECIFIC *vs;
DWORD dwret; DWORD dwret;
logprintf(pCardData, 1, "\nP:%d T:%d pCardData:%p ",GetCurrentProcessId(), GetCurrentThreadId(), pCardData); logprintf(pCardData, 1, "\nP:%d T:%d pCardData:%p ",GetCurrentProcessId(), GetCurrentThreadId(), pCardData);
@ -3409,8 +3304,6 @@ DWORD WINAPI CardQueryFreeSpace(__in PCARD_DATA pCardData, __in DWORD dwFlags,
if (!pCardData) if (!pCardData)
return SCARD_E_INVALID_PARAMETER; return SCARD_E_INVALID_PARAMETER;
vs = (VENDOR_SPECIFIC*)(pCardData->pvVendorSpecific);
check_reader_status(pCardData); check_reader_status(pCardData);
dwret = md_free_space(pCardData, pCardFreeSpaceInfo); dwret = md_free_space(pCardData, pCardFreeSpaceInfo);
@ -3461,7 +3354,6 @@ DWORD WINAPI CardRSADecrypt(__in PCARD_DATA pCardData,
VENDOR_SPECIFIC *vs; VENDOR_SPECIFIC *vs;
struct sc_pkcs15_prkey_info *prkey_info; struct sc_pkcs15_prkey_info *prkey_info;
BYTE *pbuf = NULL, *pbuf2 = NULL; BYTE *pbuf = NULL, *pbuf2 = NULL;
DWORD lg= 0, lg2 = 0;
struct sc_pkcs15_object *pkey = NULL; struct sc_pkcs15_object *pkey = NULL;
struct sc_algorithm_info *alg_info = NULL; struct sc_algorithm_info *alg_info = NULL;
@ -3506,7 +3398,6 @@ DWORD WINAPI CardRSADecrypt(__in PCARD_DATA pCardData,
if (!pbuf) if (!pbuf)
return SCARD_E_NO_MEMORY; return SCARD_E_NO_MEMORY;
lg2 = pInfo->cbData;
pbuf2 = pCardData->pfnCspAlloc(pInfo->cbData); pbuf2 = pCardData->pfnCspAlloc(pInfo->cbData);
if (!pbuf2) { if (!pbuf2) {
pCardData->pfnCspFree(pbuf); pCardData->pfnCspFree(pbuf);
@ -4355,7 +4246,6 @@ DWORD WINAPI CardDeriveKey(__in PCARD_DATA pCardData,
__inout PCARD_DERIVE_KEY pAgreementInfo) __inout PCARD_DERIVE_KEY pAgreementInfo)
{ {
VENDOR_SPECIFIC *vs; VENDOR_SPECIFIC *vs;
DWORD dwAgreementIndex = 0;
struct md_dh_agreement* agreement = NULL; struct md_dh_agreement* agreement = NULL;
NCryptBufferDesc* parameters = NULL; NCryptBufferDesc* parameters = NULL;
ULONG i; ULONG i;
@ -4977,7 +4867,6 @@ DWORD WINAPI CardGetProperty(__in PCARD_DATA pCardData,
else if (wcscmp(CP_CARD_SERIAL_NO, wszProperty) == 0) { else if (wcscmp(CP_CARD_SERIAL_NO, wszProperty) == 0) {
unsigned char buf[64]; unsigned char buf[64];
size_t buf_len = sizeof(buf); size_t buf_len = sizeof(buf);
size_t sn_len = strlen(vs->p15card->tokeninfo->serial_number)/2;
if (sc_hex_to_bin(vs->p15card->tokeninfo->serial_number, buf, &buf_len)) { if (sc_hex_to_bin(vs->p15card->tokeninfo->serial_number, buf, &buf_len)) {
buf_len = strlen(vs->p15card->tokeninfo->serial_number); buf_len = strlen(vs->p15card->tokeninfo->serial_number);

View File

@ -878,6 +878,8 @@ pkcs15_add_object(struct sc_pkcs11_slot *slot, struct pkcs15_any_object *obj,
{ {
unsigned int i; unsigned int i;
struct pkcs15_fw_data *card_fw_data; struct pkcs15_fw_data *card_fw_data;
CK_OBJECT_HANDLE handle =
(CK_OBJECT_HANDLE)obj; /* cast pointer to long, will truncate on Win64 */
if (obj == NULL || slot == NULL) if (obj == NULL || slot == NULL)
return; return;
@ -888,11 +890,11 @@ pkcs15_add_object(struct sc_pkcs11_slot *slot, struct pkcs15_any_object *obj,
return; return;
if (pHandle != NULL) if (pHandle != NULL)
*pHandle = (CK_OBJECT_HANDLE)obj; /* cast pointer to long */ *pHandle = handle;
list_append(&slot->objects, obj); list_append(&slot->objects, obj);
sc_log(context, "Slot:%X Setting object handle of 0x%lx to 0x%lx", slot->id, obj->base.handle, (CK_OBJECT_HANDLE)obj); sc_log(context, "Slot:%X Setting object handle of 0x%lx to 0x%lx", slot->id, obj->base.handle, handle);
obj->base.handle = (CK_OBJECT_HANDLE)obj; /* cast pointer to long */ obj->base.handle = handle;
obj->base.flags |= SC_PKCS11_OBJECT_SEEN; obj->base.flags |= SC_PKCS11_OBJECT_SEEN;
obj->refcount++; obj->refcount++;

View File

@ -18,6 +18,9 @@
*/ */
#include "config.h" #include "config.h"
#if !defined(_MSC_VER) || _MSC_VER >= 1800
#include <inttypes.h>
#endif
#include <string.h> #include <string.h>
#ifdef ENABLE_OPENSSL #ifdef ENABLE_OPENSSL
@ -90,10 +93,18 @@ buf_spec(CK_VOID_PTR buf_addr, CK_ULONG buf_len)
{ {
static char ret[64]; static char ret[64];
#if !defined(_MSC_VER) || _MSC_VER >= 1800
const size_t prwidth = sizeof(CK_VOID_PTR) * 2;
sprintf(ret, "%0*"PRIxPTR" / %lu", (int) prwidth, (uintptr_t) buf_addr,
buf_len);
#else
if (sizeof(CK_VOID_PTR) == 4) if (sizeof(CK_VOID_PTR) == 4)
sprintf(ret, "%08lx / %ld", (unsigned long) buf_addr, (CK_LONG) buf_len); sprintf(ret, "%08lx / %lu", (unsigned long) buf_addr, buf_len);
else else
sprintf(ret, "%016lx / %ld", (unsigned long) buf_addr, (CK_LONG) buf_len); sprintf(ret, "%016llx / %lu", (unsigned long long) buf_addr,
buf_len);
#endif
return ret; return ret;
} }

View File

@ -19,6 +19,6 @@ libsmm_local_la_SOURCES = smm-local.c sm-module.h \
sm-card-authentic.c sm-card-iasecc.c \ sm-card-authentic.c sm-card-iasecc.c \
smm-local.exports smm-local.exports
libsmm_local_la_LIBADD = $(OPTIONAL_OPENSSL_LIBS) ../libopensc/libopensc.la libsmm_local_la_LIBADD = $(OPTIONAL_OPENSSL_LIBS) ../libopensc/libopensc.la
libsmm_local_la_LDFLAGS = -version-info @OPENSC_LT_CURRENT@:@OPENSC_LT_REVISION@:@OPENSC_LT_AGE@ libsmm_local_la_LDFLAGS = -no-undefined -version-info @OPENSC_LT_CURRENT@:@OPENSC_LT_REVISION@:@OPENSC_LT_AGE@
# noinst_HEADERS = sm.h # noinst_HEADERS = sm.h

View File

@ -22,6 +22,7 @@
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include <config.h> #include <config.h>
#endif #endif
#include <stdint.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@ -185,7 +186,7 @@ sm_iasecc_get_apdu_create_file(struct sc_context *ctx, struct sm_info *sm_info,
static int static int
sm_iasecc_get_apdu_delete_file(struct sc_context *ctx, struct sm_info *sm_info, struct sc_remote_data *rdata) sm_iasecc_get_apdu_delete_file(struct sc_context *ctx, struct sm_info *sm_info, struct sc_remote_data *rdata)
{ {
unsigned int file_id = (unsigned int)(long)sm_info->cmd_data; unsigned int file_id = (unsigned int)(uintptr_t)sm_info->cmd_data;
struct sc_remote_apdu *rapdu = NULL; struct sc_remote_apdu *rapdu = NULL;
int rv; int rv;

View File

@ -654,7 +654,7 @@ int main(int argc, char **argv)
#ifndef _WIN32 #ifndef _WIN32
execv(exec_program, largv); execv(exec_program, largv);
#else #else
_execv(exec_program, largv); _execv(exec_program, (const char * const*)largv);
#endif #endif
/* we should not get here */ /* we should not get here */
perror("execv()"); perror("execv()");