From e195953496c06e572d6493af3afe7836ac67f27b Mon Sep 17 00:00:00 2001 From: Henrik Andersson Date: Fri, 29 Sep 2017 15:16:43 +0200 Subject: [PATCH] Refactor of writing utf16 strings to packets. This remove the use of deprecated rdp_out_unistr() and some minor cleanups. --- cssp.c | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/cssp.c b/cssp.c index 5183010..db92733 100644 --- a/cssp.c +++ b/cssp.c @@ -225,10 +225,11 @@ cssp_encode_tspasswordcreds(char *username, char *password, char *domain) memset(&tmp, 0, sizeof(tmp)); memset(&message, 0, sizeof(message)); + s_realloc(&tmp, 512 * 4); + // domainName [0] - s_realloc(&tmp, 4 + strlen(domain) * sizeof(uint16)); s_reset(&tmp); - rdp_out_unistr(&tmp, domain, strlen(domain) * sizeof(uint16)); + out_utf16s(&tmp, domain); s_mark_end(&tmp); h2 = ber_wrap_hdr_data(BER_TAG_OCTET_STRING, &tmp); h1 = ber_wrap_hdr_data(BER_TAG_CTXT_SPECIFIC | BER_TAG_CONSTRUCTED | 0, h2); @@ -239,9 +240,8 @@ cssp_encode_tspasswordcreds(char *username, char *password, char *domain) s_free(h1); // userName [1] - s_realloc(&tmp, 4 + strlen(username) * sizeof(uint16)); s_reset(&tmp); - rdp_out_unistr(&tmp, username, strlen(username) * sizeof(uint16)); + out_utf16s(&tmp, username); s_mark_end(&tmp); h2 = ber_wrap_hdr_data(BER_TAG_OCTET_STRING, &tmp); @@ -253,9 +253,8 @@ cssp_encode_tspasswordcreds(char *username, char *password, char *domain) s_free(h1); // password [2] - s_realloc(&tmp, 4 + strlen(password) * sizeof(uint16)); s_reset(&tmp); - rdp_out_unistr(&tmp, password, strlen(password) * sizeof(uint16)); + out_utf16s(&tmp, password); s_mark_end(&tmp); h2 = ber_wrap_hdr_data(BER_TAG_OCTET_STRING, &tmp); h1 = ber_wrap_hdr_data(BER_TAG_CTXT_SPECIFIC | BER_TAG_CONSTRUCTED | 2, h2); @@ -287,8 +286,9 @@ cssp_encode_tscspdatadetail(unsigned char keyspec, char *card, char *reader, cha struct stream tmp = { 0 }; struct stream message = { 0 }; + s_realloc(&tmp, 512 * 4); + // keySpec [0] - s_realloc(&tmp, sizeof(uint8)); s_reset(&tmp); out_uint8(&tmp, keyspec); s_mark_end(&tmp); @@ -303,9 +303,8 @@ cssp_encode_tscspdatadetail(unsigned char keyspec, char *card, char *reader, cha // cardName [1] if (card) { - s_realloc(&tmp, 4 + strlen(card) * sizeof(uint16)); s_reset(&tmp); - rdp_out_unistr(&tmp, card, strlen(card) * sizeof(uint16)); + out_utf16s(&tmp, card); s_mark_end(&tmp); h2 = ber_wrap_hdr_data(BER_TAG_OCTET_STRING, &tmp); h1 = ber_wrap_hdr_data(BER_TAG_CTXT_SPECIFIC | BER_TAG_CONSTRUCTED | 1, h2); @@ -319,9 +318,8 @@ cssp_encode_tscspdatadetail(unsigned char keyspec, char *card, char *reader, cha // readerName [2] if (reader) { - s_realloc(&tmp, 4 + strlen(reader) * sizeof(uint16)); s_reset(&tmp); - rdp_out_unistr(&tmp, reader, strlen(reader) * sizeof(uint16)); + out_utf16s(&tmp, reader); s_mark_end(&tmp); h2 = ber_wrap_hdr_data(BER_TAG_OCTET_STRING, &tmp); h1 = ber_wrap_hdr_data(BER_TAG_CTXT_SPECIFIC | BER_TAG_CONSTRUCTED | 2, h2); @@ -335,9 +333,8 @@ cssp_encode_tscspdatadetail(unsigned char keyspec, char *card, char *reader, cha // containerName [3] if (container) { - s_realloc(&tmp, 4 + strlen(container) * sizeof(uint16)); s_reset(&tmp); - rdp_out_unistr(&tmp, container, strlen(container) * sizeof(uint16)); + out_utf16s(&tmp, container); s_mark_end(&tmp); h2 = ber_wrap_hdr_data(BER_TAG_OCTET_STRING, &tmp); h1 = ber_wrap_hdr_data(BER_TAG_CTXT_SPECIFIC | BER_TAG_CONSTRUCTED | 3, h2); @@ -351,9 +348,8 @@ cssp_encode_tscspdatadetail(unsigned char keyspec, char *card, char *reader, cha // cspName [4] if (csp) { - s_realloc(&tmp, 4 + strlen(csp) * sizeof(uint16)); s_reset(&tmp); - rdp_out_unistr(&tmp, csp, strlen(csp) * sizeof(uint16)); + out_utf16s(&tmp, csp); s_mark_end(&tmp); h2 = ber_wrap_hdr_data(BER_TAG_OCTET_STRING, &tmp); h1 = ber_wrap_hdr_data(BER_TAG_CTXT_SPECIFIC | BER_TAG_CONSTRUCTED | 4, h2); @@ -382,10 +378,11 @@ cssp_encode_tssmartcardcreds(char *username, char *password, char *domain) struct stream tmp = { 0 }; struct stream message = { 0 }; + s_realloc(&tmp, 512 * 4); + // pin [0] - s_realloc(&tmp, strlen(password) * sizeof(uint16)); s_reset(&tmp); - rdp_out_unistr(&tmp, password, strlen(password) * sizeof(uint16)); + out_utf16s(&tmp, password); s_mark_end(&tmp); h2 = ber_wrap_hdr_data(BER_TAG_OCTET_STRING, &tmp); h1 = ber_wrap_hdr_data(BER_TAG_CTXT_SPECIFIC | BER_TAG_CONSTRUCTED | 0, h2); @@ -395,7 +392,7 @@ cssp_encode_tssmartcardcreds(char *username, char *password, char *domain) s_free(h2); s_free(h1); - // cspData[1] + // cspData [1] h2 = cssp_encode_tscspdatadetail(AT_KEYEXCHANGE, g_sc_card_name, g_sc_reader_name, g_sc_container_name, g_sc_csp_name); h1 = ber_wrap_hdr_data(BER_TAG_CTXT_SPECIFIC | BER_TAG_CONSTRUCTED | 1, h2); @@ -408,9 +405,8 @@ cssp_encode_tssmartcardcreds(char *username, char *password, char *domain) // userHint [2] if (username && strlen(username)) { - s_realloc(&tmp, strlen(username) * sizeof(uint16)); s_reset(&tmp); - rdp_out_unistr(&tmp, username, strlen(username) * sizeof(uint16)); + out_utf16s(&tmp, username); s_mark_end(&tmp); h2 = ber_wrap_hdr_data(BER_TAG_OCTET_STRING, &tmp); h1 = ber_wrap_hdr_data(BER_TAG_CTXT_SPECIFIC | BER_TAG_CONSTRUCTED | 2, h2); @@ -424,9 +420,8 @@ cssp_encode_tssmartcardcreds(char *username, char *password, char *domain) // domainHint [3] if (domain && strlen(domain)) { - s_realloc(&tmp, strlen(domain) * sizeof(uint16)); s_reset(&tmp); - rdp_out_unistr(&tmp, domain, strlen(domain) * sizeof(uint16)); + out_utf16s(&tmp, domain); s_mark_end(&tmp); h2 = ber_wrap_hdr_data(BER_TAG_OCTET_STRING, &tmp); h1 = ber_wrap_hdr_data(BER_TAG_CTXT_SPECIFIC | BER_TAG_CONSTRUCTED | 3, h2);