[PATCH 1/2] Fill header and trailer buffers in schan_DecryptMessage
Mikko Rasa
tdb at tdb.fi
Tue Aug 31 10:14:55 CDT 2010
---
dlls/secur32/schannel.c | 27 +++++++++++++++++++++++++--
1 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/dlls/secur32/schannel.c b/dlls/secur32/schannel.c
index 70458fa..0e8b9e2 100644
--- a/dlls/secur32/schannel.c
+++ b/dlls/secur32/schannel.c
@@ -1187,6 +1187,19 @@ static int schan_validate_decrypt_buffer_desc(PSecBufferDesc message)
return data_idx;
}
+static void schan_decrypt_fill_buffer(PSecBufferDesc message, ULONG buffer_type, void *data, ULONG size)
+{
+ int idx;
+ SecBuffer *buffer;
+
+ idx = schan_find_sec_buffer_idx(message, 0, SECBUFFER_EMPTY);
+ buffer = &message->pBuffers[idx];
+
+ buffer->BufferType = buffer_type;
+ buffer->pvBuffer = data;
+ buffer->cbBuffer = size;
+}
+
static SECURITY_STATUS SEC_ENTRY schan_DecryptMessage(PCtxtHandle context_handle,
PSecBufferDesc message, ULONG message_seq_no, PULONG quality)
{
@@ -1198,6 +1211,7 @@ static SECURITY_STATUS SEC_ENTRY schan_DecryptMessage(PCtxtHandle context_handle
ssize_t received = 0;
ssize_t ret;
int idx;
+ char *buf_ptr;
TRACE("context_handle %p, message %p, message_seq_no %d, quality %p\n",
context_handle, message, message_seq_no, quality);
@@ -1252,10 +1266,19 @@ static SECURITY_STATUS SEC_ENTRY schan_DecryptMessage(PCtxtHandle context_handle
TRACE("Received %zd bytes\n", received);
- memcpy(buffer->pvBuffer, data, received);
- buffer->cbBuffer = received;
+ buf_ptr = buffer->pvBuffer;
+ memcpy(buf_ptr + 5, data, received);
HeapFree(GetProcessHeap(), 0, data);
+ schan_decrypt_fill_buffer(message, SECBUFFER_DATA,
+ buf_ptr + 5, received);
+
+ schan_decrypt_fill_buffer(message, SECBUFFER_STREAM_TRAILER,
+ buf_ptr + 5 + received, buffer->cbBuffer - 5 - received);
+
+ buffer->BufferType = SECBUFFER_STREAM_HEADER;
+ buffer->cbBuffer = 5;
+
return SEC_E_OK;
}
--
1.7.1
More information about the wine-patches
mailing list