From f7bdd779d6dd6eb9d519deffe138dfe10a8ce8fd Mon Sep 17 00:00:00 2001 From: Jakub Jelen Date: Tue, 4 Mar 2025 13:48:50 +0100 Subject: [PATCH] config: Be less strict when parsing unknown Match keywords Signed-off-by: Jakub Jelen Reviewed-by: Andreas Schneider --- src/config.c | 16 ++++++++-------- tests/unittests/torture_config.c | 4 +++- tests/unittests/torture_options.c | 2 +- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/config.c b/src/config.c index e0750630..a0caec1f 100644 --- a/src/config.c +++ b/src/config.c @@ -1010,17 +1010,17 @@ ssh_config_parse_line(ssh_session session, case MATCH_UNKNOWN: default: - ssh_set_error(session, SSH_FATAL, - "ERROR - Unknown argument '%s' for Match keyword", p); - SAFE_FREE(x); - return -1; + SSH_LOG(SSH_LOG_WARN, + "Unknown argument '%s' for Match keyword. Not matching", + p); + result = 0; + break; } } while (p != NULL && p[0] != '\0'); if (args == 0) { - ssh_set_error(session, SSH_FATAL, - "ERROR - Match keyword requires an argument"); - SAFE_FREE(x); - return -1; + SSH_LOG(SSH_LOG_WARN, + "ERROR - Match keyword requires an argument. Not matching"); + result = 0; } *parsing = result; break; diff --git a/tests/unittests/torture_config.c b/tests/unittests/torture_config.c index 17eb32ab..b96b13ca 100644 --- a/tests/unittests/torture_config.c +++ b/tests/unittests/torture_config.c @@ -959,7 +959,9 @@ static void torture_config_match(void **state, string = config; } torture_reset_config(session); - _parse_config(session, file, string, SSH_ERROR); + ssh_options_set(session, SSH_OPTIONS_HOST, "unmatched"); + _parse_config(session, file, string, SSH_OK); + assert_string_equal(session->opts.host, "unmatched"); /* Missing argument to unsupported option originalhost */ config = "Match originalhost\n" diff --git a/tests/unittests/torture_options.c b/tests/unittests/torture_options.c index 3beaedbb..d9104598 100644 --- a/tests/unittests/torture_options.c +++ b/tests/unittests/torture_options.c @@ -1070,7 +1070,7 @@ static void torture_options_config_match(void **state) fclose(config); rv = ssh_options_parse_config(session, "test_config"); - assert_ssh_return_code_equal(session, rv, SSH_ERROR); + assert_ssh_return_code_equal(session, rv, SSH_OK); /* The Match all keyword needs to be the only one (start) */ torture_reset_config(session);