diff --git a/src/libopensc/card-cac.c b/src/libopensc/card-cac.c index d5f85852..51f5ceed 100644 --- a/src/libopensc/card-cac.c +++ b/src/libopensc/card-cac.c @@ -430,8 +430,9 @@ static int cac_read_file(sc_card_t *card, int file_type, u8 **out_buf, size_t *o goto fail; 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)", - len, (unsigned long) out_ptr, (unsigned long)&count, count[0], count[1], size, size); + sc_debug(card->ctx, SC_LOG_DEBUG_VERBOSE, + "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); if (out == NULL) { 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->value[0], in_path->value[1], in_path->value[2], in_path->value[3], in_path->len, 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, - in_path->index, in_path->count); + sc_debug(card->ctx, SC_LOG_DEBUG_VERBOSE, "file_out=%p index=%d count=%d\n", + file_out, in_path->index, in_path->count); /* 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 diff --git a/src/libopensc/card.c b/src/libopensc/card.c index 73f8ede6..a661a4c7 100644 --- a/src/libopensc/card.c +++ b/src/libopensc/card.c @@ -1243,7 +1243,7 @@ sc_card_sm_load(struct sc_card *card, const char *module_path, const char *in_mo char *module = NULL; #ifdef _WIN32 char temp_path[PATH_MAX]; - int temp_len; + size_t temp_len; const char path_delim = '\\'; #else const char path_delim = '/'; diff --git a/src/libopensc/ctx.c b/src/libopensc/ctx.c index 54155b4d..b93e4c2f 100644 --- a/src/libopensc/ctx.c +++ b/src/libopensc/ctx.c @@ -141,8 +141,7 @@ sc_ctx_win32_get_config_value(char *name_env, char *name_reg, char *name_key, #ifdef _WIN32 char temp[PATH_MAX + 1]; char *value = NULL; - int temp_len = PATH_MAX; - int rv = SC_ERROR_INTERNAL; + DWORD temp_len = PATH_MAX; long rc; HKEY hKey; diff --git a/src/libopensc/iasecc-sm.c b/src/libopensc/iasecc-sm.c index 738ca89f..d92d8f14 100644 --- a/src/libopensc/iasecc-sm.c +++ b/src/libopensc/iasecc-sm.c @@ -20,6 +20,7 @@ */ #include +#include #include #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); 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); rv = iasecc_sm_cmd(card, &rdata); diff --git a/src/libopensc/reader-pcsc.c b/src/libopensc/reader-pcsc.c index bc33cfcc..f84c9cac 100644 --- a/src/libopensc/reader-pcsc.c +++ b/src/libopensc/reader-pcsc.c @@ -49,12 +49,28 @@ #define SCARD_CLASS_SYSTEM 0x7fff #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) +#endif + +#ifndef SCARD_ATTR_DEVICE_SYSTEM_NAME_A #define SCARD_ATTR_DEVICE_SYSTEM_NAME_A SCARD_ATTR_VALUE(SCARD_CLASS_SYSTEM, 0x0004) +#endif + #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. */ +#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). */ +#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). */ +#endif /* 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) @@ -836,7 +852,7 @@ static int pcsc_finish(sc_context_t *ctx) LOG_FUNC_CALLED(ctx); 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); if (gpriv->dlhandle != NULL) sc_dlclose(gpriv->dlhandle); @@ -1170,7 +1186,7 @@ static int pcsc_detect_readers(sc_context_t *ctx) sc_log(ctx, "Probing PC/SC readers"); do { - if (gpriv->pcsc_ctx == -1) { + if (gpriv->pcsc_ctx == (SCARDCONTEXT)-1) { /* * Cannot call SCardListReaders with -1 * context as in Windows ERROR_INVALID_HANDLE @@ -1220,7 +1236,7 @@ static int pcsc_detect_readers(sc_context_t *ctx) goto out; } 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; scconf_block *conf_block = NULL; int found = 0; @@ -2226,8 +2242,6 @@ static int cardmod_connect(sc_reader_t *reader) static int cardmod_disconnect(sc_reader_t * reader) { - struct pcsc_private_data *priv = GET_PRIV_DATA(reader); - reader->flags = 0; 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; struct pcsc_global_private_data *gpriv = (struct pcsc_global_private_data *) ctx->reader_drv_data; LONG rv; - char reader_name[128]; - DWORD rcount, feature_len, display_ioctl, reader_name_size = sizeof(reader_name); + BYTE reader_name[128]; + DWORD rcount, feature_len, display_ioctl = 0, reader_name_size = sizeof(reader_name); int ret = SC_ERROR_INTERNAL; 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->ops = &cardmod_ops; 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; goto err1; } diff --git a/src/minidriver/minidriver.c b/src/minidriver/minidriver.c index 807f059a..6724bd46 100644 --- a/src/minidriver/minidriver.c +++ b/src/minidriver/minidriver.c @@ -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 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_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); } -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 * 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); } - -/* 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)*/ static VOID md_generate_guid( __in_ecount(MAX_CONTAINER_NAME_LEN+1) PSTR szGuid) { 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 */ static VOID 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 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; DWORD dwret = SCARD_S_SUCCESS; - vs = (VENDOR_SPECIFIC*) pCardData->pvVendorSpecific; - szGuid[0] = '\0'; /* 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) { @@ -724,7 +675,7 @@ md_fs_find_directory(PCARD_DATA pCardData, struct md_directory *parent, char *na dir = parent->subdirs; while(dir) { if (strlen(name) > sizeof dir->name - || !strncmp(dir->name, name, sizeof dir->name)) + || !strncmp((char *)dir->name, name, sizeof dir->name)) break; 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; 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; if (*head == NULL) { @@ -780,7 +731,6 @@ md_fs_add_directory(PCARD_DATA pCardData, struct md_directory **head, char *name static DWORD 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_directory *dir = NULL; DWORD dwret; @@ -791,8 +741,6 @@ md_fs_find_file(PCARD_DATA pCardData, char *parent, char *name, struct md_file * if (!pCardData || !name) return SCARD_E_INVALID_PARAMETER; - vs = pCardData->pvVendorSpecific; - dwret = md_fs_find_directory(pCardData, NULL, parent, &dir); if (dwret != SCARD_S_SUCCESS) { logprintf(pCardData, 2, "find directory '%s' error: %X\n", parent ? parent : "", 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;) { if (sizeof file->name < strlen(name) - || !strncmp(file->name, name, sizeof file->name)) + || !strncmp((char *)file->name, name, sizeof file->name)) break; 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; 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->acl = acl; @@ -911,7 +859,7 @@ md_fs_delete_file(PCARD_DATA pCardData, char *parent, char *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; dir->files = dir->files->next; 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) break; 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->next = file->next->next; 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; CONTAINER_MAP_RECORD *pp; - DWORD dwret = SCARD_F_INTERNAL_ERROR; int nn_records, idx; 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); file->size = size; - if (!strcmp(file->name, "cmapfile")) + if (!strcmp((char *)file->name, "cmapfile")) return md_pkcs15_update_containers(pCardData, blob, size); 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}; HCERTSTORE hCertStore = NULL; - DWORD dwret = 0; VENDOR_SPECIFIC *vs; int rv, ii, cert_num; struct sc_pkcs15_object *prkey_objs[MD_MAX_KEY_CONTAINERS]; hCertStore = CertOpenStore(CERT_STORE_PROV_MEMORY, X509_ASN_ENCODING, (HCRYPTPROV_LEGACY) NULL, 0, NULL); if (!hCertStore) { - dwret = GetLastError(); 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, &dbStore, 0)) { - dwret = GetLastError(); goto Ret; } dbStore.pbData = (PBYTE) pCardData->pfnCspAlloc(dbStore.cbData); if (NULL == dbStore.pbData) { - dwret = ERROR_NOT_ENOUGH_MEMORY; goto Ret; } @@ -1231,7 +1174,6 @@ md_fs_read_msroots_file(PCARD_DATA pCardData, char *parent, struct md_file *file &dbStore, 0)) { - dwret = GetLastError(); goto Ret; } file->size = dbStore.cbData; @@ -1272,12 +1214,12 @@ md_fs_read_content(PCARD_DATA pCardData, char *parent, struct md_file *file) return; } - if (!strcmp(dir->name, "mscp")) { + if (!strcmp((char *)dir->name, "mscp")) { 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 { 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); sc_pkcs15_free_certificate(cert); } - if (!strcmp(file->name, "msroots")) { + if (!strcmp((char *)file->name, "msroots")) { 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 md_set_cardcf(PCARD_DATA pCardData, struct md_file *file) { - VENDOR_SPECIFIC *vs; - char *last_update = NULL; CARD_CACHE_FILE_FORMAT empty = {0}; - size_t empty_len = sizeof(empty); DWORD dwret; if (!pCardData || !file) return SCARD_E_INVALID_PARAMETER; - vs = pCardData->pvVendorSpecific; - dwret = md_fs_set_content(pCardData, file, (unsigned char *)(&empty), MD_CARDCF_LENGTH); if (dwret != SCARD_S_SUCCESS) return dwret; @@ -1339,31 +1276,6 @@ md_set_cardcf(PCARD_DATA pCardData, struct md_file *file) 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 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; PCONTAINER_MAP_RECORD p; - sc_pkcs15_pubkey_t *pubkey = NULL; unsigned char *cmap_buf = NULL; size_t cmap_len; 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 */ 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 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 */ p = (PCONTAINER_MAP_RECORD)cmap_buf; for (ii=0; iip15_containers[ii].flags & CONTAINER_MAP_VALID_CONTAINER)) 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)) { 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.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)) { 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.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)) { 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.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); card = vs->p15card->card; - pkey = b2i_PrivateKey(&ptr, blob_size); + pkey = b2i_PrivateKey((const unsigned char **)&ptr, blob_size); if (!pkey) { logprintf(pCardData, 1, "MdStoreKey() MSBLOB key parse error"); 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 */ idx = -1; - if(sscanf_s(file_name, "ksc%d", &idx) > 0) - ; - else if(sscanf_s(file_name, "kxc%d", &idx) > 0) - ; + if(sscanf_s(file_name, "ksc%d", &idx) > 0) { + } else if(sscanf_s(file_name, "kxc%d", &idx) > 0) { + } if (idx >= 0 && idx < MD_MAX_KEY_CONTAINERS) { 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; 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) 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]; INT_PTR result = 0; - HWND hWndDlg = 0; int rv = 0; VENDOR_SPECIFIC* pv = (VENDOR_SPECIFIC*)(pCardData->pvVendorSpecific); /* stack the parameters */ @@ -2652,12 +2559,10 @@ DWORD WINAPI CardCreateContainer(__in PCARD_DATA pCardData, __in DWORD dwKeySize, __in PBYTE pbKeyData) { - VENDOR_SPECIFIC *vs = NULL; DWORD dwret; if (!pCardData) 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, "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; if (bContainerIndex >= MD_MAX_KEY_CONTAINERS) 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; pContainerInfo->dwVersion = CONTAINER_INFO_CURRENT_VERSION; @@ -3189,8 +3094,6 @@ DWORD WINAPI CardReadFile(__in PCARD_DATA pCardData, __deref_out_bcount_opt(*pcbData) PBYTE *ppbData, __out PDWORD pcbData) { - VENDOR_SPECIFIC *vs; - struct md_directory *dir = NULL; struct md_file *file = NULL; 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) return SCARD_E_INVALID_PARAMETER; - vs = (VENDOR_SPECIFIC*)(pCardData->pvVendorSpecific); - logprintf(pCardData, 2, "pszDirectoryName = %s, pszFileName = %s, dwFlags = %X, pcbData=%u, *ppbData=%X\n", NULLSTR(pszDirectoryName), NULLSTR(pszFileName), dwFlags, *pcbData, *ppbData); @@ -3290,7 +3191,6 @@ DWORD WINAPI CardDeleteFile(__in PCARD_DATA pCardData, __in LPSTR pszFileName, __in DWORD dwFlags) { - struct md_file *file = NULL; DWORD dwret; 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; for (offs = 0; file != NULL && offs < sizeof(mstr) - 10;) { logprintf(pCardData, 2, "enum files(): file name '%s'\n", file->name); - strcpy_s(mstr+offs, sizeof(mstr) - offs, file->name); - offs += strlen(file->name) + 1; + strcpy_s(mstr+offs, sizeof(mstr) - offs, (char *)file->name); + offs += strlen((char *)file->name) + 1; file = file->next; } mstr[offs] = 0; @@ -3373,15 +3273,11 @@ DWORD WINAPI CardGetFileInfo(__in PCARD_DATA pCardData, __in LPSTR pszFileName, __inout PCARD_FILE_INFO pCardFileInfo) { - VENDOR_SPECIFIC *vs = NULL; - struct md_directory *dir = NULL; struct md_file *file = NULL; 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); - vs = (VENDOR_SPECIFIC*)(pCardData->pvVendorSpecific); - md_fs_find_file(pCardData, pszDirectoryName, pszFileName, &file); if (!file) { 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, __inout PCARD_FREE_SPACE_INFO pCardFreeSpaceInfo) { - VENDOR_SPECIFIC *vs; DWORD dwret; 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) return SCARD_E_INVALID_PARAMETER; - vs = (VENDOR_SPECIFIC*)(pCardData->pvVendorSpecific); - check_reader_status(pCardData); dwret = md_free_space(pCardData, pCardFreeSpaceInfo); @@ -3461,7 +3354,6 @@ DWORD WINAPI CardRSADecrypt(__in PCARD_DATA pCardData, VENDOR_SPECIFIC *vs; struct sc_pkcs15_prkey_info *prkey_info; BYTE *pbuf = NULL, *pbuf2 = NULL; - DWORD lg= 0, lg2 = 0; struct sc_pkcs15_object *pkey = NULL; struct sc_algorithm_info *alg_info = NULL; @@ -3506,7 +3398,6 @@ DWORD WINAPI CardRSADecrypt(__in PCARD_DATA pCardData, if (!pbuf) return SCARD_E_NO_MEMORY; - lg2 = pInfo->cbData; pbuf2 = pCardData->pfnCspAlloc(pInfo->cbData); if (!pbuf2) { pCardData->pfnCspFree(pbuf); @@ -4355,7 +4246,6 @@ DWORD WINAPI CardDeriveKey(__in PCARD_DATA pCardData, __inout PCARD_DERIVE_KEY pAgreementInfo) { VENDOR_SPECIFIC *vs; - DWORD dwAgreementIndex = 0; struct md_dh_agreement* agreement = NULL; NCryptBufferDesc* parameters = NULL; ULONG i; @@ -4977,7 +4867,6 @@ DWORD WINAPI CardGetProperty(__in PCARD_DATA pCardData, else if (wcscmp(CP_CARD_SERIAL_NO, wszProperty) == 0) { unsigned char buf[64]; 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)) { buf_len = strlen(vs->p15card->tokeninfo->serial_number); diff --git a/src/pkcs11/framework-pkcs15.c b/src/pkcs11/framework-pkcs15.c index 0c89d47a..545a22fc 100644 --- a/src/pkcs11/framework-pkcs15.c +++ b/src/pkcs11/framework-pkcs15.c @@ -878,6 +878,8 @@ pkcs15_add_object(struct sc_pkcs11_slot *slot, struct pkcs15_any_object *obj, { unsigned int i; 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) return; @@ -888,11 +890,11 @@ pkcs15_add_object(struct sc_pkcs11_slot *slot, struct pkcs15_any_object *obj, return; if (pHandle != NULL) - *pHandle = (CK_OBJECT_HANDLE)obj; /* cast pointer to long */ + *pHandle = handle; 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); - obj->base.handle = (CK_OBJECT_HANDLE)obj; /* cast pointer to long */ + sc_log(context, "Slot:%X Setting object handle of 0x%lx to 0x%lx", slot->id, obj->base.handle, handle); + obj->base.handle = handle; obj->base.flags |= SC_PKCS11_OBJECT_SEEN; obj->refcount++; diff --git a/src/pkcs11/pkcs11-display.c b/src/pkcs11/pkcs11-display.c index 652c6f63..a05a7f93 100644 --- a/src/pkcs11/pkcs11-display.c +++ b/src/pkcs11/pkcs11-display.c @@ -18,6 +18,9 @@ */ #include "config.h" +#if !defined(_MSC_VER) || _MSC_VER >= 1800 +#include +#endif #include #ifdef ENABLE_OPENSSL @@ -90,10 +93,18 @@ buf_spec(CK_VOID_PTR buf_addr, CK_ULONG buf_len) { 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) - sprintf(ret, "%08lx / %ld", (unsigned long) buf_addr, (CK_LONG) buf_len); + sprintf(ret, "%08lx / %lu", (unsigned long) buf_addr, buf_len); 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; } diff --git a/src/smm/Makefile.am b/src/smm/Makefile.am index 7c707ca0..d63606d6 100644 --- a/src/smm/Makefile.am +++ b/src/smm/Makefile.am @@ -19,6 +19,6 @@ libsmm_local_la_SOURCES = smm-local.c sm-module.h \ sm-card-authentic.c sm-card-iasecc.c \ smm-local.exports 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 diff --git a/src/smm/sm-card-iasecc.c b/src/smm/sm-card-iasecc.c index d9770d77..89860d2a 100644 --- a/src/smm/sm-card-iasecc.c +++ b/src/smm/sm-card-iasecc.c @@ -22,6 +22,7 @@ #ifdef HAVE_CONFIG_H #include #endif +#include #include #include @@ -185,7 +186,7 @@ sm_iasecc_get_apdu_create_file(struct sc_context *ctx, struct sm_info *sm_info, static int 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; int rv; diff --git a/src/tools/openpgp-tool.c b/src/tools/openpgp-tool.c index 920a2dce..e1fa2565 100644 --- a/src/tools/openpgp-tool.c +++ b/src/tools/openpgp-tool.c @@ -654,7 +654,7 @@ int main(int argc, char **argv) #ifndef _WIN32 execv(exec_program, largv); #else - _execv(exec_program, largv); + _execv(exec_program, (const char * const*)largv); #endif /* we should not get here */ perror("execv()");