New upstream version 1.9.8
This commit is contained in:
parent
ab1a953831
commit
fd719fbb94
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
||||||
|
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
|
1.9.7: Ludovic Rousseau
|
||||||
13 May 2022
|
13 May 2022
|
||||||
- disable strict compilation by default
|
- disable strict compilation by default
|
||||||
|
|
261
ChangeLog.git
261
ChangeLog.git
|
@ -1,4 +1,259 @@
|
||||||
commit 5c45145d34b5e7382e0223477ff22de67ef97c77 (HEAD -> master)
|
commit 41dc5a51321bc3198af36574f73dc007cab72a7d (HEAD -> master, tag: 1.9.8)
|
||||||
|
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||||
|
Date: Sat Jun 11 10:49:34 2022 +0200
|
||||||
|
|
||||||
|
Release 1.9.8
|
||||||
|
|
||||||
|
Signed-off-by: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||||
|
|
||||||
|
ChangeLog | 10 ++++++++++
|
||||||
|
configure.ac | 2 +-
|
||||||
|
2 files changed, 11 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
commit f7f80db5fae5f15c0d0ce2e6cd81a5c11c0a7510 (zotac/master, origin/master, origin/HEAD, github/master)
|
||||||
|
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||||
|
Date: Fri Jun 10 09:58:46 2022 +0200
|
||||||
|
|
||||||
|
Install install_spy.sh uninstall_spy.sh scripts
|
||||||
|
|
||||||
|
They are installed in docdir i.e. ${datarootdir}/doc/${PACKAGE} where
|
||||||
|
datarootdir is ${prefix}/share
|
||||||
|
|
||||||
|
On a Debian system with --prefix=/usr that is /usr/share/doc/pcsc-lite/
|
||||||
|
|
||||||
|
The idea is to have the scripts included in the -dev package so that
|
||||||
|
they are easily available on user's computer.
|
||||||
|
|
||||||
|
src/spy/Makefile.am | 3 ++-
|
||||||
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
commit c94aeb5ed933dbbe09af611a4829999860a0b293
|
||||||
|
Author: Petr Mikhalicin <mkh199740@mail.ru>
|
||||||
|
Date: Thu May 26 18:03:38 2022 +0300
|
||||||
|
|
||||||
|
Add destructor library function
|
||||||
|
|
||||||
|
Resolve: https://salsa.debian.org/rousseau/PCSC/-/issues/1
|
||||||
|
|
||||||
|
src/winscard_clnt.c | 12 +++++++++---
|
||||||
|
1 file changed, 9 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
commit b312b45dd6a8d6c18ee09a411e7b3df6a0ab831f
|
||||||
|
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||||
|
Date: Wed Jun 1 17:56:55 2022 +0200
|
||||||
|
|
||||||
|
SCardControl(): do not fail if receive buffer is "too large"
|
||||||
|
|
||||||
|
SCardControl() should not fail if the receive buffer is "too large"
|
||||||
|
i.e. larger than MAX_BUFFER_SIZE_EXTENDED.
|
||||||
|
|
||||||
|
src/winscard_clnt.c | 3 +--
|
||||||
|
src/winscard_svc.c | 3 +--
|
||||||
|
2 files changed, 2 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
commit 6218f7bc878ba183a788de5f7441247f20d1adaf
|
||||||
|
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||||
|
Date: Wed Jun 1 17:50:23 2022 +0200
|
||||||
|
|
||||||
|
Test the check of SCardControl(..., cbRecvLength,..)
|
||||||
|
|
||||||
|
SCardControl() should not fail if the receive buffer is "too large"
|
||||||
|
i.e. larger than MAX_BUFFER_SIZE_EXTENDED.
|
||||||
|
|
||||||
|
UnitaryTests/BufferOverflow_SCardControl.c | 9 +++++++++
|
||||||
|
1 file changed, 9 insertions(+)
|
||||||
|
|
||||||
|
commit 967e6e5495685bdedafb55d937fbef8a036f2c60
|
||||||
|
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||||
|
Date: Wed Jun 1 17:41:58 2022 +0200
|
||||||
|
|
||||||
|
SCardTransmit(): do not fail if receive buffer is "too large"
|
||||||
|
|
||||||
|
SCardTransmit() should not fail if the receive buffer is "too large"
|
||||||
|
i.e. larger than MAX_BUFFER_SIZE_EXTENDED.
|
||||||
|
|
||||||
|
Thanks to Frank Morgner for the bug report.
|
||||||
|
" Too strict checking on limits for SCardTransmit #137 "
|
||||||
|
https://github.com/LudovicRousseau/PCSC/issues/137
|
||||||
|
|
||||||
|
src/winscard_clnt.c | 3 +--
|
||||||
|
src/winscard_svc.c | 3 +--
|
||||||
|
2 files changed, 2 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
commit 540026cdb77f42a91d1da5cdc7f607bbbbaffa70
|
||||||
|
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||||
|
Date: Wed Jun 1 17:39:59 2022 +0200
|
||||||
|
|
||||||
|
Test the check of SCardTransmit(..., pbRecvBuffer)
|
||||||
|
|
||||||
|
SCardTransmit() should not fail if the receive buffer is "too large"
|
||||||
|
i.e. larger than MAX_BUFFER_SIZE_EXTENDED.
|
||||||
|
|
||||||
|
UnitaryTests/BufferOverflow_SCardTransmit.c | 11 +++++++++++
|
||||||
|
1 file changed, 11 insertions(+)
|
||||||
|
|
||||||
|
commit 210efa525f50e99821a10d91b8c861825e470d8b
|
||||||
|
Author: Maksim Ivanov <emaxx@google.com>
|
||||||
|
Date: Sun May 29 16:31:19 2022 +0200
|
||||||
|
|
||||||
|
Fix leak of fullName on shutdown (#134)
|
||||||
|
|
||||||
|
Free _readerTracker::fullName strings on shutdown in hotplug_libusb.
|
||||||
|
|
||||||
|
src/hotplug_libusb.c | 20 ++++++++++++++++----
|
||||||
|
1 file changed, 16 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
commit 652cbffa4cad54bbd93ad538c27ad6b169bc869f
|
||||||
|
Author: Maksim Ivanov <emaxx@google.com>
|
||||||
|
Date: Sun May 29 16:27:47 2022 +0200
|
||||||
|
|
||||||
|
gitignore configure~, config.h.in~ (#136)
|
||||||
|
|
||||||
|
Add the "configure~" and "config.h.in~" files to .gitignore. These files
|
||||||
|
are produced after running "bootstrap" more than once, and don't need to
|
||||||
|
be committed.
|
||||||
|
|
||||||
|
.gitignore | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
commit 9879d1c2b78caafc757b883b0fe8ccc8e7c4548f
|
||||||
|
Author: Maksim Ivanov <emaxx@google.com>
|
||||||
|
Date: Sun May 29 16:24:39 2022 +0200
|
||||||
|
|
||||||
|
Make sure AraKiriHotPlug false on libusb startup (#135)
|
||||||
|
|
||||||
|
Reset the AraKiriHotPlug flag to false when starting libusb hotplug
|
||||||
|
search.
|
||||||
|
|
||||||
|
This is not needed on the initial process startup, because the flag is
|
||||||
|
initialized to false, but allows to implement unit tests that need to
|
||||||
|
restart the previously stopped threads within the memory of the same
|
||||||
|
process.
|
||||||
|
|
||||||
|
src/hotplug_libusb.c | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
commit accaa9738ad6091603ead68e85d2217944624cee
|
||||||
|
Author: Maksim Ivanov <emaxx@google.com>
|
||||||
|
Date: Fri May 27 17:19:21 2022 +0200
|
||||||
|
|
||||||
|
Fix double-free of CFBundleName on shutdown (#132)
|
||||||
|
|
||||||
|
Fix the double-free of the _driverTracker::CFBundleName field in
|
||||||
|
HPRescanUsbBus() in hotplug_libusb on the shutdown path. The root cause
|
||||||
|
was reusing the same string pointer for multiple entries in the
|
||||||
|
driverTracker array.
|
||||||
|
|
||||||
|
src/hotplug_libusb.c | 5 +++--
|
||||||
|
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
commit 1ab596a91032f0f4ce8d73454c33cae9129ab358
|
||||||
|
Author: Maksim Ivanov <emaxx@google.com>
|
||||||
|
Date: Fri May 27 17:17:37 2022 +0200
|
||||||
|
|
||||||
|
Fix libusb_device list leak on shutdown (#133)
|
||||||
|
|
||||||
|
Call libusb_free_device_list() before exiting the hotplug thread in
|
||||||
|
hotplug_libusb.c.
|
||||||
|
|
||||||
|
src/hotplug_libusb.c | 6 +++---
|
||||||
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
commit 7ca49799838cafcb403f63cce66624ff9fec15c8
|
||||||
|
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||||
|
Date: Sun May 22 13:23:03 2022 +0200
|
||||||
|
|
||||||
|
Revert change from SYS_RandomInt() SYS_RandomLong()
|
||||||
|
|
||||||
|
The communication between pcscd and libpcsclite uses 32-bits variables
|
||||||
|
in the exchanged structures:
|
||||||
|
uint32_t hContext;
|
||||||
|
int32_t hCard;
|
||||||
|
|
||||||
|
If we want to use 64-bits variables we need to also change the
|
||||||
|
pcscd-libpcsclite communication protocol and upgrade
|
||||||
|
PROTOCOL_VERSION_MAJOR.
|
||||||
|
|
||||||
|
This would break many working configurations using flatpak for example.
|
||||||
|
https://ludovicrousseau.blogspot.com/2022/02/accessing-smart-cards-from-inside.html
|
||||||
|
|
||||||
|
src/readerfactory.c | 4 ++--
|
||||||
|
src/sys_generic.h | 2 +-
|
||||||
|
src/sys_unix.c | 16 ++++++++--------
|
||||||
|
src/winscard.c | 2 +-
|
||||||
|
4 files changed, 12 insertions(+), 12 deletions(-)
|
||||||
|
|
||||||
|
commit 8d60ec131318e97fe8fb2e8dec4bf1d8286e3407
|
||||||
|
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||||
|
Date: Sun May 22 13:01:53 2022 +0200
|
||||||
|
|
||||||
|
Handle getrandom() return value
|
||||||
|
|
||||||
|
Fix:
|
||||||
|
sys_unix.c:110:15: error: ignoring return value of 'getrandom' declared with attribute 'warn_unused_result' [-Werror=unused-result]
|
||||||
|
110 | (void)getrandom(c, sizeof c, 0);
|
||||||
|
| ^~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
src/sys_unix.c | 11 ++++++++++-
|
||||||
|
1 file changed, 10 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
commit 2c3d3bfd3793334aa688d565343e9fab1796229e
|
||||||
|
Author: Nikolaos Chatzikonstantinou <nchatz314@gmail.com>
|
||||||
|
Date: Mon May 16 11:01:55 2022 +0900
|
||||||
|
|
||||||
|
Change random number generator
|
||||||
|
|
||||||
|
Four fixes are applied in this patch:
|
||||||
|
|
||||||
|
1) The `SYS_RandomInt()` function is renamed to `SYS_RandomLong()`,
|
||||||
|
and its return type is now `long`. It no longer takes a range as
|
||||||
|
parameters for its random number generation; it always uses the full
|
||||||
|
range.
|
||||||
|
2) The `getrandom()` syscall is added to configure.ac as a requested
|
||||||
|
function.
|
||||||
|
3) The generator for `SYS_RandomLong()` is changed. The previous
|
||||||
|
generator was from the `rand()` function, but now it uses
|
||||||
|
`getrandom()` when available and otherwise `lrand48()`, from the POSIX
|
||||||
|
API.
|
||||||
|
4) The seeding of the generator is via `SYS_InitRandom()`. It is
|
||||||
|
modified accordingly to seed the new generator.
|
||||||
|
|
||||||
|
Addresses Ref #9
|
||||||
|
"Improve SYS_RandomInt()"
|
||||||
|
https://salsa.debian.org/rousseau/PCSC/-/issues/9
|
||||||
|
|
||||||
|
configure.ac | 2 +-
|
||||||
|
src/readerfactory.c | 4 ++--
|
||||||
|
src/sys_generic.h | 2 +-
|
||||||
|
src/sys_unix.c | 46 ++++++++++++++++++++++++++++++++--------------
|
||||||
|
src/winscard.c | 2 +-
|
||||||
|
5 files changed, 37 insertions(+), 19 deletions(-)
|
||||||
|
|
||||||
|
commit 615160ff2f1e6f0f0ee324f7442b0068552d0068
|
||||||
|
Author: Maksim Ivanov <emaxx@chromium.org>
|
||||||
|
Date: Wed May 18 21:38:13 2022 +0200
|
||||||
|
|
||||||
|
Fix shutdown memory leak of sReadersContexts
|
||||||
|
|
||||||
|
RFCleanupReaders() should always free memory of sReadersContexts
|
||||||
|
(allocated in RFAllocateReaderSpace()), not only when the reader was
|
||||||
|
active.
|
||||||
|
|
||||||
|
This was only a minor, shutdown-only, issue.
|
||||||
|
|
||||||
|
src/readerfactory.c | 7 +++----
|
||||||
|
1 file changed, 3 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
commit e1a0103c0e1e643dd8680610c33da5849c76ce4c (debug/master)
|
||||||
|
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||||
|
Date: Fri May 13 13:45:44 2022 +0200
|
||||||
|
|
||||||
|
github actions: use --enable-strict
|
||||||
|
|
||||||
|
.github/workflows/build.yml | 11 +++++------
|
||||||
|
1 file changed, 5 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
commit 5c45145d34b5e7382e0223477ff22de67ef97c77 (tag: 1.9.7)
|
||||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||||
Date: Fri May 13 13:10:29 2022 +0200
|
Date: Fri May 13 13:10:29 2022 +0200
|
||||||
|
|
||||||
|
@ -19,7 +274,7 @@ Date: Fri May 13 13:08:31 2022 +0200
|
||||||
c.sh | 1 +
|
c.sh | 1 +
|
||||||
1 file changed, 1 insertion(+)
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
commit b3f795550713121eb12d0c5e5ee5c9ac7be37b13 (debug/master)
|
commit b3f795550713121eb12d0c5e5ee5c9ac7be37b13
|
||||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||||
Date: Fri May 13 12:53:52 2022 +0200
|
Date: Fri May 13 12:53:52 2022 +0200
|
||||||
|
|
||||||
|
@ -31,7 +286,7 @@ Date: Fri May 13 12:53:52 2022 +0200
|
||||||
configure.ac | 8 ++++----
|
configure.ac | 8 ++++----
|
||||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
commit c2ca47deab2cc802b09dd509aca118f73f63b169 (zotac/master, origin/master, origin/HEAD, github/master)
|
commit c2ca47deab2cc802b09dd509aca118f73f63b169
|
||||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||||
Date: Thu May 12 21:43:10 2022 +0200
|
Date: Thu May 12 21:43:10 2022 +0200
|
||||||
|
|
||||||
|
|
|
@ -160,7 +160,7 @@ DIST_SUBDIRS = $(SUBDIRS)
|
||||||
am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \
|
am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \
|
||||||
$(top_srcdir)/src/PCSC/pcsclite.h.in AUTHORS COPYING ChangeLog \
|
$(top_srcdir)/src/PCSC/pcsclite.h.in AUTHORS COPYING ChangeLog \
|
||||||
INSTALL NEWS README TODO ar-lib compile config.guess \
|
INSTALL NEWS README TODO ar-lib compile config.guess \
|
||||||
config.sub depcomp install-sh ltmain.sh missing ylwrap
|
config.sub install-sh ltmain.sh missing ylwrap
|
||||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||||
distdir = $(PACKAGE)-$(VERSION)
|
distdir = $(PACKAGE)-$(VERSION)
|
||||||
top_distdir = $(distdir)
|
top_distdir = $(distdir)
|
||||||
|
|
|
@ -40,6 +40,9 @@
|
||||||
/* Define to 1 if you have the `getopt_long' function. */
|
/* Define to 1 if you have the `getopt_long' function. */
|
||||||
#undef HAVE_GETOPT_LONG
|
#undef HAVE_GETOPT_LONG
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getrandom' function. */
|
||||||
|
#undef HAVE_GETRANDOM
|
||||||
|
|
||||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||||
#undef HAVE_INTTYPES_H
|
#undef HAVE_INTTYPES_H
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Guess values for system-dependent variables and create Makefiles.
|
# Guess values for system-dependent variables and create Makefiles.
|
||||||
# Generated by GNU Autoconf 2.71 for pcsc-lite 1.9.7.
|
# Generated by GNU Autoconf 2.71 for pcsc-lite 1.9.8.
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
|
# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
|
||||||
|
@ -618,8 +618,8 @@ MAKEFLAGS=
|
||||||
# Identity of this package.
|
# Identity of this package.
|
||||||
PACKAGE_NAME='pcsc-lite'
|
PACKAGE_NAME='pcsc-lite'
|
||||||
PACKAGE_TARNAME='pcsc-lite'
|
PACKAGE_TARNAME='pcsc-lite'
|
||||||
PACKAGE_VERSION='1.9.7'
|
PACKAGE_VERSION='1.9.8'
|
||||||
PACKAGE_STRING='pcsc-lite 1.9.7'
|
PACKAGE_STRING='pcsc-lite 1.9.8'
|
||||||
PACKAGE_BUGREPORT=''
|
PACKAGE_BUGREPORT=''
|
||||||
PACKAGE_URL=''
|
PACKAGE_URL=''
|
||||||
|
|
||||||
|
@ -1424,7 +1424,7 @@ if test "$ac_init_help" = "long"; then
|
||||||
# Omit some internal or obsolete options to make the list less imposing.
|
# Omit some internal or obsolete options to make the list less imposing.
|
||||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||||
cat <<_ACEOF
|
cat <<_ACEOF
|
||||||
\`configure' configures pcsc-lite 1.9.7 to adapt to many kinds of systems.
|
\`configure' configures pcsc-lite 1.9.8 to adapt to many kinds of systems.
|
||||||
|
|
||||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||||
|
|
||||||
|
@ -1495,7 +1495,7 @@ fi
|
||||||
|
|
||||||
if test -n "$ac_init_help"; then
|
if test -n "$ac_init_help"; then
|
||||||
case $ac_init_help in
|
case $ac_init_help in
|
||||||
short | recursive ) echo "Configuration of pcsc-lite 1.9.7:";;
|
short | recursive ) echo "Configuration of pcsc-lite 1.9.8:";;
|
||||||
esac
|
esac
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
|
|
||||||
|
@ -1649,7 +1649,7 @@ fi
|
||||||
test -n "$ac_init_help" && exit $ac_status
|
test -n "$ac_init_help" && exit $ac_status
|
||||||
if $ac_init_version; then
|
if $ac_init_version; then
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
pcsc-lite configure 1.9.7
|
pcsc-lite configure 1.9.8
|
||||||
generated by GNU Autoconf 2.71
|
generated by GNU Autoconf 2.71
|
||||||
|
|
||||||
Copyright (C) 2021 Free Software Foundation, Inc.
|
Copyright (C) 2021 Free Software Foundation, Inc.
|
||||||
|
@ -2065,7 +2065,7 @@ cat >config.log <<_ACEOF
|
||||||
This file contains any messages produced by compilers while
|
This file contains any messages produced by compilers while
|
||||||
running configure, to aid debugging if configure makes a mistake.
|
running configure, to aid debugging if configure makes a mistake.
|
||||||
|
|
||||||
It was created by pcsc-lite $as_me 1.9.7, which was
|
It was created by pcsc-lite $as_me 1.9.8, which was
|
||||||
generated by GNU Autoconf 2.71. Invocation command line was
|
generated by GNU Autoconf 2.71. Invocation command line was
|
||||||
|
|
||||||
$ $0$ac_configure_args_raw
|
$ $0$ac_configure_args_raw
|
||||||
|
@ -3336,7 +3336,7 @@ fi
|
||||||
|
|
||||||
# Define the identity of the package.
|
# Define the identity of the package.
|
||||||
PACKAGE='pcsc-lite'
|
PACKAGE='pcsc-lite'
|
||||||
VERSION='1.9.7'
|
VERSION='1.9.8'
|
||||||
|
|
||||||
|
|
||||||
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
|
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
|
||||||
|
@ -15395,6 +15395,12 @@ if test "x$ac_cv_func_vsnprintf" = xyes
|
||||||
then :
|
then :
|
||||||
printf "%s\n" "#define HAVE_VSNPRINTF 1" >>confdefs.h
|
printf "%s\n" "#define HAVE_VSNPRINTF 1" >>confdefs.h
|
||||||
|
|
||||||
|
fi
|
||||||
|
ac_fn_c_check_func "$LINENO" "getrandom" "ac_cv_func_getrandom"
|
||||||
|
if test "x$ac_cv_func_getrandom" = xyes
|
||||||
|
then :
|
||||||
|
printf "%s\n" "#define HAVE_GETRANDOM 1" >>confdefs.h
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
|
# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
|
||||||
|
@ -17236,7 +17242,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
||||||
# report actual input values of CONFIG_FILES etc. instead of their
|
# report actual input values of CONFIG_FILES etc. instead of their
|
||||||
# values after options handling.
|
# values after options handling.
|
||||||
ac_log="
|
ac_log="
|
||||||
This file was extended by pcsc-lite $as_me 1.9.7, which was
|
This file was extended by pcsc-lite $as_me 1.9.8, which was
|
||||||
generated by GNU Autoconf 2.71. Invocation command line was
|
generated by GNU Autoconf 2.71. Invocation command line was
|
||||||
|
|
||||||
CONFIG_FILES = $CONFIG_FILES
|
CONFIG_FILES = $CONFIG_FILES
|
||||||
|
@ -17304,7 +17310,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
|
||||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||||
ac_cs_config='$ac_cs_config_escaped'
|
ac_cs_config='$ac_cs_config_escaped'
|
||||||
ac_cs_version="\\
|
ac_cs_version="\\
|
||||||
pcsc-lite config.status 1.9.7
|
pcsc-lite config.status 1.9.8
|
||||||
configured by $0, generated by GNU Autoconf 2.71,
|
configured by $0, generated by GNU Autoconf 2.71,
|
||||||
with options \\"\$ac_cs_config\\"
|
with options \\"\$ac_cs_config\\"
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
AC_PREREQ([2.69])
|
AC_PREREQ([2.69])
|
||||||
|
|
||||||
AC_INIT([pcsc-lite],[1.9.7])
|
AC_INIT([pcsc-lite],[1.9.8])
|
||||||
AC_CONFIG_SRCDIR(src/pcscdaemon.c)
|
AC_CONFIG_SRCDIR(src/pcscdaemon.c)
|
||||||
AM_INIT_AUTOMAKE(1.8 dist-bzip2 no-dist-gzip)
|
AM_INIT_AUTOMAKE(1.8 dist-bzip2 no-dist-gzip)
|
||||||
AC_CONFIG_HEADERS([config.h])
|
AC_CONFIG_HEADERS([config.h])
|
||||||
|
@ -109,7 +109,7 @@ AC_STRUCT_DIRENT_D_TYPE
|
||||||
AC_FUNC_ERROR_AT_LINE
|
AC_FUNC_ERROR_AT_LINE
|
||||||
AC_FUNC_STAT
|
AC_FUNC_STAT
|
||||||
AC_FUNC_VPRINTF
|
AC_FUNC_VPRINTF
|
||||||
AC_CHECK_FUNCS(getopt_long nanosleep strerror vsnprintf)
|
AC_CHECK_FUNCS(getopt_long nanosleep strerror vsnprintf getrandom)
|
||||||
AC_FUNC_ALLOCA
|
AC_FUNC_ALLOCA
|
||||||
|
|
||||||
# C Compiler features
|
# C Compiler features
|
||||||
|
|
|
@ -129,6 +129,7 @@ static LONG HPAddHotPluggable(struct libusb_device *dev,
|
||||||
struct _driverTracker *driver,
|
struct _driverTracker *driver,
|
||||||
struct _driverTracker *classdriver);
|
struct _driverTracker *classdriver);
|
||||||
static LONG HPRemoveHotPluggable(int reader_index);
|
static LONG HPRemoveHotPluggable(int reader_index);
|
||||||
|
static void HPCleanupHotPluggable(int reader_index);
|
||||||
|
|
||||||
static LONG HPReadBundleValues(void)
|
static LONG HPReadBundleValues(void)
|
||||||
{
|
{
|
||||||
|
@ -212,7 +213,7 @@ static LONG HPReadBundleValues(void)
|
||||||
if (rv)
|
if (rv)
|
||||||
CFBundleName = NULL;
|
CFBundleName = NULL;
|
||||||
else
|
else
|
||||||
CFBundleName = strdup(list_get_at(values, 0));
|
CFBundleName = list_get_at(values, 0);
|
||||||
|
|
||||||
/* while we find a nth ifdVendorID in Info.plist */
|
/* while we find a nth ifdVendorID in Info.plist */
|
||||||
for (alias=0; alias<list_size(manuIDs); alias++)
|
for (alias=0; alias<list_size(manuIDs); alias++)
|
||||||
|
@ -232,7 +233,8 @@ static LONG HPReadBundleValues(void)
|
||||||
driverTracker[listCount].bundleName = strdup(currFP->d_name);
|
driverTracker[listCount].bundleName = strdup(currFP->d_name);
|
||||||
driverTracker[listCount].libraryPath = strdup(fullLibPath);
|
driverTracker[listCount].libraryPath = strdup(fullLibPath);
|
||||||
driverTracker[listCount].ifdCapabilities = ifdCapabilities;
|
driverTracker[listCount].ifdCapabilities = ifdCapabilities;
|
||||||
driverTracker[listCount].CFBundleName = CFBundleName;
|
driverTracker[listCount].CFBundleName =
|
||||||
|
CFBundleName ? strdup(CFBundleName) : NULL;
|
||||||
|
|
||||||
#ifdef DEBUG_HOTPLUG
|
#ifdef DEBUG_HOTPLUG
|
||||||
Log2(PCSC_LOG_INFO, "Found driver for: %s",
|
Log2(PCSC_LOG_INFO, "Found driver for: %s",
|
||||||
|
@ -443,10 +445,19 @@ static void HPRescanUsbBus(void)
|
||||||
HPRemoveHotPluggable(i);
|
HPRemoveHotPluggable(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* free the libusb allocated list & devices */
|
||||||
|
libusb_free_device_list(devs, 1);
|
||||||
|
|
||||||
if (AraKiriHotPlug)
|
if (AraKiriHotPlug)
|
||||||
{
|
{
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
|
for (i=0; i<PCSCLITE_MAX_READERS_CONTEXTS; i++)
|
||||||
|
{
|
||||||
|
if (readerTracker[i].fullName != NULL)
|
||||||
|
HPCleanupHotPluggable(i);
|
||||||
|
}
|
||||||
|
|
||||||
for (i=0; i<driverSize; i++)
|
for (i=0; i<driverSize; i++)
|
||||||
{
|
{
|
||||||
/* free strings allocated by strdup() */
|
/* free strings allocated by strdup() */
|
||||||
|
@ -460,9 +471,6 @@ static void HPRescanUsbBus(void)
|
||||||
Log1(PCSC_LOG_INFO, "Hotplug stopped");
|
Log1(PCSC_LOG_INFO, "Hotplug stopped");
|
||||||
pthread_exit(&retval);
|
pthread_exit(&retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* free the libusb allocated list & devices */
|
|
||||||
libusb_free_device_list(devs, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void * HPEstablishUSBNotifications(int pipefd[2])
|
static void * HPEstablishUSBNotifications(int pipefd[2])
|
||||||
|
@ -549,6 +557,7 @@ LONG HPSearchHotPluggables(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
AraKiriHotPlug = FALSE;
|
||||||
for (i=0; i<PCSCLITE_MAX_READERS_CONTEXTS; i++)
|
for (i=0; i<PCSCLITE_MAX_READERS_CONTEXTS; i++)
|
||||||
{
|
{
|
||||||
readerTracker[i].status = READER_ABSENT;
|
readerTracker[i].status = READER_ABSENT;
|
||||||
|
@ -769,16 +778,21 @@ static LONG HPRemoveHotPluggable(int reader_index)
|
||||||
|
|
||||||
RFRemoveReader(readerTracker[reader_index].fullName,
|
RFRemoveReader(readerTracker[reader_index].fullName,
|
||||||
PCSCLITE_HP_BASE_PORT + reader_index, REMOVE_READER_FLAG_REMOVED);
|
PCSCLITE_HP_BASE_PORT + reader_index, REMOVE_READER_FLAG_REMOVED);
|
||||||
free(readerTracker[reader_index].fullName);
|
HPCleanupHotPluggable(reader_index);
|
||||||
readerTracker[reader_index].status = READER_ABSENT;
|
|
||||||
readerTracker[reader_index].bus_device[0] = '\0';
|
|
||||||
readerTracker[reader_index].fullName = NULL;
|
|
||||||
|
|
||||||
pthread_mutex_unlock(&usbNotifierMutex);
|
pthread_mutex_unlock(&usbNotifierMutex);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
} /* End of function */
|
} /* End of function */
|
||||||
|
|
||||||
|
static void HPCleanupHotPluggable(int reader_index)
|
||||||
|
{
|
||||||
|
free(readerTracker[reader_index].fullName);
|
||||||
|
readerTracker[reader_index].status = READER_ABSENT;
|
||||||
|
readerTracker[reader_index].bus_device[0] = '\0';
|
||||||
|
readerTracker[reader_index].fullName = NULL;
|
||||||
|
} /* End of function */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets up callbacks for device hotplug events.
|
* Sets up callbacks for device hotplug events.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1186,7 +1186,7 @@ SCARDHANDLE RFCreateReaderHandle(READER_CONTEXT * rContext)
|
||||||
/* FIXME: THIS IS NOT STRONG ENOUGH: A 128-bit token should be
|
/* FIXME: THIS IS NOT STRONG ENOUGH: A 128-bit token should be
|
||||||
* generated. The client and server would associate token and hCard
|
* generated. The client and server would associate token and hCard
|
||||||
* for authentication. */
|
* for authentication. */
|
||||||
randHandle = SYS_RandomInt(0, -1);
|
randHandle = SYS_RandomInt();
|
||||||
|
|
||||||
/* do we already use this hCard somewhere? */
|
/* do we already use this hCard somewhere? */
|
||||||
ret = RFReaderInfoById(randHandle, &dummy_reader);
|
ret = RFReaderInfoById(randHandle, &dummy_reader);
|
||||||
|
@ -1396,11 +1396,10 @@ void RFCleanupReaders(void)
|
||||||
|
|
||||||
if (rv != SCARD_S_SUCCESS)
|
if (rv != SCARD_S_SUCCESS)
|
||||||
Log2(PCSC_LOG_ERROR, "RFRemoveReader error: 0x%08lX", rv);
|
Log2(PCSC_LOG_ERROR, "RFRemoveReader error: 0x%08lX", rv);
|
||||||
|
|
||||||
free(sReadersContexts[i]);
|
|
||||||
|
|
||||||
sReadersContexts[i] = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free(sReadersContexts[i]);
|
||||||
|
sReadersContexts[i] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_SERIAL
|
#ifdef USE_SERIAL
|
||||||
|
|
|
@ -2,6 +2,7 @@ AM_CPPFLAGS = -I$(top_srcdir)/src/PCSC -I$(top_builddir)/src/PCSC
|
||||||
|
|
||||||
lib_LTLIBRARIES = libpcscspy.la
|
lib_LTLIBRARIES = libpcscspy.la
|
||||||
dist_bin_SCRIPTS = pcsc-spy
|
dist_bin_SCRIPTS = pcsc-spy
|
||||||
|
dist_doc_DATA = install_spy.sh uninstall_spy.sh
|
||||||
|
|
||||||
libpcscspy_la_SOURCES = \
|
libpcscspy_la_SOURCES = \
|
||||||
libpcscspy.c
|
libpcscspy.c
|
||||||
|
@ -16,5 +17,5 @@ pcsc-spy.1: pcsc-spy.pod
|
||||||
$(srcdir)/pcsc-spy.pod > $@
|
$(srcdir)/pcsc-spy.pod > $@
|
||||||
endif
|
endif
|
||||||
|
|
||||||
EXTRA_DIST = install_spy.sh uninstall_spy.sh pcsc-spy.pod
|
EXTRA_DIST = pcsc-spy.pod
|
||||||
CLEANFILES = pcsc-spy.1
|
CLEANFILES = pcsc-spy.1
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
@SET_MAKE@
|
@SET_MAKE@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
VPATH = @srcdir@
|
VPATH = @srcdir@
|
||||||
am__is_gnu_make = { \
|
am__is_gnu_make = { \
|
||||||
if test -z '$(MAKELEVEL)'; then \
|
if test -z '$(MAKELEVEL)'; then \
|
||||||
|
@ -98,7 +99,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
|
||||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||||
$(ACLOCAL_M4)
|
$(ACLOCAL_M4)
|
||||||
DIST_COMMON = $(srcdir)/Makefile.am $(dist_bin_SCRIPTS) \
|
DIST_COMMON = $(srcdir)/Makefile.am $(dist_bin_SCRIPTS) \
|
||||||
$(am__DIST_COMMON)
|
$(dist_doc_DATA) $(am__DIST_COMMON)
|
||||||
mkinstalldirs = $(install_sh) -d
|
mkinstalldirs = $(install_sh) -d
|
||||||
CONFIG_HEADER = $(top_builddir)/config.h
|
CONFIG_HEADER = $(top_builddir)/config.h
|
||||||
CONFIG_CLEAN_FILES =
|
CONFIG_CLEAN_FILES =
|
||||||
|
@ -131,7 +132,7 @@ am__uninstall_files_from_dir = { \
|
||||||
$(am__cd) "$$dir" && rm -f $$files; }; \
|
$(am__cd) "$$dir" && rm -f $$files; }; \
|
||||||
}
|
}
|
||||||
am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
|
am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
|
||||||
"$(DESTDIR)$(man1dir)"
|
"$(DESTDIR)$(man1dir)" "$(DESTDIR)$(docdir)"
|
||||||
LTLIBRARIES = $(lib_LTLIBRARIES)
|
LTLIBRARIES = $(lib_LTLIBRARIES)
|
||||||
libpcscspy_la_LIBADD =
|
libpcscspy_la_LIBADD =
|
||||||
am_libpcscspy_la_OBJECTS = libpcscspy.lo
|
am_libpcscspy_la_OBJECTS = libpcscspy.lo
|
||||||
|
@ -186,6 +187,7 @@ am__can_run_installinfo = \
|
||||||
man1dir = $(mandir)/man1
|
man1dir = $(mandir)/man1
|
||||||
NROFF = nroff
|
NROFF = nroff
|
||||||
MANS = $(man_MANS)
|
MANS = $(man_MANS)
|
||||||
|
DATA = $(dist_doc_DATA)
|
||||||
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
|
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
|
||||||
# Read a list of newline-separated strings from the standard input,
|
# Read a list of newline-separated strings from the standard input,
|
||||||
# and print each of them once, without duplicates. Input order is
|
# and print each of them once, without duplicates. Input order is
|
||||||
|
@ -362,11 +364,12 @@ usbdropdir = @usbdropdir@
|
||||||
AM_CPPFLAGS = -I$(top_srcdir)/src/PCSC -I$(top_builddir)/src/PCSC
|
AM_CPPFLAGS = -I$(top_srcdir)/src/PCSC -I$(top_builddir)/src/PCSC
|
||||||
lib_LTLIBRARIES = libpcscspy.la
|
lib_LTLIBRARIES = libpcscspy.la
|
||||||
dist_bin_SCRIPTS = pcsc-spy
|
dist_bin_SCRIPTS = pcsc-spy
|
||||||
|
dist_doc_DATA = install_spy.sh uninstall_spy.sh
|
||||||
libpcscspy_la_SOURCES = \
|
libpcscspy_la_SOURCES = \
|
||||||
libpcscspy.c
|
libpcscspy.c
|
||||||
|
|
||||||
@ENABLE_DOC_TRUE@man_MANS = pcsc-spy.1
|
@ENABLE_DOC_TRUE@man_MANS = pcsc-spy.1
|
||||||
EXTRA_DIST = install_spy.sh uninstall_spy.sh pcsc-spy.pod
|
EXTRA_DIST = pcsc-spy.pod
|
||||||
CLEANFILES = pcsc-spy.1
|
CLEANFILES = pcsc-spy.1
|
||||||
all: all-am
|
all: all-am
|
||||||
|
|
||||||
|
@ -558,6 +561,27 @@ uninstall-man1:
|
||||||
} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
|
} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
|
||||||
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
|
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
|
||||||
dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
|
dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
|
||||||
|
install-dist_docDATA: $(dist_doc_DATA)
|
||||||
|
@$(NORMAL_INSTALL)
|
||||||
|
@list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \
|
||||||
|
if test -n "$$list"; then \
|
||||||
|
echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \
|
||||||
|
$(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \
|
||||||
|
fi; \
|
||||||
|
for p in $$list; do \
|
||||||
|
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||||
|
echo "$$d$$p"; \
|
||||||
|
done | $(am__base_list) | \
|
||||||
|
while read files; do \
|
||||||
|
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \
|
||||||
|
$(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \
|
||||||
|
done
|
||||||
|
|
||||||
|
uninstall-dist_docDATA:
|
||||||
|
@$(NORMAL_UNINSTALL)
|
||||||
|
@list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \
|
||||||
|
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
|
||||||
|
dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir)
|
||||||
|
|
||||||
ID: $(am__tagged_files)
|
ID: $(am__tagged_files)
|
||||||
$(am__define_uniq_tagged_files); mkid -fID $$unique
|
$(am__define_uniq_tagged_files); mkid -fID $$unique
|
||||||
|
@ -645,9 +669,9 @@ distdir-am: $(DISTFILES)
|
||||||
done
|
done
|
||||||
check-am: all-am
|
check-am: all-am
|
||||||
check: check-am
|
check: check-am
|
||||||
all-am: Makefile $(LTLIBRARIES) $(SCRIPTS) $(MANS)
|
all-am: Makefile $(LTLIBRARIES) $(SCRIPTS) $(MANS) $(DATA)
|
||||||
installdirs:
|
installdirs:
|
||||||
for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \
|
for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(docdir)"; do \
|
||||||
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
||||||
done
|
done
|
||||||
install: install-am
|
install: install-am
|
||||||
|
@ -704,7 +728,7 @@ info: info-am
|
||||||
|
|
||||||
info-am:
|
info-am:
|
||||||
|
|
||||||
install-data-am: install-man
|
install-data-am: install-dist_docDATA install-man
|
||||||
|
|
||||||
install-dvi: install-dvi-am
|
install-dvi: install-dvi-am
|
||||||
|
|
||||||
|
@ -750,8 +774,8 @@ ps: ps-am
|
||||||
|
|
||||||
ps-am:
|
ps-am:
|
||||||
|
|
||||||
uninstall-am: uninstall-dist_binSCRIPTS uninstall-libLTLIBRARIES \
|
uninstall-am: uninstall-dist_binSCRIPTS uninstall-dist_docDATA \
|
||||||
uninstall-man
|
uninstall-libLTLIBRARIES uninstall-man
|
||||||
|
|
||||||
uninstall-man: uninstall-man1
|
uninstall-man: uninstall-man1
|
||||||
|
|
||||||
|
@ -762,16 +786,17 @@ uninstall-man: uninstall-man1
|
||||||
ctags ctags-am distclean distclean-compile distclean-generic \
|
ctags ctags-am distclean distclean-compile distclean-generic \
|
||||||
distclean-libtool distclean-tags distdir dvi dvi-am html \
|
distclean-libtool distclean-tags distdir dvi dvi-am html \
|
||||||
html-am info info-am install install-am install-data \
|
html-am info info-am install install-am install-data \
|
||||||
install-data-am install-dist_binSCRIPTS install-dvi \
|
install-data-am install-dist_binSCRIPTS install-dist_docDATA \
|
||||||
install-dvi-am install-exec install-exec-am install-html \
|
install-dvi install-dvi-am install-exec install-exec-am \
|
||||||
install-html-am install-info install-info-am \
|
install-html install-html-am install-info install-info-am \
|
||||||
install-libLTLIBRARIES install-man install-man1 install-pdf \
|
install-libLTLIBRARIES install-man install-man1 install-pdf \
|
||||||
install-pdf-am install-ps install-ps-am install-strip \
|
install-pdf-am install-ps install-ps-am install-strip \
|
||||||
installcheck installcheck-am installdirs maintainer-clean \
|
installcheck installcheck-am installdirs maintainer-clean \
|
||||||
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
||||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
||||||
tags tags-am uninstall uninstall-am uninstall-dist_binSCRIPTS \
|
tags tags-am uninstall uninstall-am uninstall-dist_binSCRIPTS \
|
||||||
uninstall-libLTLIBRARIES uninstall-man uninstall-man1
|
uninstall-dist_docDATA uninstall-libLTLIBRARIES uninstall-man \
|
||||||
|
uninstall-man1
|
||||||
|
|
||||||
.PRECIOUS: Makefile
|
.PRECIOUS: Makefile
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
int SYS_USleep(int);
|
int SYS_USleep(int);
|
||||||
|
|
||||||
int SYS_RandomInt(int, int);
|
int SYS_RandomInt(void);
|
||||||
|
|
||||||
void SYS_InitRandom(void);
|
void SYS_InitRandom(void);
|
||||||
|
|
||||||
|
|
|
@ -39,11 +39,18 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
#include <limits.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
#ifdef HAVE_GETRANDOM
|
||||||
|
#include <sys/random.h>
|
||||||
|
#endif /* HAVE_GETRANDOM */
|
||||||
|
#include <errno.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
#include "sys_generic.h"
|
#include "sys_generic.h"
|
||||||
|
#include "PCSC/debuglog.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Makes the current process sleep for some seconds.
|
* @brief Makes the current process sleep for some seconds.
|
||||||
|
@ -87,22 +94,40 @@ INTERNAL int SYS_USleep(int iTimeVal)
|
||||||
/**
|
/**
|
||||||
* Generate a pseudo random number
|
* Generate a pseudo random number
|
||||||
*
|
*
|
||||||
* @param[in] fStart minimal value
|
* @return a non-negative random number
|
||||||
* @param[in] fEnd maximal value or -1 for a full range
|
|
||||||
*
|
*
|
||||||
* @return a random number between fStart and fEnd
|
* @remark the range is at least up to `2^31`.
|
||||||
|
* @remark this is a CSPRNG when `getrandom()` is available, LCG otherwise.
|
||||||
|
* @warning SYS_InitRandom() should be called (once) before using this function.
|
||||||
|
* @warning not thread safe when system lacks `getrandom()` syscall.
|
||||||
|
* @warning not cryptographically secure when system lacks `getrandom()` syscall.
|
||||||
|
* @warning if interrupted by a signal, this function may return 0.
|
||||||
*/
|
*/
|
||||||
INTERNAL int SYS_RandomInt(int fStart, int fEnd)
|
INTERNAL int SYS_RandomInt(void)
|
||||||
{
|
{
|
||||||
int iRandNum = 0;
|
#ifdef HAVE_GETRANDOM
|
||||||
|
unsigned int ui = 0;
|
||||||
|
unsigned char c[sizeof ui] = {0};
|
||||||
|
size_t i;
|
||||||
|
ssize_t ret;
|
||||||
|
|
||||||
if (-1 == fEnd)
|
ret = getrandom(c, sizeof c, 0);
|
||||||
/* full int range */
|
if (-1 == ret)
|
||||||
iRandNum = rand();
|
{
|
||||||
else
|
Log2(PCSC_LOG_ERROR, "getrandom() failed: %s", strerror(errno));
|
||||||
iRandNum = ((rand()+0.0)/RAND_MAX * (fEnd - fStart)) + fStart;
|
return lrand48();
|
||||||
|
}
|
||||||
return iRandNum;
|
// this loop avoids trap representations that may occur in the naive solution
|
||||||
|
for(i = 0; i < sizeof ui; i++) {
|
||||||
|
ui <<= CHAR_BIT;
|
||||||
|
ui |= c[i];
|
||||||
|
}
|
||||||
|
// the casts are for the sake of clarity
|
||||||
|
return (int)(ui & (unsigned int)INT_MAX);
|
||||||
|
#else
|
||||||
|
int r = lrand48(); // this is not thread-safe
|
||||||
|
return r;
|
||||||
|
#endif /* HAVE_GETRANDOM */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -110,6 +135,7 @@ INTERNAL int SYS_RandomInt(int fStart, int fEnd)
|
||||||
*/
|
*/
|
||||||
INTERNAL void SYS_InitRandom(void)
|
INTERNAL void SYS_InitRandom(void)
|
||||||
{
|
{
|
||||||
|
#ifndef HAVE_GETRANDOM
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
struct timezone tz;
|
struct timezone tz;
|
||||||
long myseed = 0;
|
long myseed = 0;
|
||||||
|
@ -124,6 +150,7 @@ INTERNAL void SYS_InitRandom(void)
|
||||||
myseed = (long) time(NULL);
|
myseed = (long) time(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
srand(myseed);
|
srand48(myseed);
|
||||||
|
#endif /* HAVE_GETRANDOM */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -210,7 +210,7 @@ LONG SCardEstablishContext(DWORD dwScope, /*@unused@*/ LPCVOID pvReserved1,
|
||||||
* identified by clients and distinguished from others
|
* identified by clients and distinguished from others
|
||||||
*/
|
*/
|
||||||
|
|
||||||
*phContext = SYS_RandomInt(0, -1);
|
*phContext = SYS_RandomInt();
|
||||||
|
|
||||||
Log2(PCSC_LOG_DEBUG, "Establishing Context: 0x%lX", *phContext);
|
Log2(PCSC_LOG_DEBUG, "Establishing Context: 0x%lX", *phContext);
|
||||||
|
|
||||||
|
|
|
@ -498,6 +498,13 @@ end:
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DESTRUCTOR
|
||||||
|
DESTRUCTOR static void destructor(void)
|
||||||
|
{
|
||||||
|
list_destroy(&contextMapList);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Creates a communication context to the PC/SC Resource
|
* @brief Creates a communication context to the PC/SC Resource
|
||||||
* Manager.
|
* Manager.
|
||||||
|
@ -547,9 +554,8 @@ static LONG SCardEstablishContextTH(DWORD dwScope,
|
||||||
{
|
{
|
||||||
int lrv;
|
int lrv;
|
||||||
|
|
||||||
/* NOTE: The list will never be freed (No API call exists to
|
/* NOTE: The list will be freed only if DESTRUCTOR is defined.
|
||||||
* "close all contexts".
|
* Applications which load and unload the library may leak
|
||||||
* Applications which load and unload the library will leak
|
|
||||||
* the list's internal structures. */
|
* the list's internal structures. */
|
||||||
lrv = list_init(&contextMapList);
|
lrv = list_init(&contextMapList);
|
||||||
if (lrv < 0)
|
if (lrv < 0)
|
||||||
|
@ -2233,8 +2239,7 @@ LONG SCardControl(SCARDHANDLE hCard, DWORD dwControlCode, LPCVOID pbSendBuffer,
|
||||||
return SCARD_E_INVALID_HANDLE;
|
return SCARD_E_INVALID_HANDLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((cbSendLength > MAX_BUFFER_SIZE_EXTENDED)
|
if (cbSendLength > MAX_BUFFER_SIZE_EXTENDED)
|
||||||
|| (cbRecvLength > MAX_BUFFER_SIZE_EXTENDED))
|
|
||||||
{
|
{
|
||||||
rv = SCARD_E_INSUFFICIENT_BUFFER;
|
rv = SCARD_E_INSUFFICIENT_BUFFER;
|
||||||
goto end;
|
goto end;
|
||||||
|
@ -2689,8 +2694,7 @@ retry:
|
||||||
return SCARD_E_INVALID_HANDLE;
|
return SCARD_E_INVALID_HANDLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((cbSendLength > MAX_BUFFER_SIZE_EXTENDED)
|
if (cbSendLength > MAX_BUFFER_SIZE_EXTENDED)
|
||||||
|| (*pcbRecvLength > MAX_BUFFER_SIZE_EXTENDED))
|
|
||||||
{
|
{
|
||||||
rv = SCARD_E_INSUFFICIENT_BUFFER;
|
rv = SCARD_E_INSUFFICIENT_BUFFER;
|
||||||
goto end;
|
goto end;
|
||||||
|
|
|
@ -658,8 +658,7 @@ static void * ContextThread(LPVOID newContext)
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
||||||
/* avoids buffer overflow */
|
/* avoids buffer overflow */
|
||||||
if ((trStr.pcbRecvLength > sizeof(pbRecvBuffer))
|
if (trStr.cbSendLength > sizeof(pbSendBuffer))
|
||||||
|| (trStr.cbSendLength > sizeof(pbSendBuffer)))
|
|
||||||
goto buffer_overflow;
|
goto buffer_overflow;
|
||||||
|
|
||||||
/* read sent buffer */
|
/* read sent buffer */
|
||||||
|
@ -713,8 +712,7 @@ static void * ContextThread(LPVOID newContext)
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
||||||
/* avoids buffer overflow */
|
/* avoids buffer overflow */
|
||||||
if ((ctStr.cbRecvLength > sizeof(pbRecvBuffer))
|
if (ctStr.cbSendLength > sizeof(pbSendBuffer))
|
||||||
|| (ctStr.cbSendLength > sizeof(pbSendBuffer)))
|
|
||||||
{
|
{
|
||||||
goto buffer_overflow;
|
goto buffer_overflow;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue