1 --- a/common/autoconf/libraries.m4
2 +++ b/common/autoconf/libraries.m4
3 @@ -926,6 +926,53 @@ AC_DEFUN_ONCE([LIB_SETUP_MISC_LIBS],
5 ###############################################################################
7 + # Check for the pcsclite library
10 + AC_ARG_WITH(libpcsclite, [AS_HELP_STRING([--with-libpcsclite],
11 + [use libpcsclite from build system or OpenJDK source (system, bundled) @<:@bundled@:>@])])
13 + AC_CHECK_LIB(pcsclite, SCardConnect,
14 + [ LIBPCSCLITE_FOUND=yes ],
15 + [ LIBPCSCLITE_FOUND=no ])
17 + AC_MSG_CHECKING([for which libpcsclite to use])
19 + DEFAULT_LIBPCSCLITE=bundled
21 + if test "x${LIBPCSCLITE_FOUND}" != "xyes"; then
23 + # If we don't find any system...set default to bundled
25 + DEFAULT_LIBPCSCLITE=bundled
29 + # If user didn't specify, use DEFAULT_PCSC
31 + if test "x${with_libpcsclite}" = "x"; then
32 + with_libpcsclite=${DEFAULT_LIBPCSCLITE}
35 + if test "x${with_libpcsclite}" = "xbundled"; then
36 + USE_EXTERNAL_LIBPCSCLITE=false
37 + AC_MSG_RESULT([bundled])
38 + elif test "x${with_libpcsclite}" = "xsystem"; then
39 + if test "x${LIBPCSCLITE_FOUND}" = "xyes"; then
40 + USE_EXTERNAL_LIBPCSCLITE=true
41 + AC_MSG_RESULT([system])
43 + AC_MSG_RESULT([system not found])
44 + AC_MSG_ERROR([--with-libpcsclite=system specified, but no libpcsclite found!])
47 + AC_MSG_ERROR([Invalid value for --with-libpcsclite: ${with_libpcsclite}, use 'system' or 'bundled'])
50 + AC_SUBST(USE_EXTERNAL_LIBPCSCLITE)
52 + ###############################################################################
54 # Check for the zlib library
57 --- a/common/autoconf/spec.gmk.in
58 +++ b/common/autoconf/spec.gmk.in
59 @@ -605,6 +605,7 @@ ENABLE_INTREE_EC=@ENABLE_INTREE_EC@
60 USE_EXTERNAL_LIBJPEG:=@USE_EXTERNAL_LIBJPEG@
61 USE_EXTERNAL_LIBPNG:=@USE_EXTERNAL_LIBPNG@
62 USE_EXTERNAL_LIBGIF:=@USE_EXTERNAL_LIBGIF@
63 +USE_EXTERNAL_LIBPCSCLITE:=@USE_EXTERNAL_LIBPCSCLITE@
64 USE_EXTERNAL_LIBZ:=@USE_EXTERNAL_LIBZ@
65 LIBZIP_CAN_USE_MMAP:=@LIBZIP_CAN_USE_MMAP@
66 MSVCR_DLL:=@MSVCR_DLL@
67 --- a/jdk/make/lib/SecurityLibraries.gmk
68 +++ b/jdk/make/lib/SecurityLibraries.gmk
69 @@ -75,11 +75,11 @@ $(eval $(call SetupNativeCompilation,BUI
70 CFLAGS := $(CFLAGS_JDKLIB) \
71 -I$(JDK_TOPDIR)/src/share/native/sun/security/smartcardio \
72 -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/security/smartcardio \
73 - -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/security/smartcardio/MUSCLE, \
74 + -I/usr/include/PCSC -DUSE_SYSTEM_LIBPCSCLITE, \
75 MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libj2pcsc/mapfile-vers, \
76 LDFLAGS := $(LDFLAGS_JDKLIB) \
77 $(call SET_SHARED_LIBRARY_ORIGIN), \
78 - LDFLAGS_SUFFIX_posix := $(LIBDL), \
79 + LDFLAGS_SUFFIX_posix := -lpcsclite $(LIBDL), \
80 LDFLAGS_SUFFIX_windows := winscard.lib, \
81 LDFLAGS_SUFFIX_solaris := -lc, \
82 VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
83 --- a/jdk/src/solaris/native/sun/security/smartcardio/pcsc_md.c
84 +++ b/jdk/src/solaris/native/sun/security/smartcardio/pcsc_md.c
89 +#ifndef USE_SYSTEM_LIBPCSCLITE
91 FPTR_SCardEstablishContext scardEstablishContext;
92 FPTR_SCardConnect scardConnect;
93 @@ -47,6 +48,7 @@ FPTR_SCardListReaders scardListReaders;
94 FPTR_SCardBeginTransaction scardBeginTransaction;
95 FPTR_SCardEndTransaction scardEndTransaction;
96 FPTR_SCardControl scardControl;
100 * Throws a Java Exception by name
101 @@ -75,7 +77,9 @@ void throwIOException(JNIEnv *env, const
102 throwByName(env, "java/io/IOException", msg);
105 +#ifndef USE_SYSTEM_LIBPCSCLITE
106 void *findFunction(JNIEnv *env, void *hModule, char *functionName) {
108 void *fAddress = dlsym(hModule, functionName);
109 if (fAddress == NULL) {
110 char errorMessage[256];
111 @@ -85,9 +89,11 @@ void *findFunction(JNIEnv *env, void *hM
117 JNIEXPORT void JNICALL Java_sun_security_smartcardio_PlatformPCSC_initialize
118 (JNIEnv *env, jclass thisClass, jstring jLibName) {
119 +#ifndef USE_SYSTEM_LIBPCSCLITE
120 const char *libName = (*env)->GetStringUTFChars(env, jLibName, NULL);
121 if (libName == NULL) {
122 throwNullPointerException(env, "PCSC library name is null");
123 @@ -141,4 +147,5 @@ JNIEXPORT void JNICALL Java_sun_security
125 scardControl = (FPTR_SCardControl) findFunction(env, hModule, "SCardControl132");
129 --- a/jdk/src/solaris/native/sun/security/smartcardio/pcsc_md.h
130 +++ b/jdk/src/solaris/native/sun/security/smartcardio/pcsc_md.h
135 +#ifndef USE_SYSTEM_LIBPCSCLITE
137 typedef LONG (*FPTR_SCardEstablishContext)(DWORD dwScope,
140 @@ -111,3 +113,41 @@ extern FPTR_SCardListReaders scardListRe
141 extern FPTR_SCardBeginTransaction scardBeginTransaction;
142 extern FPTR_SCardEndTransaction scardEndTransaction;
143 extern FPTR_SCardControl scardControl;
147 +#define CALL_SCardEstablishContext(dwScope, pvReserved1, pvReserved2, phContext) \
148 + (SCardEstablishContext(dwScope, pvReserved1, pvReserved2, phContext))
150 +#define CALL_SCardConnect(hContext, szReader, dwSharedMode, dwPreferredProtocols, phCard, pdwActiveProtocols) \
151 + (SCardConnect(hContext, szReader, dwSharedMode, dwPreferredProtocols, phCard, pdwActiveProtocols))
153 +#define CALL_SCardDisconnect(hCard, dwDisposition) \
154 + (SCardDisconnect(hCard, dwDisposition))
156 +#define CALL_SCardStatus(hCard, mszReaderNames, pcchReaderLen, pdwState, pdwProtocol, pbAtr, pcbAtrLen) \
157 + (SCardStatus(hCard, mszReaderNames, pcchReaderLen, pdwState, pdwProtocol, pbAtr, pcbAtrLen))
159 +#define CALL_SCardGetStatusChange(hContext, dwTimeout, rgReaderStates, cReaders) \
160 + (SCardGetStatusChange(hContext, dwTimeout, rgReaderStates, cReaders))
162 +#define CALL_SCardTransmit(hCard, pioSendPci, pbSendBuffer, cbSendLength, \
163 + pioRecvPci, pbRecvBuffer, pcbRecvLength) \
164 + (SCardTransmit(hCard, pioSendPci, pbSendBuffer, cbSendLength, \
165 + pioRecvPci, pbRecvBuffer, pcbRecvLength))
167 +#define CALL_SCardListReaders(hContext, mszGroups, mszReaders, pcchReaders) \
168 + (SCardListReaders(hContext, mszGroups, mszReaders, pcchReaders))
170 +#define CALL_SCardBeginTransaction(hCard) \
171 + (SCardBeginTransaction(hCard))
173 +#define CALL_SCardEndTransaction(hCard, dwDisposition) \
174 + (SCardEndTransaction(hCard, dwDisposition))
176 +#define CALL_SCardControl(hCard, dwControlCode, pbSendBuffer, cbSendLength, \
177 + pbRecvBuffer, pcbRecvLength, lpBytesReturned) \
178 + (SCardControl(hCard, dwControlCode, pbSendBuffer, cbSendLength, \
179 + pbRecvBuffer, pcbRecvLength, lpBytesReturned))