While trying to run OpenSC svn Revision: 4413 on Solaris 10 with
pcsc-lite 1.6.1, I was getting an error that the PCSC_TLV_STRUCTURE
was the wrong size. Using the Solaris /usr/sfw/bin/gcc 3.4.3
The reader is a GemPC Twin.
This problem comes down to the fact that OpenSC now has an
internal_reader.h that does not match the pcsc-lite reader.h
(reader.h.in) in a number of places.
On June 19, 2007 pcsc-lite reader.h.in was modified to treat the sun
like the APPLE when defining the #pragma pack commands. This change
was not in the opensc internal_reader.h
So on the sun, pcscd has sizeof(PCSC_TLV_STRUCTURE) = 6, (unaligned)
but opensc thinks sizeof(PCSC_TLV_STRUCTURE) = 8. (aligned)
In addition the PIN_PROPERTIES_STRUCTURE is different in both
having two extra values in the OpenSC internal_reader.h
(ANy chance of going back to using the pcsc-lite version of
reader.h, at least on Unix?)
The cardctl.h has the same issue with #pragma pack(push, 1)
but will also fail on APPLE.
The svn version of reader-pcsc.c now does more feature checks
and this alignment and size differences now cause a failure.
There is also some missing code in reader-pcsc.c as it
sets display_ioctl for the FEATURE_IFD_PIN_PROPERTIES feature
then can not get the display propriety.
Attached are two diff files to fix these two issues in the three files.
--
Douglas E. Engert <[email protected]>
Argonne National Laboratory
9700 South Cass Avenue
Argonne, Illinois 60439
(630) 252-5444
--- ,internal-winscard.h Wed Jun 16 13:27:02 2010
+++ internal-winscard.h Wed Jun 16 14:29:33 2010
@@ -172,7 +172,7 @@
/* Set structure elements aligment on bytes
* http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html */
-#ifdef __APPLE__
+#if defined(__APPLE__) | defined(sun)
#pragma pack(1)
#else
#pragma pack(push, 1)
@@ -251,14 +251,12 @@
typedef struct {
uint16_t wLcdLayout; /**< display characteristics */
- uint16_t wLcdMaxCharacters;
- uint16_t wLcdMaxLines;
uint8_t bEntryValidationCondition;
uint8_t bTimeOut2;
} PIN_PROPERTIES_STRUCTURE;
/* restore default structure elements alignment */
-#ifdef __APPLE__
+#if defined(__APPLE__) | defined(sun)
#pragma pack()
#else
#pragma pack(pop)
--- ,cardctl.h Mon Jun 14 14:25:28 2010
+++ cardctl.h Wed Jun 16 14:04:24 2010
@@ -556,7 +556,11 @@
#define SC_RUTOKEN_DO_CHV_MAX_ID_V2 SC_RUTOKEN_DEF_ID_GCHV_USER /* MAX
ID value of CHV-objects */
#define SC_RUTOKEN_DO_NOCHV_MAX_ID_V2 SC_RUTOKEN_DO_NOCHV_MAX_ID /* MAX
ID value of All Other DOs */
+#if defined(__APPLE__) || defined(sun)
+#pragma pack(1)
+#else
#pragma pack(push, 1)
+#endif
typedef u8 sc_SecAttrV2_t[40];
typedef struct sc_ObjectTypeID{
@@ -671,7 +675,11 @@
u8 *modulus;
} sc_entersafe_gen_key_data;
+#if defined(__APPLE__) || defined(sun)
+#pragma pack()
+#else
#pragma pack(pop)
+#endif
/*
* Rutoken ECP stuff
--- ,reader-pcsc.c Mon Jun 14 14:25:28 2010
+++ reader-pcsc.c Wed Jun 16 15:45:24 2010
@@ -873,6 +873,8 @@
} else if
(pcsc_tlv[i].tag == FEATURE_MODIFY_PIN_FINISH) {
priv->modify_ioctl_finish = ntohl(pcsc_tlv[i].value);
} else if
(pcsc_tlv[i].tag == FEATURE_IFD_PIN_PROPERTIES) {
+ ; /* some code
missing here */
+ } else if
(pcsc_tlv[i].tag == FEATURE_IFD_DISPLAY_PROPERTIES) {
display_ioctl =
ntohl(pcsc_tlv[i].value);
} else {
sc_debug(ctx,
SC_LOG_DEBUG_NORMAL, "Reader feature %02x is not supported", pcsc_tlv[i].tag);
_______________________________________________
opensc-devel mailing list
[email protected]
http://www.opensc-project.org/mailman/listinfo/opensc-devel