From 9f1d63a56c2c8860adf6b503be107064cf434481 Mon Sep 17 00:00:00 2001 From: martin Date: Fri, 5 Jan 2007 16:20:50 +0000 Subject: [PATCH] Allow to specify at compile time that a card will work only via pkcs15 emulation. This way no matter what is configured in the config file (try_emulation_first option) the card is usable via pkcs15 tools. git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@3099 c6295689-39f2-0310-b995-f0e70906c6a9 --- src/libopensc/pkcs15-syn.c | 10 ++++++++++ src/libopensc/pkcs15.c | 2 +- src/libopensc/pkcs15.h | 1 + 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/libopensc/pkcs15-syn.c b/src/libopensc/pkcs15-syn.c index e34758d9..d0bb4868 100644 --- a/src/libopensc/pkcs15-syn.c +++ b/src/libopensc/pkcs15-syn.c @@ -77,6 +77,16 @@ static const char *func_name = "sc_pkcs15_init_func"; static const char *exfunc_name = "sc_pkcs15_init_func_ex"; +int sc_pkcs15_is_emulation_only(sc_card_t *card) +{ + switch (card->type) { + case SC_CARD_TYPE_MCRD_ESTEID: + return 1; + default: + return 0; + } +} + int sc_pkcs15_bind_synthetic(sc_pkcs15_card_t *p15card) { diff --git a/src/libopensc/pkcs15.c b/src/libopensc/pkcs15.c index 113557cc..831c8fb4 100644 --- a/src/libopensc/pkcs15.c +++ b/src/libopensc/pkcs15.c @@ -725,7 +725,7 @@ int sc_pkcs15_bind(sc_card_t *card, enable_emu = scconf_get_bool(conf_block, "enable_pkcs15_emulation", 1); if (enable_emu) { emu_first = scconf_get_bool(conf_block, "try_emulation_first", 0); - if (emu_first) { + if (emu_first || sc_pkcs15_is_emulation_only(card)) { r = sc_pkcs15_bind_synthetic(p15card); if (r == SC_SUCCESS) goto done; diff --git a/src/libopensc/pkcs15.h b/src/libopensc/pkcs15.h index ae85bb59..0ae73c04 100644 --- a/src/libopensc/pkcs15.h +++ b/src/libopensc/pkcs15.h @@ -675,6 +675,7 @@ typedef struct sc_pkcs15emu_opt { #define SC_PKCS15EMU_FLAGS_NO_CHECK 0x00000001 extern int sc_pkcs15_bind_synthetic(sc_pkcs15_card_t *); +extern int sc_pkcs15_is_emulation_only(sc_card_t *); int sc_pkcs15emu_object_add(sc_pkcs15_card_t *p15card, unsigned int type, const sc_pkcs15_object_t *obj, const void *data);