From bccb8513fa4a836aef0519d65eb33bb212606fe1 Mon Sep 17 00:00:00 2001 From: Thomas Baag Date: Wed, 21 Sep 2022 20:55:27 +0200 Subject: [PATCH] config: Escape brackets in ProxyCommand build from ProxyJump Missing escaping results in syntax errors in Zsh shell because of square brackets getting interpreted as being a pattern for globbing. Signed-off-by: Thomas Baag Reviewed-by: Jakub Jelen Conflict:NA Reference:https://git.libssh.org/projects/libssh.git/commit?id=bccb8513fa --- src/config.c | 2 +- tests/unittests/torture_config.c | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/config.c b/src/config.c index d34ba5f..54a1a6e 100644 --- a/src/config.c +++ b/src/config.c @@ -351,7 +351,7 @@ ssh_config_parse_proxy_jump(ssh_session session, const char *s, bool do_parsing) if (hostname != NULL && do_parsing) { char com[512] = {0}; - rv = snprintf(com, sizeof(com), "ssh%s%s%s%s%s%s -W [%%h]:%%p %s", + rv = snprintf(com, sizeof(com), "ssh%s%s%s%s%s%s -W '[%%h]:%%p' %s", username ? " -l " : "", username ? username : "", port ? " -p " : "", diff --git a/tests/unittests/torture_config.c b/tests/unittests/torture_config.c index f91112a..b368a72 100644 --- a/tests/unittests/torture_config.c +++ b/tests/unittests/torture_config.c @@ -615,7 +615,7 @@ static void torture_config_proxyjump(void **state) { ssh_options_set(session, SSH_OPTIONS_HOST, "simple"); ret = ssh_config_parse_file(session, LIBSSH_TESTCONFIG11); assert_ssh_return_code(session, ret); - assert_string_equal(session->opts.ProxyCommand, "ssh -W [%h]:%p jumpbox"); + assert_string_equal(session->opts.ProxyCommand, "ssh -W '[%h]:%p' jumpbox"); /* With username */ torture_reset_config(session); @@ -623,7 +623,7 @@ static void torture_config_proxyjump(void **state) { ret = ssh_config_parse_file(session, LIBSSH_TESTCONFIG11); assert_ssh_return_code(session, ret); assert_string_equal(session->opts.ProxyCommand, - "ssh -l user -W [%h]:%p jumpbox"); + "ssh -l user -W '[%h]:%p' jumpbox"); /* With port */ torture_reset_config(session); @@ -631,7 +631,7 @@ static void torture_config_proxyjump(void **state) { ret = ssh_config_parse_file(session, LIBSSH_TESTCONFIG11); assert_ssh_return_code(session, ret); assert_string_equal(session->opts.ProxyCommand, - "ssh -p 2222 -W [%h]:%p jumpbox"); + "ssh -p 2222 -W '[%h]:%p' jumpbox"); /* Two step jump */ torture_reset_config(session); @@ -639,7 +639,7 @@ static void torture_config_proxyjump(void **state) { ret = ssh_config_parse_file(session, LIBSSH_TESTCONFIG11); assert_ssh_return_code(session, ret); assert_string_equal(session->opts.ProxyCommand, - "ssh -l u1 -p 222 -J u2@second:33 -W [%h]:%p first"); + "ssh -l u1 -p 222 -J u2@second:33 -W '[%h]:%p' first"); /* none */ torture_reset_config(session); @@ -661,7 +661,7 @@ static void torture_config_proxyjump(void **state) { ret = ssh_config_parse_file(session, LIBSSH_TESTCONFIG11); assert_ssh_return_code(session, ret); assert_string_equal(session->opts.ProxyCommand, - "ssh -W [%h]:%p jumpbox"); + "ssh -W '[%h]:%p' jumpbox"); /* IPv6 address */ torture_reset_config(session); @@ -669,7 +669,7 @@ static void torture_config_proxyjump(void **state) { ret = ssh_config_parse_file(session, LIBSSH_TESTCONFIG11); assert_ssh_return_code(session, ret); assert_string_equal(session->opts.ProxyCommand, - "ssh -W [%h]:%p 2620:52:0::fed"); + "ssh -W '[%h]:%p' 2620:52:0::fed"); /* Try to create some invalid configurations */ /* Non-numeric port */ -- 2.23.0