First attempt at fixing the password issue; this segfaults unfortunately.

This commit is contained in:
Adam Brand 2012-01-30 17:54:46 -08:00
parent faae95185f
commit 4aeb52aace
5 changed files with 23 additions and 9 deletions

View File

@ -269,7 +269,8 @@ struct rdp_settings
boolean autologon; /* 58 */ boolean autologon; /* 58 */
boolean compression; /* 59 */ boolean compression; /* 59 */
uint32 performance_flags; /* 60 */ uint32 performance_flags; /* 60 */
uint32 paddingC[80 - 61]; /* 61 */ rdpBlob* password_cookie; /* 61 */
uint32 paddingC[80 - 62]; /* 62 */
/* User Interface Parameters */ /* User Interface Parameters */
boolean sw_gdi; /* 80 */ boolean sw_gdi; /* 80 */

View File

@ -177,8 +177,8 @@ boolean rdp_client_redirect(rdpRdp* rdp)
if (redirection->flags & LB_PASSWORD) if (redirection->flags & LB_PASSWORD)
{ {
xfree(settings->password); freerdp_blob_free(&settings->password_cookie);
settings->password = redirection->password.ascii; settings->password_cookie = redirection->password_cookie;
} }
return rdp_client_connect(rdp); return rdp_client_connect(rdp);

View File

@ -505,8 +505,16 @@ void rdp_write_info_packet(STREAM* s, rdpSettings* settings)
userName = (uint8*)freerdp_uniconv_out(settings->uniconv, settings->username, &length); userName = (uint8*)freerdp_uniconv_out(settings->uniconv, settings->username, &length);
cbUserName = length; cbUserName = length;
password = (uint8*)freerdp_uniconv_out(settings->uniconv, settings->password, &length); if (settings->password_cookie != NULL)
cbPassword = length; {
password = (uint8*)settings->password_cookie->data;
cbPassword = settings->password_cookie->length - 2;
}
else
{
password = (uint8*)freerdp_uniconv_out(settings->uniconv, settings->password, &length);
cbPassword = length;
}
alternateShell = (uint8*)freerdp_uniconv_out(settings->uniconv, settings->shell, &length); alternateShell = (uint8*)freerdp_uniconv_out(settings->uniconv, settings->shell, &length);
cbAlternateShell = length; cbAlternateShell = length;

View File

@ -104,8 +104,13 @@ boolean rdp_recv_server_redirection_pdu(rdpRdp* rdp, STREAM* s)
if (redirection->flags & LB_PASSWORD) if (redirection->flags & LB_PASSWORD)
{ {
freerdp_string_read_length32(s, &redirection->password, rdp->settings->uniconv); uint32 passwordLength;
DEBUG_REDIR("password: %s", redirection->password.ascii); stream_read_uint32(s, passwordLength);
freerdp_blob_alloc(redirection->password_cookie, passwordLength);
#ifdef WITH_DEBUG_REDIR
DEBUG_REDIR("password_cookie:");
freerdp_hexdump(redirection->password_cookie.data, redirection->password_cookie.length);
#endif
} }
if (redirection->flags & LB_TARGET_FQDN) if (redirection->flags & LB_TARGET_FQDN)
@ -195,7 +200,7 @@ void redirection_free(rdpRedirection* redirection)
freerdp_string_free(&redirection->tsvUrl); freerdp_string_free(&redirection->tsvUrl);
freerdp_string_free(&redirection->username); freerdp_string_free(&redirection->username);
freerdp_string_free(&redirection->domain); freerdp_string_free(&redirection->domain);
freerdp_string_free(&redirection->password); freerdp_blob_free(&redirection->password_cookie);
freerdp_string_free(&redirection->targetFQDN); freerdp_string_free(&redirection->targetFQDN);
freerdp_string_free(&redirection->targetNetBiosName); freerdp_string_free(&redirection->targetNetBiosName);
freerdp_string_free(&redirection->targetNetAddress); freerdp_string_free(&redirection->targetNetAddress);

View File

@ -50,7 +50,7 @@ struct rdp_redirection
rdpString tsvUrl; rdpString tsvUrl;
rdpString username; rdpString username;
rdpString domain; rdpString domain;
rdpString password; rdpBlob* password_cookie;
rdpString targetFQDN; rdpString targetFQDN;
rdpBlob loadBalanceInfo; rdpBlob loadBalanceInfo;
rdpString targetNetBiosName; rdpString targetNetBiosName;