Finished merging missing changes from pull request #1257 (https://github.com/FreeRDP/FreeRDP/pull/1257 - commit 0dc22d5). Correctly report the length of ts_password_creds.

This commit is contained in:
Simon Engledew
2013-05-22 14:20:26 +01:00
parent 6d31c503b5
commit bceec08367
2 changed files with 14 additions and 22 deletions

View File

@@ -788,22 +788,11 @@ SECURITY_STATUS credssp_decrypt_public_key_echo(rdpCredssp* credssp)
int credssp_sizeof_ts_password_creds(rdpCredssp* credssp)
{
int length;
int ts_password_creds_length = 0;
int length = 0;
length = ber_sizeof_octet_string(credssp->identity.DomainLength * 2);
length += ber_sizeof_contextual_tag(length);
ts_password_creds_length += length;
length = ber_sizeof_octet_string(credssp->identity.UserLength * 2);
length += ber_sizeof_contextual_tag(length);
ts_password_creds_length += length;
length = ber_sizeof_octet_string(credssp->identity.PasswordLength * 2);
length += ber_sizeof_contextual_tag(length);
ts_password_creds_length += length;
length = ber_sizeof_sequence(ts_password_creds_length);
length += ber_sizeof_sequence_octet_string(credssp->identity.DomainLength * 2);
length += ber_sizeof_sequence_octet_string(credssp->identity.UserLength * 2);
length += ber_sizeof_sequence_octet_string(credssp->identity.PasswordLength * 2);
return length;
}
@@ -850,11 +839,6 @@ int credssp_write_ts_password_creds(rdpCredssp* credssp, wStream* s)
int size = 0;
int innerSize = credssp_sizeof_ts_password_creds(credssp);
if (innerSize > Stream_GetRemainingLength(s))
{
printf("\033[91m[ ERROR ] Not enough space allocated for ts_password_creds\033[0m");
}
/* TSPasswordCreds (SEQUENCE) */
size += ber_write_sequence_tag(s, innerSize);
@@ -1102,6 +1086,8 @@ void credssp_send(rdpCredssp* credssp)
length -= ber_write_sequence_tag(s, ber_sizeof_sequence(ber_sizeof_sequence_octet_string(credssp->negoToken.cbBuffer))); /* SEQUENCE OF NegoDataItem */
length -= ber_write_sequence_tag(s, ber_sizeof_sequence_octet_string(credssp->negoToken.cbBuffer)); /* NegoDataItem */
length -= ber_write_sequence_octet_string(s, 0, (BYTE*) credssp->negoToken.pvBuffer, credssp->negoToken.cbBuffer); /* OCTET STRING */
// assert length == 0
}
/* [2] authInfo (OCTET STRING) */
@@ -1109,6 +1095,8 @@ void credssp_send(rdpCredssp* credssp)
{
length = auth_info_length;
length -= ber_write_sequence_octet_string(s, 2, credssp->authInfo.pvBuffer, credssp->authInfo.cbBuffer);
// assert length == 0
}
/* [3] pubKeyAuth (OCTET STRING) */
@@ -1116,6 +1104,8 @@ void credssp_send(rdpCredssp* credssp)
{
length = pub_key_auth_length;
length -= ber_write_sequence_octet_string(s, 3, credssp->pubKeyAuth.pvBuffer, credssp->pubKeyAuth.cbBuffer);
// assert length == 0
}
transport_write(credssp->transport, s);

View File

@@ -419,22 +419,23 @@ BOOL ber_read_integer(wStream* s, UINT32* value)
int ber_write_integer(wStream* s, UINT32 value)
{
ber_write_universal_tag(s, BER_TAG_INTEGER, FALSE);
if (value < 0x80)
{
ber_write_universal_tag(s, BER_TAG_INTEGER, FALSE);
ber_write_length(s, 1);
Stream_Write_UINT8(s, value);
return 3;
}
else if (value < 0x8000)
{
ber_write_universal_tag(s, BER_TAG_INTEGER, FALSE);
ber_write_length(s, 2);
Stream_Write_UINT16_BE(s, value);
return 4;
}
else if (value < 0x800000)
{
ber_write_universal_tag(s, BER_TAG_INTEGER, FALSE);
ber_write_length(s, 3);
Stream_Write_UINT8(s, (value >> 16));
Stream_Write_UINT16_BE(s, (value & 0xFFFF));
@@ -442,6 +443,7 @@ int ber_write_integer(wStream* s, UINT32 value)
}
else if (value < 0x80000000)
{
ber_write_universal_tag(s, BER_TAG_INTEGER, FALSE);
ber_write_length(s, 4);
Stream_Write_UINT32_BE(s, value);
return 6;