From 100c440153db52e934520dc641a3f9e438c33bb6 Mon Sep 17 00:00:00 2001 From: Love Hornquist Astrand Date: Thu, 1 Oct 2009 10:38:30 -0700 Subject: [PATCH] Handle windows windows LH with interesting content info packets (broken) --- lib/krb5/pkinit.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/lib/krb5/pkinit.c b/lib/krb5/pkinit.c index cac80f930..f6457aa5c 100644 --- a/lib/krb5/pkinit.c +++ b/lib/krb5/pkinit.c @@ -1174,8 +1174,26 @@ pk_rd_pa_reply_enckey(krb5_context context, heim_octet_string out; ret = hx509_cms_unwrap_ContentInfo(&content, &type, &out, NULL); - if (ret) - goto out; + if (ret) { + /* windows LH with interesting CMS packets */ + size_t ph = 1 + der_length_len(content.length); + unsigned char *ptr = malloc(content.length + ph); + size_t l; + + memcpy(ptr + ph, content.data, content.length); + + ret = der_put_length_and_tag (ptr + ph - 1, ph, content.length, + ASN1_C_UNIV, CONS, UT_Sequence, &l); + if (ret) + return ret; + free(content.data); + content.data = ptr; + content.length += ph; + + ret = hx509_cms_unwrap_ContentInfo(&content, &type, &out, NULL); + if (ret) + goto out; + } if (der_heim_oid_cmp(&type, &asn1_oid_id_pkcs7_signedData)) { ret = EINVAL; /* XXX */ krb5_set_error_message(context, ret,