From 7e9dcc39100969ab031c5da39c16bc3b6cab25a7 Mon Sep 17 00:00:00 2001 From: naddy Date: Wed, 20 Jul 2016 10:45:27 +0000 Subject: [PATCH] Do not clobber the global jump_host variables when parsing an inactive configuration. ok djm@ --- usr.bin/ssh/readconf.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/usr.bin/ssh/readconf.c b/usr.bin/ssh/readconf.c index 293880c7fd2..c947a6929f5 100644 --- a/usr.bin/ssh/readconf.c +++ b/usr.bin/ssh/readconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.c,v 1.257 2016/07/15 00:24:30 djm Exp $ */ +/* $OpenBSD: readconf.c,v 1.258 2016/07/20 10:45:27 naddy Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -2269,13 +2269,14 @@ parse_jump(const char *s, Options *o, int active) { char *orig, *sdup, *cp; char *host = NULL, *user = NULL; - int ret = -1, port = -1; + int ret = -1, port = -1, first; active &= o->proxy_command == NULL && o->jump_host == NULL; orig = sdup = xstrdup(s); + first = active; while ((cp = strsep(&sdup, ",")) && cp != NULL) { - if (active) { + if (first) { /* First argument and configuration is active */ if (parse_user_host_port(cp, &user, &host, &port) != 0) goto out; @@ -2284,19 +2285,21 @@ parse_jump(const char *s, Options *o, int active) if (parse_user_host_port(cp, NULL, NULL, NULL) != 0) goto out; } - active = 0; /* only check syntax for subsequent hosts */ + first = 0; /* only check syntax for subsequent hosts */ } /* success */ - free(orig); - o->jump_user = user; - o->jump_host = host; - o->jump_port = port; - o->proxy_command = xstrdup("none"); - user = host = NULL; - if ((cp = strchr(s, ',')) != NULL && cp[1] != '\0') - o->jump_extra = xstrdup(cp + 1); + if (active) { + o->jump_user = user; + o->jump_host = host; + o->jump_port = port; + o->proxy_command = xstrdup("none"); + user = host = NULL; + if ((cp = strchr(s, ',')) != NULL && cp[1] != '\0') + o->jump_extra = xstrdup(cp + 1); + } ret = 0; out: + free(orig); free(user); free(host); return ret; -- 2.20.1