diff -rupN a/src/options.c b/src/options.c --- a/options.c 2013-01-22 11:38:30.000000000 +0100 +++ b/src/options.c 2013-07-15 09:45:28.000000000 +0200 @@ -655,11 +655,15 @@ int ssh_options_set(ssh_session session, 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: --- a/tests/unittests/torture_options.c.orig 2013-07-25 22:06:19.016024956 +0200 +++ b/tests/unittests/torture_options.c 2013-07-25 22:11:28.941507282 +0200 @@ -119,6 +119,24 @@ 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->opts.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_null(session->opts.ProxyCommand); +} + + int torture_run_tests(void) { int rc; const UnitTest tests[] = {