]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
upstream commit
authornaddy@openbsd.org <naddy@openbsd.org>
Wed, 20 Jul 2016 10:45:27 +0000 (10:45 +0000)
committerDamien Miller <djm@mindrot.org>
Fri, 22 Jul 2016 03:36:40 +0000 (13:36 +1000)
Do not clobber the global jump_host variables when
parsing an inactive configuration.  ok djm@

Upstream-ID: 5362210944d91417d5976346d41ac0b244350d31

readconf.c

index cb2999d8221d41604305c10086af79ed02301bdf..8b5b2190719f42adad4626ba1c844430b676f518 100644 (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;