- in_uint16_le(s, len_domain);
- in_uint16_le(s, len_user);
- in_uint16_le(s, len_password);
- in_uint16_le(s, len_program);
- in_uint16_le(s, len_directory);
- rdp_in_unistr(s, domain, len_domain);
- rdp_in_unistr(s, user, len_user);
- rdp_in_unistr(s, password, len_password);
- rdp_in_unistr(s, program, len_program);
- rdp_in_unistr(s, directory, len_directory);
-
- printf("domain='%s'\n", domain);
- printf("user='%s'\n", user);
- printf("password='%s'\n", password);
- printf("program='%s'\n", program);
- printf("directory='%s'\n", directory);
+ if (flags & RDP_LOGON_BLOB) {
+ printf("RDP5-style logon packet\n");
+
+ in_uint16_le(s, len_domain);
+ in_uint16_le(s, len_user);
+
+ if (flags & RDP_LOGON_AUTO) {
+ in_uint16_le(s, len_password);
+ } else {
+ strcpy(password, "<none>");
+ }
+ if (flags & RDP_LOGON_BLOB && !(flags & RDP_LOGON_AUTO)) {
+ // is this too some kind of length?
+ EXPECT16(0);
+ }
+ in_uint16_le(s, len_program);
+ in_uint16_le(s, len_directory);
+
+ rdp_in_unistr(s, domain, len_domain);
+ rdp_in_unistr(s, user, len_user);
+
+ if (flags & RDP_LOGON_AUTO)
+ rdp_in_unistr(s, password, len_password);
+
+ if (flags & RDP_LOGON_BLOB && !(flags & RDP_LOGON_AUTO))
+ EXPECT16(0);
+
+ rdp_in_unistr(s, program, len_program);
+ rdp_in_unistr(s, directory, len_directory);
+
+ EXPECT16(2);
+
+ in_uint16_le(s, len_ip);
+ rdp_in_unistr(s, ip, len_ip - 2);
+
+ in_uint16_le(s, len_dll);
+ rdp_in_unistr(s, dll, len_dll - 2);
+
+ in_uint16_le(s, tzone_major);
+ in_uint16_le(s, tzone_minor);
+
+ // time zone names?
+ rdp_in_unistr(s, tz1, 62);
+ EXPECT32(0x0a0000);
+ EXPECT32(0x050000);
+ EXPECT32(3);
+ EXPECT32(0);
+ EXPECT32(0);
+
+ rdp_in_unistr(s, tz2, 62);
+ EXPECT32(0x030000);
+ EXPECT32(0x050000);
+ EXPECT32(2);
+ EXPECT32(0);
+ EXPECT32(0xffffffc4);
+ EXPECT32(0xfffffffe);
+ EXPECT32(0x0f);
+ EXPECT32(0);
+
+ printf("domain='%s'\n", domain);
+ printf("user='%s'\n", user);
+ printf("password='%s'\n", password);
+ printf("program='%s'\n", program);
+ printf("directory='%s'\n", directory);
+ printf("ip='%s'\n", ip);
+ printf("dll='%s'\n", dll);
+ printf("timezone=%d:%02d\n", tzone_major, tzone_minor);
+ printf("tz1='%64s'\n", tz1);
+ printf("tz2='%64s'\n", tz2);
+ } else {
+ in_uint16_le(s, len_domain);
+ in_uint16_le(s, len_user);
+ in_uint16_le(s, len_password);
+ in_uint16_le(s, len_program);
+ in_uint16_le(s, len_directory);
+ rdp_in_unistr(s, domain, len_domain);
+ rdp_in_unistr(s, user, len_user);
+ rdp_in_unistr(s, password, len_password);
+ rdp_in_unistr(s, program, len_program);
+ rdp_in_unistr(s, directory, len_directory);
+
+ printf("domain='%s'\n", domain);
+ printf("user='%s'\n", user);
+ printf("password='%s'\n", password);
+ printf("program='%s'\n", program);
+ printf("directory='%s'\n", directory);
+ }