deactivate emulators sm context, when host sends sm protected apdus

git-svn-id: https://vsmartcard.svn.sourceforge.net/svnroot/vsmartcard@279 96b47cad-a561-4643-ad3b-153ac7d7599c
This commit is contained in:
frankmorgner
2010-09-25 05:20:20 +00:00
parent d195ea474a
commit e4bee2861e
2 changed files with 7 additions and 6 deletions

View File

@@ -53,7 +53,7 @@ struct sm_ctx {
sc_apdu_t *sm_apdu); sc_apdu_t *sm_apdu);
}; };
int sm_transmit_apdu(const struct sm_ctx *sctx, sc_card_t *card, int sm_transmit_apdu(struct sm_ctx *sctx, sc_card_t *card,
sc_apdu_t *apdu); sc_apdu_t *apdu);
#ifdef __cplusplus #ifdef __cplusplus

View File

@@ -579,7 +579,7 @@ err:
return r; return r;
} }
int sm_transmit_apdu(const struct sm_ctx *sctx, sc_card_t *card, int sm_transmit_apdu(struct sm_ctx *sctx, sc_card_t *card,
sc_apdu_t *apdu) sc_apdu_t *apdu)
{ {
sc_apdu_t sm_apdu; sc_apdu_t sm_apdu;
@@ -590,13 +590,14 @@ int sm_transmit_apdu(const struct sm_ctx *sctx, sc_card_t *card,
sm_apdu.resp = rbuf; sm_apdu.resp = rbuf;
sm_apdu.resplen = sizeof rbuf; sm_apdu.resplen = sizeof rbuf;
if ((apdu->cla & 0x0C) == 0x0C) { if (!sctx || !sctx->active) {
sc_debug(card->ctx, "Given APDU is already protected with some secure messaging."); sc_debug(card->ctx, "Secure messaging disabled.");
return sc_transmit_apdu(card, apdu); return sc_transmit_apdu(card, apdu);
} }
if (!sctx || !sctx->active) { if ((apdu->cla & 0x0C) == 0x0C) {
sc_debug(card->ctx, "Secure messaging disabled."); sc_debug(card->ctx, "Given APDU is already protected with some secure messaging. Deactivating own SM context.");
sctx->active = 0;
return sc_transmit_apdu(card, apdu); return sc_transmit_apdu(card, apdu);
} }