diff --git a/tests/unittests/torture_config.c b/tests/unittests/torture_config.c index beb1ce79..7efa32db 100644 --- a/tests/unittests/torture_config.c +++ b/tests/unittests/torture_config.c @@ -547,6 +547,48 @@ static void torture_config_match(void **state) assert_ssh_return_code(session, ret); assert_string_equal(session->opts.host, "otherhost"); + torture_write_file(LIBSSH_TESTCONFIG10, + "Match exec /bin/true\n" + "\tHostName execed-true.com\n" + ""); + torture_reset_config(session); + ret = ssh_config_parse_file(session, LIBSSH_TESTCONFIG10); + assert_ssh_return_code(session, ret); +#ifdef _WIN32 + /* The match exec is not supported on windows at this moment */ + assert_string_equal(session->opts.host, "otherhost"); +#else + assert_string_equal(session->opts.host, "execed-true.com"); +#endif + + torture_write_file(LIBSSH_TESTCONFIG10, + "Match !exec /bin/false\n" + "\tHostName execed-false.com\n" + ""); + torture_reset_config(session); + ret = ssh_config_parse_file(session, LIBSSH_TESTCONFIG10); + assert_ssh_return_code(session, ret); +#ifdef _WIN32 + /* The match exec is not supported on windows at this moment */ + assert_string_equal(session->opts.host, "otherhost"); +#else + assert_string_equal(session->opts.host, "execed-false.com"); +#endif + + torture_write_file(LIBSSH_TESTCONFIG10, + "Match exec \"test -f /bin/true\"\n" + "\tHostName execed-arguments.com\n" + ""); + torture_reset_config(session); + ret = ssh_config_parse_file(session, LIBSSH_TESTCONFIG10); + assert_ssh_return_code(session, ret); +#ifdef _WIN32 + /* The match exec is not supported on windows at this moment */ + assert_string_equal(session->opts.host, "otherhost"); +#else + assert_string_equal(session->opts.host, "execed-arguments.com"); +#endif + /* Try to create some invalid configurations */ /* Missing argument to Match*/ torture_write_file(LIBSSH_TESTCONFIG10, @@ -593,7 +635,7 @@ static void torture_config_match(void **state) ret = ssh_config_parse_file(session, LIBSSH_TESTCONFIG10); assert_ssh_return_code_equal(session, ret, SSH_ERROR); - /* Missing argument to unsupported option exec */ + /* Missing argument to option exec */ torture_write_file(LIBSSH_TESTCONFIG10, "Match exec\n" "\tUser exec\n" diff --git a/tests/unittests/torture_options.c b/tests/unittests/torture_options.c index 396772d8..f33ada20 100644 --- a/tests/unittests/torture_options.c +++ b/tests/unittests/torture_options.c @@ -688,7 +688,7 @@ static void torture_options_config_match(void **state) session->opts.port = 0; - /* The Match exec keyword is ignored */ + /* The Match exec keyword */ torture_reset_config(session); config = fopen("test_config", "w"); assert_non_null(config); @@ -701,24 +701,12 @@ static void torture_options_config_match(void **state) rv = ssh_options_parse_config(session, "test_config"); assert_ssh_return_code(session, rv); +#ifdef _WIN32 + /* The match exec is not supported on windows at this moment */ assert_int_equal(session->opts.port, 34); - - session->opts.port = 0; - - /* The Match exec keyword can accept more arguments */ - torture_reset_config(session); - config = fopen("test_config", "w"); - assert_non_null(config); - fputs("Match exec /bin/true 1 \n" - "\tPort 33\n" - "Match all\n" - "\tPort 34\n", - config); - fclose(config); - - rv = ssh_options_parse_config(session, "test_config"); - assert_ssh_return_code(session, rv); - assert_int_equal(session->opts.port, 34); +#else + assert_int_equal(session->opts.port, 33); +#endif session->opts.port = 0; @@ -735,7 +723,34 @@ static void torture_options_config_match(void **state) rv = ssh_options_parse_config(session, "test_config"); assert_ssh_return_code(session, rv); +#ifdef _WIN32 + /* The match exec is not supported on windows at this moment */ assert_int_equal(session->opts.port, 34); +#else + assert_int_equal(session->opts.port, 33); +#endif + + session->opts.port = 0; + + /* Commands containing whitespace characters must be quoted. */ + torture_reset_config(session); + config = fopen("test_config", "w"); + assert_non_null(config); + fputs("Match exec \"/bin/true 1\"\n" + "\tPort 33\n" + "Match all\n" + "\tPort 34\n", + config); + fclose(config); + + rv = ssh_options_parse_config(session, "test_config"); + assert_ssh_return_code(session, rv); +#ifdef _WIN32 + /* The match exec is not supported on windows at this moment */ + assert_int_equal(session->opts.port, 34); +#else + assert_int_equal(session->opts.port, 33); +#endif session->opts.port = 0;