diff options
Diffstat (limited to 'libxrdp')
| -rw-r--r-- | libxrdp/libxrdp.h | 11 | ||||
| -rw-r--r-- | libxrdp/xrdp_mcs.c | 14 | ||||
| -rw-r--r-- | libxrdp/xrdp_sec.c | 39 | 
3 files changed, 21 insertions, 43 deletions
| diff --git a/libxrdp/libxrdp.h b/libxrdp/libxrdp.h index f72b8b11..5bf627b5 100644 --- a/libxrdp/libxrdp.h +++ b/libxrdp/libxrdp.h @@ -61,16 +61,6 @@ struct mcs_channel_item    int chanid;  }; -/* used in mcs - client monitor data */ -struct mcs_monitor_item -{ -	int left; -	int top; -	int right; -	int bottom; -	int is_primary; -}; -  /* mcs */  struct xrdp_mcs  { @@ -81,7 +71,6 @@ struct xrdp_mcs    struct stream* client_mcs_data;    struct stream* server_mcs_data;    struct list* channel_list; -  struct list* monitor_list;  };  /* sec */ diff --git a/libxrdp/xrdp_mcs.c b/libxrdp/xrdp_mcs.c index 86212bb1..c145158c 100644 --- a/libxrdp/xrdp_mcs.c +++ b/libxrdp/xrdp_mcs.c @@ -38,7 +38,6 @@ xrdp_mcs_create(struct xrdp_sec *owner, struct trans *trans,      self->server_mcs_data = server_mcs_data;      self->iso_layer = xrdp_iso_create(self, trans);      self->channel_list = list_create(); -    self->monitor_list = list_create();      DEBUG(("  out xrdp_mcs_create"));      return self;  } @@ -48,7 +47,6 @@ void APP_CC  xrdp_mcs_delete(struct xrdp_mcs *self)  {      struct mcs_channel_item *channel_item; -    struct mcs_monitor_item *monitor_item;      int index;      int count; @@ -69,18 +67,6 @@ xrdp_mcs_delete(struct xrdp_mcs *self)      list_delete(self->channel_list); -    /* here we have to free the monitor items and anything in them */ -    count = self->monitor_list->count; - -    for (index = count - 1; index >= 0; index--) -    { -        monitor_item = (struct mcs_monitor_item *) -                       list_get_item(self->monitor_list, index); -        g_free(monitor_item); -    } - -    list_delete(self->monitor_list); -      xrdp_iso_delete(self->iso_layer);      /* make sure we get null pointer exception if struct is used again. */      DEBUG(("xrdp_mcs_delete processed")) diff --git a/libxrdp/xrdp_sec.c b/libxrdp/xrdp_sec.c index 161f88f8..dd0e2cd6 100644 --- a/libxrdp/xrdp_sec.c +++ b/libxrdp/xrdp_sec.c @@ -959,7 +959,9 @@ xrdp_sec_process_mcs_data_monitors(struct xrdp_sec *self, struct stream *s)      int index;      int monitorCount;      int flags; -    struct mcs_monitor_item *monitor_item; +    struct xrdp_client_info *client_info = (struct xrdp_client_info *)NULL; + +    client_info = &(self->rdp_layer->client_info);      DEBUG(("processing monitors data, allow_multimon is %d", self->multimon));      /* this is an option set in xrdp.ini */ @@ -975,7 +977,7 @@ xrdp_sec_process_mcs_data_monitors(struct xrdp_sec *self, struct stream *s)      {          DEBUG(("[ERROR] xrdp_sec_process_mcs_data_monitors: flags MUST be "                 "zero, detected: %d", flags)); -        return 0; +        return 1;      }      in_uint32_le(s, monitorCount);      //verify monitorCount - max 16 @@ -983,24 +985,23 @@ xrdp_sec_process_mcs_data_monitors(struct xrdp_sec *self, struct stream *s)      {          DEBUG(("[ERROR] xrdp_sec_process_mcs_data_monitors: max allowed "                 "monitors is 16, detected: %d", monitorCount)); -        return 0; +        return 1;      } + +    g_writeln("monitorCount= %d", monitorCount); // for debugging only + +    /* Add client_monitor_data to client_info struct, will later pass to X11rdp */      for (index = 0; index < monitorCount; index++)      { -        monitor_item = (struct mcs_monitor_item *) -                       g_malloc(sizeof(struct mcs_monitor_item), 1); -        in_uint32_le(s, monitor_item->left); -        in_uint32_le(s, monitor_item->top); -        in_uint32_le(s, monitor_item->right); -        in_uint32_le(s, monitor_item->bottom); -        in_uint32_le(s, monitor_item->is_primary); -        list_add_item(self->mcs_layer->monitor_list, (long)monitor_item); -        DEBUG(("got monitor: left: %d, top: %d, right: %d, bottom: %d, is " -               "primary: %d", monitor_item->left, monitor_item->top, -               monitor_item->right, monitor_item->bottom, -               monitor_item->is_primary)); -    } +        in_uint32_le(s, client_info->minfo->left); +        in_uint32_le(s, client_info->minfo->top); +        in_uint32_le(s, client_info->minfo->right); +        in_uint32_le(s, client_info->minfo->bottom); +        in_uint32_le(s, client_info->minfo->is_primary); +        g_writeln("got a monitor: left= %d, top= %d, right= %d, bottom= %d, is_primary?= %d", client_info->minfo->left, +            client_info->minfo->top, client_info->minfo->right, client_info->minfo->bottom, client_info->minfo->is_primary); +    }      return 0;  }  /*****************************************************************************/ @@ -1052,7 +1053,10 @@ xrdp_sec_process_mcs_data(struct xrdp_sec *self)              case SEC_TAG_CLI_4:                  break;              case SEC_TAG_CLI_MONITOR: -                xrdp_sec_process_mcs_data_monitors(self, s); +                if (xrdp_sec_process_mcs_data_monitors(self, s) != 0) +                { +                    return 1; +                }                  break;              default:                  g_writeln("error unknown xrdp_sec_process_mcs_data tag %d size %d", @@ -1210,7 +1214,6 @@ xrdp_sec_in_mcs_data(struct xrdp_sec *self)          client_info->hostname[index] = c;          index++;      } -      /* get build */      s->p = s->data;      if (!s_check_rem(s, 43 + 4)) | 
