diff --git a/libxrdp/xrdp_sec.c b/libxrdp/xrdp_sec.c index d1bd49de..df2cc653 100644 --- a/libxrdp/xrdp_sec.c +++ b/libxrdp/xrdp_sec.c @@ -901,7 +901,39 @@ xrdp_sec_send(struct xrdp_sec *self, struct stream *s, int chan) DEBUG((" out xrdp_sec_send")); return 0; } +/*****************************************************************************/ +/* returns error */ +static int APP_CC +xrdp_sec_process_mcs_cli_info(struct xrdp_sec *self, struct stream *s) +{ + in_uint8s(s, 4); /* RDP client version */ + in_uint8s(s, 2); /* desktopWidth */ + in_uint8s(s, 2); /* desktopHeight */ + in_uint8s(s, 2); /* colorDepth */ + in_uint8s(s, 2); + in_uint8s(s, 4); + in_uint8s(s, 4); + in_uint8s(s, 32); + in_uint8s(s, 4); + in_uint8s(s, 4); + in_uint8s(s, 64); + in_uint8s(s, 2); + in_uint8s(s, 2); + in_uint8s(s, 4); + in_uint8s(s, 2); + in_uint8s(s, 2); + in_uint8s(s, 2); /* earlyCapabilityFlags */ + in_uint8s(s, 64); + in_uint8s(s, 1); + in_uint8s(s, 1); /* pad1octet */ + in_uint8s(s, 4); + in_uint8s(s, 4); + in_uint8s(s, 4); + in_uint8s(s, 2); + in_uint8s(s, 4); + in_uint8s(s, 4); +} /*****************************************************************************/ /* this adds the mcs channels in the list of channels to be used when creating the server mcs data */ @@ -1043,6 +1075,10 @@ xrdp_sec_process_mcs_data(struct xrdp_sec *self) switch (tag) { case SEC_TAG_CLI_INFO: + if (xrdp_sec_process_mcs_cli_info(self, s) != 0) + { + return 1; + } break; case SEC_TAG_CLI_CRYPT: break;