Fix hex conversion of PKINIT certid strings
This commit is contained in:
parent
4b5cd8c1f8
commit
5f3f6ef19b
92
Fix-hex-conversion-of-PKINIT-certid-strings.patch
Normal file
92
Fix-hex-conversion-of-PKINIT-certid-strings.patch
Normal file
@ -0,0 +1,92 @@
|
||||
From 46fada3b8a7ad21adf6831cf86c38a822a38748e Mon Sep 17 00:00:00 2001
|
||||
From: Sumit Bose <sbose@redhat.com>
|
||||
Date: Fri, 26 Jan 2018 11:47:50 -0500
|
||||
Subject: [PATCH] Fix hex conversion of PKINIT certid strings
|
||||
|
||||
When parsing a PKCS11 token specification, correctly convert from hex
|
||||
to binary instead of using OpenSSL bignum functions (which would strip
|
||||
leading zeros).
|
||||
|
||||
[ghudson@mit.edu: made hex_string_to_bin() a bit less verbose; wrote
|
||||
commit message]
|
||||
|
||||
ticket: 8636
|
||||
(cherry picked from commit 63e8b8142fd7b3931a7bf2d6448978ca536bafc0)
|
||||
---
|
||||
src/plugins/preauth/pkinit/pkinit_crypto_openssl.c | 55 +++++++++++++++++-----
|
||||
1 file changed, 44 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/src/plugins/preauth/pkinit/pkinit_crypto_openssl.c b/src/plugins/preauth/pkinit/pkinit_crypto_openssl.c
|
||||
index ac107c2c1..4f21f90d2 100644
|
||||
--- a/src/plugins/preauth/pkinit/pkinit_crypto_openssl.c
|
||||
+++ b/src/plugins/preauth/pkinit/pkinit_crypto_openssl.c
|
||||
@@ -4623,6 +4623,43 @@ reassemble_pkcs11_name(pkinit_identity_opts *idopts)
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static int
|
||||
+hex_string_to_bin(const char *str, int *bin_len_out, CK_BYTE **bin_out)
|
||||
+{
|
||||
+ size_t str_len, i;
|
||||
+ CK_BYTE *bin;
|
||||
+ char *endptr, tmp[3] = { '\0', '\0', '\0' };
|
||||
+ long val;
|
||||
+
|
||||
+ *bin_len_out = 0;
|
||||
+ *bin_out = NULL;
|
||||
+
|
||||
+ str_len = strlen(str);
|
||||
+ if (str_len % 2 != 0)
|
||||
+ return EINVAL;
|
||||
+ bin = malloc(str_len / 2);
|
||||
+ if (bin == NULL)
|
||||
+ return ENOMEM;
|
||||
+
|
||||
+ errno = 0;
|
||||
+ for (i = 0; i < str_len / 2; i++) {
|
||||
+ tmp[0] = str[i * 2];
|
||||
+ tmp[1] = str[i * 2 + 1];
|
||||
+
|
||||
+ val = strtol(tmp, &endptr, 16);
|
||||
+ if (val < 0 || val > 255 || errno != 0 || endptr != &tmp[2]) {
|
||||
+ free(bin);
|
||||
+ return EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ bin[i] = (CK_BYTE)val;
|
||||
+ }
|
||||
+
|
||||
+ *bin_len_out = str_len / 2;
|
||||
+ *bin_out = bin;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static krb5_error_code
|
||||
pkinit_get_certs_pkcs11(krb5_context context,
|
||||
pkinit_plg_crypto_context plg_cryptoctx,
|
||||
@@ -4665,18 +4702,14 @@ pkinit_get_certs_pkcs11(krb5_context context,
|
||||
}
|
||||
/* Convert the ascii cert_id string into a binary blob */
|
||||
if (idopts->cert_id_string != NULL) {
|
||||
- BIGNUM *bn = NULL;
|
||||
- BN_hex2bn(&bn, idopts->cert_id_string);
|
||||
- if (bn == NULL)
|
||||
- return ENOMEM;
|
||||
- id_cryptoctx->cert_id_len = BN_num_bytes(bn);
|
||||
- id_cryptoctx->cert_id = malloc((size_t) id_cryptoctx->cert_id_len);
|
||||
- if (id_cryptoctx->cert_id == NULL) {
|
||||
- BN_free(bn);
|
||||
- return ENOMEM;
|
||||
+ r = hex_string_to_bin(idopts->cert_id_string,
|
||||
+ &id_cryptoctx->cert_id_len,
|
||||
+ &id_cryptoctx->cert_id);
|
||||
+ if (r != 0) {
|
||||
+ pkiDebug("Failed to convert certid string [%s]\n",
|
||||
+ idopts->cert_id_string);
|
||||
+ return r;
|
||||
}
|
||||
- BN_bn2bin(bn, id_cryptoctx->cert_id);
|
||||
- BN_free(bn);
|
||||
}
|
||||
id_cryptoctx->slotid = idopts->slotid;
|
||||
id_cryptoctx->pkcs11_method = 1;
|
@ -18,7 +18,7 @@ Summary: The Kerberos network authentication system
|
||||
Name: krb5
|
||||
Version: 1.16
|
||||
# for prerelease, should be e.g., 0.% {prerelease}.1% { ?dist } (without spaces)
|
||||
Release: 8%{?dist}
|
||||
Release: 9%{?dist}
|
||||
|
||||
# lookaside-cached sources; two downloads and a build artifact
|
||||
Source0: https://web.mit.edu/kerberos/dist/krb5/1.16/krb5-%{version}%{prerelease}.tar.gz
|
||||
@ -63,6 +63,7 @@ Patch36: krb5-1.11-kpasswdtest.patch
|
||||
Patch37: Process-included-directories-in-alphabetical-order.patch
|
||||
Patch38: Fix-flaws-in-LDAP-DN-checking.patch
|
||||
Patch39: Fix-capaths-.-values-on-client.patch
|
||||
Patch40: Fix-hex-conversion-of-PKINIT-certid-strings.patch
|
||||
|
||||
License: MIT
|
||||
URL: http://web.mit.edu/kerberos/www/
|
||||
@ -712,6 +713,9 @@ exit 0
|
||||
%{_libdir}/libkadm5srv_mit.so.*
|
||||
|
||||
%changelog
|
||||
* Tue Mar 13 2018 Robbie Harwood <rharwood@redhat.com> - 1.16-9
|
||||
- Fix hex conversion of PKINIT certid strings
|
||||
|
||||
* Wed Mar 07 2018 Robbie Harwood <rharwood@redhat.com> - 1.16-8
|
||||
- Fix capaths "." values on client
|
||||
- Resolves: 1551099
|
||||
|
Loading…
Reference in New Issue
Block a user