diff options
author | Andreas Schneider <asn@cryptomilk.org> | 2013-12-21 12:30:32 +0100 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2013-12-21 14:37:55 +0100 |
commit | 6eea08a9effa577a0df49b2dbfc456ed0cbd6a6d (patch) | |
tree | ddded2c4ed93e65cb0dce52ae945498b4e64f260 | |
parent | 3ba2e7ace7005203aaf1aa98234a6fcf325aeb34 (diff) | |
download | libssh-6eea08a9effa577a0df49b2dbfc456ed0cbd6a6d.tar.gz libssh-6eea08a9effa577a0df49b2dbfc456ed0cbd6a6d.tar.xz libssh-6eea08a9effa577a0df49b2dbfc456ed0cbd6a6d.zip |
config: Support expansion in the Host variable too.
BUG: https://red.libssh.org/issues/127
-rw-r--r-- | src/config.c | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/src/config.c b/src/config.c index 850928d9..c8c05160 100644 --- a/src/config.c +++ b/src/config.c @@ -219,16 +219,25 @@ static int ssh_config_parse_line(ssh_session session, const char *line, switch (opcode) { case SOC_HOST: - *parsing = 0; - lowerhost = (session->opts.host) ? ssh_lowercase(session->opts.host) : NULL; - for (p = ssh_config_get_str_tok(&s, NULL); p && *p; - p = ssh_config_get_str_tok(&s, NULL)) { - if (match_hostname(lowerhost, p, strlen(p))) { - *parsing = 1; + *parsing = 0; + lowerhost = (session->opts.host) ? ssh_lowercase(session->opts.host) : NULL; + 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; + } + free(z); } - } - SAFE_FREE(lowerhost); - break; + SAFE_FREE(lowerhost); + break; case SOC_HOSTNAME: p = ssh_config_get_str_tok(&s, NULL); if (p && *parsing) { |