New upstream version 1.8.23
This commit is contained in:
parent
acc3243be1
commit
c13142777b
|
@ -1,3 +1,11 @@
|
|||
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 bloking.
|
||||
|
|
234
ChangeLog.git
234
ChangeLog.git
|
@ -1,4 +1,236 @@
|
|||
commit 696023944649e0c52802e20994fb78d6b24d4efd (HEAD -> master, tag: pcsc-1.8.22, zotac/master, origin/master, origin/HEAD, github/master)
|
||||
commit 09f0f85b86e7488cf26642dd17150f76bed5300c (HEAD -> master)
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Mon Dec 18 19:56:49 2017 +0100
|
||||
|
||||
Release 1.8.23
|
||||
|
||||
ChangeLog | 8 ++++++++
|
||||
configure.ac | 2 +-
|
||||
2 files changed, 9 insertions(+), 1 deletion(-)
|
||||
|
||||
commit 1dde8427236fa988e9f488baa46d7316691a5555 (origin/master, origin/HEAD)
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Tue Nov 14 15:09:25 2017 +0100
|
||||
|
||||
spy: add support SCardStatus() with NULL pcbAtrLen
|
||||
|
||||
If an application calls SCardStatus() with pcbAtrLen = NULL then the trace
|
||||
interpretation was wrong.
|
||||
|
||||
The problematic trace was:
|
||||
7F9414EF6700@>|1510667088|620972|SCardStatus
|
||||
7F9414EF6700@0x7B0DDEA3
|
||||
7F9414EF6700@NULL
|
||||
7F9414EF6700@NULL
|
||||
7F9414EF6700@NULL
|
||||
7F9414EF6700@""
|
||||
7F9414EF6700@NULL
|
||||
7F9414EF6700@NULL
|
||||
7F9414EF6700@NULL
|
||||
7F9414EF6700@<|1510667088|621107|SCardStatus|Command successful.|0x00000000
|
||||
|
||||
SCardStatus
|
||||
i hCard: 0x7B0DDEA3
|
||||
i pcchReaderLen NULL
|
||||
i pcbAtrLen NULL
|
||||
o cchReaderLen NULL
|
||||
o mszReaderName ""
|
||||
o dwState NULL
|
||||
o dwProtocol NULL
|
||||
o bAtrLen NULL
|
||||
o bAtr
|
||||
=> Command successful. (SCARD_S_SUCCESS [0x00000000]) [0.000135]
|
||||
|
||||
In the trace above the value bAtr is not known (bAtrLen has no value) so
|
||||
nothing is displayed.
|
||||
|
||||
A more classic trace is:
|
||||
7FF91179D700@>|1510668989|105007|SCardStatus
|
||||
7FF91179D700@0x2E753ED9
|
||||
7FF91179D700@0x00000000
|
||||
7FF91179D700@0x00000000
|
||||
7FF91179D700@0x0000001D
|
||||
7FF91179D700@NULL
|
||||
7FF91179D700@0x00050034
|
||||
7FF91179D700@0x00000001
|
||||
7FF91179D700@0x00000014
|
||||
7FF91179D700@NULL
|
||||
7FF91179D700@<|1510668989|105301|SCardStatus|Command successful.|0x00000000
|
||||
7FF91179D700@>|1510668989|105306|SCardStatus
|
||||
7FF91179D700@0x2E753ED9
|
||||
7FF91179D700@0x0000001D
|
||||
7FF91179D700@0x00000021
|
||||
7FF91179D700@0x0000001D
|
||||
7FF91179D700@Gemalto PC Twin Reader 00 00
|
||||
7FF91179D700@0x00050034
|
||||
7FF91179D700@0x00000001
|
||||
7FF91179D700@0x00000014
|
||||
7FF91179D700@3B 7F 96 00 00 80 31 80 65 B0 85 03 00 EF 12 0F FE 82 90 00
|
||||
7FF91179D700@<|1510668989|105365|SCardStatus|Command successful.|0x00000000
|
||||
|
||||
giving:
|
||||
SCardStatus
|
||||
i hCard: 0x2E753ED9
|
||||
i pcchReaderLen 0x00000000 (0)
|
||||
i pcbAtrLen 0x00000000 (0)
|
||||
o cchReaderLen 0x0000001D (29)
|
||||
o mszReaderName NULL
|
||||
o dwState 0x00050034 (327732)
|
||||
o dwProtocol 0x00000001 (1)
|
||||
o bAtrLen 0x00000014 (20)
|
||||
o bAtr NULL
|
||||
=> Command successful. (SCARD_S_SUCCESS [0x00000000]) [0.000294]
|
||||
SCardStatus
|
||||
i hCard: 0x2E753ED9
|
||||
i pcchReaderLen 0x0000001D (29)
|
||||
i pcbAtrLen 0x00000021 (33)
|
||||
o cchReaderLen 0x0000001D (29)
|
||||
o mszReaderName Gemalto PC Twin Reader 00 00
|
||||
o dwState 0x00050034 (327732)
|
||||
o dwProtocol 0x00000001 (1)
|
||||
o bAtrLen 0x00000014 (20)
|
||||
o bAtr 3B 7F 96 00 00 80 31 80 65 B0 85 03 00 EF 12 0F FE 82 90 00
|
||||
=> Command successful. (SCARD_S_SUCCESS [0x00000000]) [0.000059]
|
||||
|
||||
src/spy/pcsc-spy | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
commit 661c56584f3806ca47944a2c989eb79b9b89b74d
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Tue Nov 14 13:32:17 2017 +0100
|
||||
|
||||
spy: add support of Ubuntu
|
||||
|
||||
On Ubuntu libpcsclite.so.1 is in /lib/... but libpcscspy.so is in
|
||||
/usr/lib/...
|
||||
The 2 libraries are not in the same directory.
|
||||
|
||||
src/spy/install_spy.sh | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
commit c19857227058b38a37f19e4e6bf83bb4a93ecb7f
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Tue Sep 26 15:13:54 2017 +0200
|
||||
|
||||
SCardGetStatusChange(): fix comment
|
||||
|
||||
After cancellable is set to FALSE then SCardCancel() will just return
|
||||
immediatly with success.
|
||||
|
||||
src/winscard_clnt.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
commit 7424c7a32006c332383e9d17827b700dc369913f
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Tue Sep 19 22:18:16 2017 +0200
|
||||
|
||||
.gitignore: remove no more present files
|
||||
|
||||
.gitignore | 2 --
|
||||
1 file changed, 2 deletions(-)
|
||||
|
||||
commit 180e5c678365b7d1b078f49b0ae881d3ce6f10a5
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Tue Sep 19 22:09:37 2017 +0200
|
||||
|
||||
.gitignore: sort lines
|
||||
|
||||
.gitignore | 56 ++++++++++++++++++++++++++++----------------------------
|
||||
1 file changed, 28 insertions(+), 28 deletions(-)
|
||||
|
||||
commit 0e5ef3e2cb399c472ca91fb1270ac3e294bbd9d6
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Tue Sep 19 22:07:31 2017 +0200
|
||||
|
||||
.gitignore: ignore generated files
|
||||
|
||||
.gitignore | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
commit 1324532eee4342aa17ad16617c8d6ae03b3e4b96
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Mon Aug 21 13:13:08 2017 +0200
|
||||
|
||||
RFAddReader(): simplify code
|
||||
|
||||
The cases rv != IFD_SUCCESS and dwGetSize != 1 are already managed by
|
||||
the previous if(). So no need to test again these values.
|
||||
|
||||
src/readerfactory.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
commit 5905bbe11414c131a32a7d84829eaa5d060bd55d
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Mon Aug 21 13:10:52 2017 +0200
|
||||
|
||||
Fix compiler warning (gcc 7)
|
||||
|
||||
Use an intermediate variable nbSlots.
|
||||
|
||||
readerfactory.c: In function ‘RFAddReader’:
|
||||
readerfactory.c:457:51: warning: ‘%02X’ directive output may be truncated writing between 2 and 8 bytes into a region of size 3 [-Wformat-truncation=]
|
||||
snprintf(tmpReader + strlen(tmpReader) - 2, 3, "%02X", j);
|
||||
^~~~
|
||||
readerfactory.c:457:50: note: directive argument in the range [1, 2147483646]
|
||||
snprintf(tmpReader + strlen(tmpReader) - 2, 3, "%02X", j);
|
||||
^~~~~~
|
||||
In file included from /usr/include/stdio.h:938:0,
|
||||
from readerfactory.c:43:
|
||||
/usr/include/x86_64-linux-gnu/bits/stdio2.h:64:10: note: ‘__builtin___snprintf_chk’ output between 3 and 9 bytes into a destination of size 3
|
||||
return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
|
||||
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
__bos (__s), __fmt, __va_arg_pack ());
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
src/readerfactory.c | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
commit f1fa9106513ac6990719c677f053bdee558c661d
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Tue Aug 1 10:11:29 2017 +0200
|
||||
|
||||
configure.ac: fix typo in help message
|
||||
|
||||
configure.ac | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
commit 8946edadaca353d65112664a5fcd7bbe1be54ed5
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Wed Jul 12 17:59:48 2017 +0200
|
||||
|
||||
simclist: fix a potential memory leak
|
||||
|
||||
Changes in a801c6e613fde89c09c755a20003ab82fd6a5c47 added tests and
|
||||
returns in case of errors.
|
||||
|
||||
If something fails in list_insert_at() we must free the memory allocated
|
||||
for the new element (that was not inserted).
|
||||
|
||||
src/simclist.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
commit 30e10951f81b9480e788965f89d0d4d0aee909c0 (zotac/master, github/master)
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Thu Jul 13 17:52:13 2017 +0200
|
||||
|
||||
Use libsystemd instead sd-daemon.{c,h}
|
||||
|
||||
Remove files src/sd-daemon.{c,h} and use libsystemd to get
|
||||
sd_listen_fds() and sd_is_socket() implementations.
|
||||
So we do not have to maintain systemd specific code.
|
||||
|
||||
Use --disable-systemd if you do not have libsystemd available. In that
|
||||
case I think you do not use systemd either.
|
||||
|
||||
configure.ac | 12 ++
|
||||
src/Makefile.am | 10 +-
|
||||
src/pcscdaemon.c | 8 +-
|
||||
src/sd-daemon.c | 526 -------------------------------------------------
|
||||
src/sd-daemon.h | 277 --------------------------
|
||||
src/winscard_msg_srv.c | 6 +-
|
||||
6 files changed, 26 insertions(+), 813 deletions(-)
|
||||
|
||||
commit 696023944649e0c52802e20994fb78d6b24d4efd (tag: pcsc-1.8.22)
|
||||
Author: Ludovic Rousseau <ludovic.rousseau@free.fr>
|
||||
Date: Sat Jun 17 08:56:54 2017 +0200
|
||||
|
||||
|
|
|
@ -248,6 +248,8 @@ LEXLIB = @LEXLIB@
|
|||
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBSYSTEMD_CFLAGS = @LIBSYSTEMD_CFLAGS@
|
||||
LIBSYSTEMD_LIBS = @LIBSYSTEMD_LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIBUDEV_CFLAGS = @LIBUDEV_CFLAGS@
|
||||
LIBUDEV_LIBS = @LIBUDEV_LIBS@
|
||||
|
|
|
@ -200,6 +200,9 @@
|
|||
/* directory containing IPC files */
|
||||
#undef USE_IPCDIR
|
||||
|
||||
/* Use libsystemd */
|
||||
#undef USE_LIBSYSTEMD
|
||||
|
||||
/* Use serial conf file mechanism */
|
||||
#undef USE_SERIAL
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.69 for pcsc-lite 1.8.22.
|
||||
# Generated by GNU Autoconf 2.69 for pcsc-lite 1.8.23.
|
||||
#
|
||||
#
|
||||
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
|
||||
|
@ -587,8 +587,8 @@ MAKEFLAGS=
|
|||
# Identity of this package.
|
||||
PACKAGE_NAME='pcsc-lite'
|
||||
PACKAGE_TARNAME='pcsc-lite'
|
||||
PACKAGE_VERSION='1.8.22'
|
||||
PACKAGE_STRING='pcsc-lite 1.8.22'
|
||||
PACKAGE_VERSION='1.8.23'
|
||||
PACKAGE_STRING='pcsc-lite 1.8.23'
|
||||
PACKAGE_BUGREPORT=''
|
||||
PACKAGE_URL=''
|
||||
|
||||
|
@ -659,6 +659,8 @@ ENABLE_USB_FALSE
|
|||
ENABLE_USB_TRUE
|
||||
ENABLE_SERIAL_FALSE
|
||||
ENABLE_SERIAL_TRUE
|
||||
LIBSYSTEMD_LIBS
|
||||
LIBSYSTEMD_CFLAGS
|
||||
SYMBOL_VISIBILITY
|
||||
ALLOCA
|
||||
LIBOBJS
|
||||
|
@ -805,6 +807,7 @@ with_aix_soname
|
|||
with_gnu_ld
|
||||
with_sysroot
|
||||
enable_libtool_lock
|
||||
enable_libsystemd
|
||||
enable_serial
|
||||
enable_usb
|
||||
enable_libudev
|
||||
|
@ -831,6 +834,8 @@ PKG_CONFIG
|
|||
PKG_CONFIG_PATH
|
||||
PKG_CONFIG_LIBDIR
|
||||
LT_SYS_LIBRARY_PATH
|
||||
LIBSYSTEMD_CFLAGS
|
||||
LIBSYSTEMD_LIBS
|
||||
LIBUDEV_CFLAGS
|
||||
LIBUDEV_LIBS
|
||||
LIBUSB_CFLAGS
|
||||
|
@ -1387,7 +1392,7 @@ if test "$ac_init_help" = "long"; then
|
|||
# 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.
|
||||
cat <<_ACEOF
|
||||
\`configure' configures pcsc-lite 1.8.22 to adapt to many kinds of systems.
|
||||
\`configure' configures pcsc-lite 1.8.23 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
|
@ -1458,7 +1463,7 @@ fi
|
|||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of pcsc-lite 1.8.22:";;
|
||||
short | recursive ) echo "Configuration of pcsc-lite 1.8.23:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
|
@ -1480,6 +1485,7 @@ Optional Features:
|
|||
--enable-fast-install[=PKGS]
|
||||
optimize for fast installation [default=yes]
|
||||
--disable-libtool-lock avoid locking (might break parallel builds)
|
||||
--disable-libsystemd do not use libsystemd
|
||||
--disable-serial do not use serial reader.conf file
|
||||
--disable-usb do not use usb hotplug
|
||||
--disable-libudev do not use libudev
|
||||
|
@ -1528,6 +1534,10 @@ Some influential environment variables:
|
|||
path overriding pkg-config's built-in search path
|
||||
LT_SYS_LIBRARY_PATH
|
||||
User-defined run-time library search path.
|
||||
LIBSYSTEMD_CFLAGS
|
||||
C compiler flags for LIBSYSTEMD, overriding pkg-config
|
||||
LIBSYSTEMD_LIBS
|
||||
linker flags for LIBSYSTEMD, overriding pkg-config
|
||||
LIBUDEV_CFLAGS
|
||||
C compiler flags for LIBUDEV, overriding pkg-config
|
||||
LIBUDEV_LIBS
|
||||
|
@ -1605,7 +1615,7 @@ fi
|
|||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
pcsc-lite configure 1.8.22
|
||||
pcsc-lite configure 1.8.23
|
||||
generated by GNU Autoconf 2.69
|
||||
|
||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
|
@ -2081,7 +2091,7 @@ cat >config.log <<_ACEOF
|
|||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by pcsc-lite $as_me 1.8.22, which was
|
||||
It was created by pcsc-lite $as_me 1.8.23, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
|
@ -2945,7 +2955,7 @@ fi
|
|||
|
||||
# Define the identity of the package.
|
||||
PACKAGE='pcsc-lite'
|
||||
VERSION='1.8.22'
|
||||
VERSION='1.8.23'
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
|
@ -14654,6 +14664,92 @@ if test "x$ac_cv_lib_rt_mq_getattr" = xyes; then :
|
|||
fi
|
||||
|
||||
|
||||
# check for libsystemd
|
||||
# Check whether --enable-libsystemd was given.
|
||||
if test "${enable_libsystemd+set}" = set; then :
|
||||
enableval=$enable_libsystemd; use_libsystemd="${enableval}"
|
||||
else
|
||||
use_libsystemd="yes"
|
||||
fi
|
||||
|
||||
if test "$use_libsystemd" != "no"; then
|
||||
|
||||
pkg_failed=no
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBSYSTEMD" >&5
|
||||
$as_echo_n "checking for LIBSYSTEMD... " >&6; }
|
||||
|
||||
if test -n "$LIBSYSTEMD_CFLAGS"; then
|
||||
pkg_cv_LIBSYSTEMD_CFLAGS="$LIBSYSTEMD_CFLAGS"
|
||||
elif test -n "$PKG_CONFIG"; then
|
||||
if test -n "$PKG_CONFIG" && \
|
||||
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd\""; } >&5
|
||||
($PKG_CONFIG --exists --print-errors "libsystemd") 2>&5
|
||||
ac_status=$?
|
||||
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||
test $ac_status = 0; }; then
|
||||
pkg_cv_LIBSYSTEMD_CFLAGS=`$PKG_CONFIG --cflags "libsystemd" 2>/dev/null`
|
||||
test "x$?" != "x0" && pkg_failed=yes
|
||||
else
|
||||
pkg_failed=yes
|
||||
fi
|
||||
else
|
||||
pkg_failed=untried
|
||||
fi
|
||||
if test -n "$LIBSYSTEMD_LIBS"; then
|
||||
pkg_cv_LIBSYSTEMD_LIBS="$LIBSYSTEMD_LIBS"
|
||||
elif test -n "$PKG_CONFIG"; then
|
||||
if test -n "$PKG_CONFIG" && \
|
||||
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libsystemd\""; } >&5
|
||||
($PKG_CONFIG --exists --print-errors "libsystemd") 2>&5
|
||||
ac_status=$?
|
||||
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||
test $ac_status = 0; }; then
|
||||
pkg_cv_LIBSYSTEMD_LIBS=`$PKG_CONFIG --libs "libsystemd" 2>/dev/null`
|
||||
test "x$?" != "x0" && pkg_failed=yes
|
||||
else
|
||||
pkg_failed=yes
|
||||
fi
|
||||
else
|
||||
pkg_failed=untried
|
||||
fi
|
||||
|
||||
|
||||
|
||||
if test $pkg_failed = yes; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
|
||||
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
|
||||
_pkg_short_errors_supported=yes
|
||||
else
|
||||
_pkg_short_errors_supported=no
|
||||
fi
|
||||
if test $_pkg_short_errors_supported = yes; then
|
||||
LIBSYSTEMD_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libsystemd" 2>&1`
|
||||
else
|
||||
LIBSYSTEMD_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libsystemd" 2>&1`
|
||||
fi
|
||||
# Put the nasty error message in config.log where it belongs
|
||||
echo "$LIBSYSTEMD_PKG_ERRORS" >&5
|
||||
|
||||
as_fn_error $? "install libsystemd-dev or use --disable-libsystemd" "$LINENO" 5
|
||||
elif test $pkg_failed = untried; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
as_fn_error $? "install libsystemd-dev or use --disable-libsystemd" "$LINENO" 5
|
||||
else
|
||||
LIBSYSTEMD_CFLAGS=$pkg_cv_LIBSYSTEMD_CFLAGS
|
||||
LIBSYSTEMD_LIBS=$pkg_cv_LIBSYSTEMD_LIBS
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||
$as_echo "yes" >&6; }
|
||||
|
||||
fi
|
||||
|
||||
$as_echo "#define USE_LIBSYSTEMD 1" >>confdefs.h
|
||||
|
||||
PCSCLITE_FEATURES="${PCSCLITE_FEATURES} libsystemd"
|
||||
fi
|
||||
|
||||
# --disable-serial
|
||||
# Check whether --enable-serial was given.
|
||||
if test "${enable_serial+set}" = set; then :
|
||||
|
@ -15513,6 +15609,7 @@ ATR parsing messages: ${debugatr}
|
|||
ipcdir: ${ipcdir}
|
||||
use serial: ${use_serial}
|
||||
use usb: ${use_usb}
|
||||
use libsystemd: ${use_libsystemd}
|
||||
systemd unit directory: ${with_systemdsystemunitdir}
|
||||
serial config dir.: ${confdir_exp}
|
||||
filter: ${use_filter}
|
||||
|
@ -16075,7 +16172,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
|||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
ac_log="
|
||||
This file was extended by pcsc-lite $as_me 1.8.22, which was
|
||||
This file was extended by pcsc-lite $as_me 1.8.23, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
|
@ -16141,7 +16238,7 @@ _ACEOF
|
|||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||
ac_cs_version="\\
|
||||
pcsc-lite config.status 1.8.22
|
||||
pcsc-lite config.status 1.8.23
|
||||
configured by $0, generated by GNU Autoconf 2.69,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
|
14
configure.ac
14
configure.ac
|
@ -3,7 +3,7 @@
|
|||
|
||||
AC_PREREQ([2.69])
|
||||
|
||||
AC_INIT([pcsc-lite],[1.8.22])
|
||||
AC_INIT([pcsc-lite],[1.8.23])
|
||||
AC_CONFIG_SRCDIR(src/pcscdaemon.c)
|
||||
AM_INIT_AUTOMAKE(1.8 dist-bzip2 no-dist-gzip)
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
|
@ -150,6 +150,17 @@ AC_CHECK_LIB(socket, socket, [LIBS="$LIBS -lsocket"])
|
|||
# check for mq_getattr()
|
||||
AC_CHECK_LIB(rt, mq_getattr, [LIBS="$LIBS -lrt"])
|
||||
|
||||
# check for libsystemd
|
||||
AC_ARG_ENABLE(libsystemd,
|
||||
AS_HELP_STRING([--disable-libsystemd],[do not use libsystemd]),
|
||||
[ use_libsystemd="${enableval}" ], [ use_libsystemd="yes" ] )
|
||||
if test "$use_libsystemd" != "no"; then
|
||||
PKG_CHECK_MODULES(LIBSYSTEMD, libsystemd,,
|
||||
[ AC_MSG_ERROR([install libsystemd-dev or use --disable-libsystemd]) ])
|
||||
AC_DEFINE(USE_LIBSYSTEMD, 1, [Use libsystemd])
|
||||
PCSCLITE_FEATURES="${PCSCLITE_FEATURES} libsystemd"
|
||||
fi
|
||||
|
||||
# --disable-serial
|
||||
AC_ARG_ENABLE(serial,
|
||||
AS_HELP_STRING([--disable-serial],[do not use serial reader.conf file]),
|
||||
|
@ -431,6 +442,7 @@ ATR parsing messages: ${debugatr}
|
|||
ipcdir: ${ipcdir}
|
||||
use serial: ${use_serial}
|
||||
use usb: ${use_usb}
|
||||
use libsystemd: ${use_libsystemd}
|
||||
systemd unit directory: ${with_systemdsystemunitdir}
|
||||
serial config dir.: ${confdir_exp}
|
||||
filter: ${use_filter}
|
||||
|
|
|
@ -262,6 +262,8 @@ LEXLIB = @LEXLIB@
|
|||
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBSYSTEMD_CFLAGS = @LIBSYSTEMD_CFLAGS@
|
||||
LIBSYSTEMD_LIBS = @LIBSYSTEMD_LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIBUDEV_CFLAGS = @LIBUDEV_CFLAGS@
|
||||
LIBUDEV_LIBS = @LIBUDEV_LIBS@
|
||||
|
|
|
@ -219,6 +219,8 @@ LEXLIB = @LEXLIB@
|
|||
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBSYSTEMD_CFLAGS = @LIBSYSTEMD_CFLAGS@
|
||||
LIBSYSTEMD_LIBS = @LIBSYSTEMD_LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIBUDEV_CFLAGS = @LIBUDEV_CFLAGS@
|
||||
LIBUDEV_LIBS = @LIBUDEV_LIBS@
|
||||
|
|
|
@ -195,6 +195,8 @@ LEXLIB = @LEXLIB@
|
|||
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBSYSTEMD_CFLAGS = @LIBSYSTEMD_CFLAGS@
|
||||
LIBSYSTEMD_LIBS = @LIBSYSTEMD_LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIBUDEV_CFLAGS = @LIBUDEV_CFLAGS@
|
||||
LIBUDEV_LIBS = @LIBUDEV_LIBS@
|
||||
|
|
|
@ -63,8 +63,6 @@ pcscd_SOURCES = \
|
|||
prothandler.h \
|
||||
readerfactory.c \
|
||||
readerfactory.h \
|
||||
sd-daemon.c \
|
||||
sd-daemon.h \
|
||||
simclist.c \
|
||||
simclist.h \
|
||||
sys_generic.h \
|
||||
|
@ -79,9 +77,9 @@ pcscd_SOURCES = \
|
|||
winscard_svc.c \
|
||||
winscard_svc.h
|
||||
pcscd_CFLAGS = $(CFLAGS) $(PTHREAD_CFLAGS) $(LIBUSB_CFLAGS) $(LIBUDEV_CFLAGS) \
|
||||
$(POLKIT_CFLAGS) \
|
||||
$(POLKIT_CFLAGS) $(LIBSYSTEMD_CFLAGS) \
|
||||
-DPCSCD -DSIMCLIST_NO_DUMPRESTORE
|
||||
pcscd_LDFLAGS = $(LDFLAGS) -export-dynamic
|
||||
pcscd_LDFLAGS = $(LDFLAGS) $(LIBSYSTEMD_LIBS) -export-dynamic
|
||||
pcscd_LDADD = \
|
||||
$(PTHREAD_LIBS) $(COREFOUNDATION) \
|
||||
$(LIBUSB_LIBS) $(IOKIT) $(LIBUDEV_LIBS) \
|
||||
|
@ -92,10 +90,6 @@ fix-rights: install-sbinPROGRAMS
|
|||
chgrp pcscd $(DESTDIR)$(sbindir)/pcscd
|
||||
chmod g+s $(DESTDIR)$(sbindir)/pcscd
|
||||
|
||||
update-systemd:
|
||||
curl -O http://cgit.freedesktop.org/systemd/plain/src/sd-daemon.c
|
||||
curl -O http://cgit.freedesktop.org/systemd/systemd/plain/src/systemd/sd-daemon.h
|
||||
|
||||
testpcsc_SOURCES = testpcsc.c
|
||||
testpcsc_LDADD = libpcsclite.la
|
||||
|
||||
|
|
|
@ -171,11 +171,11 @@ am__pcscd_SOURCES_DIST = auth.c auth.h atrhandler.c atrhandler.h \
|
|||
parser.h pcscdaemon.c pcscd.h PCSC/debuglog.h \
|
||||
PCSC/ifdhandler.h PCSC/pcsclite.h PCSC/winscard.h \
|
||||
PCSC/wintypes.h prothandler.c prothandler.h readerfactory.c \
|
||||
readerfactory.h sd-daemon.c sd-daemon.h simclist.c simclist.h \
|
||||
sys_generic.h sys_unix.c tokenparser.l hotplug_libudev.c \
|
||||
hotplug_libusb.c hotplug_linux.c hotplug_macosx.c utils.c \
|
||||
utils.h winscard.c winscard_msg.c winscard_msg.h \
|
||||
winscard_msg_srv.c winscard_svc.c winscard_svc.h
|
||||
readerfactory.h simclist.c simclist.h sys_generic.h sys_unix.c \
|
||||
tokenparser.l hotplug_libudev.c hotplug_libusb.c \
|
||||
hotplug_linux.c hotplug_macosx.c utils.c utils.h winscard.c \
|
||||
winscard_msg.c winscard_msg.h winscard_msg_srv.c \
|
||||
winscard_svc.c winscard_svc.h
|
||||
@ENABLE_SERIAL_TRUE@am__objects_1 = pcscd-configfile.$(OBJEXT)
|
||||
@ENABLE_USB_TRUE@am__objects_2 = pcscd-tokenparser.$(OBJEXT) \
|
||||
@ENABLE_USB_TRUE@ pcscd-hotplug_libudev.$(OBJEXT) \
|
||||
|
@ -188,11 +188,11 @@ am_pcscd_OBJECTS = pcscd-auth.$(OBJEXT) pcscd-atrhandler.$(OBJEXT) \
|
|||
pcscd-dyn_unix.$(OBJEXT) pcscd-eventhandler.$(OBJEXT) \
|
||||
pcscd-hotplug_generic.$(OBJEXT) pcscd-ifdwrapper.$(OBJEXT) \
|
||||
pcscd-pcscdaemon.$(OBJEXT) pcscd-prothandler.$(OBJEXT) \
|
||||
pcscd-readerfactory.$(OBJEXT) pcscd-sd-daemon.$(OBJEXT) \
|
||||
pcscd-simclist.$(OBJEXT) pcscd-sys_unix.$(OBJEXT) \
|
||||
$(am__objects_2) pcscd-utils.$(OBJEXT) \
|
||||
pcscd-winscard.$(OBJEXT) pcscd-winscard_msg.$(OBJEXT) \
|
||||
pcscd-winscard_msg_srv.$(OBJEXT) pcscd-winscard_svc.$(OBJEXT)
|
||||
pcscd-readerfactory.$(OBJEXT) pcscd-simclist.$(OBJEXT) \
|
||||
pcscd-sys_unix.$(OBJEXT) $(am__objects_2) \
|
||||
pcscd-utils.$(OBJEXT) pcscd-winscard.$(OBJEXT) \
|
||||
pcscd-winscard_msg.$(OBJEXT) pcscd-winscard_msg_srv.$(OBJEXT) \
|
||||
pcscd-winscard_svc.$(OBJEXT)
|
||||
pcscd_OBJECTS = $(am_pcscd_OBJECTS)
|
||||
pcscd_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
|
||||
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
|
||||
|
@ -366,6 +366,8 @@ LEXLIB = @LEXLIB@
|
|||
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBSYSTEMD_CFLAGS = @LIBSYSTEMD_CFLAGS@
|
||||
LIBSYSTEMD_LIBS = @LIBSYSTEMD_LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIBUDEV_CFLAGS = @LIBUDEV_CFLAGS@
|
||||
LIBUDEV_LIBS = @LIBUDEV_LIBS@
|
||||
|
@ -530,8 +532,6 @@ pcscd_SOURCES = \
|
|||
prothandler.h \
|
||||
readerfactory.c \
|
||||
readerfactory.h \
|
||||
sd-daemon.c \
|
||||
sd-daemon.h \
|
||||
simclist.c \
|
||||
simclist.h \
|
||||
sys_generic.h \
|
||||
|
@ -547,10 +547,10 @@ pcscd_SOURCES = \
|
|||
winscard_svc.h
|
||||
|
||||
pcscd_CFLAGS = $(CFLAGS) $(PTHREAD_CFLAGS) $(LIBUSB_CFLAGS) $(LIBUDEV_CFLAGS) \
|
||||
$(POLKIT_CFLAGS) \
|
||||
$(POLKIT_CFLAGS) $(LIBSYSTEMD_CFLAGS) \
|
||||
-DPCSCD -DSIMCLIST_NO_DUMPRESTORE
|
||||
|
||||
pcscd_LDFLAGS = $(LDFLAGS) -export-dynamic
|
||||
pcscd_LDFLAGS = $(LDFLAGS) $(LIBSYSTEMD_LIBS) -export-dynamic
|
||||
pcscd_LDADD = \
|
||||
$(PTHREAD_LIBS) $(COREFOUNDATION) \
|
||||
$(LIBUSB_LIBS) $(IOKIT) $(LIBUDEV_LIBS) \
|
||||
|
@ -764,7 +764,6 @@ distclean-compile:
|
|||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcscd-pcscdaemon.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcscd-prothandler.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcscd-readerfactory.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcscd-sd-daemon.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcscd-simclist.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcscd-sys_unix.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcscd-tokenparser.Po@am__quote@
|
||||
|
@ -1027,20 +1026,6 @@ pcscd-readerfactory.obj: readerfactory.c
|
|||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcscd_CFLAGS) $(CFLAGS) -c -o pcscd-readerfactory.obj `if test -f 'readerfactory.c'; then $(CYGPATH_W) 'readerfactory.c'; else $(CYGPATH_W) '$(srcdir)/readerfactory.c'; fi`
|
||||
|
||||
pcscd-sd-daemon.o: sd-daemon.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcscd_CFLAGS) $(CFLAGS) -MT pcscd-sd-daemon.o -MD -MP -MF $(DEPDIR)/pcscd-sd-daemon.Tpo -c -o pcscd-sd-daemon.o `test -f 'sd-daemon.c' || echo '$(srcdir)/'`sd-daemon.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcscd-sd-daemon.Tpo $(DEPDIR)/pcscd-sd-daemon.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sd-daemon.c' object='pcscd-sd-daemon.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcscd_CFLAGS) $(CFLAGS) -c -o pcscd-sd-daemon.o `test -f 'sd-daemon.c' || echo '$(srcdir)/'`sd-daemon.c
|
||||
|
||||
pcscd-sd-daemon.obj: sd-daemon.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcscd_CFLAGS) $(CFLAGS) -MT pcscd-sd-daemon.obj -MD -MP -MF $(DEPDIR)/pcscd-sd-daemon.Tpo -c -o pcscd-sd-daemon.obj `if test -f 'sd-daemon.c'; then $(CYGPATH_W) 'sd-daemon.c'; else $(CYGPATH_W) '$(srcdir)/sd-daemon.c'; fi`
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcscd-sd-daemon.Tpo $(DEPDIR)/pcscd-sd-daemon.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sd-daemon.c' object='pcscd-sd-daemon.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcscd_CFLAGS) $(CFLAGS) -c -o pcscd-sd-daemon.obj `if test -f 'sd-daemon.c'; then $(CYGPATH_W) 'sd-daemon.c'; else $(CYGPATH_W) '$(srcdir)/sd-daemon.c'; fi`
|
||||
|
||||
pcscd-simclist.o: simclist.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pcscd_CFLAGS) $(CFLAGS) -MT pcscd-simclist.o -MD -MP -MF $(DEPDIR)/pcscd-simclist.Tpo -c -o pcscd-simclist.o `test -f 'simclist.c' || echo '$(srcdir)/'`simclist.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pcscd-simclist.Tpo $(DEPDIR)/pcscd-simclist.Po
|
||||
|
@ -1581,10 +1566,6 @@ fix-rights: install-sbinPROGRAMS
|
|||
chgrp pcscd $(DESTDIR)$(sbindir)/pcscd
|
||||
chmod g+s $(DESTDIR)$(sbindir)/pcscd
|
||||
|
||||
update-systemd:
|
||||
curl -O http://cgit.freedesktop.org/systemd/plain/src/sd-daemon.c
|
||||
curl -O http://cgit.freedesktop.org/systemd/systemd/plain/src/systemd/sd-daemon.h
|
||||
|
||||
# pcsc_wirecheck_CFLAGS := $(LIBPCSCLITE_CFLAGS) -DCOMPAT_64BIT_SERVER=1
|
||||
|
||||
$(srcdir)/pcsc-wirecheck-dist.c: pcsc-wirecheck-gen
|
||||
|
|
|
@ -279,7 +279,7 @@ extern const SCARD_IO_REQUEST g_rgSCardT0Pci, g_rgSCardT1Pci, g_rgSCardRawPci;
|
|||
#define INFINITE 0xFFFFFFFF /**< Infinite timeout */
|
||||
#endif
|
||||
|
||||
#define PCSCLITE_VERSION_NUMBER "1.8.22" /**< Current version */
|
||||
#define PCSCLITE_VERSION_NUMBER "1.8.23" /**< Current version */
|
||||
/** Maximum readers context (a slot is count as a reader) */
|
||||
#define PCSCLITE_MAX_READERS_CONTEXTS 16
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@
|
|||
|
||||
#define PCSCLITE_CSOCK_NAME PCSCLITE_IPC_DIR "/pcscd.comm"
|
||||
|
||||
#define PCSCLITE_VERSION_NUMBER "1.8.22" /**< Current version */
|
||||
#define PCSCLITE_VERSION_NUMBER "1.8.23" /**< Current version */
|
||||
#define PCSCLITE_STATUS_POLL_RATE 400000 /**< Status polling rate */
|
||||
#define PCSCLITE_LOCK_POLL_RATE 100000 /**< Lock polling rate */
|
||||
|
||||
|
|
|
@ -53,12 +53,14 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#ifdef HAVE_GETOPT_H
|
||||
#include <getopt.h>
|
||||
#endif
|
||||
#ifdef USE_LIBSYSTEMD
|
||||
#include <systemd/sd-daemon.h>
|
||||
#endif
|
||||
|
||||
#include "misc.h"
|
||||
#include "pcsclite.h"
|
||||
#include "pcscd.h"
|
||||
#include "debuglog.h"
|
||||
#include "sd-daemon.h"
|
||||
#include "winscard_msg.h"
|
||||
#include "winscard_svc.h"
|
||||
#include "sys_generic.h"
|
||||
|
@ -430,6 +432,7 @@ int main(int argc, char **argv)
|
|||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
#ifdef USE_LIBSYSTEMD
|
||||
/*
|
||||
* Check if systemd passed us any file descriptors
|
||||
*/
|
||||
|
@ -449,6 +452,7 @@ int main(int argc, char **argv)
|
|||
else
|
||||
SocketActivated = FALSE;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* test the presence of /var/run/pcscd/pcscd.comm
|
||||
|
@ -706,9 +710,11 @@ int main(int argc, char **argv)
|
|||
/*
|
||||
* Initialize the comm structure
|
||||
*/
|
||||
#ifdef USE_LIBSYSTEMD
|
||||
if (SocketActivated)
|
||||
rv = ListenExistingSocket(SD_LISTEN_FDS_START + 0);
|
||||
else
|
||||
#endif
|
||||
rv = InitializeSocket();
|
||||
|
||||
if (rv)
|
||||
|
|
|
@ -410,13 +410,14 @@ LONG RFAddReader(const char *readerNameLong, int port, const char *library,
|
|||
rv = IFDGetCapabilities((sReadersContexts[dwContext]),
|
||||
TAG_IFD_SLOTS_NUMBER, &dwGetSize, ucGetData);
|
||||
|
||||
if (rv != IFD_SUCCESS || dwGetSize != 1 || ucGetData[0] == 0)
|
||||
int nbSlots = ucGetData[0];
|
||||
if (rv != IFD_SUCCESS || dwGetSize != 1 || nbSlots == 0)
|
||||
/* Reader does not have this defined. Must be a single slot
|
||||
* reader so we can just return SCARD_S_SUCCESS. */
|
||||
return SCARD_S_SUCCESS;
|
||||
|
||||
if (rv == IFD_SUCCESS && dwGetSize == 1 && ucGetData[0] == 1)
|
||||
/* Reader has this defined and it only has one slot */
|
||||
if (1 == nbSlots)
|
||||
/* Reader has only one slot */
|
||||
return SCARD_S_SUCCESS;
|
||||
|
||||
/*
|
||||
|
@ -425,7 +426,7 @@ LONG RFAddReader(const char *readerNameLong, int port, const char *library,
|
|||
*/
|
||||
|
||||
/* Initialize the rest of the slots */
|
||||
for (j = 1; j < ucGetData[0]; j++)
|
||||
for (j = 1; j < nbSlots; j++)
|
||||
{
|
||||
char *tmpReader = NULL;
|
||||
DWORD dwContextB = 0;
|
||||
|
|
526
src/sd-daemon.c
526
src/sd-daemon.c
|
@ -1,526 +0,0 @@
|
|||
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
||||
|
||||
/***
|
||||
Copyright 2010 Lennart Poettering
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation files
|
||||
(the "Software"), to deal in the Software without restriction,
|
||||
including without limitation the rights to use, copy, modify, merge,
|
||||
publish, distribute, sublicense, and/or sell copies of the Software,
|
||||
and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
***/
|
||||
|
||||
#ifndef _GNU_SOURCE
|
||||
#define _GNU_SOURCE
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/un.h>
|
||||
#include <sys/fcntl.h>
|
||||
#include <netinet/in.h>
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <stddef.h>
|
||||
#include <limits.h>
|
||||
|
||||
#if defined(__linux__)
|
||||
#include <mqueue.h>
|
||||
#endif
|
||||
|
||||
#include "sd-daemon.h"
|
||||
|
||||
#if (__GNUC__ >= 4)
|
||||
#ifdef SD_EXPORT_SYMBOLS
|
||||
/* Export symbols */
|
||||
#define _sd_export_ __attribute__ ((visibility("default")))
|
||||
#else
|
||||
/* Don't export the symbols */
|
||||
#define _sd_export_ __attribute__ ((visibility("hidden")))
|
||||
#endif
|
||||
#else
|
||||
#define _sd_export_
|
||||
#endif
|
||||
|
||||
_sd_export_ int sd_listen_fds(int unset_environment) {
|
||||
|
||||
#if defined(DISABLE_SYSTEMD) || !defined(__linux__)
|
||||
return 0;
|
||||
#else
|
||||
int r, fd;
|
||||
const char *e;
|
||||
char *p = NULL;
|
||||
unsigned long l;
|
||||
|
||||
if (!(e = getenv("LISTEN_PID"))) {
|
||||
r = 0;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
errno = 0;
|
||||
l = strtoul(e, &p, 10);
|
||||
|
||||
if (errno != 0) {
|
||||
r = -errno;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!p || *p || l <= 0) {
|
||||
r = -EINVAL;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
/* Is this for us? */
|
||||
if (getpid() != (pid_t) l) {
|
||||
r = 0;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!(e = getenv("LISTEN_FDS"))) {
|
||||
r = 0;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
errno = 0;
|
||||
l = strtoul(e, &p, 10);
|
||||
|
||||
if (errno != 0) {
|
||||
r = -errno;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!p || *p) {
|
||||
r = -EINVAL;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + (int) l; fd ++) {
|
||||
int flags;
|
||||
|
||||
if ((flags = fcntl(fd, F_GETFD)) < 0) {
|
||||
r = -errno;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (flags & FD_CLOEXEC)
|
||||
continue;
|
||||
|
||||
if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) < 0) {
|
||||
r = -errno;
|
||||
goto finish;
|
||||
}
|
||||
}
|
||||
|
||||
r = (int) l;
|
||||
|
||||
finish:
|
||||
if (unset_environment) {
|
||||
unsetenv("LISTEN_PID");
|
||||
unsetenv("LISTEN_FDS");
|
||||
}
|
||||
|
||||
return r;
|
||||
#endif
|
||||
}
|
||||
|
||||
_sd_export_ int sd_is_fifo(int fd, const char *path) {
|
||||
struct stat st_fd;
|
||||
|
||||
if (fd < 0)
|
||||
return -EINVAL;
|
||||
|
||||
memset(&st_fd, 0, sizeof(st_fd));
|
||||
if (fstat(fd, &st_fd) < 0)
|
||||
return -errno;
|
||||
|
||||
if (!S_ISFIFO(st_fd.st_mode))
|
||||
return 0;
|
||||
|
||||
if (path) {
|
||||
struct stat st_path;
|
||||
|
||||
memset(&st_path, 0, sizeof(st_path));
|
||||
if (stat(path, &st_path) < 0) {
|
||||
|
||||
if (errno == ENOENT || errno == ENOTDIR)
|
||||
return 0;
|
||||
|
||||
return -errno;
|
||||
}
|
||||
|
||||
return
|
||||
st_path.st_dev == st_fd.st_dev &&
|
||||
st_path.st_ino == st_fd.st_ino;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
_sd_export_ int sd_is_special(int fd, const char *path) {
|
||||
struct stat st_fd;
|
||||
|
||||
if (fd < 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (fstat(fd, &st_fd) < 0)
|
||||
return -errno;
|
||||
|
||||
if (!S_ISREG(st_fd.st_mode) && !S_ISCHR(st_fd.st_mode))
|
||||
return 0;
|
||||
|
||||
if (path) {
|
||||
struct stat st_path;
|
||||
|
||||
if (stat(path, &st_path) < 0) {
|
||||
|
||||
if (errno == ENOENT || errno == ENOTDIR)
|
||||
return 0;
|
||||
|
||||
return -errno;
|
||||
}
|
||||
|
||||
if (S_ISREG(st_fd.st_mode) && S_ISREG(st_path.st_mode))
|
||||
return
|
||||
st_path.st_dev == st_fd.st_dev &&
|
||||
st_path.st_ino == st_fd.st_ino;
|
||||
else if (S_ISCHR(st_fd.st_mode) && S_ISCHR(st_path.st_mode))
|
||||
return st_path.st_rdev == st_fd.st_rdev;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int sd_is_socket_internal(int fd, int type, int listening) {
|
||||
struct stat st_fd;
|
||||
|
||||
if (fd < 0 || type < 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (fstat(fd, &st_fd) < 0)
|
||||
return -errno;
|
||||
|
||||
if (!S_ISSOCK(st_fd.st_mode))
|
||||
return 0;
|
||||
|
||||
if (type != 0) {
|
||||
int other_type = 0;
|
||||
socklen_t l = sizeof(other_type);
|
||||
|
||||
if (getsockopt(fd, SOL_SOCKET, SO_TYPE, &other_type, &l) < 0)
|
||||
return -errno;
|
||||
|
||||
if (l != sizeof(other_type))
|
||||
return -EINVAL;
|
||||
|
||||
if (other_type != type)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (listening >= 0) {
|
||||
int accepting = 0;
|
||||
socklen_t l = sizeof(accepting);
|
||||
|
||||
if (getsockopt(fd, SOL_SOCKET, SO_ACCEPTCONN, &accepting, &l) < 0)
|
||||
return -errno;
|
||||
|
||||
if (l != sizeof(accepting))
|
||||
return -EINVAL;
|
||||
|
||||
if (!accepting != !listening)
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
union sockaddr_union {
|
||||
struct sockaddr sa;
|
||||
struct sockaddr_in in4;
|
||||
struct sockaddr_in6 in6;
|
||||
struct sockaddr_un un;
|
||||
struct sockaddr_storage storage;
|
||||
};
|
||||
|
||||
_sd_export_ int sd_is_socket(int fd, int family, int type, int listening) {
|
||||
int r;
|
||||
|
||||
if (family < 0)
|
||||
return -EINVAL;
|
||||
|
||||
if ((r = sd_is_socket_internal(fd, type, listening)) <= 0)
|
||||
return r;
|
||||
|
||||
if (family > 0) {
|
||||
union sockaddr_union sockaddr;
|
||||
socklen_t l;
|
||||
|
||||
memset(&sockaddr, 0, sizeof(sockaddr));
|
||||
l = sizeof(sockaddr);
|
||||
|
||||
if (getsockname(fd, &sockaddr.sa, &l) < 0)
|
||||
return -errno;
|
||||
|
||||
if (l < sizeof(sa_family_t))
|
||||
return -EINVAL;
|
||||
|
||||
return sockaddr.sa.sa_family == family;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
_sd_export_ int sd_is_socket_inet(int fd, int family, int type, int listening, uint16_t port) {
|
||||
union sockaddr_union sockaddr;
|
||||
socklen_t l;
|
||||
int r;
|
||||
|
||||
if (family != 0 && family != AF_INET && family != AF_INET6)
|
||||
return -EINVAL;
|
||||
|
||||
if ((r = sd_is_socket_internal(fd, type, listening)) <= 0)
|
||||
return r;
|
||||
|
||||
memset(&sockaddr, 0, sizeof(sockaddr));
|
||||
l = sizeof(sockaddr);
|
||||
|
||||
if (getsockname(fd, &sockaddr.sa, &l) < 0)
|
||||
return -errno;
|
||||
|
||||
if (l < sizeof(sa_family_t))
|
||||
return -EINVAL;
|
||||
|
||||
if (sockaddr.sa.sa_family != AF_INET &&
|
||||
sockaddr.sa.sa_family != AF_INET6)
|
||||
return 0;
|
||||
|
||||
if (family > 0)
|
||||
if (sockaddr.sa.sa_family != family)
|
||||
return 0;
|
||||
|
||||
if (port > 0) {
|
||||
if (sockaddr.sa.sa_family == AF_INET) {
|
||||
if (l < sizeof(struct sockaddr_in))
|
||||
return -EINVAL;
|
||||
|
||||
return htons(port) == sockaddr.in4.sin_port;
|
||||
} else {
|
||||
if (l < sizeof(struct sockaddr_in6))
|
||||
return -EINVAL;
|
||||
|
||||
return htons(port) == sockaddr.in6.sin6_port;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
_sd_export_ int sd_is_socket_unix(int fd, int type, int listening, const char *path, size_t length) {
|
||||
union sockaddr_union sockaddr;
|
||||
socklen_t l;
|
||||
int r;
|
||||
|
||||
if ((r = sd_is_socket_internal(fd, type, listening)) <= 0)
|
||||
return r;
|
||||
|
||||
memset(&sockaddr, 0, sizeof(sockaddr));
|
||||
l = sizeof(sockaddr);
|
||||
|
||||
if (getsockname(fd, &sockaddr.sa, &l) < 0)
|
||||
return -errno;
|
||||
|
||||
if (l < sizeof(sa_family_t))
|
||||
return -EINVAL;
|
||||
|
||||
if (sockaddr.sa.sa_family != AF_UNIX)
|
||||
return 0;
|
||||
|
||||
if (path) {
|
||||
if (length <= 0)
|
||||
length = strlen(path);
|
||||
|
||||
if (length <= 0)
|
||||
/* Unnamed socket */
|
||||
return l == offsetof(struct sockaddr_un, sun_path);
|
||||
|
||||
if (path[0])
|
||||
/* Normal path socket */
|
||||
return
|
||||
(l >= offsetof(struct sockaddr_un, sun_path) + length + 1) &&
|
||||
memcmp(path, sockaddr.un.sun_path, length+1) == 0;
|
||||
else
|
||||
/* Abstract namespace socket */
|
||||
return
|
||||
(l == offsetof(struct sockaddr_un, sun_path) + length) &&
|
||||
memcmp(path, sockaddr.un.sun_path, length) == 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
_sd_export_ int sd_is_mq(int fd, const char *path) {
|
||||
#if !defined(__linux__)
|
||||
return 0;
|
||||
#else
|
||||
struct mq_attr attr;
|
||||
|
||||
if (fd < 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (mq_getattr(fd, &attr) < 0)
|
||||
return -errno;
|
||||
|
||||
if (path) {
|
||||
char fpath[PATH_MAX];
|
||||
struct stat a, b;
|
||||
|
||||
if (path[0] != '/')
|
||||
return -EINVAL;
|
||||
|
||||
if (fstat(fd, &a) < 0)
|
||||
return -errno;
|
||||
|
||||
strncpy(stpcpy(fpath, "/dev/mqueue"), path, sizeof(fpath) - 12);
|
||||
fpath[sizeof(fpath)-1] = 0;
|
||||
|
||||
if (stat(fpath, &b) < 0)
|
||||
return -errno;
|
||||
|
||||
if (a.st_dev != b.st_dev ||
|
||||
a.st_ino != b.st_ino)
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
_sd_export_ int sd_notify(int unset_environment, const char *state) {
|
||||
#if defined(DISABLE_SYSTEMD) || !defined(__linux__) || !defined(SOCK_CLOEXEC)
|
||||
return 0;
|
||||
#else
|
||||
int fd = -1, r;
|
||||
struct msghdr msghdr;
|
||||
struct iovec iovec;
|
||||
union sockaddr_union sockaddr;
|
||||
const char *e;
|
||||
|
||||
if (!state) {
|
||||
r = -EINVAL;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!(e = getenv("NOTIFY_SOCKET")))
|
||||
return 0;
|
||||
|
||||
/* Must be an abstract socket, or an absolute path */
|
||||
if ((e[0] != '@' && e[0] != '/') || e[1] == 0) {
|
||||
r = -EINVAL;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if ((fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0)) < 0) {
|
||||
r = -errno;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
memset(&sockaddr, 0, sizeof(sockaddr));
|
||||
sockaddr.sa.sa_family = AF_UNIX;
|
||||
strncpy(sockaddr.un.sun_path, e, sizeof(sockaddr.un.sun_path));
|
||||
|
||||
if (sockaddr.un.sun_path[0] == '@')
|
||||
sockaddr.un.sun_path[0] = 0;
|
||||
|
||||
memset(&iovec, 0, sizeof(iovec));
|
||||
iovec.iov_base = (char*) state;
|
||||
iovec.iov_len = strlen(state);
|
||||
|
||||
memset(&msghdr, 0, sizeof(msghdr));
|
||||
msghdr.msg_name = &sockaddr;
|
||||
msghdr.msg_namelen = offsetof(struct sockaddr_un, sun_path) + strlen(e);
|
||||
|
||||
if (msghdr.msg_namelen > sizeof(struct sockaddr_un))
|
||||
msghdr.msg_namelen = sizeof(struct sockaddr_un);
|
||||
|
||||
msghdr.msg_iov = &iovec;
|
||||
msghdr.msg_iovlen = 1;
|
||||
|
||||
if (sendmsg(fd, &msghdr, MSG_NOSIGNAL) < 0) {
|
||||
r = -errno;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
r = 1;
|
||||
|
||||
finish:
|
||||
if (unset_environment)
|
||||
unsetenv("NOTIFY_SOCKET");
|
||||
|
||||
if (fd >= 0)
|
||||
close(fd);
|
||||
|
||||
return r;
|
||||
#endif
|
||||
}
|
||||
|
||||
_sd_export_ int sd_notifyf(int unset_environment, const char *format, ...) {
|
||||
#if defined(DISABLE_SYSTEMD) || !defined(__linux__)
|
||||
return 0;
|
||||
#else
|
||||
va_list ap;
|
||||
char *p = NULL;
|
||||
int r;
|
||||
|
||||
va_start(ap, format);
|
||||
r = vasprintf(&p, format, ap);
|
||||
va_end(ap);
|
||||
|
||||
if (r < 0 || !p)
|
||||
return -ENOMEM;
|
||||
|
||||
r = sd_notify(unset_environment, p);
|
||||
free(p);
|
||||
|
||||
return r;
|
||||
#endif
|
||||
}
|
||||
|
||||
_sd_export_ int sd_booted(void) {
|
||||
#if defined(DISABLE_SYSTEMD) || !defined(__linux__)
|
||||
return 0;
|
||||
#else
|
||||
|
||||
struct stat a, b;
|
||||
|
||||
/* We simply test whether the systemd cgroup hierarchy is
|
||||
* mounted */
|
||||
|
||||
if (lstat("/sys/fs/cgroup", &a) < 0)
|
||||
return 0;
|
||||
|
||||
if (lstat("/sys/fs/cgroup/systemd", &b) < 0)
|
||||
return 0;
|
||||
|
||||
return a.st_dev != b.st_dev;
|
||||
#endif
|
||||
}
|
277
src/sd-daemon.h
277
src/sd-daemon.h
|
@ -1,277 +0,0 @@
|
|||
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
||||
|
||||
#ifndef foosddaemonhfoo
|
||||
#define foosddaemonhfoo
|
||||
|
||||
/***
|
||||
Copyright 2010 Lennart Poettering
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation files
|
||||
(the "Software"), to deal in the Software without restriction,
|
||||
including without limitation the rights to use, copy, modify, merge,
|
||||
publish, distribute, sublicense, and/or sell copies of the Software,
|
||||
and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
***/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <inttypes.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
Reference implementation of a few systemd related interfaces for
|
||||
writing daemons. These interfaces are trivial to implement. To
|
||||
simplify porting we provide this reference implementation.
|
||||
Applications are welcome to reimplement the algorithms described
|
||||
here if they do not want to include these two source files.
|
||||
|
||||
The following functionality is provided:
|
||||
|
||||
- Support for logging with log levels on stderr
|
||||
- File descriptor passing for socket-based activation
|
||||
- Daemon startup and status notification
|
||||
- Detection of systemd boots
|
||||
|
||||
You may compile this with -DDISABLE_SYSTEMD to disable systemd
|
||||
support. This makes all those calls NOPs that are directly related to
|
||||
systemd (i.e. only sd_is_xxx() will stay useful).
|
||||
|
||||
Since this is drop-in code we don't want any of our symbols to be
|
||||
exported in any case. Hence we declare hidden visibility for all of
|
||||
them.
|
||||
|
||||
You may find an up-to-date version of these source files online:
|
||||
|
||||
http://cgit.freedesktop.org/systemd/plain/src/sd-daemon.h
|
||||
http://cgit.freedesktop.org/systemd/plain/src/sd-daemon.c
|
||||
|
||||
This should compile on non-Linux systems, too, but with the
|
||||
exception of the sd_is_xxx() calls all functions will become NOPs.
|
||||
|
||||
See sd-daemon(7) for more information.
|
||||
*/
|
||||
|
||||
#ifndef _sd_printf_attr_
|
||||
#if __GNUC__ >= 4
|
||||
#define _sd_printf_attr_(a,b) __attribute__ ((format (printf, a, b)))
|
||||
#else
|
||||
#define _sd_printf_attr_(a,b)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
Log levels for usage on stderr:
|
||||
|
||||
fprintf(stderr, SD_NOTICE "Hello World!\n");
|
||||
|
||||
This is similar to printk() usage in the kernel.
|
||||
*/
|
||||
#define SD_EMERG "<0>" /* system is unusable */
|
||||
#define SD_ALERT "<1>" /* action must be taken immediately */
|
||||
#define SD_CRIT "<2>" /* critical conditions */
|
||||
#define SD_ERR "<3>" /* error conditions */
|
||||
#define SD_WARNING "<4>" /* warning conditions */
|
||||
#define SD_NOTICE "<5>" /* normal but significant condition */
|
||||
#define SD_INFO "<6>" /* informational */
|
||||
#define SD_DEBUG "<7>" /* debug-level messages */
|
||||
|
||||
/* The first passed file descriptor is fd 3 */
|
||||
#define SD_LISTEN_FDS_START 3
|
||||
|
||||
/*
|
||||
Returns how many file descriptors have been passed, or a negative
|
||||
errno code on failure. Optionally, removes the $LISTEN_FDS and
|
||||
$LISTEN_PID file descriptors from the environment (recommended, but
|
||||
problematic in threaded environments). If r is the return value of
|
||||
this function you'll find the file descriptors passed as fds
|
||||
SD_LISTEN_FDS_START to SD_LISTEN_FDS_START+r-1. Returns a negative
|
||||
errno style error code on failure. This function call ensures that
|
||||
the FD_CLOEXEC flag is set for the passed file descriptors, to make
|
||||
sure they are not passed on to child processes. If FD_CLOEXEC shall
|
||||
not be set, the caller needs to unset it after this call for all file
|
||||
descriptors that are used.
|
||||
|
||||
See sd_listen_fds(3) for more information.
|
||||
*/
|
||||
int sd_listen_fds(int unset_environment);
|
||||
|
||||
/*
|
||||
Helper call for identifying a passed file descriptor. Returns 1 if
|
||||
the file descriptor is a FIFO in the file system stored under the
|
||||
specified path, 0 otherwise. If path is NULL a path name check will
|
||||
not be done and the call only verifies if the file descriptor
|
||||
refers to a FIFO. Returns a negative errno style error code on
|
||||
failure.
|
||||
|
||||
See sd_is_fifo(3) for more information.
|
||||
*/
|
||||
int sd_is_fifo(int fd, const char *path);
|
||||
|
||||
/*
|
||||
Helper call for identifying a passed file descriptor. Returns 1 if
|
||||
the file descriptor is a special character device on the file
|
||||
system stored under the specified path, 0 otherwise.
|
||||
If path is NULL a path name check will not be done and the call
|
||||
only verifies if the file descriptor refers to a special character.
|
||||
Returns a negative errno style error code on failure.
|
||||
|
||||
See sd_is_special(3) for more information.
|
||||
*/
|
||||
int sd_is_special(int fd, const char *path);
|
||||
|
||||
/*
|
||||
Helper call for identifying a passed file descriptor. Returns 1 if
|
||||
the file descriptor is a socket of the specified family (AF_INET,
|
||||
...) and type (SOCK_DGRAM, SOCK_STREAM, ...), 0 otherwise. If
|
||||
family is 0 a socket family check will not be done. If type is 0 a
|
||||
socket type check will not be done and the call only verifies if
|
||||
the file descriptor refers to a socket. If listening is > 0 it is
|
||||
verified that the socket is in listening mode. (i.e. listen() has
|
||||
been called) If listening is == 0 it is verified that the socket is
|
||||
not in listening mode. If listening is < 0 no listening mode check
|
||||
is done. Returns a negative errno style error code on failure.
|
||||
|
||||
See sd_is_socket(3) for more information.
|
||||
*/
|
||||
int sd_is_socket(int fd, int family, int type, int listening);
|
||||
|
||||
/*
|
||||
Helper call for identifying a passed file descriptor. Returns 1 if
|
||||
the file descriptor is an Internet socket, of the specified family
|
||||
(either AF_INET or AF_INET6) and the specified type (SOCK_DGRAM,
|
||||
SOCK_STREAM, ...), 0 otherwise. If version is 0 a protocol version
|
||||
check is not done. If type is 0 a socket type check will not be
|
||||
done. If port is 0 a socket port check will not be done. The
|
||||
listening flag is used the same way as in sd_is_socket(). Returns a
|
||||
negative errno style error code on failure.
|
||||
|
||||
See sd_is_socket_inet(3) for more information.
|
||||
*/
|
||||
int sd_is_socket_inet(int fd, int family, int type, int listening, uint16_t port);
|
||||
|
||||
/*
|
||||
Helper call for identifying a passed file descriptor. Returns 1 if
|
||||
the file descriptor is an AF_UNIX socket of the specified type
|
||||
(SOCK_DGRAM, SOCK_STREAM, ...) and path, 0 otherwise. If type is 0
|
||||
a socket type check will not be done. If path is NULL a socket path
|
||||
check will not be done. For normal AF_UNIX sockets set length to
|
||||
0. For abstract namespace sockets set length to the length of the
|
||||
socket name (including the initial 0 byte), and pass the full
|
||||
socket path in path (including the initial 0 byte). The listening
|
||||
flag is used the same way as in sd_is_socket(). Returns a negative
|
||||
errno style error code on failure.
|
||||
|
||||
See sd_is_socket_unix(3) for more information.
|
||||
*/
|
||||
int sd_is_socket_unix(int fd, int type, int listening, const char *path, size_t length);
|
||||
|
||||
/*
|
||||
Helper call for identifying a passed file descriptor. Returns 1 if
|
||||
the file descriptor is a POSIX Message Queue of the specified name,
|
||||
0 otherwise. If path is NULL a message queue name check is not
|
||||
done. Returns a negative errno style error code on failure.
|
||||
*/
|
||||
int sd_is_mq(int fd, const char *path);
|
||||
|
||||
/*
|
||||
Informs systemd about changed daemon state. This takes a number of
|
||||
newline separated environment-style variable assignments in a
|
||||
string. The following variables are known:
|
||||
|
||||
READY=1 Tells systemd that daemon startup is finished (only
|
||||
relevant for services of Type=notify). The passed
|
||||
argument is a boolean "1" or "0". Since there is
|
||||
little value in signaling non-readiness the only
|
||||
value daemons should send is "READY=1".
|
||||
|
||||
STATUS=... Passes a single-line status string back to systemd
|
||||
that describes the daemon state. This is free-from
|
||||
and can be used for various purposes: general state
|
||||
feedback, fsck-like programs could pass completion
|
||||
percentages and failing programs could pass a human
|
||||
readable error message. Example: "STATUS=Completed
|
||||
66% of file system check..."
|
||||
|
||||
ERRNO=... If a daemon fails, the errno-style error code,
|
||||
formatted as string. Example: "ERRNO=2" for ENOENT.
|
||||
|
||||
BUSERROR=... If a daemon fails, the D-Bus error-style error
|
||||
code. Example: "BUSERROR=org.freedesktop.DBus.Error.TimedOut"
|
||||
|
||||
MAINPID=... The main pid of a daemon, in case systemd did not
|
||||
fork off the process itself. Example: "MAINPID=4711"
|
||||
|
||||
Daemons can choose to send additional variables. However, it is
|
||||
recommended to prefix variable names not listed above with X_.
|
||||
|
||||
Returns a negative errno-style error code on failure. Returns > 0
|
||||
if systemd could be notified, 0 if it couldn't possibly because
|
||||
systemd is not running.
|
||||
|
||||
Example: When a daemon finished starting up, it could issue this
|
||||
call to notify systemd about it:
|
||||
|
||||
sd_notify(0, "READY=1");
|
||||
|
||||
See sd_notifyf() for more complete examples.
|
||||
|
||||
See sd_notify(3) for more information.
|
||||
*/
|
||||
int sd_notify(int unset_environment, const char *state);
|
||||
|
||||
/*
|
||||
Similar to sd_notify() but takes a format string.
|
||||
|
||||
Example 1: A daemon could send the following after initialization:
|
||||
|
||||
sd_notifyf(0, "READY=1\n"
|
||||
"STATUS=Processing requests...\n"
|
||||
"MAINPID=%lu",
|
||||
(unsigned long) getpid());
|
||||
|
||||
Example 2: A daemon could send the following shortly before
|
||||
exiting, on failure:
|
||||
|
||||
sd_notifyf(0, "STATUS=Failed to start up: %s\n"
|
||||
"ERRNO=%i",
|
||||
strerror(errno),
|
||||
errno);
|
||||
|
||||
See sd_notifyf(3) for more information.
|
||||
*/
|
||||
int sd_notifyf(int unset_environment, const char *format, ...) _sd_printf_attr_(2,3);
|
||||
|
||||
/*
|
||||
Returns > 0 if the system was booted with systemd. Returns < 0 on
|
||||
error. Returns 0 if the system was not booted with systemd. Note
|
||||
that all of the functions above handle non-systemd boots just
|
||||
fine. You should NOT protect them with a call to this function. Also
|
||||
note that this function checks whether the system, not the user
|
||||
session is controlled by systemd. However the functions above work
|
||||
for both user and system services.
|
||||
|
||||
See sd_booted(3) for more information.
|
||||
*/
|
||||
int sd_booted(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -508,7 +508,10 @@ int list_insert_at(list_t *restrict l, const void *data, unsigned int pos) {
|
|||
size_t datalen = l->attrs.meter(data);
|
||||
lent->data = (struct list_entry_s *)malloc(datalen);
|
||||
if (NULL == lent->data)
|
||||
{
|
||||
free(lent);
|
||||
return -1;
|
||||
}
|
||||
memcpy(lent->data, data, datalen);
|
||||
} else {
|
||||
lent->data = (void*)data;
|
||||
|
@ -517,7 +520,11 @@ int list_insert_at(list_t *restrict l, const void *data, unsigned int pos) {
|
|||
/* actually append element */
|
||||
prec = list_findpos(l, pos-1);
|
||||
if (NULL == prec)
|
||||
{
|
||||
free(lent->data);
|
||||
free(lent);
|
||||
return -1;
|
||||
}
|
||||
succ = prec->next;
|
||||
|
||||
prec->next = lent;
|
||||
|
|
|
@ -248,6 +248,8 @@ LEXLIB = @LEXLIB@
|
|||
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBSYSTEMD_CFLAGS = @LIBSYSTEMD_CFLAGS@
|
||||
LIBSYSTEMD_LIBS = @LIBSYSTEMD_LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIBUDEV_CFLAGS = @LIBUDEV_CFLAGS@
|
||||
LIBUDEV_LIBS = @LIBUDEV_LIBS@
|
||||
|
|
|
@ -13,7 +13,12 @@ DIR=$(echo $DIR | cut -d'=' -f2 | cut -d' ' -f2)
|
|||
# get the directory part only: /usr/lib/x86_64-linux-gnu
|
||||
DIR=$(dirname $DIR)
|
||||
|
||||
# find the spying library
|
||||
SPY=$(ldconfig --print-cache | grep libpcscspy.so)
|
||||
SPY=$(echo $SPY | cut -d'=' -f2 | cut -d' ' -f2)
|
||||
|
||||
echo "Using directory:" $DIR
|
||||
echo "Spying library is:" $SPY
|
||||
|
||||
cd $DIR
|
||||
|
||||
|
@ -28,5 +33,5 @@ else
|
|||
fi
|
||||
|
||||
# link to the spy library
|
||||
ln -sf libpcscspy.so.0.0.0 libpcsclite.so.1.0.0
|
||||
ln -sf $SPY libpcsclite.so.1.0.0
|
||||
ln -sf libpcsclite.so.1.0.0 libpcsclite.so.1
|
||||
|
|
|
@ -651,8 +651,11 @@ class PCSCspy(object):
|
|||
self.log_out2("mszReaderName")
|
||||
self.log_out2("dwState")
|
||||
self.log_out2("dwProtocol")
|
||||
self.log_out2("bAtrLen")
|
||||
self.log_out2("bAtr")
|
||||
data = self.log_out2("bAtrLen")
|
||||
if not data == "NULL":
|
||||
self.log_out2("bAtr")
|
||||
else:
|
||||
self.log_out("bAtr")
|
||||
self._log_rv()
|
||||
|
||||
def _SCardReconnect(self):
|
||||
|
|
|
@ -2081,7 +2081,8 @@ LONG SCardGetStatusChange(SCARDCONTEXT hContext, DWORD dwTimeout,
|
|||
&waitStatusStruct, sizeof(waitStatusStruct),
|
||||
currentContextMap->dwClientID, dwTime);
|
||||
|
||||
/* another thread can do SCardCancel() */
|
||||
/* SCardCancel() will return immediatly with success
|
||||
* because something changed on the daemon side. */
|
||||
currentContextMap->cancellable = FALSE;
|
||||
|
||||
/* timeout */
|
||||
|
|
|
@ -57,10 +57,12 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#ifdef HAVE_SYS_FILIO_H
|
||||
#include <sys/filio.h>
|
||||
#endif
|
||||
#ifdef USE_LIBSYSTEMD
|
||||
#include <systemd/sd-daemon.h>
|
||||
#endif
|
||||
|
||||
#include "misc.h"
|
||||
#include "pcscd.h"
|
||||
#include "sd-daemon.h"
|
||||
#include "winscard.h"
|
||||
#include "debuglog.h"
|
||||
#include "winscard_msg.h"
|
||||
|
@ -174,6 +176,7 @@ INTERNAL int32_t InitializeSocket(void)
|
|||
* @retval 0 Success
|
||||
* @retval -1 Passed FD is not an UNIX socket.
|
||||
*/
|
||||
#ifdef USE_LIBSYSTEMD
|
||||
INTERNAL int32_t ListenExistingSocket(int fd)
|
||||
{
|
||||
if (!sd_is_socket(fd, AF_UNIX, SOCK_STREAM, -1))
|
||||
|
@ -185,6 +188,7 @@ INTERNAL int32_t ListenExistingSocket(int fd)
|
|||
commonSocket = fd;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Looks for messages sent by clients.
|
||||
|
|
Loading…
Reference in New Issue