summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornaddy@openbsd.org <naddy@openbsd.org>2016-07-20 10:45:27 +0000
committerDamien Miller <djm@mindrot.org>2016-07-22 13:36:40 +1000
commit324583e8fb3935690be58790425793df619c6d4d (patch)
treea3c3282558dd1221d32f2554ea9314742c90554e
parent32d921c323b989d28405e78d0a8923d12913d737 (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.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/readconf.c b/readconf.c
index cb2999d8..8b5b2190 100644
--- a/readconf.c
+++ b/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 <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;