void cfg_p11token (char *item, int itemno, char *value) { unsigned int token_seq = 0; char *p11uri; #ifdef DEBUG fprintf (stdout, "DEBUG: DECLARE %s AS %s\n", item, value); #endif if (!configvars [CFGVAR_PKCS11_PATH]) { fprintf (stderr, "You must specify pkcs11_path before any number of pkcs11_token\n"); exit (1); } if (gnutls_pkcs11_add_provider (configvars [CFGVAR_PKCS11_PATH], NULL) != 0) { fprintf (stderr, "Failed to register PKCS #11 library %s with GnuTLS\n", configvars [CFGVAR_PKCS11_PATH]); exit (1); } while (gnutls_pkcs11_token_get_url (token_seq, 0, &p11uri) == 0) { #ifdef DEBUG printf ("DEBUG: Found token URI %s\n", p11uri); #endif //TODO// if (gnutls_pkcs11_token_get_info (p11uri, GNUTLS_PKCS11_TOKEN_LABEL-of-SERIAL-of-MANUFACTURER-of-MODEL, output, utput_size) == 0) { ... } gnutls_free (p11uri); token_seq++; } //TODO// Select token by name (value) //TODO// if PIN available then set it up //TODO:WHY?// free_p11pin (); }
/* If there is a single token only present, return its URL. */ static char *get_single_token_url(common_info_st * info) { int ret; char *url = NULL, *t = NULL; pkcs11_common(info); ret = gnutls_pkcs11_token_get_url(0, 0, &url); if (ret < 0) return NULL; ret = gnutls_pkcs11_token_get_url(1, 0, &t); if (ret != GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) { gnutls_free(t); gnutls_free(url); return NULL; } return url; }
void pkcs11_token_list(FILE * outfile, unsigned int detailed, common_info_st * info, unsigned brief) { int ret; int i; char *url; char buf[128]; size_t size; unsigned flags; pkcs11_common(info); for (i = 0;; i++) { ret = gnutls_pkcs11_token_get_url(i, detailed, &url); if (ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) break; if (ret < 0) { fprintf(stderr, "Error in %s:%d: %s\n", __func__, __LINE__, gnutls_strerror(ret)); exit(1); } if (brief != 0) { fprintf(outfile, "%s\n", url); goto cont; } else { fprintf(outfile, "Token %d:\n\tURL: %s\n", i, url); } size = sizeof(buf); ret = gnutls_pkcs11_token_get_info(url, GNUTLS_PKCS11_TOKEN_LABEL, buf, &size); if (ret < 0) { fprintf(stderr, "Error in %s:%d: %s\n", __func__, __LINE__, gnutls_strerror(ret)); exit(1); } fprintf(outfile, "\tLabel: %s\n", buf); ret = gnutls_pkcs11_token_get_flags(url, &flags); if (ret < 0) { fprintf(stderr, "Error in %s:%d: %s\n", __func__, __LINE__, gnutls_strerror(ret)); } else { print_type(outfile, flags); } size = sizeof(buf); ret = gnutls_pkcs11_token_get_info(url, GNUTLS_PKCS11_TOKEN_MANUFACTURER, buf, &size); if (ret < 0) { fprintf(stderr, "Error in %s:%d: %s\n", __func__, __LINE__, gnutls_strerror(ret)); exit(1); } fprintf(outfile, "\tManufacturer: %s\n", buf); size = sizeof(buf); ret = gnutls_pkcs11_token_get_info(url, GNUTLS_PKCS11_TOKEN_MODEL, buf, &size); if (ret < 0) { fprintf(stderr, "Error in %s:%d: %s\n", __func__, __LINE__, gnutls_strerror(ret)); exit(1); } fprintf(outfile, "\tModel: %s\n", buf); size = sizeof(buf); ret = gnutls_pkcs11_token_get_info(url, GNUTLS_PKCS11_TOKEN_SERIAL, buf, &size); if (ret < 0) { fprintf(stderr, "Error in %s:%d: %s\n", __func__, __LINE__, gnutls_strerror(ret)); exit(1); } fprintf(outfile, "\tSerial: %s\n", buf); size = sizeof(buf); ret = gnutls_pkcs11_token_get_info(url, GNUTLS_PKCS11_TOKEN_MODNAME, buf, &size); if (ret >= 0) { fprintf(outfile, "\tModule: %s\n", buf); } fprintf(outfile, "\n\n"); cont: gnutls_free(url); } return; }