From 7ffd68a9ee44bf3d55445a75d773a0225e23d104 Mon Sep 17 00:00:00 2001 From: martin Date: Sun, 21 Aug 2005 18:44:07 +0000 Subject: [PATCH] Make the pcsc pinpad option work. git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@2503 c6295689-39f2-0310-b995-f0e70906c6a9 --- src/libopensc/card.c | 4 ++-- src/libopensc/internal.h | 2 +- src/libopensc/reader-pcsc.c | 6 ++++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/libopensc/card.c b/src/libopensc/card.c index 8599dc2d..7a931a09 100644 --- a/src/libopensc/card.c +++ b/src/libopensc/card.c @@ -1122,7 +1122,7 @@ int _sc_check_forced_protocol(sc_context_t *ctx, u8 *atr, size_t atr_len, unsign return ok; } -scconf_block *_get_conf_block(sc_context_t *ctx, const char *name1, const char *name2) +scconf_block *_get_conf_block(sc_context_t *ctx, const char *name1, const char *name2, u8 priority) { int i; scconf_block *conf_block = NULL; @@ -1133,7 +1133,7 @@ scconf_block *_get_conf_block(sc_context_t *ctx, const char *name1, const char * blocks = scconf_find_blocks(ctx->conf, ctx->conf_blocks[i], name1, name2); conf_block = blocks[0]; free(blocks); - if (conf_block != NULL) + if (conf_block != NULL && priority) break; } return conf_block; diff --git a/src/libopensc/internal.h b/src/libopensc/internal.h index 41f7224a..af392a3e 100644 --- a/src/libopensc/internal.h +++ b/src/libopensc/internal.h @@ -87,7 +87,7 @@ struct sc_algorithm_info * _sc_card_find_rsa_alg(struct sc_card *card, int sc_asn1_read_tag(const u8 ** buf, size_t buflen, unsigned int *cla_out, unsigned int *tag_out, size_t *taglen); -scconf_block *_get_conf_block(sc_context_t *ctx, const char *name1, const char *name2); +scconf_block *_get_conf_block(sc_context_t *ctx, const char *name1, const char *name2, u8 priority); #ifdef __cplusplus } diff --git a/src/libopensc/reader-pcsc.c b/src/libopensc/reader-pcsc.c index 0e5e81e0..62d3b71f 100644 --- a/src/libopensc/reader-pcsc.c +++ b/src/libopensc/reader-pcsc.c @@ -547,6 +547,12 @@ static int pcsc_init(sc_context_t *ctx, void **reader_data) return SC_ERROR_OUT_OF_MEMORY; } gpriv->pcsc_ctx = pcsc_ctx; + + conf_block = _get_conf_block(ctx, "reader_driver", "pcsc", 1); + if (conf_block) { + gpriv->enable_pinpad = + scconf_get_bool(conf_block, "enable_pinpad", 0); + } *reader_data = gpriv; reader_buf = (char *) malloc(sizeof(char) * reader_buf_size);