Make sure to use rdp_out_unistr() when writing strings
to streams in CredSSP. (The other part of bug #383. git-svn-id: svn://svn.code.sf.net/p/rdesktop/code/rdesktop/trunk@1801 423420c4-83ab-492f-b58f-81f9feb106b5
This commit is contained in:
parent
77ec7d1128
commit
e597ef4e90
23
cssp.c
23
cssp.c
@ -318,7 +318,6 @@ static STREAM
|
|||||||
cssp_encode_tscspdatadetail(unsigned char keyspec, char *card, char *reader, char *container,
|
cssp_encode_tscspdatadetail(unsigned char keyspec, char *card, char *reader, char *container,
|
||||||
char *csp)
|
char *csp)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
STREAM out;
|
STREAM out;
|
||||||
STREAM h1, h2;
|
STREAM h1, h2;
|
||||||
struct stream tmp = { 0 };
|
struct stream tmp = { 0 };
|
||||||
@ -342,8 +341,7 @@ cssp_encode_tscspdatadetail(unsigned char keyspec, char *card, char *reader, cha
|
|||||||
{
|
{
|
||||||
s_realloc(&tmp, strlen(card) * sizeof(uint16));
|
s_realloc(&tmp, strlen(card) * sizeof(uint16));
|
||||||
s_reset(&tmp);
|
s_reset(&tmp);
|
||||||
for (i = 0; i < strlen(card); i++)
|
rdp_out_unistr(&tmp, card, strlen(card) * sizeof(uint16));
|
||||||
out_uint16_le(&tmp, card[i]);
|
|
||||||
s_mark_end(&tmp);
|
s_mark_end(&tmp);
|
||||||
h2 = ber_wrap_hdr_data(BER_TAG_OCTET_STRING, &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);
|
h1 = ber_wrap_hdr_data(BER_TAG_CTXT_SPECIFIC | BER_TAG_CONSTRUCTED | 1, h2);
|
||||||
@ -359,8 +357,7 @@ cssp_encode_tscspdatadetail(unsigned char keyspec, char *card, char *reader, cha
|
|||||||
{
|
{
|
||||||
s_realloc(&tmp, strlen(reader) * sizeof(uint16));
|
s_realloc(&tmp, strlen(reader) * sizeof(uint16));
|
||||||
s_reset(&tmp);
|
s_reset(&tmp);
|
||||||
for (i = 0; i < strlen(reader); i++)
|
rdp_out_unistr(&tmp, reader, strlen(reader) * sizeof(uint16));
|
||||||
out_uint16_le(&tmp, reader[i]);
|
|
||||||
s_mark_end(&tmp);
|
s_mark_end(&tmp);
|
||||||
h2 = ber_wrap_hdr_data(BER_TAG_OCTET_STRING, &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);
|
h1 = ber_wrap_hdr_data(BER_TAG_CTXT_SPECIFIC | BER_TAG_CONSTRUCTED | 2, h2);
|
||||||
@ -376,8 +373,7 @@ cssp_encode_tscspdatadetail(unsigned char keyspec, char *card, char *reader, cha
|
|||||||
{
|
{
|
||||||
s_realloc(&tmp, strlen(container) * sizeof(uint16));
|
s_realloc(&tmp, strlen(container) * sizeof(uint16));
|
||||||
s_reset(&tmp);
|
s_reset(&tmp);
|
||||||
for (i = 0; i < strlen(container); i++)
|
rdp_out_unistr(&tmp, container, strlen(container) * sizeof(uint16));
|
||||||
out_uint16_le(&tmp, container[i]);
|
|
||||||
s_mark_end(&tmp);
|
s_mark_end(&tmp);
|
||||||
h2 = ber_wrap_hdr_data(BER_TAG_OCTET_STRING, &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);
|
h1 = ber_wrap_hdr_data(BER_TAG_CTXT_SPECIFIC | BER_TAG_CONSTRUCTED | 3, h2);
|
||||||
@ -393,8 +389,7 @@ cssp_encode_tscspdatadetail(unsigned char keyspec, char *card, char *reader, cha
|
|||||||
{
|
{
|
||||||
s_realloc(&tmp, strlen(csp) * sizeof(uint16));
|
s_realloc(&tmp, strlen(csp) * sizeof(uint16));
|
||||||
s_reset(&tmp);
|
s_reset(&tmp);
|
||||||
for (i = 0; i < strlen(csp); i++)
|
rdp_out_unistr(&tmp, csp, strlen(csp) * sizeof(uint16));
|
||||||
out_uint16_le(&tmp, csp[i]);
|
|
||||||
s_mark_end(&tmp);
|
s_mark_end(&tmp);
|
||||||
h2 = ber_wrap_hdr_data(BER_TAG_OCTET_STRING, &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);
|
h1 = ber_wrap_hdr_data(BER_TAG_CTXT_SPECIFIC | BER_TAG_CONSTRUCTED | 4, h2);
|
||||||
@ -419,7 +414,6 @@ cssp_encode_tscspdatadetail(unsigned char keyspec, char *card, char *reader, cha
|
|||||||
static STREAM
|
static STREAM
|
||||||
cssp_encode_tssmartcardcreds(char *username, char *password, char *domain)
|
cssp_encode_tssmartcardcreds(char *username, char *password, char *domain)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
STREAM out, h1, h2;
|
STREAM out, h1, h2;
|
||||||
struct stream tmp = { 0 };
|
struct stream tmp = { 0 };
|
||||||
struct stream message = { 0 };
|
struct stream message = { 0 };
|
||||||
@ -427,8 +421,7 @@ cssp_encode_tssmartcardcreds(char *username, char *password, char *domain)
|
|||||||
// pin [0]
|
// pin [0]
|
||||||
s_realloc(&tmp, strlen(password) * sizeof(uint16));
|
s_realloc(&tmp, strlen(password) * sizeof(uint16));
|
||||||
s_reset(&tmp);
|
s_reset(&tmp);
|
||||||
for (i = 0; i < strlen(password); i++)
|
rdp_out_unistr(&tmp, password, strlen(password) * sizeof(uint16));
|
||||||
out_uint16_le(&tmp, password[i]);
|
|
||||||
s_mark_end(&tmp);
|
s_mark_end(&tmp);
|
||||||
h2 = ber_wrap_hdr_data(BER_TAG_OCTET_STRING, &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);
|
h1 = ber_wrap_hdr_data(BER_TAG_CTXT_SPECIFIC | BER_TAG_CONSTRUCTED | 0, h2);
|
||||||
@ -453,8 +446,7 @@ cssp_encode_tssmartcardcreds(char *username, char *password, char *domain)
|
|||||||
{
|
{
|
||||||
s_realloc(&tmp, strlen(username) * sizeof(uint16));
|
s_realloc(&tmp, strlen(username) * sizeof(uint16));
|
||||||
s_reset(&tmp);
|
s_reset(&tmp);
|
||||||
for (i = 0; i < strlen(username); i++)
|
rdp_out_unistr(&tmp, username, strlen(username) * sizeof(uint16));
|
||||||
out_uint16_le(&tmp, username[i]);
|
|
||||||
s_mark_end(&tmp);
|
s_mark_end(&tmp);
|
||||||
h2 = ber_wrap_hdr_data(BER_TAG_OCTET_STRING, &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);
|
h1 = ber_wrap_hdr_data(BER_TAG_CTXT_SPECIFIC | BER_TAG_CONSTRUCTED | 2, h2);
|
||||||
@ -470,8 +462,7 @@ cssp_encode_tssmartcardcreds(char *username, char *password, char *domain)
|
|||||||
{
|
{
|
||||||
s_realloc(&tmp, strlen(domain) * sizeof(uint16));
|
s_realloc(&tmp, strlen(domain) * sizeof(uint16));
|
||||||
s_reset(&tmp);
|
s_reset(&tmp);
|
||||||
for (i = 0; i < strlen(domain); i++)
|
rdp_out_unistr(&tmp, domain, strlen(domain) * sizeof(uint16));
|
||||||
out_uint16_le(&tmp, domain[i]);
|
|
||||||
s_mark_end(&tmp);
|
s_mark_end(&tmp);
|
||||||
h2 = ber_wrap_hdr_data(BER_TAG_OCTET_STRING, &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);
|
h1 = ber_wrap_hdr_data(BER_TAG_CTXT_SPECIFIC | BER_TAG_CONSTRUCTED | 3, h2);
|
||||||
|
Loading…
Reference in New Issue
Block a user