upstream commit

Do not clobber the global jump_host variables when
parsing an inactive configuration.  ok djm@

Upstream-ID: 5362210944d91417d5976346d41ac0b244350d31
This commit is contained in:
naddy@openbsd.org 2016-07-20 10:45:27 +00:00 committed by Damien Miller
parent 32d921c323
commit 324583e8fb
1 changed files with 15 additions and 12 deletions

View File

@ -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;