From 96faa24bd52103ff15c0ce7970bacd457ecf01d8 Mon Sep 17 00:00:00 2001 From: Karl Mikaelsson Date: Wed, 4 Oct 2017 15:18:46 +0200 Subject: [PATCH] Don't log common Smart Card error codes as rdesktop errors The proper thing to do would be to forward the errors to the server and let it deal with it. No need to present these as errors to the user. --- scard.c | 80 +++++++++++++++++++++++++++++++++------------------------ 1 file changed, 46 insertions(+), 34 deletions(-) diff --git a/scard.c b/scard.c index d30660f..3b36841 100644 --- a/scard.c +++ b/scard.c @@ -4,6 +4,7 @@ Copyright (C) Alexi Volkov 2006 Copyright 2010-2013 Pierre Ossman for Cendio AB Copyright 2011-2017 Henrik Andersson for Cendio AB + Copyright 2017 Karl Mikaelsson for Cendio AB This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -925,39 +926,45 @@ TS_SCardConnect(STREAM in, STREAM out, RD_BOOL wide) hCard = _scard_handle_list_get_server_handle(myHCard); } - if (rv != SCARD_S_SUCCESS) + switch (rv) { - logger(SmartCard, Error, "TS_SCardConnect(), failed: %s (0x%08x)", - pcsc_stringify_error(rv), (unsigned int) rv); - } - else - { - char *szVendor = getVendor(szReader); - logger(SmartCard, Debug, "TS_SCardConnect(), success, hcard: 0x%08x [0x%lx]", - (unsigned) hCard, myHCard); - - if (szVendor && (strlen(szVendor) > 0)) - { - logger(SmartCard, Debug, - "TS_SCardConnect(), set attribute ATTR_VENDOR_NAME"); - pthread_mutex_lock(&hcardAccess); - PSCHCardRec hcard = xmalloc(sizeof(TSCHCardRec)); - if (hcard) + case SCARD_S_SUCCESS: { - hcard->hCard = hCard; - hcard->vendor = szVendor; - hcard->next = NULL; - hcard->prev = NULL; + char *szVendor = getVendor(szReader); + logger(SmartCard, Debug, + "TS_SCardConnect(), success, hcard: 0x%08x [0x%lx]", + (unsigned) hCard, myHCard); - if (hcardFirst) + if (szVendor && (strlen(szVendor) > 0)) { - hcardFirst->prev = hcard; - hcard->next = hcardFirst; + logger(SmartCard, Debug, + "TS_SCardConnect(), set attribute ATTR_VENDOR_NAME"); + pthread_mutex_lock(&hcardAccess); + PSCHCardRec hcard = xmalloc(sizeof(TSCHCardRec)); + if (hcard) + { + hcard->hCard = hCard; + hcard->vendor = szVendor; + hcard->next = NULL; + hcard->prev = NULL; + + if (hcardFirst) + { + hcardFirst->prev = hcard; + hcard->next = hcardFirst; + } + hcardFirst = hcard; + } + pthread_mutex_unlock(&hcardAccess); } - hcardFirst = hcard; } - pthread_mutex_unlock(&hcardAccess); - } + break; + + default: + logger(SmartCard, Debug, + "TS_SCardConnect(), SCardConnect failed: %s (0x%08x)", + pcsc_stringify_error(rv), rv); + break; } out_uint32_le(out, 0x00000000); @@ -1237,14 +1244,19 @@ TS_SCardGetStatusChange(STREAM in, STREAM out, RD_BOOL wide) myRsArray, (MYPCSC_DWORD) dwCount); copyReaderState_MyPCSCToServer(myRsArray, rsArray, (MYPCSC_DWORD) dwCount); - if (rv != SCARD_S_SUCCESS) + logger(SmartCard, Debug, + "TS_SCardGetStatusChange(), SCardGetStatusChange returned \"%s\" (0x%08x)", + pcsc_stringify_error(rv), rv); + + switch (rv) { - logger(SmartCard, Error, "TS_SCardGetStatusChange(), failed: %s (0x%08x)", - pcsc_stringify_error(rv), (unsigned int) rv); - } - else - { - logger(SmartCard, Debug, "TS_SCardGetStatusChange(), success"); + case SCARD_S_SUCCESS: + case SCARD_E_TIMEOUT: + break; + default: + logger(SmartCard, Warning, + "TS_SCardGetStatusChange(), unhandled error from SCardGetStatusChange: %s (0x%08x)", + pcsc_stringify_error(rv), rv); } out_uint32_le(out, dwCount);