diff --git a/opensc-0.11.13-build-readerstate.patch b/opensc-0.11.13-build-readerstate.patch new file mode 100644 index 0000000..f5f3ca7 --- /dev/null +++ b/opensc-0.11.13-build-readerstate.patch @@ -0,0 +1,51 @@ +diff -up opensc-0.11.13/src/libopensc/internal-winscard.h.build opensc-0.11.13/src/libopensc/internal-winscard.h +--- opensc-0.11.13/src/libopensc/internal-winscard.h.build 2010-02-16 10:03:28.000000000 +0100 ++++ opensc-0.11.13/src/libopensc/internal-winscard.h 2010-09-07 10:34:20.000000000 +0200 +@@ -88,7 +88,7 @@ SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *L + + typedef const SCARD_IO_REQUEST *LPCSCARD_IO_REQUEST; + typedef SCARD_READERSTATE_A SCARD_READERSTATE, *PSCARD_READERSTATE_A, +- *LPSCARD_READERSTATE_A; ++ *LPSCARD_READERSTATE_A, *LPSCARD_READERSTATE; + + #endif /* HAVE_SCARD_H */ + +@@ -113,7 +113,7 @@ typedef LONG (PCSC_API *SCardEndTransact + typedef LONG (PCSC_API *SCardStatus_t)(SCARDHANDLE hCard, LPSTR mszReaderNames, LPDWORD pcchReaderLen, + LPDWORD pdwState, LPDWORD pdwProtocol, LPBYTE pbAtr, LPDWORD pcbAtrLen); + typedef LONG (PCSC_API *SCardGetStatusChange_t)(SCARDCONTEXT hContext, DWORD dwTimeout, +- LPSCARD_READERSTATE_A rgReaderStates, DWORD cReaders); ++ LPSCARD_READERSTATE rgReaderStates, DWORD cReaders); + typedef LONG (PCSC_API *SCardControlOLD_t)(SCARDHANDLE hCard, LPCVOID pbSendBuffer, DWORD cbSendLength, + LPVOID pbRecvBuffer, LPDWORD lpBytesReturned); + typedef LONG (PCSC_API *SCardControl_t)(SCARDHANDLE hCard, DWORD dwControlCode, LPCVOID pbSendBuffer, +diff -up opensc-0.11.13/src/libopensc/reader-pcsc.c.build opensc-0.11.13/src/libopensc/reader-pcsc.c +--- opensc-0.11.13/src/libopensc/reader-pcsc.c.build 2010-02-16 10:03:28.000000000 +0100 ++++ opensc-0.11.13/src/libopensc/reader-pcsc.c 2010-09-07 10:34:51.000000000 +0200 +@@ -80,7 +80,7 @@ struct pcsc_private_data { + + struct pcsc_slot_data { + SCARDHANDLE pcsc_card; +- SCARD_READERSTATE_A reader_state; ++ SCARD_READERSTATE reader_state; + DWORD verify_ioctl; + DWORD verify_ioctl_start; + DWORD verify_ioctl_finish; +@@ -353,7 +353,7 @@ static int pcsc_wait_for_event(sc_reader + sc_context_t *ctx; + SCARDCONTEXT pcsc_ctx; + LONG ret; +- SCARD_READERSTATE_A rgReaderStates[SC_MAX_READERS]; ++ SCARD_READERSTATE rgReaderStates[SC_MAX_READERS]; + unsigned long on_bits, off_bits; + time_t end_time, now, delta; + size_t i; +@@ -401,7 +401,7 @@ static int pcsc_wait_for_event(sc_reader + /* Wait for a status change and return if it's a card insert/removal + */ + for( ; ; ) { +- SCARD_READERSTATE_A *rsp; ++ SCARD_READERSTATE *rsp; + + /* Scan the current state of all readers to see if they + * match any of the events we're polling for */ diff --git a/opensc-0.11.13-libassuan1.patch b/opensc-0.11.13-libassuan1.patch new file mode 100644 index 0000000..0a9afd1 --- /dev/null +++ b/opensc-0.11.13-libassuan1.patch @@ -0,0 +1,12 @@ +diff -up opensc-0.11.13/aclocal.m4.libassuan1 opensc-0.11.13/aclocal.m4 +--- opensc-0.11.13/aclocal.m4.libassuan1 2010-02-16 03:32:15.000000000 -0600 ++++ opensc-0.11.13/aclocal.m4 2010-08-11 13:39:21.483606389 -0500 +@@ -1108,7 +1108,7 @@ AC_SUBST([am__untar]) + ]) # _AM_PROG_TAR + + m4_include([m4/acx_pthread.m4]) +-m4_include([m4/libassuan.m4]) ++m4_include([libassuan1.m4]) + m4_include([m4/libtool.m4]) + m4_include([m4/ltoptions.m4]) + m4_include([m4/ltsugar.m4]) diff --git a/opensc-0.11.13-serial-overflow.patch b/opensc-0.11.13-serial-overflow.patch new file mode 100644 index 0000000..6d492e5 --- /dev/null +++ b/opensc-0.11.13-serial-overflow.patch @@ -0,0 +1,71 @@ +Index: /trunk/src/libopensc/muscle.c +=================================================================== +--- /trunk/src/libopensc/muscle.c (revision 4350) ++++ /trunk/src/libopensc/muscle.c (revision 4912) +@@ -31,11 +31,4 @@ + #define MSC_DSA_PUBLIC 0x04 + #define MSC_DSA_PRIVATE 0x05 +- +-#ifndef MAX +-#define MAX(x, y) (((x) > (y)) ? (x) : (y)) +-#endif +-#ifndef MIN +-#define MIN(x, y) (((x) < (y)) ? (x) : (y)) +-#endif + + static msc_id inputId = { { 0xFF, 0xFF, 0xFF, 0xFF } }; +Index: /trunk/src/libopensc/internal.h +=================================================================== +--- /trunk/src/libopensc/internal.h (revision 4902) ++++ /trunk/src/libopensc/internal.h (revision 4912) +@@ -48,4 +48,11 @@ + #define msleep(t) Sleep(t) + #define sleep(t) Sleep((t) * 1000) ++#endif ++ ++#ifndef MAX ++#define MAX(x, y) (((x) > (y)) ? (x) : (y)) ++#endif ++#ifndef MIN ++#define MIN(x, y) (((x) < (y)) ? (x) : (y)) + #endif + +Index: /trunk/src/libopensc/card-atrust-acos.c +=================================================================== +--- /trunk/src/libopensc/card-atrust-acos.c (revision 4706) ++++ /trunk/src/libopensc/card-atrust-acos.c (revision 4913) +@@ -843,6 +843,6 @@ + return SC_ERROR_INTERNAL; + /* cache serial number */ +- memcpy(card->serialnr.value, apdu.resp, apdu.resplen); +- card->serialnr.len = apdu.resplen; ++ memcpy(card->serialnr.value, apdu.resp, MIN(apdu.resplen, SC_MAX_SERIALNR)); ++ card->serialnr.len = MIN(apdu.resplen, SC_MAX_SERIALNR); + /* copy and return serial number */ + memcpy(serial, &card->serialnr, sizeof(*serial)); +Index: /trunk/src/libopensc/card-starcos.c +=================================================================== +--- /trunk/src/libopensc/card-starcos.c (revision 4706) ++++ /trunk/src/libopensc/card-starcos.c (revision 4913) +@@ -1280,6 +1280,6 @@ + return SC_ERROR_INTERNAL; + /* cache serial number */ +- memcpy(card->serialnr.value, apdu.resp, apdu.resplen); +- card->serialnr.len = apdu.resplen; ++ memcpy(card->serialnr.value, apdu.resp, MIN(apdu.resplen, SC_MAX_SERIALNR)); ++ card->serialnr.len = MIN(apdu.resplen, SC_MAX_SERIALNR); + /* copy and return serial number */ + memcpy(serial, &card->serialnr, sizeof(*serial)); +Index: /trunk/src/libopensc/card-acos5.c +=================================================================== +--- /trunk/src/libopensc/card-acos5.c (revision 4118) ++++ /trunk/src/libopensc/card-acos5.c (revision 4913) +@@ -139,6 +139,6 @@ + * Cache serial number. + */ +- memcpy(card->serialnr.value, apdu.resp, apdu.resplen); +- card->serialnr.len = apdu.resplen; ++ memcpy(card->serialnr.value, apdu.resp, MIN(apdu.resplen, SC_MAX_SERIALNR)); ++ card->serialnr.len = MIN(apdu.resplen, SC_MAX_SERIALNR); + + /* diff --git a/opensc.spec b/opensc.spec index 415d475..ee8a367 100644 --- a/opensc.spec +++ b/opensc.spec @@ -2,7 +2,7 @@ Name: opensc Version: 0.11.13 -Release: 1%{?dist} +Release: 6%{?dist} Summary: Smart card library and applications Group: System Environment/Libraries @@ -11,11 +11,16 @@ URL: http://www.opensc-project.org/opensc/ Source0: http://www.opensc-project.org/files/opensc/%{name}-%{version}.tar.gz Patch1: %{name}-0.11.7-develconfig.patch Patch2: %{name}-0.11.12-no-add-needed.patch +Patch3: opensc-0.11.13-libassuan1.patch +Patch4: opensc-0.11.13-build-readerstate.patch +Patch5: opensc-0.11.13-serial-overflow.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: pcsc-lite-devel BuildRequires: readline-devel +%if 0%{?fedora} || 0%{?rhel} > 5 BuildRequires: openct-devel +%endif BuildRequires: openssl-devel BuildRequires: libtool-ltdl-devel BuildRequires: libtool @@ -33,8 +38,12 @@ eID cards have also been confirmed to work. Summary: Digital signature plugin for web browsers Group: Applications/Internet BuildRequires: libXt-devel -BuildRequires: libassuan-static, libassuan-devel -Requires: %{plugindir} +%if 0%{?fedora} > 13 +BuildRequires: libassuan1-devel libassuan1-static automake +%else +BuildRequires: libassuan-devel libassuan-static +%endif +Requires: mozilla-filesystem%{?_isa} Requires: pinentry-gui %description -n mozilla-opensc-signer @@ -56,18 +65,30 @@ OpenSC development files. %setup -q %patch1 -p1 -b .config %patch2 -p1 -b .no-add-needed +%patch5 -p2 -b .overflow + sed -i -e 's|"/lib /usr/lib\b|"/%{_lib} %{_libdir}|' configure # lib64 rpaths cp -p src/pkcs15init/README ./README.pkcs15init cp -p src/scconf/README.scconf . # No %{_libdir} here to avoid multilib conflicts; it's just an example sed -i -e 's|/usr/local/towitoko/lib/|/usr/lib/ctapi/|' etc/opensc.conf.in +# hacks for libassuan1 +%if 0%{?fedora} > 13 +rm -f m4/libassuan.m4 +%patch3 -p1 -b .libassuan1 +%patch4 -p1 -b .build +./bootstrap +%endif + %build %configure --disable-static \ --enable-nsplugin \ --enable-pcsc \ +%if 0%{?fedora} || 0%{?rhel} > 5 --enable-openct \ +%endif --enable-doc \ --with-pcsc-provider=libpcsclite.so.1 \ --with-plugindir=%{plugindir} \ @@ -123,6 +144,7 @@ rm -rf $RPM_BUILD_ROOT %{_libdir}/lib*.so.* %{_libdir}/onepin-opensc-pkcs11.so %{_libdir}/opensc-pkcs11.so +%dir %{_libdir}/pkcs11 %{_libdir}/pkcs11/onepin-opensc-pkcs11.so %{_libdir}/pkcs11/opensc-pkcs11.so %{_datadir}/opensc/ @@ -156,6 +178,21 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Tue Dec 21 2010 Tomas Mraz - 0.11.13-6 +- fix buffer overflow on rogue card serial numbers + +* Tue Oct 19 2010 Tomas Mraz - 0.11.13-5 +- own the _libdir/pkcs11 subdirectory (#644527) + +* Tue Sep 7 2010 Tomas Mraz - 0.11.13-4 +- fix build with new pcsc-lite + +* Wed Aug 11 2010 Rex Dieter - 0.11.13-3 +- build against libassuan1 (f14+) + +* Wed Jun 9 2010 Tomas Mraz - 0.11.13-2 +- replace file dependency (#601943) + * Tue Feb 16 2010 Kalev Lember - 0.11.13-1 - new upstream version