From: Pavel S. <sht...@gm...> - 2010-09-02 17:56:46
|
Hi! I have try rdesktop from trunk in Windows Server 2008 R2 x64 terminal servers with session broker. If session broker redirect me, I see a truncated to three symbols username on logon screen of next server. After some investigation, I found some mistakes in rdesktop.c and rdp.c. After corrections the redirected username not truncating more. Unfortunately, server do not send the password in redirecting message. Patch against trunk is attached to this message. I believe this will fix rdesktop-Bugs-2845414: https://sourceforge.net/tracker/index.php?func=detail&aid=2845414&group_id=24366&atid=381347 If it is possible, repost this to Bugs tracker for ID 2845414, this bug closed erroneously. Thanks for your attention and excuse me for poor English. -- Pavel Shtefanets rdp-redirect-username.patch: #patch -p0 < rdp-redirect-username.patch diff -puN rdesktop/trunk/rdesktop.c rdesktop/rdesktop.c Index: rdesktop.c ========================================================================== --- rdesktop.c (revision 1600) +++ rdesktop.c (working) @@ -975,11 +975,15 @@ main(int argc, char *argv[]) if (g_redirect) { STRNCPY(domain, g_redirect_domain, sizeof(domain)); + DEBUG(("rdesktop.c g_redirect_domain=%s domain=%s\n",g_redirect_domain,domain)); xfree(g_username); g_username = (char *) xmalloc(strlen(g_redirect_username) + 1); - STRNCPY(g_username, g_redirect_username, sizeof(g_username)); + strcpy(g_username, g_redirect_username); + DEBUG(("rdesktop.c g_username=%s strlen(g_username)=%d\n",g_username,strlen(g_username))); STRNCPY(password, g_redirect_password, sizeof(password)); + DEBUG(("rdesktop.c g_redirect_password=%s password=%s\n",g_redirect_password,password)); STRNCPY(server, g_redirect_server, sizeof(server)); + DEBUG(("rdesktop.c g_redirect_server=%s server=%s\n",g_redirect_server,server)); flags |= RDP_LOGON_AUTO; } diff -puN rdesktop/trunk/rdp.c rdesktop/rdp.c Index: rdesktop.c ========================================================================== --- rdp.c (revision 1557) +++ rdp.c (working) @@ -1484,10 +1484,12 @@ process_redirect_pdu(STREAM s /*, uint32 if (g_redirect_flags & PDU_REDIRECT_HAS_IP) { /* read length of ip string */ + DEBUG(("before in_uint32_le len=%d\n",len)); in_uint32_le(s, len); /* read ip string */ rdp_in_unistr(s, g_redirect_server, sizeof(g_redirect_server), len); + DEBUG(("g_redirect_server: %s sizeof(g_redirect_server)=%d len=%d\n",g_redirect_server,sizeof(g_redirect_server),len)); } if (g_redirect_flags & PDU_REDIRECT_HAS_COOKIE) @@ -1515,11 +1517,14 @@ process_redirect_pdu(STREAM s /*, uint32 if (g_redirect_flags & PDU_REDIRECT_HAS_USERNAME) { /* read length of username string */ + DEBUG(("before in_uint32_le len=%d\n",len)); in_uint32_le(s, len); + DEBUG(("after in_uint32_le len=%d\n",len)); /* read username string */ g_redirect_username = (char *) xmalloc(len + 1); - rdp_in_unistr(s, g_redirect_username, strlen(g_redirect_username), len); + rdp_in_unistr(s, g_redirect_username, len, len); + DEBUG(("after rdp_in_unistr g_redirect_username=%s len=%d\n",g_redirect_username,len)); } if (g_redirect_flags & PDU_REDIRECT_HAS_DOMAIN) |