diff options
author | naddy@openbsd.org <naddy@openbsd.org> | 2016-07-20 10:45:27 +0000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2016-07-22 13:36:40 +1000 |
commit | 324583e8fb3935690be58790425793df619c6d4d (patch) | |
tree | a3c3282558dd1221d32f2554ea9314742c90554e | |
parent | 32d921c323b989d28405e78d0a8923d12913d737 (diff) |
upstream commit
Do not clobber the global jump_host variables when
parsing an inactive configuration. ok djm@
Upstream-ID: 5362210944d91417d5976346d41ac0b244350d31
-rw-r--r-- | readconf.c | 27 |
1 files changed, 15 insertions, 12 deletions
@@ -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 <ylo@cs.hut.fi> * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland @@ -2286,13 +2286,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; @@ -2301,19 +2302,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; |