aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schneider <asn@cryptomilk.org>2013-12-21 12:30:32 +0100
committerAndreas Schneider <asn@cryptomilk.org>2013-12-21 14:37:55 +0100
commit6eea08a9effa577a0df49b2dbfc456ed0cbd6a6d (patch)
treeddded2c4ed93e65cb0dce52ae945498b4e64f260
parent3ba2e7ace7005203aaf1aa98234a6fcf325aeb34 (diff)
downloadlibssh-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.c27
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) {