opensc-0.19.0-1

This commit is contained in:
Jakub Jelen 2018-09-25 19:02:34 +02:00
parent 3cdb296563
commit 539bf23b2a
5 changed files with 1925 additions and 180 deletions

1
.gitignore vendored
View File

@ -5,3 +5,4 @@
/opensc-0.16.0-git0362439.tar.gz /opensc-0.16.0-git0362439.tar.gz
/opensc-0.17.0.tar.gz /opensc-0.17.0.tar.gz
/opensc-0.18.0.tar.gz /opensc-0.18.0.tar.gz
/opensc-0.19.0.tar.gz

View File

@ -1,171 +0,0 @@
From 14afdf38e371e57db39d6236f60f5458a0bdb0d8 Mon Sep 17 00:00:00 2001
From: David Ward <david.ward@ll.mit.edu>
Date: Fri, 18 May 2018 07:11:49 -0400
Subject: [PATCH] Do not temporarily set SC_READER_REMOVED on all readers
(#1335)
* reader-pcsc: Do not temporarily set SC_READER_REMOVED on all readers
Fixes #1324.
* reader-cryptotokenkit: Do not temporarily set SC_READER_REMOVED on all readers
See #1324.
---
src/libopensc/reader-cryptotokenkit.m | 51 ++++++++++++++++-----------------
src/libopensc/reader-pcsc.c | 53 +++++++++++++++++++----------------
2 files changed, 55 insertions(+), 49 deletions(-)
diff --git a/src/libopensc/reader-cryptotokenkit.m b/src/libopensc/reader-cryptotokenkit.m
index cf0774697..449b9f86d 100644
--- a/src/libopensc/reader-cryptotokenkit.m
+++ b/src/libopensc/reader-cryptotokenkit.m
@@ -543,8 +543,10 @@ int cryptotokenkit_use_reader(sc_context_t *ctx, void *pcsc_context_handle, void
static int cryptotokenkit_detect_readers(sc_context_t *ctx)
{
size_t i;
+ NSUInteger j;
int r;
TKSmartCardSlotManager *mngr = [TKSmartCardSlotManager defaultManager];
+ NSMutableArray *slotNames;
LOG_FUNC_CALLED(ctx);
@@ -554,38 +556,37 @@ static int cryptotokenkit_detect_readers(sc_context_t *ctx)
goto err;
}
- /* temporarily mark all readers as removed */
- for (i=0; i < sc_ctx_get_reader_count(ctx); i++) {
- sc_reader_t *reader = sc_ctx_get_reader(ctx, i);
- reader->flags |= SC_READER_REMOVED;
- }
-
sc_log(ctx, "Probing CryptoTokenKit readers");
- for (NSString *slotName in [mngr slotNames]) {
- sc_reader_t *old_reader;
- int found = 0;
- const char *reader_name = [slotName UTF8String];
- dispatch_semaphore_t sema = dispatch_semaphore_create(0);
+ slotNames = [[mngr slotNames] mutableCopy];
- for (i=0; i < sc_ctx_get_reader_count(ctx) && !found; i++) {
- old_reader = sc_ctx_get_reader(ctx, i);
- if (old_reader == NULL) {
- r = SC_ERROR_INTERNAL;
- goto err;
- }
- if (!strcmp(old_reader->name, reader_name)) {
- found = 1;
- }
+ /* check if existing readers were returned in the list */
+ for (i = 0; i < sc_ctx_get_reader_count(ctx); i++) {
+ sc_reader_t *reader = sc_ctx_get_reader(ctx, i);
+
+ if (reader == NULL) {
+ r = SC_ERROR_INTERNAL;
+ goto err;
+ }
+
+ for (j = 0; j < [slotNames count]; j++) {
+ if (!strcmp(reader->name, [slotNames[j] UTF8String]))
+ break;
}
- /* Reader already available, skip */
- if (found) {
- old_reader->flags &= ~SC_READER_REMOVED;
- continue;
+ if (j < [slotNames count]) {
+ /* existing reader found; remove it from the list */
+ [slotNames removeObjectAtIndex:j];
+ } else {
+ /* existing reader not found */
+ reader->flags |= SC_READER_REMOVED;
}
+ }
- sc_log(ctx, "Found new CryptoTokenKit reader '%s'", reader_name);
+ /* add readers remaining in the list */
+ for (NSString *slotName in slotNames) {
+ dispatch_semaphore_t sema = dispatch_semaphore_create(0);
+ sc_log(ctx, "Found new CryptoTokenKit reader '%s'", [slotName UTF8String]);
[mngr getSlotWithName:slotName reply:^(TKSmartCardSlot *slot) {
cryptotokenkit_use_reader(ctx, slot, NULL);
dispatch_semaphore_signal(sema);
diff --git a/src/libopensc/reader-pcsc.c b/src/libopensc/reader-pcsc.c
index 18d97f0c8..c9edad608 100644
--- a/src/libopensc/reader-pcsc.c
+++ b/src/libopensc/reader-pcsc.c
@@ -1298,12 +1298,6 @@ static int pcsc_detect_readers(sc_context_t *ctx)
goto out;
}
- /* temporarily mark all readers as removed */
- for (i=0;i < sc_ctx_get_reader_count(ctx);i++) {
- sc_reader_t *reader = sc_ctx_get_reader(ctx, i);
- reader->flags |= SC_READER_REMOVED;
- }
-
sc_log(ctx, "Probing PC/SC readers");
do {
@@ -1359,28 +1353,39 @@ static int pcsc_detect_readers(sc_context_t *ctx)
goto out;
}
- for (reader_name = reader_buf; *reader_name != '\x0';
- reader_name += strlen(reader_name) + 1) {
- sc_reader_t *reader = NULL, *old_reader = NULL;
- struct pcsc_private_data *priv = NULL;
- int found = 0;
+ /* check if existing readers were returned in the list */
+ for (i = 0; i < sc_ctx_get_reader_count(ctx); i++) {
+ sc_reader_t *reader = sc_ctx_get_reader(ctx, i);
- for (i=0;i < sc_ctx_get_reader_count(ctx) && !found;i++) {
- old_reader = sc_ctx_get_reader(ctx, i);
- if (old_reader == NULL) {
- ret = SC_ERROR_INTERNAL;
- goto out;
- }
- if (!strcmp(old_reader->name, reader_name)) {
- found = 1;
- }
+ if (!reader) {
+ ret = SC_ERROR_INTERNAL;
+ goto out;
}
- /* Reader already available, skip */
- if (found) {
- old_reader->flags &= ~SC_READER_REMOVED;
- continue;
+ for (reader_name = reader_buf; *reader_name != '\x0';
+ reader_name += strlen(reader_name) + 1) {
+ if (!strcmp(reader->name, reader_name))
+ break;
+ }
+
+ if (*reader_name != '\x0') {
+ /* existing reader found; remove it from the list */
+ char *next_reader_name = reader_name + strlen(reader_name) + 1;
+
+ memmove(reader_name, next_reader_name,
+ (reader_buf + reader_buf_size) - next_reader_name);
+ reader_buf_size -= (next_reader_name - reader_name);
+ } else {
+ /* existing reader not found */
+ reader->flags |= SC_READER_REMOVED;
}
+ }
+
+ /* add readers remaining in the list */
+ for (reader_name = reader_buf; *reader_name != '\x0';
+ reader_name += strlen(reader_name) + 1) {
+ sc_reader_t *reader = NULL;
+ struct pcsc_private_data *priv = NULL;
ret = pcsc_add_reader(ctx, reader_name, strlen(reader_name), &reader);
if (ret != SC_SUCCESS) {

1909
opensc-0.19.0-rsa-pss.patch Normal file

File diff suppressed because it is too large Load Diff

View File

@ -2,8 +2,8 @@
%define nssdb %{_sysconfdir}/pki/nssdb %define nssdb %{_sysconfdir}/pki/nssdb
Name: opensc Name: opensc
Version: 0.18.0 Version: 0.19.0
Release: 4%{?dist} Release: 1%{?dist}
Summary: Smart card library and applications Summary: Smart card library and applications
Group: System Environment/Libraries Group: System Environment/Libraries
@ -11,6 +11,7 @@ License: LGPLv2+
URL: https://github.com/OpenSC/OpenSC/wiki URL: https://github.com/OpenSC/OpenSC/wiki
Source0: https://github.com/OpenSC/OpenSC/releases/download/%{version}/%{name}-%{version}.tar.gz Source0: https://github.com/OpenSC/OpenSC/releases/download/%{version}/%{name}-%{version}.tar.gz
Source1: opensc.module Source1: opensc.module
Patch1: opensc-0.19.0-rsa-pss.patch
BuildRequires: pcsc-lite-devel BuildRequires: pcsc-lite-devel
BuildRequires: readline-devel BuildRequires: readline-devel
@ -24,8 +25,8 @@ Requires: pcsc-lite
Obsoletes: mozilla-opensc-signer < 0.12.0 Obsoletes: mozilla-opensc-signer < 0.12.0
Obsoletes: opensc-devel < 0.12.0 Obsoletes: opensc-devel < 0.12.0
Obsoletes: coolkey <= 1.1.0-36 Obsoletes: coolkey <= 1.1.0-36
# https://github.com/OpenSC/OpenSC/issues/1324 (#1579933) # https://github.com/OpenSC/OpenSC/pull/1435
Patch1: opensc-0.18.0-WaitForSlotEvent.patch Patch2: opensc-0.19.0-rsa-pss.patch
%description %description
OpenSC provides a set of libraries and utilities to work with smart cards. Its OpenSC provides a set of libraries and utilities to work with smart cards. Its
@ -39,12 +40,12 @@ every software/card that does so, too.
%prep %prep
%setup -q %setup -q
%patch1 -p1 -b .wait %patch2 -p1 -b .pss
cp -p src/pkcs15init/README ./README.pkcs15init cp -p src/pkcs15init/README ./README.pkcs15init
cp -p src/scconf/README.scconf . cp -p src/scconf/README.scconf .
# No {_libdir} here to avoid multilib conflicts; it's just an example # 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 sed -i -e 's|/usr/local/towitoko/lib/|/usr/lib/ctapi/|' etc/opensc.conf.example.in
%build %build
@ -54,6 +55,7 @@ sed -i -e 's|"/lib /usr/lib\b|"/%{_lib} %{_libdir}|' configure # lib64 rpaths
%configure --disable-static \ %configure --disable-static \
--disable-assert \ --disable-assert \
--enable-pcsc \ --enable-pcsc \
--disable-tests \
--enable-sm \ --enable-sm \
--with-pcsc-provider=libpcsclite.so.1 --with-pcsc-provider=libpcsclite.so.1
make %{?_smp_mflags} V=1 make %{?_smp_mflags} V=1
@ -77,7 +79,7 @@ rm -rf $RPM_BUILD_ROOT%{_datadir}/doc/opensc
rm -f $RPM_BUILD_ROOT%{_libdir}/libopensc.so rm -f $RPM_BUILD_ROOT%{_libdir}/libopensc.so
rm -f $RPM_BUILD_ROOT%{_libdir}/libsmm-local.so rm -f $RPM_BUILD_ROOT%{_libdir}/libsmm-local.so
%if 0%{?rhel} && 0%{?rhel} < 7 %if 0%{?rhel} && 0%{?rhel} < 7
rm -rf %{buildroot}%{_sysconfdir}/bash_completion.d/ rm -rf %{buildroot}%{_datadir}/bash-completion/
%endif %endif
# the npa-tool builds to nothing since we do not have OpenPACE library # the npa-tool builds to nothing since we do not have OpenPACE library
@ -111,7 +113,7 @@ fi
%doc COPYING NEWS README* %doc COPYING NEWS README*
%if ! 0%{?rhel} || 0%{?rhel} >= 7 %if ! 0%{?rhel} || 0%{?rhel} >= 7
%{_sysconfdir}/bash_completion.d/* %{_datadir}/bash-completion/*
%endif %endif
%config(noreplace) %{_sysconfdir}/opensc-%{_arch}.conf %config(noreplace) %{_sysconfdir}/opensc-%{_arch}.conf
@ -171,6 +173,10 @@ fi
%changelog %changelog
* Tue Sep 25 2018 Jakub Jelen <jjelen@redhat.com> - 0.19.0-1
- New upstream release fixing various CVE's
- Add support for RSA-PSS signatures
* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.18.0-4 * Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.18.0-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild

View File

@ -1 +1 @@
SHA512 (opensc-0.18.0.tar.gz) = dc90cff3e0e639c14bfb11d1d0455964d24d08aa27728592ab0d8b487a1ffee1ca71cb9bbf5d0f101b2ebd85cf9478988f686d45effa72315e6ffc843d398768 SHA512 (opensc-0.19.0.tar.gz) = 90659133fb593cbf82ed6502e3858f34119bff051e3090489b7622659dcb1c26d389a4715892aa60a5606bc0ce115bd6c504521abfb965de9ad46441e4ed2b8e