Merge pull request #4504 from mfleisz/cssp_warnings

cssp: Fix warnings (#4503)
This commit is contained in:
akallabeth 2018-03-21 13:36:46 +01:00 committed by GitHub
commit f11ff9a639
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -115,8 +115,26 @@ static void nla_identity_free(SEC_WINNT_AUTH_IDENTITY* identity);
#define ber_sizeof_sequence_octet_string(length) ber_sizeof_contextual_tag(ber_sizeof_octet_string(length)) + ber_sizeof_octet_string(length) #define ber_sizeof_sequence_octet_string(length) ber_sizeof_contextual_tag(ber_sizeof_octet_string(length)) + ber_sizeof_octet_string(length)
#define ber_write_sequence_octet_string(stream, context, value, length) ber_write_contextual_tag(stream, context, ber_sizeof_octet_string(length), TRUE) + ber_write_octet_string(stream, value, length) #define ber_write_sequence_octet_string(stream, context, value, length) ber_write_contextual_tag(stream, context, ber_sizeof_octet_string(length), TRUE) + ber_write_octet_string(stream, value, length)
static const CHAR ClientServerHashMagic[] = "CredSSP Client-To-Server Binding Hash\0"; /* CredSSP Client-To-Server Binding Hash\0 */
static const CHAR ServerClientHashMagic[] = "CredSSP Server-To-Client Binding Hash\0"; static const BYTE ClientServerHashMagic[] =
{
0x43, 0x72, 0x65, 0x64, 0x53, 0x53, 0x50, 0x20,
0x43, 0x6C, 0x69, 0x65, 0x6E, 0x74, 0x2D, 0x54,
0x6F, 0x2D, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
0x20, 0x42, 0x69, 0x6E, 0x64, 0x69, 0x6E, 0x67,
0x20, 0x48, 0x61, 0x73, 0x68, 0x00
};
/* CredSSP Server-To-Client Binding Hash\0 */
static const BYTE ServerClientHashMagic[] =
{
0x43, 0x72, 0x65, 0x64, 0x53, 0x53, 0x50, 0x20,
0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2D, 0x54,
0x6F, 0x2D, 0x43, 0x6C, 0x69, 0x65, 0x6E, 0x74,
0x20, 0x42, 0x69, 0x6E, 0x64, 0x69, 0x6E, 0x67,
0x20, 0x48, 0x61, 0x73, 0x68, 0x00
};
static const UINT32 NonceLength = 32; static const UINT32 NonceLength = 32;
void nla_identity_free(SEC_WINNT_AUTH_IDENTITY* identity) void nla_identity_free(SEC_WINNT_AUTH_IDENTITY* identity)
@ -154,7 +172,7 @@ void nla_identity_free(SEC_WINNT_AUTH_IDENTITY* identity)
static int nla_client_init(rdpNla* nla) static int nla_client_init(rdpNla* nla)
{ {
char* spn; char* spn;
int length; size_t length;
rdpTls* tls = NULL; rdpTls* tls = NULL;
BOOL PromptPassword = FALSE; BOOL PromptPassword = FALSE;
freerdp* instance = nla->instance; freerdp* instance = nla->instance;
@ -1045,7 +1063,7 @@ SECURITY_STATUS nla_encrypt_public_key_echo(rdpNla* nla)
SecBuffer Buffers[2] = { { 0 } }; SecBuffer Buffers[2] = { { 0 } };
SecBufferDesc Message; SecBufferDesc Message;
SECURITY_STATUS status; SECURITY_STATUS status;
size_t public_key_length; ULONG public_key_length;
const BOOL krb = (_tcsncmp(nla->packageName, KERBEROS_SSP_NAME, ARRAYSIZE(KERBEROS_SSP_NAME)) == 0); const BOOL krb = (_tcsncmp(nla->packageName, KERBEROS_SSP_NAME, ARRAYSIZE(KERBEROS_SSP_NAME)) == 0);
const BOOL nego = (_tcsncmp(nla->packageName, NEGO_SSP_NAME, ARRAYSIZE(NEGO_SSP_NAME)) == 0); const BOOL nego = (_tcsncmp(nla->packageName, NEGO_SSP_NAME, ARRAYSIZE(NEGO_SSP_NAME)) == 0);
const BOOL ntlm = (_tcsncmp(nla->packageName, NTLM_SSP_NAME, ARRAYSIZE(NTLM_SSP_NAME)) == 0); const BOOL ntlm = (_tcsncmp(nla->packageName, NTLM_SSP_NAME, ARRAYSIZE(NTLM_SSP_NAME)) == 0);
@ -1103,7 +1121,8 @@ SECURITY_STATUS nla_encrypt_public_key_hash(rdpNla* nla)
const ULONG auth_data_length = krb ? WINPR_SHA256_DIGEST_LENGTH : const ULONG auth_data_length = krb ? WINPR_SHA256_DIGEST_LENGTH :
(nla->ContextSizes.cbSecurityTrailer (nla->ContextSizes.cbSecurityTrailer
+ WINPR_SHA256_DIGEST_LENGTH); + WINPR_SHA256_DIGEST_LENGTH);
const CHAR* hashMagic = nla->server ? ServerClientHashMagic : ClientServerHashMagic; const BYTE* hashMagic = nla->server ? ServerClientHashMagic : ClientServerHashMagic;
const size_t hashSize = nla->server ? sizeof(ServerClientHashMagic) : sizeof(ClientServerHashMagic);
if (!sspi_SecBufferAlloc(&nla->ClientNonce, NonceLength)) if (!sspi_SecBufferAlloc(&nla->ClientNonce, NonceLength))
{ {
@ -1129,7 +1148,7 @@ SECURITY_STATUS nla_encrypt_public_key_hash(rdpNla* nla)
goto out; goto out;
/* include trailing \0 from hashMagic */ /* include trailing \0 from hashMagic */
if (!winpr_Digest_Update(sha256, hashMagic, strlen(hashMagic) + 1)) if (!winpr_Digest_Update(sha256, hashMagic, hashSize))
goto out; goto out;
if (!winpr_Digest_Update(sha256, nla->ClientNonce.pvBuffer, nla->ClientNonce.cbBuffer)) if (!winpr_Digest_Update(sha256, nla->ClientNonce.pvBuffer, nla->ClientNonce.cbBuffer))
@ -1182,12 +1201,12 @@ out:
SECURITY_STATUS nla_decrypt_public_key_echo(rdpNla* nla) SECURITY_STATUS nla_decrypt_public_key_echo(rdpNla* nla)
{ {
size_t length; ULONG length;
BYTE* buffer = NULL; BYTE* buffer = NULL;
ULONG pfQOP = 0; ULONG pfQOP = 0;
BYTE* public_key1 = NULL; BYTE* public_key1 = NULL;
BYTE* public_key2 = NULL; BYTE* public_key2 = NULL;
int public_key_length = 0; ULONG public_key_length = 0;
int signature_length; int signature_length;
SecBuffer Buffers[2] = { { 0 } }; SecBuffer Buffers[2] = { { 0 } };
SecBufferDesc Message; SecBufferDesc Message;
@ -1210,7 +1229,7 @@ SECURITY_STATUS nla_decrypt_public_key_echo(rdpNla* nla)
if ((nla->PublicKey.cbBuffer + nla->ContextSizes.cbSecurityTrailer) != nla->pubKeyAuth.cbBuffer) if ((nla->PublicKey.cbBuffer + nla->ContextSizes.cbSecurityTrailer) != nla->pubKeyAuth.cbBuffer)
{ {
WLog_ERR(TAG, "unexpected pubKeyAuth buffer size: %"PRIu32"", (int) nla->pubKeyAuth.cbBuffer); WLog_ERR(TAG, "unexpected pubKeyAuth buffer size: %"PRIu32"", nla->pubKeyAuth.cbBuffer);
goto fail; goto fail;
} }
@ -1303,7 +1322,8 @@ SECURITY_STATUS nla_decrypt_public_key_hash(rdpNla* nla)
BYTE serverClientHash[WINPR_SHA256_DIGEST_LENGTH]; BYTE serverClientHash[WINPR_SHA256_DIGEST_LENGTH];
SECURITY_STATUS status = SEC_E_INVALID_TOKEN; SECURITY_STATUS status = SEC_E_INVALID_TOKEN;
const BOOL krb = (_tcsncmp(nla->packageName, KERBEROS_SSP_NAME, ARRAYSIZE(KERBEROS_SSP_NAME)) == 0); const BOOL krb = (_tcsncmp(nla->packageName, KERBEROS_SSP_NAME, ARRAYSIZE(KERBEROS_SSP_NAME)) == 0);
const CHAR* hashMagic = nla->server ? ClientServerHashMagic : ServerClientHashMagic; const BYTE* hashMagic = nla->server ? ClientServerHashMagic : ServerClientHashMagic;
const size_t hashSize = nla->server ? sizeof(ClientServerHashMagic) : sizeof(ServerClientHashMagic);
signature_length = nla->pubKeyAuth.cbBuffer - WINPR_SHA256_DIGEST_LENGTH; signature_length = nla->pubKeyAuth.cbBuffer - WINPR_SHA256_DIGEST_LENGTH;
if ((signature_length < 0) || (signature_length > (int)nla->ContextSizes.cbSecurityTrailer)) if ((signature_length < 0) || (signature_length > (int)nla->ContextSizes.cbSecurityTrailer))
@ -1368,7 +1388,7 @@ SECURITY_STATUS nla_decrypt_public_key_hash(rdpNla* nla)
goto fail; goto fail;
/* include trailing \0 from hashMagic */ /* include trailing \0 from hashMagic */
if (!winpr_Digest_Update(sha256, hashMagic, strlen(hashMagic) + 1)) if (!winpr_Digest_Update(sha256, hashMagic, hashSize))
goto fail; goto fail;
if (!winpr_Digest_Update(sha256, nla->ClientNonce.pvBuffer, nla->ClientNonce.cbBuffer)) if (!winpr_Digest_Update(sha256, nla->ClientNonce.pvBuffer, nla->ClientNonce.cbBuffer))
@ -1513,7 +1533,7 @@ BOOL nla_read_ts_password_creds(rdpNla* nla, wStream* s)
return TRUE; return TRUE;
} }
static int nla_write_ts_password_creds(rdpNla* nla, wStream* s) static size_t nla_write_ts_password_creds(rdpNla* nla, wStream* s)
{ {
size_t size = 0; size_t size = 0;
size_t innerSize = nla_sizeof_ts_password_creds(nla); size_t innerSize = nla_sizeof_ts_password_creds(nla);
@ -1570,11 +1590,11 @@ static BOOL nla_read_ts_credentials(rdpNla* nla, PSecBuffer ts_credentials)
return ret; return ret;
} }
static int nla_write_ts_credentials(rdpNla* nla, wStream* s) static size_t nla_write_ts_credentials(rdpNla* nla, wStream* s)
{ {
int size = 0; size_t size = 0;
int passwordSize; size_t passwordSize;
int innerSize = nla_sizeof_ts_credentials(nla); size_t innerSize = nla_sizeof_ts_credentials(nla);
/* TSCredentials (SEQUENCE) */ /* TSCredentials (SEQUENCE) */
size += ber_write_sequence_tag(s, innerSize); size += ber_write_sequence_tag(s, innerSize);
/* [0] credType (INTEGER) */ /* [0] credType (INTEGER) */
@ -1596,7 +1616,7 @@ static int nla_write_ts_credentials(rdpNla* nla, wStream* s)
static BOOL nla_encode_ts_credentials(rdpNla* nla) static BOOL nla_encode_ts_credentials(rdpNla* nla)
{ {
wStream* s; wStream* s;
int length; size_t length;
int DomainLength = 0; int DomainLength = 0;
int UserLength = 0; int UserLength = 0;
int PasswordLength = 0; int PasswordLength = 0;
@ -1863,9 +1883,9 @@ BOOL nla_send(rdpNla* nla)
/* [1] negoTokens (NegoData) */ /* [1] negoTokens (NegoData) */
if (nego_tokens_length > 0) if (nego_tokens_length > 0)
{ {
int length = ber_write_contextual_tag(s, 1, length = ber_write_contextual_tag(s, 1,
ber_sizeof_sequence(ber_sizeof_sequence(ber_sizeof_sequence_octet_string(nla->negoToken.cbBuffer))), ber_sizeof_sequence(ber_sizeof_sequence(ber_sizeof_sequence_octet_string(nla->negoToken.cbBuffer))),
TRUE); /* NegoData */ TRUE); /* NegoData */
length += ber_write_sequence_tag(s, length += ber_write_sequence_tag(s,
ber_sizeof_sequence(ber_sizeof_sequence_octet_string( ber_sizeof_sequence(ber_sizeof_sequence_octet_string(
nla->negoToken.cbBuffer))); /* SEQUENCE OF NegoDataItem */ nla->negoToken.cbBuffer))); /* SEQUENCE OF NegoDataItem */