From 927bc717809030a793a0626b37f7c82a8a937150 Mon Sep 17 00:00:00 2001 From: Adam Brand Date: Mon, 30 Jan 2012 20:49:27 -0800 Subject: [PATCH] Fixed issue with RDS farm redirection and passwords. --- libfreerdp-core/connection.c | 4 ++-- libfreerdp-core/info.c | 5 +++-- libfreerdp-core/redirection.c | 8 +++++--- libfreerdp-core/settings.c | 4 +++- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/libfreerdp-core/connection.c b/libfreerdp-core/connection.c index 102bcbd..5fd6307 100644 --- a/libfreerdp-core/connection.c +++ b/libfreerdp-core/connection.c @@ -82,7 +82,7 @@ boolean rdp_client_connect(rdpRdp* rdp) if ((selectedProtocol & PROTOCOL_TLS) || (selectedProtocol == PROTOCOL_RDP)) { - if ((settings->username != NULL) && (settings->password != NULL)) + if ((settings->username != NULL) && ((settings->password != NULL) || (settings->password_cookie->length > 0))) settings->autologon = true; } @@ -177,7 +177,7 @@ boolean rdp_client_redirect(rdpRdp* rdp) if (redirection->flags & LB_PASSWORD) { - freerdp_blob_free(&settings->password_cookie); + freerdp_blob_free(settings->password_cookie); settings->password_cookie = redirection->password_cookie; } diff --git a/libfreerdp-core/info.c b/libfreerdp-core/info.c index 0ed0a9b..0dc0841 100644 --- a/libfreerdp-core/info.c +++ b/libfreerdp-core/info.c @@ -505,10 +505,11 @@ void rdp_write_info_packet(STREAM* s, rdpSettings* settings) userName = (uint8*)freerdp_uniconv_out(settings->uniconv, settings->username, &length); cbUserName = length; - if (settings->password_cookie != NULL) + if (settings->password_cookie->length > 0) { password = (uint8*)settings->password_cookie->data; cbPassword = settings->password_cookie->length - 2; + freerdp_hexdump(password, cbPassword); } else { @@ -540,7 +541,7 @@ void rdp_write_info_packet(STREAM* s, rdpSettings* settings) stream_write_uint16(s, 0); if (cbPassword > 0) - stream_write(s, password, cbPassword); + stream_write(s, password, cbPassword + 2); stream_write_uint16(s, 0); if (cbAlternateShell > 0) diff --git a/libfreerdp-core/redirection.c b/libfreerdp-core/redirection.c index 6ed7556..db16eff 100644 --- a/libfreerdp-core/redirection.c +++ b/libfreerdp-core/redirection.c @@ -106,12 +106,14 @@ boolean rdp_recv_server_redirection_pdu(rdpRdp* rdp, STREAM* s) { uint32 passwordLength; stream_read_uint32(s, passwordLength); + redirection->password_cookie = xnew(rdpBlob); freerdp_blob_alloc(redirection->password_cookie, passwordLength); stream_read(s, redirection->password_cookie->data, passwordLength); -#ifdef WITH_DEBUG_REDIR - DEBUG_REDIR("password_cookie:"); + +//#ifdef WITH_DEBUG_REDIR + // DEBUG_REDIR("password_cookie:"); freerdp_hexdump(redirection->password_cookie->data, redirection->password_cookie->length); -#endif +//#endif } if (redirection->flags & LB_TARGET_FQDN) diff --git a/libfreerdp-core/settings.c b/libfreerdp-core/settings.c index 04b1b39..a6eabd5 100644 --- a/libfreerdp-core/settings.c +++ b/libfreerdp-core/settings.c @@ -171,7 +171,7 @@ rdpSettings* settings_new(void* instance) settings->server_auto_reconnect_cookie = xnew(ARC_SC_PRIVATE_PACKET); settings->client_time_zone = xnew(TIME_ZONE_INFO); - + settings->password_cookie = xnew(rdpBlob); settings->server_random = xnew(rdpBlob); settings->server_certificate = xnew(rdpBlob); } @@ -187,6 +187,8 @@ void settings_free(rdpSettings* settings) xfree(settings->hostname); xfree(settings->username); xfree(settings->password); + freerdp_blob_free(settings->password_cookie); + xfree(settings->password_cookie); xfree(settings->domain); xfree(settings->shell); xfree(settings->directory); -- 2.7.4