Skip to content

Commit 7df01d4

Browse files
committed
Merge branch '3.3-wlad-schannel' into 3.3
2 parents 95d5623 + 1e8e1f4 commit 7df01d4

File tree

5 files changed

+360
-131
lines changed

5 files changed

+360
-131
lines changed

libmariadb/secure/ma_schannel.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,13 @@ SECURITY_STATUS ma_schannel_handshake_loop(MARIADB_PVIO *pvio, my_bool InitialRe
100100
return SEC_E_INSUFFICIENT_MEMORY;
101101

102102
cbIoBuffer = 0;
103+
104+
if (!InitialRead && pExtraData->cbBuffer)
105+
{
106+
memcpy(IoBuffer, pExtraData->pvBuffer,pExtraData->cbBuffer);
107+
cbIoBuffer= pExtraData->cbBuffer;
108+
}
109+
103110
fDoRead = InitialRead;
104111

105112
/* handshake loop: We will leave if handshake is finished
@@ -445,7 +452,7 @@ SECURITY_STATUS ma_schannel_read_decrypt(MARIADB_PVIO *pvio,
445452
} while (sRet == SEC_E_INCOMPLETE_MESSAGE); /* Continue reading until full message arrives */
446453

447454

448-
if (sRet != SEC_E_OK)
455+
if (sRet != SEC_E_OK && sRet != SEC_I_RENEGOTIATE)
449456
{
450457
ma_schannel_set_sec_error(pvio, sRet);
451458
return sRet;
@@ -462,20 +469,21 @@ SECURITY_STATUS ma_schannel_read_decrypt(MARIADB_PVIO *pvio,
462469
}
463470

464471

465-
if (sctx->dataBuf.cbBuffer)
472+
if (sctx->dataBuf.cbBuffer || sRet == SEC_I_RENEGOTIATE)
466473
{
467474
assert(sctx->dataBuf.pvBuffer);
468475
/*
469476
Copy at most ReadBufferSize bytes to output.
470477
Store the rest (if any) to be processed next time.
471478
*/
472479
nbytes = MIN(sctx->dataBuf.cbBuffer, ReadBufferSize);
473-
memcpy((char *)ReadBuffer, sctx->dataBuf.pvBuffer, nbytes);
480+
if (nbytes)
481+
memcpy((char *)ReadBuffer, sctx->dataBuf.pvBuffer, nbytes);
474482
sctx->dataBuf.cbBuffer -= (unsigned long)nbytes;
475483
sctx->dataBuf.pvBuffer = (char *)sctx->dataBuf.pvBuffer + nbytes;
476484

477485
*DecryptLength = (DWORD)nbytes;
478-
return SEC_E_OK;
486+
return sRet;
479487
}
480488
// No data buffer, loop
481489
}

0 commit comments

Comments
 (0)