From 96faa24bd52103ff15c0ce7970bacd457ecf01d8 Mon Sep 17 00:00:00 2001 From: Karl Mikaelsson Date: Wed, 4 Oct 2017 15:18:46 +0200 Subject: [PATCH 1/2] 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); From dca441c4e6c2fd4c1329421d7f1435d9e6822795 Mon Sep 17 00:00:00 2001 From: Karl Mikaelsson Date: Wed, 4 Oct 2017 17:11:02 +0200 Subject: [PATCH 2/2] Don't log warnings/errors from TS_SCardGetStatusChange at all Not sure why I thought the user needed to see this at all. --- scard.c | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/scard.c b/scard.c index 3b36841..ab9dc53 100644 --- a/scard.c +++ b/scard.c @@ -1248,17 +1248,6 @@ TS_SCardGetStatusChange(STREAM in, STREAM out, RD_BOOL wide) "TS_SCardGetStatusChange(), SCardGetStatusChange returned \"%s\" (0x%08x)", pcsc_stringify_error(rv), rv); - switch (rv) - { - 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); out_uint32_le(out, 0x00084dd8); out_uint32_le(out, dwCount);