summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libxrdp/xrdp_sec.c36
1 files changed, 36 insertions, 0 deletions
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;