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);