diff options
-rw-r--r-- | src/lib/gssapi/krb5/util_crypt.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/src/lib/gssapi/krb5/util_crypt.c b/src/lib/gssapi/krb5/util_crypt.c index 80954af..ddb0af8 100644 --- a/src/lib/gssapi/krb5/util_crypt.c +++ b/src/lib/gssapi/krb5/util_crypt.c @@ -649,16 +649,13 @@ kg_fixup_padding_iov(OM_uint32 *minor_status, gss_iov_buffer_desc *iov, data = kg_locate_iov(iov, iov_count, GSS_IOV_BUFFER_TYPE_DATA); padding = kg_locate_iov(iov, iov_count, GSS_IOV_BUFFER_TYPE_PADDING); - if (data == NULL) { + /* Do nothing if padding is absent or empty, to allow unwrapping of WinRM + * unpadded RC4 tokens using an explicit IOV array. */ + if (data == NULL || padding == NULL || padding->buffer.length == 0) { *minor_status = 0; return GSS_S_COMPLETE; } - if (padding == NULL || padding->buffer.length == 0) { - *minor_status = EINVAL; - return GSS_S_FAILURE; - } - p = (unsigned char *)padding->buffer.value; padlength = p[padding->buffer.length - 1]; |