GUACAMOLE-927: Merge automatically set $HOME for sake of FreeRDP initialization process

This commit is contained in:
Virtually Nick 2020-01-18 06:13:45 -05:00 committed by GitHub
commit a384e749e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 42 additions and 1 deletions

View File

@ -38,11 +38,45 @@
#include <guacamole/audio.h> #include <guacamole/audio.h>
#include <guacamole/client.h> #include <guacamole/client.h>
#include <errno.h>
#include <pthread.h> #include <pthread.h>
#include <pwd.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
#include <sys/types.h>
int guac_client_init(guac_client* client, int argc, char** argv) { int guac_client_init(guac_client* client, int argc, char** argv) {
/* Automatically set HOME environment variable if unset (FreeRDP's
* initialization process will fail within freerdp_settings_new() if this
* is unset) */
const char* current_home = getenv("HOME");
if (current_home == NULL) {
/* Warn if the correct home directory cannot be determined */
struct passwd* passwd = getpwuid(getuid());
if (passwd == NULL)
guac_client_log(client, GUAC_LOG_WARNING, "FreeRDP initialization "
"may fail: The \"HOME\" environment variable is unset and "
"its correct value could not be automatically determined: "
"%s", strerror(errno));
/* Warn if the correct home directory could be determined but can't be
* assigned */
else if (setenv("HOME", passwd->pw_dir, 1))
guac_client_log(client, GUAC_LOG_WARNING, "FreeRDP initialization "
"may fail: The \"HOME\" environment variable is unset "
"and its correct value (detected as \"%s\") could not be "
"assigned: %s", passwd->pw_dir, strerror(errno));
/* HOME has been successfully set */
else
guac_client_log(client, GUAC_LOG_DEBUG, "\"HOME\" "
"environment variable was unset and has been "
"automatically set to \"%s\"", passwd->pw_dir);
}
/* Set client args */ /* Set client args */
client->args = GUAC_RDP_CLIENT_ARGS; client->args = GUAC_RDP_CLIENT_ARGS;

View File

@ -367,7 +367,14 @@ static int guac_rdp_handle_connection(guac_client* client) {
/* Allocate FreeRDP context */ /* Allocate FreeRDP context */
rdp_inst->ContextSize = sizeof(rdp_freerdp_context); rdp_inst->ContextSize = sizeof(rdp_freerdp_context);
freerdp_context_new(rdp_inst); if (!freerdp_context_new(rdp_inst)) {
guac_client_abort(client, GUAC_PROTOCOL_STATUS_SERVER_ERROR,
"FreeRDP initialization failed before connecting. Please "
"check for errors earlier in the logs and/or enable "
"debug-level logging for guacd.");
return 1;
}
((rdp_freerdp_context*) rdp_inst->context)->client = client; ((rdp_freerdp_context*) rdp_inst->context)->client = client;
/* Load keymap into client */ /* Load keymap into client */