diff --git a/src/protocols/rdp/client.c b/src/protocols/rdp/client.c index e7a8f58c..b83baec4 100644 --- a/src/protocols/rdp/client.c +++ b/src/protocols/rdp/client.c @@ -138,6 +138,7 @@ const char* GUAC_CLIENT_ARGS[] = { "sftp-password", "sftp-private-key", "sftp-passphrase", + "sftp-directory", #endif NULL @@ -186,6 +187,7 @@ enum RDP_ARGS_IDX { IDX_SFTP_PASSWORD, IDX_SFTP_PRIVATE_KEY, IDX_SFTP_PASSPHRASE, + IDX_SFTP_DIRECTORY, #endif RDP_ARGS_COUNT @@ -304,10 +306,15 @@ BOOL rdp_freerdp_pre_connect(freerdp* instance) { /* Load filesystem if drive enabled */ if (guac_client_data->settings.drive_enabled) { + + /* Allocate filesystem */ guac_client_data->filesystem = - guac_rdp_fs_alloc(client, guac_client_data->settings.drive_path, - guac_client_data->settings.create_drive_path); - client->file_handler = guac_rdp_upload_file_handler; + guac_rdp_fs_alloc(client, guac_client_data->settings.drive_path); + + /* Use for basic uploads if no other handler set */ + if (client->file_handler == NULL) + client->file_handler = guac_rdp_upload_file_handler; + } /* If RDPDR required, load it */ @@ -906,8 +913,16 @@ int guac_client_init(guac_client* client, int argc, char** argv) { return 1; } - /* Use SFTP for basic uploads, if drive not enabled */ - if (!settings->drive_enabled) + /* Configure destination for basic uploads, if specified */ + if (argv[IDX_SFTP_DIRECTORY][0] != '\0') { + client->file_handler = guac_rdp_sftp_file_handler; + guac_common_ssh_sftp_set_upload_path( + guac_client_data->sftp_filesystem, + argv[IDX_SFTP_DIRECTORY]); + } + + /* Otherwise, use SFTP for basic uploads only if drive not enabled */ + else if (!settings->drive_enabled) client->file_handler = guac_rdp_sftp_file_handler; guac_client_log(client, GUAC_LOG_DEBUG, diff --git a/src/protocols/vnc/client.c b/src/protocols/vnc/client.c index 8d4ad8a7..e40a62dc 100644 --- a/src/protocols/vnc/client.c +++ b/src/protocols/vnc/client.c @@ -86,6 +86,7 @@ const char* GUAC_CLIENT_ARGS[] = { "sftp-password", "sftp-private-key", "sftp-passphrase", + "sftp-directory", #endif NULL @@ -127,6 +128,7 @@ enum VNC_ARGS_IDX { IDX_SFTP_PASSWORD, IDX_SFTP_PRIVATE_KEY, IDX_SFTP_PASSPHRASE, + IDX_SFTP_DIRECTORY, #endif VNC_ARGS_COUNT @@ -501,6 +503,12 @@ int guac_client_init(guac_client* client, int argc, char** argv) { return 1; } + /* Configure destination for basic uploads, if specified */ + if (argv[IDX_SFTP_DIRECTORY][0] != '\0') + guac_common_ssh_sftp_set_upload_path( + guac_client_data->sftp_filesystem, + argv[IDX_SFTP_DIRECTORY]); + /* Set file handler for basic uploads */ client->file_handler = guac_vnc_sftp_file_handler;