Package init
This commit is contained in:
commit
b61746609a
79
build-Call-va_end-always-when-leaving-the-function.patch
Normal file
79
build-Call-va_end-always-when-leaving-the-function.patch
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
From c76197ddbbd0c29adc2bceff2ee9f740f71d134d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Daiki Ueno <dueno@redhat.com>
|
||||||
|
Date: Tue, 16 Oct 2018 18:06:56 +0200
|
||||||
|
Subject: [PATCH 04/36] build: Call va_end() always when leaving the function
|
||||||
|
|
||||||
|
---
|
||||||
|
common/attrs.c | 4 +++-
|
||||||
|
common/compat.c | 5 ++++-
|
||||||
|
common/path.c | 5 ++++-
|
||||||
|
trust/parser.c | 4 +++-
|
||||||
|
4 files changed, 14 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/common/attrs.c b/common/attrs.c
|
||||||
|
index aa91891..a387a66 100644
|
||||||
|
--- a/common/attrs.c
|
||||||
|
+++ b/common/attrs.c
|
||||||
|
@@ -538,8 +538,10 @@ buffer_append_printf (p11_buffer *buffer,
|
||||||
|
va_list va;
|
||||||
|
|
||||||
|
va_start (va, format);
|
||||||
|
- if (vasprintf (&string, format, va) < 0)
|
||||||
|
+ if (vasprintf (&string, format, va) < 0) {
|
||||||
|
+ va_end (va);
|
||||||
|
return_if_reached ();
|
||||||
|
+ }
|
||||||
|
va_end (va);
|
||||||
|
|
||||||
|
p11_buffer_add (buffer, string, -1);
|
||||||
|
diff --git a/common/compat.c b/common/compat.c
|
||||||
|
index 5a9702d..48614fa 100644
|
||||||
|
--- a/common/compat.c
|
||||||
|
+++ b/common/compat.c
|
||||||
|
@@ -525,7 +525,10 @@ strconcat (const char *first,
|
||||||
|
for (arg = first; arg; arg = va_arg (va, const char*)) {
|
||||||
|
size_t old_length = length;
|
||||||
|
length += strlen (arg);
|
||||||
|
- return_val_if_fail (length >= old_length, NULL);
|
||||||
|
+ if (length < old_length) {
|
||||||
|
+ va_end (va);
|
||||||
|
+ return_val_if_reached (NULL);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
va_end (va);
|
||||||
|
diff --git a/common/path.c b/common/path.c
|
||||||
|
index 5cf0e1a..17a6230 100644
|
||||||
|
--- a/common/path.c
|
||||||
|
+++ b/common/path.c
|
||||||
|
@@ -218,7 +218,10 @@ p11_path_build (const char *path,
|
||||||
|
while (path != NULL) {
|
||||||
|
size_t old_len = len;
|
||||||
|
len += strlen (path) + 1;
|
||||||
|
- return_val_if_fail (len >= old_len, NULL);
|
||||||
|
+ if (len < old_len) {
|
||||||
|
+ va_end (va);
|
||||||
|
+ return_val_if_reached (NULL);
|
||||||
|
+ }
|
||||||
|
path = va_arg (va, const char *);
|
||||||
|
}
|
||||||
|
va_end (va);
|
||||||
|
diff --git a/trust/parser.c b/trust/parser.c
|
||||||
|
index f92cdc9..e912c3a 100644
|
||||||
|
--- a/trust/parser.c
|
||||||
|
+++ b/trust/parser.c
|
||||||
|
@@ -697,8 +697,10 @@ p11_parser_formats (p11_parser *parser,
|
||||||
|
func = va_arg (va, parser_func);
|
||||||
|
if (func == NULL)
|
||||||
|
break;
|
||||||
|
- if (!p11_array_push (formats, func))
|
||||||
|
+ if (!p11_array_push (formats, func)) {
|
||||||
|
+ va_end (va);
|
||||||
|
return_if_reached ();
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
va_end (va);
|
||||||
|
|
||||||
|
--
|
||||||
|
2.19.1
|
||||||
|
|
||||||
42
debug-Work-around-cppcheck-false-positives.patch
Normal file
42
debug-Work-around-cppcheck-false-positives.patch
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
From 8a8db182af533a43b4d478d28af8623035475d68 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Daiki Ueno <dueno@redhat.com>
|
||||||
|
Date: Tue, 16 Oct 2018 18:05:10 +0200
|
||||||
|
Subject: [PATCH 03/36] debug: Work around cppcheck false-positives
|
||||||
|
|
||||||
|
https://trac.cppcheck.net/ticket/8794
|
||||||
|
---
|
||||||
|
common/debug.h | 6 +++---
|
||||||
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/common/debug.h b/common/debug.h
|
||||||
|
index 255c62c..7ea36f3 100644
|
||||||
|
--- a/common/debug.h
|
||||||
|
+++ b/common/debug.h
|
||||||
|
@@ -71,13 +71,13 @@ void p11_debug_precond (const char *format,
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define return_val_if_fail(x, v) \
|
||||||
|
- do { if (!(x)) { \
|
||||||
|
+ do { if (x) { } else { \
|
||||||
|
p11_debug_precond ("p11-kit: '%s' not true at %s\n", #x, __func__); \
|
||||||
|
return v; \
|
||||||
|
} } while (false)
|
||||||
|
|
||||||
|
#define return_if_fail(x) \
|
||||||
|
- do { if (!(x)) { \
|
||||||
|
+ do { if (x) { } else { \
|
||||||
|
p11_debug_precond ("p11-kit: '%s' not true at %s\n", #x, __func__); \
|
||||||
|
return; \
|
||||||
|
} } while (false)
|
||||||
|
@@ -100,7 +100,7 @@ void p11_debug_precond (const char *format,
|
||||||
|
} while (false)
|
||||||
|
|
||||||
|
#define warn_if_fail(x) \
|
||||||
|
- do { if (!(x)) { \
|
||||||
|
+ do { if (x) { } else { \
|
||||||
|
p11_debug_precond ("p11-kit: '%s' not true at %s\n", #x, __func__); \
|
||||||
|
} } while (false)
|
||||||
|
|
||||||
|
--
|
||||||
|
2.19.1
|
||||||
|
|
||||||
31
modules-Fix-index-used-in-call-to-p11_dict_remove.patch
Normal file
31
modules-Fix-index-used-in-call-to-p11_dict_remove.patch
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
From 793cc3b78f17bb5a3c151eba1144b73a5d51be3e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Simon Haggett <simon.haggett@gmail.com>
|
||||||
|
Date: Tue, 12 Mar 2019 11:26:20 +0000
|
||||||
|
Subject: [PATCH 36/36] modules: Fix index used in call to p11_dict_remove()
|
||||||
|
|
||||||
|
This fixes a call to p11_dict_remove() in managed_steal_sessions_inlock() to use
|
||||||
|
the correct index in the stolen array (i, rather than at). This avoids an
|
||||||
|
assert, which was encountered on a host serving a PKCS#11 module to a remote
|
||||||
|
Linux client.
|
||||||
|
|
||||||
|
Signed-off-by: Simon Haggett <simon.haggett@gmail.com>
|
||||||
|
---
|
||||||
|
p11-kit/modules.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/p11-kit/modules.c b/p11-kit/modules.c
|
||||||
|
index 891ce4c..39e1fda 100644
|
||||||
|
--- a/p11-kit/modules.c
|
||||||
|
+++ b/p11-kit/modules.c
|
||||||
|
@@ -1647,7 +1647,7 @@ managed_steal_sessions_inlock (p11_dict *sessions,
|
||||||
|
/* Only removed some, go through and remove those */
|
||||||
|
} else {
|
||||||
|
for (i = 0; i < at; i++) {
|
||||||
|
- if (!p11_dict_remove (sessions, stolen + at))
|
||||||
|
+ if (!p11_dict_remove (sessions, stolen + i))
|
||||||
|
assert_not_reached ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.19.1
|
||||||
|
|
||||||
50
modules-check-gl.modules-before-iterates-on-it-when-.patch
Normal file
50
modules-check-gl.modules-before-iterates-on-it-when-.patch
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
From 4a925177a81c2566d2a81a0a450607a5ff4d9048 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Stefano Garzarella <sgarzare@redhat.com>
|
||||||
|
Date: Wed, 27 Feb 2019 12:25:20 +0100
|
||||||
|
Subject: [PATCH 34/36] modules: check gl.modules before iterates on it when
|
||||||
|
freeing
|
||||||
|
|
||||||
|
In some circumstances, as described in the BZ, can happen that
|
||||||
|
free_modules_when_no_refs_unlocked() is called multiple times
|
||||||
|
when the module destructor is invoked.
|
||||||
|
We should check gl.modules before iterates on it in the
|
||||||
|
free_modules_when_no_refs_unlocked() functions, to avoid
|
||||||
|
a SIGSEGV.
|
||||||
|
|
||||||
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1680963
|
||||||
|
---
|
||||||
|
p11-kit/modules.c | 18 ++++++++++--------
|
||||||
|
1 file changed, 10 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/p11-kit/modules.c b/p11-kit/modules.c
|
||||||
|
index 0299eda..891ce4c 100644
|
||||||
|
--- a/p11-kit/modules.c
|
||||||
|
+++ b/p11-kit/modules.c
|
||||||
|
@@ -797,14 +797,16 @@ init_globals_unlocked (void)
|
||||||
|
static void
|
||||||
|
free_modules_when_no_refs_unlocked (void)
|
||||||
|
{
|
||||||
|
- Module *mod;
|
||||||
|
- p11_dictiter iter;
|
||||||
|
-
|
||||||
|
- /* Check if any modules have a ref count */
|
||||||
|
- p11_dict_iterate (gl.modules, &iter);
|
||||||
|
- while (p11_dict_next (&iter, (void **)&mod, NULL)) {
|
||||||
|
- if (mod->ref_count)
|
||||||
|
- return;
|
||||||
|
+ if (gl.modules) {
|
||||||
|
+ Module *mod;
|
||||||
|
+ p11_dictiter iter;
|
||||||
|
+
|
||||||
|
+ /* Check if any modules have a ref count */
|
||||||
|
+ p11_dict_iterate (gl.modules, &iter);
|
||||||
|
+ while (p11_dict_next (&iter, (void **)&mod, NULL)) {
|
||||||
|
+ if (mod->ref_count)
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
p11_dict_free (gl.unmanaged_by_funcs);
|
||||||
|
--
|
||||||
|
2.19.1
|
||||||
|
|
||||||
BIN
p11-kit-0.23.14.tar.gz
Normal file
BIN
p11-kit-0.23.14.tar.gz
Normal file
Binary file not shown.
11
p11-kit-client.service
Normal file
11
p11-kit-client.service
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=p11-kit client
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=true
|
||||||
|
RuntimeDirectory=p11-kit
|
||||||
|
ExecStart=/usr/bin/true
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
||||||
133
p11-kit.spec
Normal file
133
p11-kit.spec
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
Name: p11-kit
|
||||||
|
Version: 0.23.14
|
||||||
|
Release: 2
|
||||||
|
Summary: Provides a way to load and enumerate PKCS#11 modules.
|
||||||
|
License: BSD
|
||||||
|
URL: http://p11-glue.freedesktop.org/p11-kit.html
|
||||||
|
|
||||||
|
Source0: %{name}-%{version}.tar.gz
|
||||||
|
Source1: trust-extract-compat
|
||||||
|
Source2: p11-kit-client.service
|
||||||
|
|
||||||
|
Patch6001: debug-Work-around-cppcheck-false-positives.patch
|
||||||
|
Patch6002: build-Call-va_end-always-when-leaving-the-function.patch
|
||||||
|
Patch6003: rpc-server-p11_kit_remote_serve_tokens-Fix-memleak.patch
|
||||||
|
Patch6004: rpc-server-Check-calloc-failure.patch
|
||||||
|
Patch6005: trust-Check-index-buckets-is-allocated-on-cleanup.patch
|
||||||
|
Patch6006: trust-Propagate-library-verbosity-to-module-through-.patch
|
||||||
|
Patch6007: trust-Fail-if-trust-anchors-are-not-loaded-from-a-fi.patch
|
||||||
|
Patch6008: trust-p11_token_load-Treat-parse-error-as-failure.patch
|
||||||
|
Patch6009: trust-Continue-parsing-if-the-file-cannot-be-read-as.patch
|
||||||
|
Patch6010: pem-Fix-assert-condition.patch
|
||||||
|
Patch6011: trust-Ignore-unreadable-content-in-anchors.patch
|
||||||
|
Patch6012: modules-check-gl.modules-before-iterates-on-it-when-.patch
|
||||||
|
Patch6013: modules-Fix-index-used-in-call-to-p11_dict_remove.patch
|
||||||
|
|
||||||
|
BuildRequires: gcc libtasn1-devel >= 2.3 libffi-devel gtk-doc systemd-devel pkgconfig(glib-2.0)
|
||||||
|
|
||||||
|
%description
|
||||||
|
Provides a way to load and enumerate PKCS#11 modules.
|
||||||
|
Provides a standard configuration setup for installing
|
||||||
|
PKCS#11 modules in such a way that they're discoverable.
|
||||||
|
Also solves problems with coordinating the use of PKCS#11
|
||||||
|
by different components or libraries living in the same process.
|
||||||
|
|
||||||
|
Provides: %{name}-server
|
||||||
|
Obsoletes: %{name}-server
|
||||||
|
|
||||||
|
%package devel
|
||||||
|
Summary: Development files for %{name}
|
||||||
|
Requires: %{name} = %{version}-%{release}
|
||||||
|
|
||||||
|
%description devel
|
||||||
|
Provides header and libraries files for applications use %{name} to develop.
|
||||||
|
|
||||||
|
%package trust
|
||||||
|
Summary: Trust policy module of %{name}
|
||||||
|
Requires: %{name} = %{version}-%{release}
|
||||||
|
Conflicts: nss < 3.14.3-9
|
||||||
|
|
||||||
|
%description trust
|
||||||
|
This package contains PKCS#11 trust policy module.
|
||||||
|
|
||||||
|
%package help
|
||||||
|
Summary: Help infomation of %{name}
|
||||||
|
Requires: %{name} = %{version}-%{release}
|
||||||
|
|
||||||
|
%description help
|
||||||
|
This package contains help information of p11-kit.
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%autosetup -p1
|
||||||
|
|
||||||
|
%build
|
||||||
|
%configure --enable-doc --with-trust-paths=/etc/pki/ca-trust/source:/usr/share/pki/ca-trust-source
|
||||||
|
make -j 4 V=1
|
||||||
|
|
||||||
|
%install
|
||||||
|
make install DESTDIR=$RPM_BUILD_ROOT
|
||||||
|
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/pkcs11/modules
|
||||||
|
install -p -m 755 %{SOURCE1} $RPM_BUILD_ROOT%{_libexecdir}/p11-kit/
|
||||||
|
install -p -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{_userunitdir}
|
||||||
|
find $RPM_BUILD_ROOT -type f -name "*.la" -delete -print
|
||||||
|
|
||||||
|
%check
|
||||||
|
make check
|
||||||
|
|
||||||
|
%post -p /sbin/ldconfig
|
||||||
|
|
||||||
|
%post trust
|
||||||
|
%{_sbindir}/update-alternatives --install %{_libdir}/libnssckbi.so libnssckbi.so %{_libdir}/pkcs11/p11-kit-trust.so 30
|
||||||
|
|
||||||
|
%postun -p /sbin/ldconfig
|
||||||
|
|
||||||
|
%postun trust
|
||||||
|
if [ $1 -eq 0 ]; then
|
||||||
|
%{_sbindir}/update-alternatives --remove libnssckbi.so %{_libdir}/pkcs11/p11-kit-trust.so
|
||||||
|
fi
|
||||||
|
|
||||||
|
%files
|
||||||
|
%license COPYING
|
||||||
|
%dir %{_libexecdir}/p11-kit
|
||||||
|
%dir %{_sysconfdir}/pkcs11
|
||||||
|
%dir %{_sysconfdir}/pkcs11/modules
|
||||||
|
%dir %{_datadir}/p11-kit
|
||||||
|
%dir %{_datadir}/p11-kit/modules
|
||||||
|
%{_bindir}/p11-kit
|
||||||
|
%{_libdir}/libp11-kit.so.*
|
||||||
|
%{_libdir}/p11-kit-proxy.so
|
||||||
|
%{_libdir}/pkcs11/p11-kit-client.so
|
||||||
|
%{_libexecdir}/p11-kit/p11-kit-remote
|
||||||
|
%{_libexecdir}/p11-kit/p11-kit-server
|
||||||
|
%{_userunitdir}/p11-kit-client.service
|
||||||
|
%{_userunitdir}/p11-kit-server.service
|
||||||
|
%{_userunitdir}/p11-kit-server.socket
|
||||||
|
|
||||||
|
%files help
|
||||||
|
%doc AUTHORS NEWS README
|
||||||
|
%doc p11-kit/pkcs11.conf.example
|
||||||
|
%{_mandir}/man1/trust.1.gz
|
||||||
|
%{_mandir}/man8/p11-kit.8.gz
|
||||||
|
%{_mandir}/man5/pkcs11.conf.5.gz
|
||||||
|
%{_sysconfdir}/pkcs11/pkcs11.conf.example
|
||||||
|
|
||||||
|
%files devel
|
||||||
|
%doc %{_datadir}/gtk-doc/
|
||||||
|
%{_includedir}/p11-kit-1/
|
||||||
|
%{_libdir}/libp11-kit.so
|
||||||
|
%{_libdir}/pkgconfig/p11-kit-1.pc
|
||||||
|
|
||||||
|
%files trust
|
||||||
|
%{_bindir}/trust
|
||||||
|
%dir %{_libdir}/pkcs11
|
||||||
|
%ghost %{_libdir}/libnssckbi.so
|
||||||
|
%{_libdir}/pkcs11/p11-kit-trust.so
|
||||||
|
%{_datadir}/p11-kit/modules/p11-kit-trust.module
|
||||||
|
%{_libexecdir}/p11-kit/trust-extract-compat
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Fri Sep 27 2019 openEuler Buildteam <buildteam@openeuler.org> - 0.23.14-2
|
||||||
|
- Correct patch number
|
||||||
|
|
||||||
|
* Sat Sep 7 2019 openEuler Buildteam <buildteam@openeuler.org> - 0.23.14-1
|
||||||
|
- Package init
|
||||||
58
pem-Fix-assert-condition.patch
Normal file
58
pem-Fix-assert-condition.patch
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
From f277a1469aef05d3542e8ae9fd3f5dbadbe12463 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Daiki Ueno <dueno@redhat.com>
|
||||||
|
Date: Fri, 11 Jan 2019 10:35:16 +0100
|
||||||
|
Subject: [PATCH 30/36] pem: Fix assert condition
|
||||||
|
|
||||||
|
If the PEM header is "-----BEGIN -----", *type should be an empty
|
||||||
|
string and the parser shouldn't fail. Reported by Han Han in:
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=1665172
|
||||||
|
---
|
||||||
|
trust/pem.c | 2 +-
|
||||||
|
trust/test-pem.c | 18 ++++++++++++++++++
|
||||||
|
2 files changed, 19 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/trust/pem.c b/trust/pem.c
|
||||||
|
index ce4f554..fae7dd6 100644
|
||||||
|
--- a/trust/pem.c
|
||||||
|
+++ b/trust/pem.c
|
||||||
|
@@ -84,7 +84,7 @@ pem_find_begin (const char *data,
|
||||||
|
|
||||||
|
if (type) {
|
||||||
|
pref += ARMOR_PREF_BEGIN_L;
|
||||||
|
- assert (suff > pref);
|
||||||
|
+ assert (suff >= pref);
|
||||||
|
*type = strndup (pref, suff - pref);
|
||||||
|
return_val_if_fail (*type != NULL, NULL);
|
||||||
|
}
|
||||||
|
diff --git a/trust/test-pem.c b/trust/test-pem.c
|
||||||
|
index 0c7d60a..6feff86 100644
|
||||||
|
--- a/trust/test-pem.c
|
||||||
|
+++ b/trust/test-pem.c
|
||||||
|
@@ -119,6 +119,24 @@ struct {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
+ {
|
||||||
|
+ /* one block with empty type */
|
||||||
|
+ "-----BEGIN -----\n"
|
||||||
|
+ "aYNNXqshlVxCdo8QfKeXh3GUzd/yn4LYIVgQrx4a\n"
|
||||||
|
+ "-----END -----",
|
||||||
|
+ {
|
||||||
|
+ {
|
||||||
|
+ "",
|
||||||
|
+ "\x69\x83\x4d\x5e\xab\x21\x95\x5c\x42\x76\x8f\x10\x7c\xa7\x97\x87"
|
||||||
|
+ "\x71\x94\xcd\xdf\xf2\x9f\x82\xd8\x21\x58\x10\xaf\x1e\x1a",
|
||||||
|
+ 30,
|
||||||
|
+ },
|
||||||
|
+ {
|
||||||
|
+ NULL,
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ },
|
||||||
|
+
|
||||||
|
{
|
||||||
|
NULL,
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.19.1
|
||||||
|
|
||||||
27
rpc-server-Check-calloc-failure.patch
Normal file
27
rpc-server-Check-calloc-failure.patch
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
From 6417780ebbbbb0f01ddb001b239347655fb98578 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Daiki Ueno <dueno@redhat.com>
|
||||||
|
Date: Wed, 17 Oct 2018 09:53:27 +0200
|
||||||
|
Subject: [PATCH 11/36] rpc-server: Check calloc failure
|
||||||
|
|
||||||
|
---
|
||||||
|
p11-kit/rpc-server.c | 4 ++++
|
||||||
|
1 file changed, 4 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/p11-kit/rpc-server.c b/p11-kit/rpc-server.c
|
||||||
|
index 5b3dbf0..3216742 100644
|
||||||
|
--- a/p11-kit/rpc-server.c
|
||||||
|
+++ b/p11-kit/rpc-server.c
|
||||||
|
@@ -2219,6 +2219,10 @@ p11_kit_remote_serve_tokens (const char **tokens,
|
||||||
|
filter = p11_dict_get (filters, module);
|
||||||
|
if (filter == NULL) {
|
||||||
|
lower = calloc (1, sizeof (p11_virtual));
|
||||||
|
+ if (lower == NULL) {
|
||||||
|
+ error = ENOMEM;
|
||||||
|
+ goto out;
|
||||||
|
+ }
|
||||||
|
p11_virtual_init (lower, &p11_virtual_base, module, NULL);
|
||||||
|
filter = p11_filter_subclass (lower, NULL);
|
||||||
|
if (filter == NULL) {
|
||||||
|
--
|
||||||
|
2.19.1
|
||||||
|
|
||||||
28
rpc-server-p11_kit_remote_serve_tokens-Fix-memleak.patch
Normal file
28
rpc-server-p11_kit_remote_serve_tokens-Fix-memleak.patch
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
From 1f78cb0b4dd193ec1f1b2b424a497a6c2edec043 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Daiki Ueno <dueno@redhat.com>
|
||||||
|
Date: Tue, 16 Oct 2018 18:16:51 +0200
|
||||||
|
Subject: [PATCH 08/36] rpc-server: p11_kit_remote_serve_tokens: Fix memleak
|
||||||
|
|
||||||
|
---
|
||||||
|
p11-kit/rpc-server.c | 5 +++++
|
||||||
|
1 file changed, 5 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/p11-kit/rpc-server.c b/p11-kit/rpc-server.c
|
||||||
|
index 3a8991d..5b3dbf0 100644
|
||||||
|
--- a/p11-kit/rpc-server.c
|
||||||
|
+++ b/p11-kit/rpc-server.c
|
||||||
|
@@ -2285,6 +2285,11 @@ p11_kit_remote_serve_tokens (const char **tokens,
|
||||||
|
p11_kit_modules_release (modules);
|
||||||
|
if (error != 0)
|
||||||
|
errno = error;
|
||||||
|
+ if (uris) {
|
||||||
|
+ for (i = 0; i < n_tokens; i++)
|
||||||
|
+ p11_kit_uri_free (uris[i]);
|
||||||
|
+ free (uris);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.19.1
|
||||||
|
|
||||||
31
trust-Check-index-buckets-is-allocated-on-cleanup.patch
Normal file
31
trust-Check-index-buckets-is-allocated-on-cleanup.patch
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
From 83e92c2f9575707083d8b0c70ef330e285d70836 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Daiki Ueno <dueno@redhat.com>
|
||||||
|
Date: Wed, 17 Oct 2018 09:53:46 +0200
|
||||||
|
Subject: [PATCH 12/36] trust: Check index->buckets is allocated on cleanup
|
||||||
|
|
||||||
|
---
|
||||||
|
trust/index.c | 8 +++++---
|
||||||
|
1 file changed, 5 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/trust/index.c b/trust/index.c
|
||||||
|
index 6a8e535..2d1da29 100644
|
||||||
|
--- a/trust/index.c
|
||||||
|
+++ b/trust/index.c
|
||||||
|
@@ -193,9 +193,11 @@ p11_index_free (p11_index *index)
|
||||||
|
|
||||||
|
p11_dict_free (index->objects);
|
||||||
|
p11_dict_free (index->changes);
|
||||||
|
- for (i = 0; i < NUM_BUCKETS; i++)
|
||||||
|
- free (index->buckets[i].elem);
|
||||||
|
- free (index->buckets);
|
||||||
|
+ if (index->buckets) {
|
||||||
|
+ for (i = 0; i < NUM_BUCKETS; i++)
|
||||||
|
+ free (index->buckets[i].elem);
|
||||||
|
+ free (index->buckets);
|
||||||
|
+ }
|
||||||
|
free (index);
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.19.1
|
||||||
|
|
||||||
29
trust-Continue-parsing-if-the-file-cannot-be-read-as.patch
Normal file
29
trust-Continue-parsing-if-the-file-cannot-be-read-as.patch
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
From 5e6a92b67ddade14a54769b05cc717043bc56b78 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Daiki Ueno <dueno@redhat.com>
|
||||||
|
Date: Tue, 25 Dec 2018 08:32:19 +0100
|
||||||
|
Subject: [PATCH 27/36] trust: Continue parsing if the file cannot be read as
|
||||||
|
persist format
|
||||||
|
|
||||||
|
A corrupted file that contains "[p11-kit-object-v1]" can be a valid
|
||||||
|
PEM certs file. Continue with the next format if it cannot be read as
|
||||||
|
a persistent format.
|
||||||
|
---
|
||||||
|
trust/parser.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/trust/parser.c b/trust/parser.c
|
||||||
|
index e912c3a..e84e47c 100644
|
||||||
|
--- a/trust/parser.c
|
||||||
|
+++ b/trust/parser.c
|
||||||
|
@@ -639,7 +639,7 @@ p11_parser_format_persist (p11_parser *parser,
|
||||||
|
}
|
||||||
|
|
||||||
|
p11_array_free (objects);
|
||||||
|
- return ret ? P11_PARSE_SUCCESS : P11_PARSE_FAILURE;
|
||||||
|
+ return ret ? P11_PARSE_SUCCESS : P11_PARSE_UNRECOGNIZED;
|
||||||
|
}
|
||||||
|
|
||||||
|
p11_parser *
|
||||||
|
--
|
||||||
|
2.19.1
|
||||||
|
|
||||||
69
trust-Fail-if-trust-anchors-are-not-loaded-from-a-fi.patch
Normal file
69
trust-Fail-if-trust-anchors-are-not-loaded-from-a-fi.patch
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
From eb503f3a1467f21a5ecc9ae84ae23b216afc102f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Daiki Ueno <dueno@redhat.com>
|
||||||
|
Date: Tue, 25 Dec 2018 07:32:01 +0100
|
||||||
|
Subject: [PATCH 25/36] trust: Fail if trust anchors are not loaded from a file
|
||||||
|
|
||||||
|
If the trust path is a file, treat parse error as fatal and abort the
|
||||||
|
C_FindObjectsInit call.
|
||||||
|
---
|
||||||
|
trust/module.c | 11 ++++++++---
|
||||||
|
trust/token.c | 6 +++---
|
||||||
|
2 files changed, 11 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/trust/module.c b/trust/module.c
|
||||||
|
index 0c16a39..1722340 100644
|
||||||
|
--- a/trust/module.c
|
||||||
|
+++ b/trust/module.c
|
||||||
|
@@ -1198,11 +1198,16 @@ sys_C_FindObjectsInit (CK_SESSION_HANDLE handle,
|
||||||
|
indices[n++] = session->index;
|
||||||
|
if (want_token_objects) {
|
||||||
|
if (!session->loaded)
|
||||||
|
- p11_token_load (session->token);
|
||||||
|
- session->loaded = CK_TRUE;
|
||||||
|
- indices[n++] = p11_token_index (session->token);
|
||||||
|
+ if (p11_token_load (session->token) < 0)
|
||||||
|
+ rv = CKR_FUNCTION_FAILED;
|
||||||
|
+ if (rv == CKR_OK) {
|
||||||
|
+ session->loaded = CK_TRUE;
|
||||||
|
+ indices[n++] = p11_token_index (session->token);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
+ }
|
||||||
|
|
||||||
|
+ if (rv == CKR_OK) {
|
||||||
|
find = calloc (1, sizeof (FindObjects));
|
||||||
|
warn_if_fail (find != NULL);
|
||||||
|
|
||||||
|
diff --git a/trust/token.c b/trust/token.c
|
||||||
|
index fd3b043..030c17b 100644
|
||||||
|
--- a/trust/token.c
|
||||||
|
+++ b/trust/token.c
|
||||||
|
@@ -196,14 +196,14 @@ loader_load_file (p11_token *token,
|
||||||
|
default:
|
||||||
|
p11_debug ("failed to parse: %s", filename);
|
||||||
|
loader_gone_file (token, filename);
|
||||||
|
- return 0;
|
||||||
|
+ return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Update each parsed object with the origin */
|
||||||
|
parsed = p11_parser_parsed (token->parser);
|
||||||
|
for (i = 0; i < parsed->num; i++) {
|
||||||
|
parsed->elem[i] = p11_attrs_build (parsed->elem[i], origin, NULL);
|
||||||
|
- return_val_if_fail (parsed->elem[i] != NULL, 0);
|
||||||
|
+ return_val_if_fail (parsed->elem[i] != NULL, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
p11_index_load (token->index);
|
||||||
|
@@ -215,7 +215,7 @@ loader_load_file (p11_token *token,
|
||||||
|
|
||||||
|
if (rv != CKR_OK) {
|
||||||
|
p11_message ("couldn't load file into objects: %s", filename);
|
||||||
|
- return 0;
|
||||||
|
+ return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
loader_was_loaded (token, filename, sb);
|
||||||
|
--
|
||||||
|
2.19.1
|
||||||
|
|
||||||
181
trust-Ignore-unreadable-content-in-anchors.patch
Normal file
181
trust-Ignore-unreadable-content-in-anchors.patch
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
From e2170b295992cb7fdf115227a78028ac3780619f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Daiki Ueno <dueno@redhat.com>
|
||||||
|
Date: Mon, 18 Feb 2019 14:53:49 +0100
|
||||||
|
Subject: [PATCH 33/36] trust: Ignore unreadable content in anchors
|
||||||
|
|
||||||
|
This amends eb503f3a1467f21a5ecc9ae84ae23b216afc102f. Instead of
|
||||||
|
failing C_FindObjectsInit, treat any errors internally and accumulates
|
||||||
|
the successfully loaded certificates.
|
||||||
|
|
||||||
|
Reported by Andrej Kvasnica in:
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=1675441
|
||||||
|
---
|
||||||
|
trust/module.c | 3 +-
|
||||||
|
trust/test-module.c | 77 +++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
trust/token.c | 23 ++++++--------
|
||||||
|
3 files changed, 88 insertions(+), 15 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/trust/module.c b/trust/module.c
|
||||||
|
index 1722340..ec3333d 100644
|
||||||
|
--- a/trust/module.c
|
||||||
|
+++ b/trust/module.c
|
||||||
|
@@ -1198,8 +1198,7 @@ sys_C_FindObjectsInit (CK_SESSION_HANDLE handle,
|
||||||
|
indices[n++] = session->index;
|
||||||
|
if (want_token_objects) {
|
||||||
|
if (!session->loaded)
|
||||||
|
- if (p11_token_load (session->token) < 0)
|
||||||
|
- rv = CKR_FUNCTION_FAILED;
|
||||||
|
+ p11_token_load (session->token);
|
||||||
|
if (rv == CKR_OK) {
|
||||||
|
session->loaded = CK_TRUE;
|
||||||
|
indices[n++] = p11_token_index (session->token);
|
||||||
|
diff --git a/trust/test-module.c b/trust/test-module.c
|
||||||
|
index 1e8d812..4024d81 100644
|
||||||
|
--- a/trust/test-module.c
|
||||||
|
+++ b/trust/test-module.c
|
||||||
|
@@ -163,6 +163,80 @@ setup_writable (void *unused)
|
||||||
|
p11_parser_formats (test.parser, p11_parser_format_persist, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
+/* This is similar to setup(), but it adds an unreadable content in
|
||||||
|
+ * the anchor directory. */
|
||||||
|
+static void
|
||||||
|
+setup_unreadable (void *unused)
|
||||||
|
+{
|
||||||
|
+ CK_C_INITIALIZE_ARGS args;
|
||||||
|
+ const char *paths;
|
||||||
|
+ char *p, *pp, *anchors;
|
||||||
|
+ FILE *f, *ff;
|
||||||
|
+ char buffer[4096];
|
||||||
|
+ char *arguments;
|
||||||
|
+ CK_ULONG count;
|
||||||
|
+ CK_RV rv;
|
||||||
|
+
|
||||||
|
+ memset (&test, 0, sizeof (test));
|
||||||
|
+
|
||||||
|
+ /* This is the entry point of the trust module, linked to this test */
|
||||||
|
+ rv = C_GetFunctionList (&test.module);
|
||||||
|
+ assert (rv == CKR_OK);
|
||||||
|
+
|
||||||
|
+ test.directory = p11_test_directory ("test-module");
|
||||||
|
+ anchors = p11_path_build (test.directory, "anchors", NULL);
|
||||||
|
+#ifdef OS_UNIX
|
||||||
|
+ if (mkdir (anchors, S_IRWXU) < 0)
|
||||||
|
+#else
|
||||||
|
+ if (mkdir (anchors) < 0)
|
||||||
|
+#endif
|
||||||
|
+ assert_fail ("mkdir()", anchors);
|
||||||
|
+
|
||||||
|
+ p = p11_path_build (anchors, "unreadable", NULL);
|
||||||
|
+ f = fopen (p, "w");
|
||||||
|
+ fwrite ("foo", 3, 1, f);
|
||||||
|
+ fclose (f);
|
||||||
|
+ chmod (p, 0);
|
||||||
|
+ free (p);
|
||||||
|
+
|
||||||
|
+ pp = p11_path_build (anchors, "thawte", NULL);
|
||||||
|
+ ff = fopen (pp, "w");
|
||||||
|
+ f = fopen (SRCDIR "/trust/fixtures/thawte.pem", "r");
|
||||||
|
+ while (!feof (f)) {
|
||||||
|
+ size_t size;
|
||||||
|
+ size = fread (buffer, 1, sizeof (buffer), f);
|
||||||
|
+ if (ferror (f))
|
||||||
|
+ assert_fail ("fread()",
|
||||||
|
+ SRCDIR "/trust/fixtures/thawte.pem");
|
||||||
|
+ fwrite (buffer, 1, size, ff);
|
||||||
|
+ if (ferror (ff))
|
||||||
|
+ assert_fail ("write()", pp);
|
||||||
|
+ }
|
||||||
|
+ free (pp);
|
||||||
|
+ fclose (ff);
|
||||||
|
+ fclose (f);
|
||||||
|
+ free (anchors);
|
||||||
|
+
|
||||||
|
+ memset (&args, 0, sizeof (args));
|
||||||
|
+ paths = SRCDIR "/trust/input" P11_PATH_SEP \
|
||||||
|
+ SRCDIR "/trust/fixtures/self-signed-with-ku.der";
|
||||||
|
+ if (asprintf (&arguments, "paths='%s%c%s'",
|
||||||
|
+ paths, P11_PATH_SEP_C, test.directory) < 0)
|
||||||
|
+ assert (false && "not reached");
|
||||||
|
+ args.pReserved = arguments;
|
||||||
|
+ args.flags = CKF_OS_LOCKING_OK;
|
||||||
|
+
|
||||||
|
+ rv = test.module->C_Initialize (&args);
|
||||||
|
+ assert (rv == CKR_OK);
|
||||||
|
+
|
||||||
|
+ free (arguments);
|
||||||
|
+
|
||||||
|
+ count = NUM_SLOTS;
|
||||||
|
+ rv = test.module->C_GetSlotList (CK_TRUE, test.slots, &count);
|
||||||
|
+ assert (rv == CKR_OK);
|
||||||
|
+ assert (count == NUM_SLOTS);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
test_get_slot_list (void)
|
||||||
|
{
|
||||||
|
@@ -1324,5 +1398,8 @@ main (int argc,
|
||||||
|
p11_fixture (NULL, NULL);
|
||||||
|
p11_test (test_token_write_protected, "/module/token-write-protected");
|
||||||
|
|
||||||
|
+ p11_fixture (setup_unreadable, teardown);
|
||||||
|
+ p11_test (test_find_certificates, "/module/unreadable");
|
||||||
|
+
|
||||||
|
return p11_test_run (argc, argv);
|
||||||
|
}
|
||||||
|
diff --git a/trust/token.c b/trust/token.c
|
||||||
|
index b91a1d0..8c75d06 100644
|
||||||
|
--- a/trust/token.c
|
||||||
|
+++ b/trust/token.c
|
||||||
|
@@ -266,8 +266,8 @@ loader_load_directory (p11_token *token,
|
||||||
|
return_val_if_fail (path != NULL, -1);
|
||||||
|
|
||||||
|
ret = loader_load_if_file (token, path);
|
||||||
|
- return_val_if_fail (ret >=0, -1);
|
||||||
|
- total += ret;
|
||||||
|
+ if (ret >= 0)
|
||||||
|
+ total += ret;
|
||||||
|
|
||||||
|
/* Make note that this file was seen */
|
||||||
|
p11_dict_remove (present, path);
|
||||||
|
@@ -328,8 +328,8 @@ loader_load_path (p11_token *token,
|
||||||
|
p11_dict_iterate (present, &iter);
|
||||||
|
while (p11_dict_next (&iter, (void **)&filename, NULL)) {
|
||||||
|
ret = loader_load_if_file (token, filename);
|
||||||
|
- return_val_if_fail (ret >= 0, ret);
|
||||||
|
- total += ret;
|
||||||
|
+ if (ret >= 0)
|
||||||
|
+ total += ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -377,20 +377,17 @@ p11_token_load (p11_token *token)
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = loader_load_path (token, token->path, &is_dir);
|
||||||
|
- if (ret < 0)
|
||||||
|
- return -1;
|
||||||
|
- total += ret;
|
||||||
|
+ if (ret >= 0)
|
||||||
|
+ total += ret;
|
||||||
|
|
||||||
|
if (is_dir) {
|
||||||
|
ret = loader_load_path (token, token->anchors, &is_dir);
|
||||||
|
- if (ret < 0)
|
||||||
|
- return -1;
|
||||||
|
- total += ret;
|
||||||
|
+ if (ret >= 0)
|
||||||
|
+ total += ret;
|
||||||
|
|
||||||
|
ret = loader_load_path (token, token->blacklist, &is_dir);
|
||||||
|
- if (ret < 0)
|
||||||
|
- return -1;
|
||||||
|
- total += ret;
|
||||||
|
+ if (ret >= 0)
|
||||||
|
+ total += ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return total;
|
||||||
|
--
|
||||||
|
2.19.1
|
||||||
|
|
||||||
222
trust-Propagate-library-verbosity-to-module-through-.patch
Normal file
222
trust-Propagate-library-verbosity-to-module-through-.patch
Normal file
@ -0,0 +1,222 @@
|
|||||||
|
From 0dd62395788ae566d3adef967611bce214a04435 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Daiki Ueno <dueno@redhat.com>
|
||||||
|
Date: Sun, 23 Dec 2018 14:11:00 +0100
|
||||||
|
Subject: [PATCH 24/36] trust: Propagate library verbosity to module through
|
||||||
|
init_args
|
||||||
|
|
||||||
|
Previously, even when the -v option is used with the 'trust' command,
|
||||||
|
the messages from p11-kit-trust.so module were suppressed because the
|
||||||
|
verbosity setting is not propagated to the module.
|
||||||
|
---
|
||||||
|
common/message.c | 8 ++++----
|
||||||
|
p11-kit/modules.c | 29 +++++++++++++++++++++++------
|
||||||
|
p11-kit/p11-kit.h | 3 ++-
|
||||||
|
trust/enumerate.c | 11 +++++++++--
|
||||||
|
trust/module.c | 5 +++++
|
||||||
|
trust/p11-kit-trust.module | 4 ++++
|
||||||
|
6 files changed, 47 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/common/message.c b/common/message.c
|
||||||
|
index f9d4f57..e439def 100644
|
||||||
|
--- a/common/message.c
|
||||||
|
+++ b/common/message.c
|
||||||
|
@@ -58,7 +58,7 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
-static bool print_messages = false;
|
||||||
|
+bool p11_print_messages = false;
|
||||||
|
|
||||||
|
#ifdef HAVE_STRERROR_L
|
||||||
|
locale_t p11_message_locale = (locale_t) 0;
|
||||||
|
@@ -148,7 +148,7 @@ p11_message (const char* msg,
|
||||||
|
buffer[length] = 0;
|
||||||
|
|
||||||
|
/* If printing is not disabled, just print out */
|
||||||
|
- if (print_messages)
|
||||||
|
+ if (p11_print_messages)
|
||||||
|
fprintf (stderr, "p11-kit: %s\n", buffer);
|
||||||
|
else
|
||||||
|
p11_debug_message (P11_DEBUG_LIB, "message: %s", buffer);
|
||||||
|
@@ -158,13 +158,13 @@ p11_message (const char* msg,
|
||||||
|
void
|
||||||
|
p11_message_quiet (void)
|
||||||
|
{
|
||||||
|
- print_messages = false;
|
||||||
|
+ p11_print_messages = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
p11_message_loud (void)
|
||||||
|
{
|
||||||
|
- print_messages = true;
|
||||||
|
+ p11_print_messages = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
diff --git a/p11-kit/modules.c b/p11-kit/modules.c
|
||||||
|
index cfc4daf..0299eda 100644
|
||||||
|
--- a/p11-kit/modules.c
|
||||||
|
+++ b/p11-kit/modules.c
|
||||||
|
@@ -306,6 +306,7 @@ free_module_unlocked (void *data)
|
||||||
|
p11_dict_free (mod->config);
|
||||||
|
free (mod->name);
|
||||||
|
free (mod->filename);
|
||||||
|
+ free (mod->init_args.pReserved);
|
||||||
|
free (mod);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -550,10 +551,12 @@ is_module_enabled_unlocked (const char *name,
|
||||||
|
static CK_RV
|
||||||
|
take_config_and_load_module_inlock (char **name,
|
||||||
|
p11_dict **config,
|
||||||
|
- bool critical)
|
||||||
|
+ bool critical,
|
||||||
|
+ bool verbose)
|
||||||
|
{
|
||||||
|
const char *filename = NULL;
|
||||||
|
const char *remote = NULL;
|
||||||
|
+ char *init_reserved = NULL;
|
||||||
|
CK_RV rv = CKR_OK;
|
||||||
|
Module *mod;
|
||||||
|
|
||||||
|
@@ -591,7 +594,19 @@ take_config_and_load_module_inlock (char **name,
|
||||||
|
* 'x-init-reserved' setting in the config. This only works with specific
|
||||||
|
* PKCS#11 modules, and is non-standard use of that field.
|
||||||
|
*/
|
||||||
|
- mod->init_args.pReserved = p11_dict_get (*config, "x-init-reserved");
|
||||||
|
+ init_reserved = p11_dict_get (*config, "x-init-reserved");
|
||||||
|
+ if (init_reserved) {
|
||||||
|
+ if (verbose) {
|
||||||
|
+ init_reserved = strconcat (init_reserved, " verbose=yes", NULL);
|
||||||
|
+ } else {
|
||||||
|
+ init_reserved = strdup (init_reserved);
|
||||||
|
+ }
|
||||||
|
+ if (init_reserved == NULL) {
|
||||||
|
+ rv = CKR_HOST_MEMORY;
|
||||||
|
+ goto out;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ mod->init_args.pReserved = init_reserved;
|
||||||
|
|
||||||
|
/* Take ownership of thes evariables */
|
||||||
|
p11_dict_free (mod->config);
|
||||||
|
@@ -607,7 +622,7 @@ out:
|
||||||
|
}
|
||||||
|
|
||||||
|
static CK_RV
|
||||||
|
-load_registered_modules_unlocked (void)
|
||||||
|
+load_registered_modules_unlocked (int flags)
|
||||||
|
{
|
||||||
|
p11_dictiter iter;
|
||||||
|
p11_dict *configs;
|
||||||
|
@@ -617,6 +632,7 @@ load_registered_modules_unlocked (void)
|
||||||
|
int mode;
|
||||||
|
CK_RV rv;
|
||||||
|
bool critical;
|
||||||
|
+ bool verbose;
|
||||||
|
|
||||||
|
if (gl.config)
|
||||||
|
return CKR_OK;
|
||||||
|
@@ -652,7 +668,8 @@ load_registered_modules_unlocked (void)
|
||||||
|
|
||||||
|
/* Is this a critical module, should abort loading of others? */
|
||||||
|
critical = _p11_conf_parse_boolean (p11_dict_get (config, "critical"), false);
|
||||||
|
- rv = take_config_and_load_module_inlock (&name, &config, critical);
|
||||||
|
+ verbose = (flags & P11_KIT_MODULE_VERBOSE) != 0;
|
||||||
|
+ rv = take_config_and_load_module_inlock (&name, &config, critical, verbose);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* These variables will be cleared if ownership is transeferred
|
||||||
|
@@ -858,7 +875,7 @@ initialize_registered_inlock_reentrant (void)
|
||||||
|
if (rv != CKR_OK)
|
||||||
|
return rv;
|
||||||
|
|
||||||
|
- rv = load_registered_modules_unlocked ();
|
||||||
|
+ rv = load_registered_modules_unlocked (0);
|
||||||
|
if (rv == CKR_OK) {
|
||||||
|
p11_dict_iterate (gl.unmanaged_by_funcs, &iter);
|
||||||
|
while (rv == CKR_OK && p11_dict_next (&iter, NULL, (void **)&mod)) {
|
||||||
|
@@ -1955,7 +1972,7 @@ p11_modules_load_inlock_reentrant (int flags,
|
||||||
|
if (rv != CKR_OK)
|
||||||
|
return rv;
|
||||||
|
|
||||||
|
- rv = load_registered_modules_unlocked ();
|
||||||
|
+ rv = load_registered_modules_unlocked (flags);
|
||||||
|
if (rv != CKR_OK)
|
||||||
|
return rv;
|
||||||
|
|
||||||
|
diff --git a/p11-kit/p11-kit.h b/p11-kit/p11-kit.h
|
||||||
|
index abf618b..cc89595 100644
|
||||||
|
--- a/p11-kit/p11-kit.h
|
||||||
|
+++ b/p11-kit/p11-kit.h
|
||||||
|
@@ -57,7 +57,8 @@ enum {
|
||||||
|
P11_KIT_MODULE_UNMANAGED = 1 << 0,
|
||||||
|
P11_KIT_MODULE_CRITICAL = 1 << 1,
|
||||||
|
P11_KIT_MODULE_TRUSTED = 1 << 2,
|
||||||
|
- P11_KIT_MODULE_MASK = (1 << 3) - 1
|
||||||
|
+ P11_KIT_MODULE_VERBOSE = 1 << 3,
|
||||||
|
+ P11_KIT_MODULE_MASK = (1 << 4) - 1
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef void (* p11_kit_destroyer) (void *data);
|
||||||
|
diff --git a/trust/enumerate.c b/trust/enumerate.c
|
||||||
|
index e197765..0cef089 100644
|
||||||
|
--- a/trust/enumerate.c
|
||||||
|
+++ b/trust/enumerate.c
|
||||||
|
@@ -674,6 +674,8 @@ p11_enumerate_opt_purpose (p11_enumerate *ex,
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
+extern bool p11_print_messages;
|
||||||
|
+
|
||||||
|
bool
|
||||||
|
p11_enumerate_ready (p11_enumerate *ex,
|
||||||
|
const char *def_filter)
|
||||||
|
@@ -687,8 +689,13 @@ p11_enumerate_ready (p11_enumerate *ex,
|
||||||
|
* We only "believe" the CKA_TRUSTED and CKA_X_DISTRUSTED attributes
|
||||||
|
* we get from modules explicitly marked as containing trust-policy.
|
||||||
|
*/
|
||||||
|
- if (!ex->modules)
|
||||||
|
- ex->modules = p11_kit_modules_load_and_initialize (P11_KIT_MODULE_TRUSTED);
|
||||||
|
+ if (!ex->modules) {
|
||||||
|
+ int flags = P11_KIT_MODULE_TRUSTED;
|
||||||
|
+ if (p11_print_messages)
|
||||||
|
+ flags |= P11_KIT_MODULE_VERBOSE;
|
||||||
|
+
|
||||||
|
+ ex->modules = p11_kit_modules_load_and_initialize (flags);
|
||||||
|
+ }
|
||||||
|
if (!ex->modules)
|
||||||
|
return false;
|
||||||
|
if (ex->modules[0] == NULL)
|
||||||
|
diff --git a/trust/module.c b/trust/module.c
|
||||||
|
index 24cda87..0c16a39 100644
|
||||||
|
--- a/trust/module.c
|
||||||
|
+++ b/trust/module.c
|
||||||
|
@@ -287,6 +287,11 @@ parse_argument (char *arg,
|
||||||
|
free (gl.paths);
|
||||||
|
gl.paths = value ? strdup (value) : NULL;
|
||||||
|
|
||||||
|
+ } else if (strcmp (arg, "verbose") == 0) {
|
||||||
|
+ if (strcmp (value, "yes") == 0)
|
||||||
|
+ p11_message_loud ();
|
||||||
|
+ else if (strcmp (value, "no") == 0)
|
||||||
|
+ p11_message_quiet ();
|
||||||
|
} else {
|
||||||
|
p11_message ("unrecognized module argument: %s", arg);
|
||||||
|
}
|
||||||
|
diff --git a/trust/p11-kit-trust.module b/trust/p11-kit-trust.module
|
||||||
|
index 72122c3..a2a3306 100644
|
||||||
|
--- a/trust/p11-kit-trust.module
|
||||||
|
+++ b/trust/p11-kit-trust.module
|
||||||
|
@@ -18,3 +18,7 @@ x-trust-lookup: pkcs11:library-description=PKCS%2311%20Kit%20Trust%20Module
|
||||||
|
|
||||||
|
# Prevent this module being loaded by the proxy module
|
||||||
|
disable-in: p11-kit-proxy
|
||||||
|
+
|
||||||
|
+# This will be overwritten by appending "verbose=yes", if the trust
|
||||||
|
+# command is called with the -v option.
|
||||||
|
+x-init-reserved:
|
||||||
|
--
|
||||||
|
2.19.1
|
||||||
|
|
||||||
20
trust-extract-compat
Executable file
20
trust-extract-compat
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# This script is a placeholder designed to be replaced when this software
|
||||||
|
# has been customized for distribution. It should be symlinked linked to the
|
||||||
|
# distribution's update-ca-certificates or update-ca-trust command as
|
||||||
|
# appropriate. In the future this script will be called when the PKCS#11
|
||||||
|
# trust module is used to modify trust anchors and related data.
|
||||||
|
|
||||||
|
if [ $# -ne 0 ]; then
|
||||||
|
echo "usage: trust extract-compat" >&2
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
uid=$(id -u)
|
||||||
|
if [ "$uid" != 0 ]; then
|
||||||
|
echo "trust: running as non-root user: skip extracting compat bundles" >&2
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec /usr/bin/update-ca-trust
|
||||||
42
trust-p11_token_load-Treat-parse-error-as-failure.patch
Normal file
42
trust-p11_token_load-Treat-parse-error-as-failure.patch
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
From 4aa6ef9e82f6bb14746a47a7d56789d5e982a1f5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Daiki Ueno <dueno@redhat.com>
|
||||||
|
Date: Tue, 25 Dec 2018 07:38:26 +0100
|
||||||
|
Subject: [PATCH 26/36] trust: p11_token_load: Treat parse error as failure
|
||||||
|
|
||||||
|
Those conditions can happen when the trust file is corrupted, so it
|
||||||
|
makes more sense to treat them as a failure instead of programmer
|
||||||
|
error.
|
||||||
|
---
|
||||||
|
trust/token.c | 9 ++++++---
|
||||||
|
1 file changed, 6 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/trust/token.c b/trust/token.c
|
||||||
|
index 030c17b..b91a1d0 100644
|
||||||
|
--- a/trust/token.c
|
||||||
|
+++ b/trust/token.c
|
||||||
|
@@ -377,16 +377,19 @@ p11_token_load (p11_token *token)
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = loader_load_path (token, token->path, &is_dir);
|
||||||
|
- return_val_if_fail (ret >= 0, -1);
|
||||||
|
+ if (ret < 0)
|
||||||
|
+ return -1;
|
||||||
|
total += ret;
|
||||||
|
|
||||||
|
if (is_dir) {
|
||||||
|
ret = loader_load_path (token, token->anchors, &is_dir);
|
||||||
|
- return_val_if_fail (ret >= 0, -1);
|
||||||
|
+ if (ret < 0)
|
||||||
|
+ return -1;
|
||||||
|
total += ret;
|
||||||
|
|
||||||
|
ret = loader_load_path (token, token->blacklist, &is_dir);
|
||||||
|
- return_val_if_fail (ret >= 0, -1);
|
||||||
|
+ if (ret < 0)
|
||||||
|
+ return -1;
|
||||||
|
total += ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.19.1
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user