2.5.1: Ludovic Rousseau
10 June 2026
- Fix a bug (introduced in 2.5.0) with multi-slots readers
- Add support of Haiku Operating System

2.5.0: Ludovic Rousseau
27 May 2026
- Do not limit to 16 readers only
- Remove support of autotools
- Fix a crash when rescanning serial configs
- Fix a memory leak in Polkit
- tokenparser: avoid a crash with corrupted Info.plist files
- Some other minor improvements

2.4.1: Ludovic Rousseau
1 January 2026
- Add backward version support on the client side
- Add backward version support on the server side
- hotplug libudev: rescan the USB bus with "pcscd --hotplug"
- fix a value in pcscd.service systemd file
- meson: install systemd files even if libsystemd is not used
- Some other minor improvements

2.4.0: Ludovic Rousseau
19 October 2025
- Run pcscd under a pcscd user instead of root when using systemd
- Set PIDFile in systemd service file
- Protect contextMapList modifications using a mutex
- meson:
  . Fix libpcsclite.pc file
  . respect builtin meson default_library option
  . build and install spy lib & tool only when needed
- UnitaryTests/*.py: fix pylint warnings
- Improve Doxygen documentation

2.3.3: Ludovic Rousseau
2 April 2025
- Make polkit rules work again (bug introduced in 2.3.2)

2.3.2: Ludovic Rousseau
26 March 2025
- Hardening systemd pcscd.service file
- pcscd.service: add missing Requires=polkit.service
- pcsc-spy: add missing PCSCv2_PART10_PROPERTY_* definitions
- Support udev PCSCLITE_IGNORE property to filter readers
- debuglog: force use of colors when --color is used
- Some other minor improvements

2.3.1: Ludovic Rousseau
24 December 2024
- Install a default /etc/default/pcscd file
- auth.c: implement polkit support for FreeBSD
- meson:
  . also build static version of libpcsclite
  . add options to disable polkit and libsystemd
  . add "filter_names" in features when needed
- Doxygen: document dwCurrentState use for "\\?PnP?\Notification"
- Some other minor improvements

2.3.0: Ludovic Rousseau
3 August 2024
- SCardGetStatusChange(): add the number of reader events
- Add Appstream metainfo announcing HW support
- meson: specify minimum meson version to use
- fix formats under musl libc
- Send libpcsclite.so logs to stderr instead of stdout
- Some other minor improvements

2.2.3: Ludovic Rousseau
26 May 2024
- meson:
  . Fix build on Slackware 15
  . fail if both libusb and libudev are used
- Fix memory leak on exit
- libpcscspy: dump an output buffer only if the call succeeded
- Some code cleanup

2.2.2: Ludovic Rousseau
20 May 2024
- Serial support is ENABLED by default

2.2.1: Ludovic Rousseau
8 May 2024
- fix meson related issues
- Some code cleanup

2.2.0: Ludovic Rousseau
3 May 2024
- provide files for meson build tool (replaces autoconf/auoomake)
- fix a missing symbol in libpcscspy (bug introduced by the previous version)
- fix shutdown issues with hotplug_libusb
- update pcsc-spy manpage
- update copyright date
- Some other minor improvements

2.1.0: Ludovic Rousseau
12 April 2024
- LIBPCSCLITE_DELEGATE is used to redirect to another libpcsclite library
- setup_spy.sh displays the LIBPCSCLITE_DELEGATE value to use for spying
- provides libfake.c as a sample source code
- Some other minor improvements

2.0.3: Ludovic Rousseau
3 March 2024
- add SCARD_E_UNKNOWN_RES_MNG back

2.0.2: Ludovic Rousseau
3 March 2024
- SCardConnect() & SCardReconnect(): restrict the protocol used
- negotiate PTS also for the backup protocol
- pcscd.8:
  . document --disable-polkit
  . add "CONFIGURATION FILE" section
- Some other minor improvements

2.0.1: Ludovic Rousseau
24 November 2023
- SCardConnect(): return SCARD_W_SECURITY_VIOLATION when needed (polkit)
- SCardCancel(): return SCARD_S_SUCCESS even if the client already finished
- polkit is enabled by default
- libpcscspy: fix a crash with NULL pointers
- Doxygen: fix SCardBeginTransaction() documentation
- fix pcscd internal thread safety issues (clang -fsanitize=thread)
- Some other minor improvements


9 June 2023
2.0.0: Ludovic Rousseau
9 June 2023
- Adjust USB drivers path at run-time via environment variable PCSCLITE_HP_DROPDIR
- Add '--disable-polkit' option
- Reset eventCounter when a reader is removed
- Add "polkit" in "pcscd -v" output if enabled
- Doxygen: document SCARD_E_INVALID_VALUE for some functions
- use secure_getenv(3) if available
- Some other minor improvements


1.9.9: Ludovic Rousseau
11 September 2022
- SCardEstablishContext() may return SCARD_W_SECURITY_VIOLATION if refused by Polkit
- Fix SCardReleaseContext() failure on orphan handles
- Fix SCardDisconnect() on orphan handle
- pcsc-spy: log the pioSendPci & pioRecvPci SCardTransmit() parameters
- Improve the log from pcscd: log the return code in text instead of hex
- Some other minor improvements


1.9.8: Ludovic Rousseau
11 June 2022
- Install install_spy.sh & uninstall_spy.sh scripts in docdir
- SCardTransmit(): do not fail if receive buffer is "too large"
- SCardControl(): do not fail if receive buffer is "too large"
- fix some memory leaks on shutdown
- use a better random number generator
- Some other minor improvements


1.9.7: Ludovic Rousseau
13 May 2022
- disable strict compilation by default
- fix 3 warnings


1.9.6: Ludovic Rousseau
11 May 2022
- do not fail reader removal in some specific cases (USB/Thunderbolt port)
- improve documentation regarding /etc/reader.conf.d/
- SCardGetStatusChange: speedup the case DISABLE_AUTO_POWER_ON
- configure:
  . add --disable-strict option
   By default the compiler arguments are now:
   -Wall -Wextra -Wno-unused-parameter -Werror ${CFLAGS} 
  . fail if flex is not found
- fix different data races
- pcscdaemon: -v displays internal constants values: 
  MAX_READERNAME & PCSCLITE_MAX_READERS_CONTEXTS
- Some other minor improvements


1.9.5: Ludovic Rousseau
4 December 2021
- pcscd: autoexit even if no client connects
- Fix variable substitution in systemd units
- fix potential race conditions with powerState handling
- Add and use tag TAG_IFD_DEVICE_REMOVED
- UnitaryTests: port code to Python 3


1.9.4: Ludovic Rousseau
1 October 2021
- fix a memory leak when libusb is used for hotplug (i.e. non-Linux
  systems)


1.9.3: Ludovic Rousseau
6 August 2021
- fix a stupid regression with systemd introduced in the previous version


1.9.2: Ludovic Rousseau
3 August 2021
- improve NetBSD support
- pcsc-spy: version 1.1
  . add option -t|--thread
  . x10 speed increase
  . correctly exit at end-of-file
  . remove, now useless, support of macOS
- systemd:
  . use /etc/default/pcscd as EnvironmentFile
  . use $PCSCD_ARGS to specify more arguments
- SetProtocol: Handle IFD_NOT_SUPPORTED from the driver
- hotplug_libudev.c: sanitize interface name
- pcsc_demo: change licence from GPLv3 to BSD
- use Python 3 for Python scripts (psc-spy, UnitaryTests)
- Some other minor improvements


1.9.1: Ludovic Rousseau
16 February 2021
- Do not (possibly) lock a reader if allocating hCard fails
- Fix a hang in SCardTransmit()
- Do not report an error if the wrong interface is used by the driver
- Update reader state when a card is removed during an exchange
- readerfactory: Make sure a freed Reader Context is not accessed
- PHSetProtocol(): supports T=0&1 cards on T=0 reader
- hotplug-libusb:
  . support CCIDCLASSDRIVER
  . add interface name to reader name
  . remove obsolete libhal scheme
- Some other minor improvements


1.9.0: Ludovic Rousseau
14 June 2020
- SCardEndTransaction(): greatly improve performances (x300)
- tokenparser: accept any Unicode character in a reader name
- Use /run instead of /var/run by default
- Fix a memory leak from a polkit call
- Some other minor improvements


1.8.26: Ludovic Rousseau
3 January 2020
- Use poll() instead of select() to allow file descriptor higher than FD_SETSIZE
- Enable reader filtering by default
- pcsc-spy:
  . Do not read output buffer after error
  . Adjust code to handle autoallocated buffers
  . fix year-2038 issue by using long instead of int
- Android: fix compilation
- if client/server protocol mismatch:
  . log an explicit message
  . SCardEstablishContext() returns SCARD_E_SERVICE_STOPPED
- polkit: log the error message if polkit_authority_get_sync() fails
- Exit with EXIT_SUCCESS on shutdown to please systemd
- Doxygen: fix minor issues in the documentation
- Add --disable-documentation option
- Fix a minor memory leak


1.8.25: Ludovic Rousseau
25 March 2019
- Fix a socket issue when pcscd is used inside LXC container
- pcsc-spy: always provide a total time of execution
- Fix resource leak if SCardEstablishContext() fails
- Fix realloc(3) error handling (possible memory leak)
- Remove usage of function chmod(2) to use fchmod(2) (fix race condition)


1.8.24: Ludovic Rousseau
12 October 2018
- the project moved to https://pcsclite.apdu.fr/
- SCardGetStatusChange(): Fix a rare race condition
- SCardReleaseContext(): do not release a lock owned by another context
- SCardReconnect(): suspend card auto power off
- Allow "=" in serial driver filenames
- Add the thread id in the pcscd log lines
- pcsc-spy: correctly handle incomplete log file
- Simclist: avoid to divide by zero in list_findpos()
- Some other minor improvements


1.8.23: Ludovic Rousseau
18 December 2017
- use libsystemd instead sd-daemon.{c,h}
- install_spy.sh: add support of Ubuntu
- spy: add support SCardStatus() with NULL pcbAtrLen
- Some other minor improvements


1.8.22: Ludovic Rousseau
17 June 2017
- SCardCancel() was broken in 1.8.21. The call was blocking.
- Enable use of info level logging for pcscd using -i/--info


1.8.21: Ludovic Rousseau
20 May 2017
- SCardCancel():
  . fix a race condition bug
  . fix a possible use after free
  . improve Doxygen documentation
- SCardGetStatusChange(): fix a race condition when a reader is removed
- SCardDisconnect(): fix status update for SCARD_UNPOWER_CARD
- pcsc_stringify_error(): use Thread-local storage
- pcsc_stringify_error() now returns a const char *
- SCardControl() may return SCARD_E_INSUFFICIENT_BUFFER when
  pbRecvBuffer is not big enough to receive the card response.
- Fix compilation error with GCC 4.9
- UnitaryTests: add support of Python 3
- pcsc-spy: add support of Python 3
- Some other minor improvements


1.8.20: Ludovic Rousseau
30 December 2016
- Fix a crash and potential security issue in pcscd


1.8.19: Ludovic Rousseau
9 December 2016
- SCardGetStatusChange(): Fix a (rare) race condition
- Doxygen:
  . SCardGetStatusChange() may return SCARD_E_UNKNOWN_READER
  . SCardConnect() and SCardReconnect() will never return SCARD_E_NOT_READY
- pcsc-spy:
  . fix display of execution time
  . log the thread number in the results
- Some other minor improvements


1.8.18: Ludovic Rousseau
10 August 2016
- SCardDisconnect(): much faster with SCARD_UNPOWER_CARD
- SCardConnect(): Fix a possible duplicated hCard context
- Fix compilation on FreeBSD
- Fix compilation on Solaris
- Some other minor improvements


1.8.17: Ludovic Rousseau
29 May 2016
- Fix SCardEndTransaction() issue with a SCARD_SHARE_EXCLUSIVE connection
- Fix an issue when used with systemd (problem in signal handler)
- SCardGetAttrib(): set pcbAttrLen when buffer is too small
- Doxygen: SCardGetAttrib() pbAttr can be NULL
- Doxygen: SCardGetAttrib() *pcbAttrLen contains the buffer size
- fix compilation warnings and link errors on SunOS
- Some other minor improvements


1.8.16: Ludovic Rousseau
20 March 2016
- SCardCancel() was not correctly handled
  When a SCardGetStatusChange() was cancelled then a next PC/SC call
  after the SCardGetStatusChange() may fail with a strange error code if
  the event waited in SCardGetStatusChange() occurs.
- Doxygen: fix different documentation issues
- SCARD_SCOPE_GLOBAL is now defined in a public header (even if never used)
- Enable Trace and Profile features using compiler flags and without
  modifying the source code
- Some other minor improvements and bug corrections


1.8.15: Ludovic Rousseau
25 December 2015
- Add support of remove and/or customize PC/SC reader names using
  PCSCLITE_FILTER_IGNORE_READER_NAMES and PCSCLITE_FILTER_EXTEND_READER_NAMES
  See http://ludovicrousseau.blogspot.fr/2015/12/remove-andor-customize-pcsc-reader-names.html
- Some other minor improvements and bug corrections


1.8.14: Ludovic Rousseau
5 August 2015
- Threading: lock the PC/SC context in a safe way
- Threading: lock the card context in a safe way
- SCardGetStatusChange(): fix card movement rare bug
- Doxygen:
  . SCardTransmit() may return SCARD_E_INSUFFICIENT_BUFFER
  . SCardEndTransaction() The disposition IS used and the dwDisposition
    parameter HAS an effect.
  . SCardReconnect() do not release locks
  . fix typos
- Move the source code repository from subversion to git
- Use asprintf(3) instead of strlcat(3) and strlcpy(3)
- Allow to use pcscd in a remote session (polkit issue)
- Some other minor improvements and bug corrections


pcsc-lite-1.8.13: Ludovic Rousseau
7 November 2014
- fix a systemd + libudev hotplug bug introduced in version 1.8.12.
  The list of readers was not (yet) available just after the start of pcscd
- Make the license more 3-clause BSD like
- fix a rare race condition in the (non default) libusb hotplug
- Some other minor improvements and bug corrections


pcsc-lite-1.8.12: Ludovic Rousseau
24 September 2014
- make hotplug using libudev (default) more robust
- add ReiserFS file system support (for configuration files)
- add musl libC support (increase the thread stack)
- Some other minor improvements and bug corrections


pcsc-lite-1.8.11: Ludovic Rousseau
14 February 2014
- Add polkit support. See doc/README.polkit
- /etc/reader.conf: CHANNELID and DEVICENAME are both optional but not
  at the same time
- Some other minor improvements and bug corrections


pcsc-lite-1.8.10: Ludovic Rousseau
19 October 2013
- do not export the internal log_msg symbol from libpcsclite.so.1


pcsc-lite-1.8.9: Ludovic Rousseau
16 October 2013
- SCardEndTransaction(): Return an error if is called with no
  corresponding SCardBeginTransaction()
- SCardGetAttrib(): Add support of SCARD_ATTR_DEVICE_SYSTEM_NAME
- SCardGetAttrib(): Fix bug in SCARD_ATTR_DEVICE_FRIENDLY_NAME
- SCardBeginTransaction() was not correctly releasing a mutex when the
  hCard handle was invalidated
  The problem was that SCardGetStatusChange() was blocked because
  SCardBeginTransaction() had not released the context mutex.
- PCSC/reader.h: Use C99 flexible array member
  The structures PIN_MODIFY_STRUCTURE and PIN_VERIFY_STRUCTURE now use a
  C99 flexible array member when available for abData field.
  uint8_t abData[];
- Add support of --reader-name-no-serial and --reader-name-no-interface
  It is now possible to NOT add the USB serial number of the reader
  using --reader-name-no-serial
  It is now possible to NOT add the CCID interface name of the reader
  using --reader-name-no-interface
- Add support of serialconfdir pkg-config variable
  It is now possible to use pkg-config to get the directory used by
  pcscd to fetch serial drivers configurations.
  $ pkg-config libpcsclite --variable=serialconfdir
  /etc/reader.conf.d
- pcsc-spy: Try to display the thread in the order they appear in the log
- pcsc-spy: Add SCARD_ATTR_DEVICE_SYSTEM_NAME
- Check the Info.plist file is (a minimum) correct
- Update PROTOCOL_VERSION_MINOR from 2 to 3
  We broke the API between version 1.8.3 and 1.8.4 by changing the value
  of MAX_READERNAME. This change should have been made before releasing
  version 1.8.4 to make mix of versions clearly non working instead of
  failing with strange errors.
- hotplug_libudev.c: Fix a memory leak in case of error
- Fix OpenBSD 5.2 compilation regarding dlopen
- correctly manage thread safe multi-slot readers
- Do not use pthread_atfork() any more (fix problem on FreeBSD)
- fix memory leaks.
  This was not really a problem unless you embed pcscd in another
  process and do init/deinit pcscd without exiting the process (as maybe
  used on Android or iOS).
- pcscd.8 manpage: add documentation for --max-thread,
  --max-card-handle-per-thread, --max-card-handle-per-reader,
  --force-reader-polling, --error, --critical and --color
- Some other minor improvements and bug corrections


pcsc-lite-1.8.8: Ludovic Rousseau
16 January 2013
- /etc/reader.conf: handle FRIENDLYNAME with no " delimiters (serial readers)
- Info.plist: Correctly handle reader names containing & (USB readers)


pcsc-lite-1.8.7: Ludovic Rousseau
28 November 2012
- Fix a problem when a reader is unplugged (and the reader is still in use)


pcsc-lite-1.8.6: Ludovic Rousseau
30 August 2012
- Fix a problem when only serial drivers are used (no hotplug/USB
  driver)
- increase log buffer size from 160 to 2048. Some "long" log lines where
  truncated.
- Fix redirection of stdin, stdout and stderr to /dev/null when pcscd is
  started as a daemon (default)
- Some other minor improvements and bug corrections


pcsc-lite-1.8.5: Ludovic Rousseau
4 August 2012
- Fix crash when a reader is unplugged while pcscd is in the middle of a
  PC/SC function
- SCardBeginTransaction(): fix a bug introduced in version 1.8.4
  related to sharing
- Some other minor improvements and bug corrections


pcsc-lite-1.8.4: Ludovic Rousseau
26 June 2012
- Add [ and ] in the list of accepted characters for a reader name
- truncates the reader name if it is too long instead of rejecting the
  reader
- The restriction to have to call SCardEstablishContext() in each thread
  has been removed. Threads could now share a PC/SC context.
- Fix compiler failure for static driver
- Update IFDHandler API Doxygen regarding the "libusb-1.0" naming scheme
- Some other minor improvements and bug corrections


pcsc-lite-1.8.3: Ludovic Rousseau
30 March 2012
- ignore directories and hidden (.*) files when parsing a configuration
  directory (like /etc/reader.conf.d/)
- add Mac OS X for PC/SC spy tool
- fix a bug in PC/SC spy tool when loading of the real library fails
- add PCSCv2_PART10_PROPERTY_dwMaxAPDUDataSize,
  PCSCv2_PART10_PROPERTY_wIdVendor and PCSCv2_PART10_PROPERTY_wIdProduct
  from PC/SC v2 part 10 release 2.02.09 (not yet published)
- Some other minor improvements and bug corrections


pcsc-lite-1.8.2: Ludovic Rousseau
18 January 2012
- rename pcsc-spy.py to pcsc-spy and install it as a normal binary (in
  /usr/local/bin by default)
- write a pcsc-spy.1 manpage
- fix a bug with a multi-slot reader
- Info.plist parser: avoid a buffer read overflow in &amp; management
- Some Doxygen improvements


pcsc-lite-1.8.1: Ludovic Rousseau
25 November 2011
- Distribute missing files from src/spy/


pcsc-lite-1.8.0: Ludovic Rousseau
19 November 2011
- PC/SC spy tool
- Support systemd socket activation (the auto start of pcscd from the
  library has been removed. Use systemd instead)
- SCardGetStatusChange(): check all the readers are already known and
  return SCARD_E_UNKNOWN_READER if a reader name is not present.
  Windows XP has this behavior.
- SCardEstablishContext(): Invalidate all the handles in the son after a
  fork
- Add define of FEATURE_EXECUTE_PACE from PCSC v2 Part 10 Amendment 1
  2011-06-03
- Fix some memory leaks reported by Coverity
- Enable silent build by default
- log_line(): correctly calculate delta time when no color is used
  The update of last_time was only done in case of colorization
  (LogDoColor). So on unsupported consoles the time was wrong.
- log_xxd_always(): Use a variable-length array
  The debug message buffer is no more with a fixed size (around 600
  bytes of buffer to log) but uses a variable-length array.
  It is now possible to log extended APDU of 64kB.
  The variable-length array feature is available in GCC in C90 mode and
  is mandatory in C99 standard.
- Some other minor improvements and bug corrections


pcsc-lite-1.7.4: Ludovic Rousseau
23 June 2011
- Fix a stupid bug from the previous version. T=1 cards were not
  working.


pcsc-lite-1.7.3: Ludovic Rousseau
22 June 2011
- COPYING: Add my name as copyright holder
- hotplug libudev: support libudev >= 171
- hotplug libusb: Fix a memory leak
- pcscd: exit immediately in case of SIGTERM
  Closes Debian bug #620305 "pcscd slows down shutdown/restart"
- Send logs to stdout instead of stderr
  It is now possible to use tee(1) to redirect logs in a file without
  first redirecting stderr to stdout
- Add command line option -T, --color: force use of colored logs
  The idea is to have colored logs even if they are redirected to a file
  or a pipe.
- Define g_rgSCardT?Pci as const structures to be more Windows like
  I do not expect a regression or compilation problem in WinSCard API
  users but how knows...
- log at level PCSC_LOG_DEBUG instead of PCSC_LOG_ERROR to avoid filling
  the system log file
- Remove the deprecated define FEATURE_MCT_READERDIRECT (replaced by
  FEATURE_MCT_READER_DIRECT)
- better Hurd support
- some other minor improvements and bug corrections


pcsc-lite-1.7.2: Ludovic Rousseau
31 March 2011
- fix a crash if a specific driver fails to work and no class driver is
  available

pcsc-lite-1.7.1: Ludovic Rousseau
30 March 2011
- use libudev only on Linux and libusb elsewhere. The configuration now
  works by default on GNU/kFreeBSD systems
- Try to use a (CCID) class driver if a specific driver fails to use the
  reader.
- fix a potential crash


pcsc-lite-1.7.0: Ludovic Rousseau
9 March 2011
- use libudev instead of (the deprecated) libhal


pcsc-lite-1.6.7: Ludovic Rousseau
22 February 2011
- better Mac OS X support
- Fix Alioth bug [#312960] SCardDisconnect when other context has transaction
- add support of multi-interfaces readers with libusb and not just libhal
- add a API tracing feature in the client side (#define DO_TRACE)
- allow the use of tracing and profiling features from different
  application threads
- fix a problem with a multi-slots reader
- fix minor problems detected by the clang tool
- some other minor improvements and bug corrections


pcsc-lite-1.6.6: Ludovic Rousseau
12 December 2010
- SCardGetStatusChange(): fix a bug on 64-bits systems
- Fix another bug because of a regression in internal list manager


pcsc-lite-1.6.5: Ludovic Rousseau
3 December 2010
- Power on the card _only_ if an application requests a connection.
  You can disable the feature using DISABLE_ON_DEMAND_POWER_ON in
  src/pcscd.h.in
  If DISABLE_AUTO_POWER_ON is defined then do not automatically power on
  the card. The card will be powered on on the first SCardConnect()
  See http://ludovicrousseau.blogspot.com/2010/10/card-auto-power-on-and-off.html
- SCardReconnect(): return SCARD_E_NO_SMARTCARD when card is removed and
  SCARD_W_UNRESPONSIVE_CARD when card is unresponsive instead of
  SCARD_E_PROTO_MISMATCH
- Install pcscd as sgid pcscd instead of suid root
  See http://ludovicrousseau.blogspot.com/2010/09/pcscd-auto-start.html
- SCardSetTimeout() is no more provided. This function is not provided
  by Microsoft and is deprecated since 2004 in pcsc-lite. 
- SCardCancelTransaction() is no more provided. This function is not
  provided by Microsoft and is deprecated since 2005 in pcsc-lite.
- Parsing the CCID Info.plist (159 readers supported) was, on a i386
  machine, done in 264306 µs and is now done 5547 µs => gain x47 or 4600%
  See http://ludovicrousseau.blogspot.com/2010/08/ram-and-cpu-improvements-in-pcsc-lite.html
- It is now possible to configure the local socket name to use using the
  environment variable PCSCLITE_CSOCK_NAME
  See http://ludovicrousseau.blogspot.com/2010/11/pcsc-client-and-server-on-two-different.html	  
- Wait until all connected readers have a chance to power up a possibly
  inserted card before accepting clients.
- restrict pcscd features when not run by root (so using suid): APDU
  logging or setting parameters are disabled for example
- fix compilation problem on kfreebsd-* systems
- PCSC/reader.h: HOST_TO_CCID_16() and HOST_TO_CCID_32() are now
  identity functions
  Since libccid 1.4.1 (revision 5252) the byte order is no more important
- If you want to use IFDHCreateChannel() instead of
  IFDHCreateChannelByName() then do not use any DEVICENAME line in the
  configuration file. IFDHCreateChannel() will then be called with the
  CHANNELID parameter.
- the CHANNELID parameter can also be a decimal number.
- Remove the support of IFDHandler v1 API. I don't know any driver using
  this API.
  See http://ludovicrousseau.blogspot.com/2010/10/ifdhandler-version-1-support-removed.html
- avoids a buffer overflow with badly formed ATR
- some other minor improvements and bug corrections


pcsc-lite-1.6.4: Ludovic Rousseau
15 August 2010
- Do not use sysconfdir as configuration directory but
  "${sysconfdir}/reader.conf.d" instead.
  Use --enable-confdir=DIR if you want to set a specific value without
  the "reader.conf.d" appended.


pcsc-lite-1.6.3: Ludovic Rousseau
15 August 2010
- "/reader.conf.d" is only appended to sysconfdir if no value of
  sysconfdir is provided
- Define LPSCARD_READERSTATE since this is used in the MSDN prototype.
  Use LPSCARD_READERSTATE in winscard.h instead of (SCARD_READERSTATE *)
  to mimic the MSDN API.
- fix a pcscd crash when the application uses a PCSC handle after a
  fork. The crash was with openvpn.
- some other minor improvements and bug corrections

pcsc-lite-1.6.2: Ludovic Rousseau
4 August 2010
- implement a "Forced suicide" mechanism.
  After 3 Ctrl-C without much reaction from pcscd (in fact the drivers)
  we force the suicide. Sometimes libusb is blocked in a kind of
  dead-lock and kill -9 was the only option.
- Add support of TAG_IFD_STOP_POLLING_THREAD to request the stop of the
  driver polling function.
- Avoid a division by 0. Closes [#312555] "simclist bug in pcsc-lite"
- if pcscd is stared by libpcsclite then close all file handles except
  stdin, stdout and stderr so that pcscd does not confiscate resources
  allocated by the application
- in case of auto exit create a new session so that Ctrl-C on the
  application will not also quit pcscd
- src/hotplug_libusb.c: port from libusb-0.1 to libusb-1.0
- default configuration is now $sysconfdir/reader.conf.d
- fix crash with empty config dir
- src/PCSC/winscard.h: Remove definitions of SCARD_READERSTATE_A
  PSCARD_READERSTATE_A and LPSCARD_READERSTATE_A types
- some other minor improvements and bug corrections


pcsc-lite-1.6.1: Ludovic Rousseau
4 June 2010
- SCardControl(): do not check for card events since we are talking to
  the reader not the card. A smart card removal should not make
  SCardControl() fail with SCARD_W_REMOVED_CARD
- pcscd do not timeout any more after 2 minutes of inactivity. If the
  other side of the socket dies we will get an error from the kernel.
  The problem was that if a client does nothing during
  PCSCLITE_READ_TIMEOUT (120 seconds by default) then pcscd considers it
  as a dead client and closes the connection. I guess this problem was
  present since the first version of pcsc-lite but nobody complained
  before.
- pcscd: do not return before most of the initialisation are done
  correctly. The idea is that pcscd can return an error code if the
  daemon fails to start correctly (hald not started for example).
  Before the patch pcscd became a daemon, then returned 0 (success) and
  then continued with the initialisation. If the initialisation failed
  it was too late to return an error code. The /etc/init.d/pcscd script
  was not aware of the failure.
  Closes https://bugzilla.redhat.com/show_bug.cgi?id=580321
  "/usr/sbin/pcscd exit codes broken"
- src/hotplug_libusb.c: Add a synchronisation so that if pcscd is auto
  started the initial reader list is available before the server takes
  commands from clients.
  Before the change early calls of SCardListReaders() returned an empty
  list of readers even if a reader was connected.
  Thanks to Patrice Angelini for the bug report
- SCardConnect() & SCardReconnect(): do not reset the cardProtocol in
  SCARD_SHARE_DIRECT case since the card has _not_ been reset. A new
  PPS negotiation would fail.
- Do not install files in /etc any more. Serial drivers are rare now.
- Avoids a crash if a client sends a unknown command.
  Thanks to Martin Vogt for the bug report
- some other minor improvements and bug corrections


pcsc-lite-1.6.0: Ludovic Rousseau
5 May 2010
- redesign the client/server communication:
  * no more shared memory used (allow pcscd and libpcsclite1.so to be on
  different computer and talk over a network)
  * no more difference between short and extended APDU
  * no more use of a /var/run/pcscd/pcscd.events/ directory. events are
  sent through the socket
  * simpler command format between client and server
  The side effect is that you are not able to mix an old pcscd with a
  new libpcsclite1.so or the reverse. SCardEstablishContext() will fail
  unless you update both sides of the communication.
- Use lists instead of fixed size arrays to store handles.
  It is now possible to have:
  - 200 simultaneous PC/SC clients instead of 16
  - 200 SCardConnect per client instead of 16
  - 200 clients per reader instead of 16
  The default value of 200 can be changed by giving an argument to pcscd
  --max-thread --max-card-handle-per-thread --max-card-handle-per-reader
  Thanks to Jean-Luc Giraud for the big patch
- Make SCardReconnect(), SCardStatus() and SCardTransmit() block instead
  of returning SCARD_E_SHARING_VIOLATION immediately. These functions
  will then behave like on Windows.
  This can happen if these functions are called when the reader is
  locked by a PCSC transaction
  (SCardBeginTransaction/SCardEndTransaction).
  You can define the environment variable PCSCLITE_NO_BLOCKING to use
  the old behavior.
  Thanks to Jean-Luc Giraud for the patch.
  http://archives.neohapsis.com/archives/dev/muscle/2010-q1/0041.html
- SCardEstablishContext(): try to start the pcscd daemon if not already
  running.
  . pcscd will suicide itself after 60 seconds of inactivity if it is
  started using --auto-exit. This is the default behavior when pcscd is
  started by libpcsclite
  . Set PCSCLITE_PCSCD_ARGS with the argument you want to pass to pcscd in
  autostart Only one argument is passed. The space character is not a
  separator. example: export PCSCLITE_PCSCD_ARGS=-dfa
- SCardListReaders(): can use SCARD_AUTOALLOCATE
- SCardGetAttrib(): return SCARD_E_INSUFFICIENT_BUFFER if the driver
  returns IFD_ERROR_INSUFFICIENT_BUFFER
  . add support of SCARD_ATTR_DEVICE_FRIENDLY_NAME as it is better
  implemented in pcscd (it knows the friendly name)
- SCardGetStatusChange(): Calling with cReaders == 0 will now just
  return SCARD_S_SUCCESS
  . Use the special reader name "\\?PnP?\Notification" to wait for a
  reader event notification
- SCardTransmit(): do not limit the minimum size of an APDU to 4 bytes.
  non ISO 7816-4 compliant cards (like Mifare DESFIRE) may use shorter
  commands
- SCardStatus(): returns SCARD_E_SHARING_VIOLATION if the reader is
  already used More conform to Windows
- PCSC/reader.h: update struct PIN_PROPERTIES_STRUCTURE to be conform
  with Revision 2.02.06, April 2009 of PCSCv2 part 10 Fields
  wLcdMaxCharacters and wLcdMaxLines have been removed
  . rename FEATURE_MCT_READERDIRECT in FEATURE_MCT_READER_DIRECT to be
  conform with ch. 2.3 of PCSC v2 part 10
  . add FEATURE_GET_TLV_PROPERTIES and FEATURE_CCID_ESC_COMMAND from
  PC/SC part 10 v2.02.07 March 2010
  . Add PCSCv2_PART10_PROPERTY_* defines
- SCardControl() return SCARD_E_UNSUPPORTED_FEATURE if the driver
  returned IFD_ERROR_NOT_SUPPORTED or IFD_NOT_SUPPORTED This is used to
  separate an unsupported value of ControlCode from a general error
- Use the standard --sysconfdir=DIR ($prefix/etc by default) instead of
  --enable-confdir=DIR for defining the directory containing reader.conf
- remove SCF support (PC/SC over Smart Card Framework). I never used
  this feature and SCF is now dead and replaced by JSR 268
  (javax.smartcardio)
- Better handling of PCSCLITE_STATIC_DRIVER as can be used on platforms
  using µClinux (without dynamic loader).  This is used to statically
  link the reader driver to pcscd. Since the link is static you must
  define the IFDHandler API version at compilation time. Either define
  IFDHANDLERv1, IFDHANDLERv2 or IFDHANDLERv3
- Use dynamic instead of static allocation for the driver library
  filename. The filename is no more limited to 100 characters.
  Closes: [#312332] MAX_LIBNAME too short?
- force the return codes SCARD_* to be long since the SCard* functions
  return a LONG type
- Add the ability to parse all the configuration files of a directory
  instead of just one configuration file. update-reader.conf is then now
  obsolete.
- Add --enable-embedded (default is no) to build pcsc-lite for an
  embedded system. This will activate the NO_LOG option to disable
  logging and limit RAM and disk consumption.
- If NO_LOG is defined then no log are displayed. The idea is to limit
  the binaries size on disk and RAM consumption at execution time.
  With NO_LOG defined we gain 26% (17 kB) for the .text segment of pcscd
  and 15% (4 kB) for the .text segment of libpcsclite.so (for i386)
- Define a minimal pcsc_stringify_error() if NO_LOG is defined. Only the
  error code in hex is displayed in this case.
  Gain: 2kB of .text (10%) for libpcsclite
- Add --disable-serial and --disable-usb options
  --disable-serial removes support of /etc/reader.conf gain: 8.0kB of
  .text (12%) and 160 bytes of .bss (4%) for pcscd
  --disable-usb removes support of USB hotplug gain: 9.7kB of .text
  (14%) and 960 bytes of .bss (23%) for pcscd
  If you use both options (and use a static driver configuration) gain:
  17.7kB of .text (26%) and 1152 bytes of .bss (28%) for pcscd
- Better support of Android
- some other minor improvements and bug corrections


pcsc-lite-1.5.5: Ludovic Rousseau
28 July 2009
- add the reader interface name if provided by the device
- SCardTransmit(): return SCARD_E_UNSUPPORTED_FEATURE if
  SCARD_PROTOCOL_RAW is requested by unsupported
- SCardConnect() and SCardReconnect(): set dwActiveProtocol to
  SCARD_PROTOCOL_UNDEFINED if SCARD_SHARE_DIRECT is used (conform to
  MSDN). Contrary to Windows winscard behavior, the reader is accessed in
  shared mode and not exclusive mode if SCARD_SHARE_DIRECT is used.
- SCardControl(): correctly check for buffer overflow (bug introduced in
  pcsc-lite 1.5.4)
- some other minor improvements and bug corrections


pcsc-lite-1.5.4: Ludovic Rousseau
24 June 2009
- SCardGetStatusChange() works again. It was broken in some cases since
  version 1.5.2
- detect buffer overflows if pcscd if used by a rogue client
- force access rights on /var/run/pcscd to be sure it can be used by a
  libpcsclite client without privileges
- create the PCSCLITE_EVENTS_DIR directory with the sticky bit so only
  root or the owner of the event files can remove them
- if RFAddReader() fails with the libhal scheme then we try with the
  (old) libusb scheme.  This patch should allow proprietary drivers to
  work even if pcsc-lite is compiled with libhal support.
- give a higher priority to a specific driver over the CCID Class
  driver. This should allow proprietary drivers to be used instead of
  libccid when possible
- some other minor improvements and bug corrections


pcsc-lite-1.5.3: Ludovic Rousseau
29 April 2009
- SCardEstablishContext(): check we do not reuse an already allocated
  hContext
  Thanks to Daniel Nobs for the bug report and patch
- pcsclite.h: add missing SCARD_E_* and SCARD_W_* return code. They are
  unused by pcsc-lite but defined on Windows
- reader.h: add PIN_PROPERTIES_STRUCTURE structure and FEATURE_IFD_PIN_PROPERTIES
  Thanks to Martin Paljak for the patch
- remove powermgt_macosx.c since it is using APSL version 1.1 instead of
  the BSD-like licence like the other files
  Thanks to Stanislav Brabec for the bug report
- avoid a possible crash due to a race condition
  Thanks to Matheus Ribeiro for the patch
- change default log level from PCSC_LOG_INFO to PCSC_LOG_ERROR to limit
  syslog pollution
- CardDisconnect(): call RFUnlockAllSharing() instead of
  RFUnlockSharing() to release all nested locks. The problem occurs if
  SCardBeginTransaction() are made without corresponding
  SCardEndTransaction().  OpenSC "pkcs11-tool -I" exhibits such a
  behavior.
  Thanks to Marc Rios Valles for the bug report
- some other minor improvements and bug corrections


pcsc-lite-1.5.2: Ludovic Rousseau
6 February 2009
- SCardGetStatusChange(): return if the state of the reader changed
  since the previous call. Thanks to Thomas Harning for the patch
- SCardCancel() no works as expected. It got broken in version 1.5.0.
  Closes: [#311342] SCardCancel does not cancel an outstanding
  SCardGetStatusChange
- log TxBuffer and RxBuffer if the SCardControl() command failed.
  Closes: [#311376] PCSC_LOG_VERBOSE via -dd; print details of "Card not
  transacted"
- add a mutex to avoid a race condition
  Closes: [#311377] Race condition in SCardBeginTransaction
- SCardGetStatusChange() may not return if the reader was removed.
- some other minor improvements and bug corrections


pcsc-lite-1.5.1: Ludovic Rousseau
7 January 2009
- Extended APDU of more than 2048 bytes were corrupted. The problem was
  introduced in version 1.3.3 (2 years ago) by making the code compile
  with Sun Studio 11.
  Thanks to Eric Mounier for the patch
- some other minor improvements and bug corrections


pcsc-lite-1.5.0: Ludovic Rousseau
18 November 2008
- correctly handle up to PCSCLITE_MAX_READERS_CONTEXTS readers (instead
  of PCSCLITE_MAX_READERS_CONTEXTS-1)
- SCardGetStatusChange()
  . now returns SCARD_E_TIMEOUT instead of SCARD_S_SUCCESS if dwTimeout
    == 0 (conform to Windows XP)
  . add support of reader name \\?PnP?\Notification to detect reader
    insertion/removal (conform to Windows XP)
  . if a reader disappear also set SCARD_STATE_UNAVAILABLE in
    dwEventState (more conform to Windows XP)
- SCardStatus(): add support of SCARD_AUTOALLOCATE for pcchReaderLen and
  pcbAtrLen
- SCardGetStatusChange() now uses asynchronous events instead of polling
- more and/or better Doxygen documentation
- SCardTransmit(): correctly pass the pioRecvPci parameter
- SCardConnect() and SCardReconnect(): correct a bug when two
  applications were calling SCardConnect() or SCardReconnect() at the
  exact same time
- pcscd logs the command name sent by the application (when in debug mode)
- some other minor improvements and bug corrections


pcsc-lite-1.4.102: Ludovic Rousseau
27 June 2008
- pcscd -v now displays the enabled features
- add support of SCARD_AUTOALLOCATE in SCardListReaders(),
  SCardListReaderGroups() and SCardGetAttrib
- add SCardFreeMemory()
- try to use the reader polling thread also for the other slots on a
  multi-slots reader
- solve a possible crash with SCardCancel() in multithreading environment
- SCardConnect(), SCardReconnect(): do not check the parameter
  dwPreferredProtocols if dwShareMode == SCARD_SHARE_DIRECT
  This is used on contactless readers to talk to the reader without any
  card and "random" value of dwPreferredProtocols
- better support of driver termination (when pcscd exits)
- kill the driver polling thread only if the driver supports it
  (declared using TAG_IFD_POLLING_THREAD_KILLABLE)
- generate a .tar.bz2 archive (smaller than the .tar.gz archive)
- some other minor improvements and bug corrections


pcsc-lite-1.4.101: Ludovic Rousseau
30 April 2008
- support for fork(). Handles are now invalid in the child process
- SCardStatus() returns SCARD_W_REMOVED_CARD instead of
  SCARD_W_RESET_CARD when a card has been removed and inserted
- Doxygen improvements
- add support for DragonFly BSD
- some other minor improvements and bug corrections


pcsc-lite-1.4.100: Ludovic Rousseau
23 March 2008
- add libhal support to avoid polling the USB bus.  libusb is still
  supported but libhal is now the default
- improve performances in SCardConnect(), SCardReconnect(),
  SCardDisconnect(). Thanks to Sean Wykes for the patch
- SCardListReaders(): returns SCARD_E_NO_READERS_AVAILABLE when no
  reader are available.  Thanks to Thomas Harning for the bug report
- add support of TAG_IFD_POLLING_THREAD to use an asynchronous card
  movements detection instead of an active polling. The reader driver
  need to support TAG_IFD_POLLING_THREAD to use this feature
- CardCheckDaemonAvailability(): lower the priority of the log message
  in case of "PCSC Not Running" or "PCSC restarted" so that nothing is
