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 */