diff --git a/src/protocols/rdp/client.c b/src/protocols/rdp/client.c index c79e59d8..db98d9b7 100644 --- a/src/protocols/rdp/client.c +++ b/src/protocols/rdp/client.c @@ -38,11 +38,45 @@ #include #include +#include #include +#include #include +#include +#include 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 */ client->args = GUAC_RDP_CLIENT_ARGS;