From: <he...@us...> - 2012-10-29 07:21:04
|
Revision: 1672 http://rdesktop.svn.sourceforge.net/rdesktop/?rev=1672&view=rev Author: hean01 Date: 2012-10-29 07:20:54 +0000 (Mon, 29 Oct 2012) Log Message: ----------- Removed bad check against dwVersion which always made returned before licence is stored. Remove set of g_licence_issued flag at the wrong place. Modified Paths: -------------- rdesktop/trunk/licence.c Modified: rdesktop/trunk/licence.c =================================================================== --- rdesktop/trunk/licence.c 2012-10-23 11:38:59 UTC (rev 1671) +++ rdesktop/trunk/licence.c 2012-10-29 07:20:54 UTC (rev 1672) @@ -272,10 +272,9 @@ { RDSSL_RC4 crypt_key; uint32 length; - uint16 check; int i; - in_uint8s(s, 2); /* 3d 45 - unknown */ + in_uint8s(s, 2); // Skip license binary blob type in_uint16_le(s, length); if (!s_check_rem(s, length)) return; @@ -283,15 +282,11 @@ rdssl_rc4_set_key(&crypt_key, g_licence_key, 16); rdssl_rc4_crypt(&crypt_key, s->p, s->p, length); - in_uint16(s, check); - if (check != 0) - return; + /* Parse NEW_LICENSE_INFO block */ + in_uint8s(s, 4); // skip dwVersion - g_licence_issued = True; - - in_uint8s(s, 2); /* pad */ - - /* advance to fourth string */ + /* Skip strings, Scope, CompanyName and ProductId to get + to the LicenseInfo which we store in license blob. */ length = 0; for (i = 0; i < 4; i++) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <he...@us...> - 2014-02-05 11:58:25
|
Revision: 1780 http://sourceforge.net/p/rdesktop/code/1780 Author: hean01 Date: 2014-02-05 11:58:22 +0000 (Wed, 05 Feb 2014) Log Message: ----------- Added a handler for license error alert. There is a special case in here we need to consider, when no license is received from the server we will get a License Error Alert PDU - Valid Client packet which indicates that everything is ok. This solves a connection error which resulted in protocol error 76. Modified Paths: -------------- rdesktop/trunk/licence.c Modified: rdesktop/trunk/licence.c =================================================================== --- rdesktop/trunk/licence.c 2014-02-05 09:50:29 UTC (rev 1779) +++ rdesktop/trunk/licence.c 2014-02-05 11:58:22 UTC (rev 1780) @@ -61,7 +61,7 @@ /* Send a lincece info packet to server */ static void licence_info(uint8 * client_random, uint8 * rsa_data, - uint8 * licence_data, int licence_size, uint8 * hwid, uint8 * signature) + uint8 * licence_data, int licence_size, uint8 * hwid, uint8 * signature) { uint32 sec_flags = SEC_LICENCE_NEG; uint16 length = @@ -299,6 +299,53 @@ save_licence(s->p, length); } +/* process a licence error alert packet */ +void +licence_process_error_alert(STREAM s) +{ + uint32 error_code; + uint32 state_transition; + uint32 error_info; + in_uint32(s, error_code); + in_uint32(s, state_transition); + in_uint32(s, error_info); + + /* There is a special case in the error alert handling, when licensing is all good + and the server is not sending a license to client, a "Server License Error PDU - + Valid Client" packet is sent which means, every thing is ok. + + Therefor we should flag that everything is ok with license here. + */ + if (error_code == 0x07) + { + g_licence_issued = True; + return; + } + + /* handle error codes, for now, jsut report them */ + switch (error_code) + { + case 0x6: // ERR_NO_LICENSE_SERVER + warning("License error alert from server: No license server\n"); + break; + + case 0x8: // ERR_INVALID_CLIENT + warning("License error alert from server: Invalid client\n"); + break; + + case 0x4: // ERR_INVALID_SCOPE + case 0xb: // ERR_INVALID_PRODUCTID + case 0xc: // ERR_INVALID_MESSAGE_LENGTH + default: + warning("License error alert from server: code %u, state transition %u\n", + error_code, state_transition); + break; + } + + g_licence_error_result = True; +} + + /* Process a licence packet */ void licence_process(STREAM s) @@ -328,8 +375,8 @@ licence_process_new_license(s); break; - case LICENCE_TAG_ERROR_ALERT: - g_licence_error_result = True; + case LICENCE_TAG_ERROR_ALERT: + licence_process_error_alert(s); break; default: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <he...@us...> - 2014-02-06 09:48:59
|
Revision: 1781 http://sourceforge.net/p/rdesktop/code/1781 Author: hean01 Date: 2014-02-06 09:48:56 +0000 (Thu, 06 Feb 2014) Log Message: ----------- Update debug log to use the new license constants. Modified Paths: -------------- rdesktop/trunk/licence.c Modified: rdesktop/trunk/licence.c =================================================================== --- rdesktop/trunk/licence.c 2014-02-05 11:58:22 UTC (rev 1780) +++ rdesktop/trunk/licence.c 2014-02-06 09:48:56 UTC (rev 1781) @@ -170,7 +170,7 @@ rdssl_rc4_crypt(&crypt_key, hwid, hwid, sizeof(hwid)); #if WITH_DEBUG - DEBUG(("Sending licensing PDU (message type 0x%02x)\n", LICENCE_TAG_PRESENT)); + DEBUG(("Sending licensing PDU (message type 0x%02x)\n", LICENCE_TAG_LICENCE_INFO)); #endif licence_info(null_data, null_data, licence_data, licence_size, hwid, signature); @@ -179,7 +179,7 @@ } #if WITH_DEBUG - DEBUG(("Sending licensing PDU (message type 0x%02x)\n", LICENCE_TAG_REQUEST)); + DEBUG(("Sending licensing PDU (message type 0x%02x)\n", LICENCE_TAG_NEW_LICENCE_REQUEST)); #endif licence_send_new_licence_request(null_data, null_data, g_username, g_hostname); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <he...@us...> - 2014-02-06 10:33:47
|
Revision: 1783 http://sourceforge.net/p/rdesktop/code/1783 Author: hean01 Date: 2014-02-06 10:33:44 +0000 (Thu, 06 Feb 2014) Log Message: ----------- Send correct type for new licence request. Modified Paths: -------------- rdesktop/trunk/licence.c Modified: rdesktop/trunk/licence.c =================================================================== --- rdesktop/trunk/licence.c 2014-02-06 10:32:52 UTC (rev 1782) +++ rdesktop/trunk/licence.c 2014-02-06 10:33:44 UTC (rev 1783) @@ -112,7 +112,7 @@ s = sec_init(sec_flags, length + 2); - out_uint8(s, LICENCE_TAG_REQUEST); + out_uint8(s, LICENCE_TAG_NEW_LICENCE_REQUEST); out_uint8(s, ((g_rdp_version >= RDP_V5) ? 3 : 2)); /* version */ out_uint16_le(s, length); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |