From 23e0053a419b38bda11bbabe3baba9681d7f8fa1 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Thu, 11 Jul 2013 15:15:34 +0200 Subject: [PATCH] BUG 103: Disable proxy command if set to 'none'. Signed-off-by: Andreas Schneider --- src/options.c | 12 ++++++++---- tests/unittests/torture_options.c | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/options.c b/src/options.c index 398242be..4fc22dfe 100644 --- a/src/options.c +++ b/src/options.c @@ -655,11 +655,15 @@ int ssh_options_set(ssh_session session, enum ssh_options_e type, return -1; } else { SAFE_FREE(session->ProxyCommand); - q = strdup(value); - if (q == NULL) { - return -1; + /* Setting the command to 'none' disables this option. */ + rc = strcasecmp(value, "none"); + if (rc != 0) { + q = strdup(value); + if (q == NULL) { + return -1; + } + session->ProxyCommand = q; } - session->ProxyCommand = q; } break; default: diff --git a/tests/unittests/torture_options.c b/tests/unittests/torture_options.c index 3a6d9f45..2d2bfc4f 100644 --- a/tests/unittests/torture_options.c +++ b/tests/unittests/torture_options.c @@ -119,6 +119,23 @@ static void torture_options_set_identity(void **state) { assert_string_equal(session->identity->root->next->data, "identity1"); } +static void torture_options_proxycommand(void **state) { + ssh_session session = *state; + int rc; + + /* Enable ProxyCommand */ + rc = ssh_options_set(session, SSH_OPTIONS_PROXYCOMMAND, "ssh -q -A -X -W %h:%p JUMPHOST"); + assert_int_equal(rc, 0); + + assert_string_equal(session->ProxyCommand, "ssh -q -A -X -W %h:%p JUMPHOST"); + + /* Disable ProxyCommand */ + rc = ssh_options_set(session, SSH_OPTIONS_PROXYCOMMAND, "none"); + assert_int_equal(rc, 0); + + assert_true(session->ProxyCommand == NULL); +} + int torture_run_tests(void) { int rc; const UnitTest tests[] = { @@ -127,6 +144,7 @@ int torture_run_tests(void) { unit_test_setup_teardown(torture_options_set_fd, setup, teardown), unit_test_setup_teardown(torture_options_set_user, setup, teardown), unit_test_setup_teardown(torture_options_set_identity, setup, teardown), + unit_test_setup_teardown(torture_options_proxycommand, setup, teardown), }; ssh_init();