From 7e3c9331ad7705d6ffb7ea1fd5de7c99ff4e482b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marc-Andr=C3=A9=20Moreau?= Date: Mon, 26 Mar 2012 03:04:47 -0400 Subject: [PATCH] libfreerdp-utils: add parsing of --tsg option --- include/freerdp/settings.h | 8 +++++--- libfreerdp-core/connection.c | 8 ++++++-- libfreerdp-utils/args.c | 28 +++++++++++++++++++++++++++- 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/include/freerdp/settings.h b/include/freerdp/settings.h index 3982aae..bf099cb 100644 --- a/include/freerdp/settings.h +++ b/include/freerdp/settings.h @@ -278,9 +278,11 @@ struct rdp_settings rdpBlob* password_cookie; /* 61 */ char* kerberos_kdc; /* 62 */ char* kerberos_realm; /* 63 */ - char* tsg_hostname; /* 64 */ - char* tsg_password; /* 65 */ - uint32 paddingC[80 - 66]; /* 66 */ + boolean ts_gateway; /* 64 */ + char* tsg_hostname; /* 65 */ + char* tsg_username; /* 66 */ + char* tsg_password; /* 67 */ + uint32 paddingC[80 - 68]; /* 68 */ /* User Interface Parameters */ boolean sw_gdi; /* 80 */ diff --git a/libfreerdp-core/connection.c b/libfreerdp-core/connection.c index 86a724d..d285f54 100644 --- a/libfreerdp-core/connection.c +++ b/libfreerdp-core/connection.c @@ -69,8 +69,12 @@ boolean rdp_client_connect(rdpRdp* rdp) nego_set_target(rdp->nego, settings->hostname, settings->port); nego_set_cookie(rdp->nego, settings->username); nego_enable_rdp(rdp->nego, settings->rdp_security); - nego_enable_nla(rdp->nego, settings->nla_security); - nego_enable_tls(rdp->nego, settings->tls_security); + + if (!settings->ts_gateway) + { + nego_enable_nla(rdp->nego, settings->nla_security); + nego_enable_tls(rdp->nego, settings->tls_security); + } if (nego_connect(rdp->nego) != true) { diff --git a/libfreerdp-utils/args.c b/libfreerdp-utils/args.c index 9451421..1696cd6 100644 --- a/libfreerdp-utils/args.c +++ b/libfreerdp-utils/args.c @@ -101,11 +101,12 @@ int freerdp_parse_args(rdpSettings* settings, int argc, char** argv, " --ntlm: force NTLM authentication protocol version (1 or 2)\n" " --ignore-certificate: ignore verification of logon certificate\n" " --sec: force protocol security (rdp, tls or nla)\n" + " --tsg: Terminal Server Gateway ( )\n" " --kbd-list: list all keyboard layout ids used by -k\n" " --salted-checksum: use salted checksums with Standard RDP encryption\n" " --version: print version information\n" "\n", argv[0]); - return FREERDP_ARGS_PARSE_HELP; //TODO: What is the correct return + return FREERDP_ARGS_PARSE_HELP; /* TODO: What is the correct return? */ } else if (strcmp("-a", argv[index]) == 0) { @@ -533,6 +534,31 @@ int freerdp_parse_args(rdpSettings* settings, int argc, char** argv, return FREERDP_ARGS_PARSE_FAILURE; } } + else if (strcmp("--tsg", argv[index]) == 0) + { + settings->ts_gateway = true; + index++; + if (index == argc) + { + printf("missing TSG username\n"); + return -1; + } + settings->tsg_username = xstrdup(argv[index]); + index++; + if (index == argc) + { + printf("missing TSG password\n"); + return -1; + } + settings->tsg_password = xstrdup(argv[index]); + index++; + if (index == argc) + { + printf("missing TSG server\n"); + return -1; + } + settings->tsg_hostname = xstrdup(argv[index]); + } else if (strcmp("--plugin", argv[index]) == 0) { index++; -- 2.7.4