GUACAMOLE-446: Pass through drive name to RDPDR stream.

This commit is contained in:
Nick Couchman 2018-07-03 23:10:05 -04:00
parent cfcfe8866c
commit 958fb4c8e0
5 changed files with 17 additions and 15 deletions

View File

@ -25,6 +25,7 @@
#include "rdp_status.h" #include "rdp_status.h"
#include <freerdp/utils/svc_plugin.h> #include <freerdp/utils/svc_plugin.h>
#include <guacamole/unicode.h>
#ifdef ENABLE_WINPR #ifdef ENABLE_WINPR
#include <winpr/stream.h> #include <winpr/stream.h>
@ -100,22 +101,23 @@ void guac_rdpdr_fs_process_query_device_info(guac_rdpdr_device* device, wStream*
void guac_rdpdr_fs_process_query_attribute_info(guac_rdpdr_device* device, wStream* input_stream, void guac_rdpdr_fs_process_query_attribute_info(guac_rdpdr_device* device, wStream* input_stream,
int file_id, int completion_id) { int file_id, int completion_id) {
int name_len = guac_utf8_strlen(device->device_name);
wStream* output_stream = guac_rdpdr_new_io_completion(device, wStream* output_stream = guac_rdpdr_new_io_completion(device,
completion_id, STATUS_SUCCESS, 16 + GUAC_FILESYSTEM_NAME_LENGTH); completion_id, STATUS_SUCCESS, 16 + name_len);
guac_client_log(device->rdpdr->client, GUAC_LOG_DEBUG, guac_client_log(device->rdpdr->client, GUAC_LOG_DEBUG,
"%s: [file_id=%i]", "%s: [file_id=%i]",
__func__, file_id); __func__, file_id);
Stream_Write_UINT32(output_stream, 12 + GUAC_FILESYSTEM_NAME_LENGTH); Stream_Write_UINT32(output_stream, 12 + name_len);
Stream_Write_UINT32(output_stream, Stream_Write_UINT32(output_stream,
FILE_UNICODE_ON_DISK FILE_UNICODE_ON_DISK
| FILE_CASE_SENSITIVE_SEARCH | FILE_CASE_SENSITIVE_SEARCH
| FILE_CASE_PRESERVED_NAMES); /* FileSystemAttributes */ | FILE_CASE_PRESERVED_NAMES); /* FileSystemAttributes */
Stream_Write_UINT32(output_stream, GUAC_RDP_FS_MAX_PATH ); /* MaximumComponentNameLength */ Stream_Write_UINT32(output_stream, GUAC_RDP_FS_MAX_PATH ); /* MaximumComponentNameLength */
Stream_Write_UINT32(output_stream, GUAC_FILESYSTEM_NAME_LENGTH); Stream_Write_UINT32(output_stream, name_len);
Stream_Write(output_stream, GUAC_FILESYSTEM_NAME, Stream_Write(output_stream, device->device_name, name_len);
GUAC_FILESYSTEM_NAME_LENGTH);
svc_plugin_send((rdpSvcPlugin*) device->rdpdr, output_stream); svc_plugin_send((rdpSvcPlugin*) device->rdpdr, output_stream);

View File

@ -119,7 +119,7 @@ static void guac_rdpdr_device_fs_free_handler(guac_rdpdr_device* device) {
} }
void guac_rdpdr_register_fs(guac_rdpdrPlugin* rdpdr) { void guac_rdpdr_register_fs(guac_rdpdrPlugin* rdpdr, char* drive_name) {
guac_client* client = rdpdr->client; guac_client* client = rdpdr->client;
guac_rdp_client* rdp_client = (guac_rdp_client*) client->data; guac_rdp_client* rdp_client = (guac_rdp_client*) client->data;
@ -131,7 +131,7 @@ void guac_rdpdr_register_fs(guac_rdpdrPlugin* rdpdr) {
/* Init device */ /* Init device */
device->rdpdr = rdpdr; device->rdpdr = rdpdr;
device->device_id = id; device->device_id = id;
device->device_name = "Guacamole Filesystem"; device->device_name = drive_name;
int device_name_len = guac_utf8_strlen(device->device_name); int device_name_len = guac_utf8_strlen(device->device_name);
device->device_type = RDPDR_DTYP_FILESYSTEM; device->device_type = RDPDR_DTYP_FILESYSTEM;
device->dos_name = "GUACFS\0\0"; device->dos_name = "GUACFS\0\0";

View File

@ -41,8 +41,14 @@
/** /**
* Registers a new filesystem device within the RDPDR plugin. This must be done * Registers a new filesystem device within the RDPDR plugin. This must be done
* before RDPDR connection finishes. * before RDPDR connection finishes.
*
* @param rdpdr
* The RDP device redirection plugin with which to register the device.
*
* @param drive_name
* The name of the redirected drive to display in the RDP connection.
*/ */
void guac_rdpdr_register_fs(guac_rdpdrPlugin* rdpdr); void guac_rdpdr_register_fs(guac_rdpdrPlugin* rdpdr, char* drive_name);
#endif #endif

View File

@ -76,12 +76,6 @@
#define GUAC_PRINTER_DRIVER "M\0S\0 \0P\0u\0b\0l\0i\0s\0h\0e\0r\0 \0I\0m\0a\0g\0e\0s\0e\0t\0t\0e\0r\0\0\0" #define GUAC_PRINTER_DRIVER "M\0S\0 \0P\0u\0b\0l\0i\0s\0h\0e\0r\0 \0I\0m\0a\0g\0e\0s\0e\0t\0t\0e\0r\0\0\0"
#define GUAC_PRINTER_DRIVER_LENGTH 50 #define GUAC_PRINTER_DRIVER_LENGTH 50
/**
* Name of the filesystem.
*/
#define GUAC_FILESYSTEM_NAME "G\0u\0a\0c\0a\0m\0o\0l\0e\0\0\0"
#define GUAC_FILESYSTEM_NAME_LENGTH 20
/** /**
* Label of the filesystem. * Label of the filesystem.
*/ */

View File

@ -100,7 +100,7 @@ void guac_rdpdr_process_connect(rdpSvcPlugin* plugin) {
/* Register drive if enabled */ /* Register drive if enabled */
if (rdp_client->settings->drive_enabled) if (rdp_client->settings->drive_enabled)
guac_rdpdr_register_fs(rdpdr); guac_rdpdr_register_fs(rdpdr, rdp_client->settings->drive_name);
/* Log that printing, etc. has been loaded */ /* Log that printing, etc. has been loaded */
guac_client_log(client, GUAC_LOG_INFO, "guacdr connected."); guac_client_log(client, GUAC_LOG_INFO, "guacdr connected.");