diff options
author | Travers Carter <tcarter@noggin.com.au> | 2015-04-12 22:33:06 +1000 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2016-05-03 17:57:45 +0200 |
commit | 67fe6f56eabb121072c7607e534a965bdfe12a03 (patch) | |
tree | ce357b996e72f4ff0997e504b5d281e8cf8cd8ea | |
parent | b5ce15eefa5b3e949d71a640cf03a0c0f42805ae (diff) | |
download | libssh-67fe6f56eabb121072c7607e534a965bdfe12a03.tar.gz libssh-67fe6f56eabb121072c7607e534a965bdfe12a03.tar.xz libssh-67fe6f56eabb121072c7607e534a965bdfe12a03.zip |
Make "Host" pattern list handling consistent with OpenSSH
https://red.libssh.org/issues/187
Signed-off-by: Travers Carter <tcarter@noggin.com.au>
Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
(cherry picked from commit bc2db86d1c8a974cdfa412f9f6c250893ed9a66c)
-rw-r--r-- | src/config.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/src/config.c b/src/config.c index 0d44c215..edbaf80c 100644 --- a/src/config.c +++ b/src/config.c @@ -221,20 +221,24 @@ static int ssh_config_parse_line(ssh_session session, const char *line, case SOC_HOST: *parsing = 0; lowerhost = (session->opts.host) ? ssh_lowercase(session->opts.host) : NULL; + int ok = 0; for (p = ssh_config_get_str_tok(&s, NULL); p != NULL && p[0] != '\0'; p = ssh_config_get_str_tok(&s, NULL)) { - char *z = ssh_path_expand_escape(session, p); - int ok; - - if (z == NULL) { - z = strdup(p); - } - ok = match_hostname(lowerhost, z, strlen(z)); - if (ok) { - *parsing = 1; + if (ok >= 0) { + char *z = ssh_path_expand_escape(session, p); + + if (z == NULL) { + z = strdup(p); + } + ok = match_hostname(lowerhost, z, strlen(z)); + if (ok < 0) { + *parsing = 0; + } else if (ok > 0) { + *parsing = 1; + } + free(z); } - free(z); } SAFE_FREE(lowerhost); break; |