GUACAMOLE-470: Merge support for fully configurable terminal color palette.
diff --git a/src/protocols/ssh/settings.c b/src/protocols/ssh/settings.c
index 923c9e1..2ce9790 100644
--- a/src/protocols/ssh/settings.c
+++ b/src/protocols/ssh/settings.c
@@ -57,6 +57,7 @@
     "read-only",
     "server-alive-interval",
     "backspace",
+    "terminal-type",
     NULL
 };
 
@@ -219,6 +220,12 @@
      */
     IDX_BACKSPACE,
 
+    /**
+     * The terminal emulator type that is passed to the remote system (e.g.
+     * "xterm" or "xterm-256color"). "linux" is used if unspecified.
+     */
+    IDX_TERMINAL_TYPE,
+
     SSH_ARGS_COUNT
 };
 
@@ -363,6 +370,11 @@
         guac_user_parse_args_int(user, GUAC_SSH_CLIENT_ARGS, argv,
                 IDX_BACKSPACE, 127);
 
+    /* Read terminal emulator type. */
+    settings->terminal_type =
+        guac_user_parse_args_string(user, GUAC_SSH_CLIENT_ARGS, argv,
+                IDX_TERMINAL_TYPE, "linux");
+
     /* Parsing was successful */
     return settings;
 
@@ -398,6 +410,9 @@
     free(settings->recording_name);
     free(settings->recording_path);
 
+    /* Free terminal emulator type. */
+    free(settings->terminal_type);
+
     /* Free overall structure */
     free(settings);
 
diff --git a/src/protocols/ssh/settings.h b/src/protocols/ssh/settings.h
index 175ece9..393cfc0 100644
--- a/src/protocols/ssh/settings.h
+++ b/src/protocols/ssh/settings.h
@@ -228,6 +228,11 @@
      */
     int backspace;
 
+    /**
+     * The terminal emulator type that is passed to the remote system.
+     */
+    char* terminal_type;
+
 } guac_ssh_settings;
 
 /**
diff --git a/src/protocols/ssh/ssh.c b/src/protocols/ssh/ssh.c
index 7c76037..a614f81 100644
--- a/src/protocols/ssh/ssh.c
+++ b/src/protocols/ssh/ssh.c
@@ -307,7 +307,8 @@
                 "  Backspace may not work as expected.");
 
     /* Request PTY */
-    if (libssh2_channel_request_pty_ex(ssh_client->term_channel, "linux", sizeof("linux")-1,
+    if (libssh2_channel_request_pty_ex(ssh_client->term_channel,
+            settings->terminal_type, strlen(settings->terminal_type),
             ssh_ttymodes, ttymodeBytes, ssh_client->term->term_width,
             ssh_client->term->term_height, 0, 0)) {
         guac_client_abort(client, GUAC_PROTOCOL_STATUS_UPSTREAM_ERROR, "Unable to allocate PTY.");
diff --git a/src/protocols/telnet/settings.c b/src/protocols/telnet/settings.c
index 45d6290..6e4a773 100644
--- a/src/protocols/telnet/settings.c
+++ b/src/protocols/telnet/settings.c
@@ -51,6 +51,7 @@
     "create-recording-path",
     "read-only",
     "backspace",
+    "terminal-type",
     NULL
 };
 
@@ -183,6 +184,12 @@
      */
     IDX_BACKSPACE,
 
+    /**
+     * The terminal emulator type that is passed to the remote system (e.g.
+     * "xterm" or "xterm-256color"). "linux" is used if unspecified.
+     */
+    IDX_TERMINAL_TYPE,
+
     TELNET_ARGS_COUNT
 };
 
@@ -342,6 +349,11 @@
         guac_user_parse_args_int(user, GUAC_TELNET_CLIENT_ARGS, argv,
                 IDX_BACKSPACE, 127);
 
+    /* Read terminal emulator type. */
+    settings->terminal_type =
+        guac_user_parse_args_string(user, GUAC_TELNET_CLIENT_ARGS, argv,
+                IDX_TERMINAL_TYPE, "linux");
+
     /* Parsing was successful */
     return settings;
 
@@ -381,6 +393,9 @@
     free(settings->recording_name);
     free(settings->recording_path);
 
+    /* Free terminal emulator type. */
+    free(settings->terminal_type);
+
     /* Free overall structure */
     free(settings);
 
diff --git a/src/protocols/telnet/settings.h b/src/protocols/telnet/settings.h
index 9bc3dc3..7d8d6ee 100644
--- a/src/protocols/telnet/settings.h
+++ b/src/protocols/telnet/settings.h
@@ -214,6 +214,11 @@
      */
     int backspace;
 
+    /**
+     * The terminal emulator type that is passed to the remote system.
+     */
+    char* terminal_type;
+
 } guac_telnet_settings;
 
 /**
diff --git a/src/protocols/telnet/telnet.c b/src/protocols/telnet/telnet.c
index 040d10b..e902c3b 100644
--- a/src/protocols/telnet/telnet.c
+++ b/src/protocols/telnet/telnet.c
@@ -216,7 +216,7 @@
         /* Terminal type request */
         case TELNET_EV_TTYPE:
             if (event->ttype.cmd == TELNET_TTYPE_SEND)
-                telnet_ttype_is(telnet_client->telnet, "linux");
+                telnet_ttype_is(telnet_client->telnet, settings->terminal_type);
             break;
 
         /* Environment request */