GUACAMOLE-303: Add "sftp-root-directory" parameter to VNC, RDP, and SSH.

This commit is contained in:
Michael Jumper 2017-06-29 15:48:23 -07:00
parent 0474f86c46
commit d51e92eb31
9 changed files with 65 additions and 5 deletions

View File

@ -987,8 +987,8 @@ void* guac_rdp_client_thread(void* data) {
/* Load and expose filesystem */ /* Load and expose filesystem */
rdp_client->sftp_filesystem = rdp_client->sftp_filesystem =
guac_common_ssh_create_sftp_filesystem( guac_common_ssh_create_sftp_filesystem(rdp_client->sftp_session,
rdp_client->sftp_session, "/", NULL); settings->sftp_root_directory, NULL);
/* Expose filesystem to connection owner */ /* Expose filesystem to connection owner */
guac_client_for_owner(client, guac_client_for_owner(client,

View File

@ -84,6 +84,7 @@ const char* GUAC_RDP_CLIENT_ARGS[] = {
"sftp-private-key", "sftp-private-key",
"sftp-passphrase", "sftp-passphrase",
"sftp-directory", "sftp-directory",
"sftp-root-directory",
"sftp-server-alive-interval", "sftp-server-alive-interval",
#endif #endif
@ -367,6 +368,12 @@ enum RDP_ARGS_IDX {
*/ */
IDX_SFTP_DIRECTORY, IDX_SFTP_DIRECTORY,
/**
* The path of the directory within the SSH server to expose as a
* filesystem guac_object. If omitted, "/" will be used by default.
*/
IDX_SFTP_ROOT_DIRECTORY,
/** /**
* The interval at which SSH keepalive messages are sent to the server for * The interval at which SSH keepalive messages are sent to the server for
* SFTP connections. The default is 0 (disabling keepalives), and a value * SFTP connections. The default is 0 (disabling keepalives), and a value
@ -784,6 +791,11 @@ guac_rdp_settings* guac_rdp_parse_args(guac_user* user,
guac_user_parse_args_string(user, GUAC_RDP_CLIENT_ARGS, argv, guac_user_parse_args_string(user, GUAC_RDP_CLIENT_ARGS, argv,
IDX_SFTP_DIRECTORY, NULL); IDX_SFTP_DIRECTORY, NULL);
/* SFTP root directory */
settings->sftp_root_directory =
guac_user_parse_args_string(user, GUAC_RDP_CLIENT_ARGS, argv,
IDX_SFTP_ROOT_DIRECTORY, "/");
/* Default keepalive value */ /* Default keepalive value */
settings->sftp_server_alive_interval = settings->sftp_server_alive_interval =
guac_user_parse_args_int(user, GUAC_RDP_CLIENT_ARGS, argv, guac_user_parse_args_int(user, GUAC_RDP_CLIENT_ARGS, argv,
@ -909,6 +921,7 @@ void guac_rdp_settings_free(guac_rdp_settings* settings) {
#ifdef ENABLE_COMMON_SSH #ifdef ENABLE_COMMON_SSH
/* Free SFTP settings */ /* Free SFTP settings */
free(settings->sftp_directory); free(settings->sftp_directory);
free(settings->sftp_root_directory);
free(settings->sftp_hostname); free(settings->sftp_hostname);
free(settings->sftp_passphrase); free(settings->sftp_passphrase);
free(settings->sftp_password); free(settings->sftp_password);

View File

@ -360,6 +360,12 @@ typedef struct guac_rdp_settings {
*/ */
char* sftp_directory; char* sftp_directory;
/**
* The path of the directory within the SSH server to expose as a
* filesystem guac_object.
*/
char* sftp_root_directory;
/** /**
* The interval at which SSH keepalive messages are sent to the server for * The interval at which SSH keepalive messages are sent to the server for
* SFTP connections. The default is 0 (disabling keepalives), and a value * SFTP connections. The default is 0 (disabling keepalives), and a value

View File

@ -37,6 +37,7 @@ const char* GUAC_SSH_CLIENT_ARGS[] = {
"font-name", "font-name",
"font-size", "font-size",
"enable-sftp", "enable-sftp",
"sftp-root-directory",
"private-key", "private-key",
"passphrase", "passphrase",
#ifdef ENABLE_SSH_AGENT #ifdef ENABLE_SSH_AGENT
@ -92,6 +93,12 @@ enum SSH_ARGS_IDX {
*/ */
IDX_ENABLE_SFTP, IDX_ENABLE_SFTP,
/**
* The path of the directory within the SSH server to expose as a
* filesystem guac_object. If omitted, "/" will be used by default.
*/
IDX_SFTP_ROOT_DIRECTORY,
/** /**
* The private key to use for authentication, if any. * The private key to use for authentication, if any.
*/ */
@ -236,6 +243,11 @@ guac_ssh_settings* guac_ssh_parse_args(guac_user* user,
guac_user_parse_args_boolean(user, GUAC_SSH_CLIENT_ARGS, argv, guac_user_parse_args_boolean(user, GUAC_SSH_CLIENT_ARGS, argv,
IDX_ENABLE_SFTP, false); IDX_ENABLE_SFTP, false);
/* SFTP root directory */
settings->sftp_root_directory =
guac_user_parse_args_string(user, GUAC_SSH_CLIENT_ARGS, argv,
IDX_SFTP_ROOT_DIRECTORY, "/");
#ifdef ENABLE_SSH_AGENT #ifdef ENABLE_SSH_AGENT
settings->enable_agent = settings->enable_agent =
guac_user_parse_args_boolean(user, GUAC_SSH_CLIENT_ARGS, argv, guac_user_parse_args_boolean(user, GUAC_SSH_CLIENT_ARGS, argv,
@ -316,6 +328,9 @@ void guac_ssh_settings_free(guac_ssh_settings* settings) {
/* Free requested command */ /* Free requested command */
free(settings->command); free(settings->command);
/* Free SFTP settings */
free(settings->sftp_root_directory);
/* Free typescript settings */ /* Free typescript settings */
free(settings->typescript_name); free(settings->typescript_name);
free(settings->typescript_path); free(settings->typescript_path);

View File

@ -145,6 +145,12 @@ typedef struct guac_ssh_settings {
*/ */
bool enable_sftp; bool enable_sftp;
/**
* The path of the directory within the SSH server to expose as a
* filesystem guac_object.
*/
char* sftp_root_directory;
#ifdef ENABLE_SSH_AGENT #ifdef ENABLE_SSH_AGENT
/** /**
* Whether the SSH agent is enabled. * Whether the SSH agent is enabled.

View File

@ -266,7 +266,8 @@ void* ssh_client_thread(void* data) {
/* Request SFTP */ /* Request SFTP */
ssh_client->sftp_filesystem = guac_common_ssh_create_sftp_filesystem( ssh_client->sftp_filesystem = guac_common_ssh_create_sftp_filesystem(
ssh_client->sftp_session, "/", NULL); ssh_client->sftp_session, settings->sftp_root_directory,
NULL);
/* Expose filesystem to connection owner */ /* Expose filesystem to connection owner */
guac_client_for_owner(client, guac_client_for_owner(client,

View File

@ -66,6 +66,7 @@ const char* GUAC_VNC_CLIENT_ARGS[] = {
"sftp-private-key", "sftp-private-key",
"sftp-passphrase", "sftp-passphrase",
"sftp-directory", "sftp-directory",
"sftp-root-directory",
"sftp-server-alive-interval", "sftp-server-alive-interval",
#endif #endif
@ -229,6 +230,12 @@ enum VNC_ARGS_IDX {
*/ */
IDX_SFTP_DIRECTORY, IDX_SFTP_DIRECTORY,
/**
* The path of the directory within the SSH server to expose as a
* filesystem guac_object. If omitted, "/" will be used by default.
*/
IDX_SFTP_ROOT_DIRECTORY,
/** /**
* The interval at which SSH keepalive messages are sent to the server for * The interval at which SSH keepalive messages are sent to the server for
* SFTP connections. The default is 0 (disabling keepalives), and a value * SFTP connections. The default is 0 (disabling keepalives), and a value
@ -405,6 +412,11 @@ guac_vnc_settings* guac_vnc_parse_args(guac_user* user,
guac_user_parse_args_string(user, GUAC_VNC_CLIENT_ARGS, argv, guac_user_parse_args_string(user, GUAC_VNC_CLIENT_ARGS, argv,
IDX_SFTP_DIRECTORY, NULL); IDX_SFTP_DIRECTORY, NULL);
/* SFTP root directory */
settings->sftp_root_directory =
guac_user_parse_args_string(user, GUAC_VNC_CLIENT_ARGS, argv,
IDX_SFTP_ROOT_DIRECTORY, "/");
/* Default keepalive value */ /* Default keepalive value */
settings->sftp_server_alive_interval = settings->sftp_server_alive_interval =
guac_user_parse_args_int(user, GUAC_VNC_CLIENT_ARGS, argv, guac_user_parse_args_int(user, GUAC_VNC_CLIENT_ARGS, argv,
@ -447,6 +459,7 @@ void guac_vnc_settings_free(guac_vnc_settings* settings) {
#ifdef ENABLE_COMMON_SSH #ifdef ENABLE_COMMON_SSH
/* Free SFTP settings */ /* Free SFTP settings */
free(settings->sftp_directory); free(settings->sftp_directory);
free(settings->sftp_root_directory);
free(settings->sftp_hostname); free(settings->sftp_hostname);
free(settings->sftp_passphrase); free(settings->sftp_passphrase);
free(settings->sftp_password); free(settings->sftp_password);

View File

@ -174,6 +174,12 @@ typedef struct guac_vnc_settings {
*/ */
char* sftp_directory; char* sftp_directory;
/**
* The path of the directory within the SSH server to expose as a
* filesystem guac_object.
*/
char* sftp_root_directory;
/** /**
* The interval at which SSH keepalive messages are sent to the server for * The interval at which SSH keepalive messages are sent to the server for
* SFTP connections. The default is 0 (disabling keepalives), and a value * SFTP connections. The default is 0 (disabling keepalives), and a value

View File

@ -271,8 +271,8 @@ void* guac_vnc_client_thread(void* data) {
/* Load filesystem */ /* Load filesystem */
vnc_client->sftp_filesystem = vnc_client->sftp_filesystem =
guac_common_ssh_create_sftp_filesystem( guac_common_ssh_create_sftp_filesystem(vnc_client->sftp_session,
vnc_client->sftp_session, "/", NULL); settings->sftp_root_directory, NULL);
/* Expose filesystem to connection owner */ /* Expose filesystem to connection owner */
guac_client_for_owner(client, guac_client_for_owner(client,