Only try to use automatic reconnect if we have earlier recieved the

reconnect random. It seems to work anyway, but let's take care.



git-svn-id: svn://svn.code.sf.net/p/rdesktop/code/rdesktop/trunk@1541 423420c4-83ab-492f-b58f-81f9feb106b5
This commit is contained in:
Peter Åstrand 2010-01-12 15:00:49 +00:00
parent 46499078e1
commit 0983e771c8
2 changed files with 19 additions and 8 deletions

View File

@ -105,6 +105,7 @@ uint32 g_redirect_flags = 0;
uint32 g_reconnect_logonid = 0;
char g_reconnect_random[16];
RD_BOOL g_has_reconnect_random = False;
uint8 g_client_random[SEC_RANDOM_SIZE];
#ifdef WITH_RDPSND

26
rdp.c
View File

@ -70,6 +70,7 @@ extern uint32 g_redirect_flags;
extern uint32 g_reconnect_logonid;
extern char g_reconnect_random[16];
extern RD_BOOL g_has_reconnect_random;
extern uint8 g_client_random[SEC_RANDOM_SIZE];
#if WITH_DEBUG
@ -464,14 +465,22 @@ rdp_send_logon_info(uint32 flags, char *domain, char *user,
out_uint32_le(s, g_rdp5_performanceflags);
/* Client Auto-Reconnect */
out_uint16_le(s, 28); /* cbAutoReconnectLen */
/* ARC_CS_PRIVATE_PACKET */
out_uint32_le(s, 28); /* cbLen */
out_uint32_le(s, 1); /* Version */
out_uint32_le(s, g_reconnect_logonid); /* LogonId */
ssl_hmac_md5(g_reconnect_random, sizeof(g_reconnect_random),
g_client_random, SEC_RANDOM_SIZE, security_verifier);
out_uint8a(s, security_verifier, sizeof(security_verifier));
if (g_has_reconnect_random)
{
out_uint16_le(s, 28); /* cbAutoReconnectLen */
/* ARC_CS_PRIVATE_PACKET */
out_uint32_le(s, 28); /* cbLen */
out_uint32_le(s, 1); /* Version */
out_uint32_le(s, g_reconnect_logonid); /* LogonId */
ssl_hmac_md5(g_reconnect_random, sizeof(g_reconnect_random),
g_client_random, SEC_RANDOM_SIZE, security_verifier);
out_uint8a(s, security_verifier, sizeof(security_verifier));
}
else
{
out_uint16_le(s, 0); /* cbAutoReconnectLen */
}
}
s_mark_end(s);
sec_send(s, sec_flags);
@ -1357,6 +1366,7 @@ process_pdu_logon(STREAM s)
in_uint32_le(s, g_reconnect_logonid);
in_uint8a(s, g_reconnect_random, 16);
g_has_reconnect_random = True;
DEBUG(("Saving auto-reconnect cookie, id=%u\n", g_reconnect_logonid));
}
}