]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
upstream: support ProxyJump=none to disable ProxyJump
authordjm@openbsd.org <djm@openbsd.org>
Tue, 22 May 2018 00:13:26 +0000 (00:13 +0000)
committerDamien Miller <djm@mindrot.org>
Tue, 22 May 2018 00:15:18 +0000 (10:15 +1000)
functionality; bz#2869 ok dtucker@

OpenBSD-Commit-ID: 1c06ee08eb78451b5837fcfd8cbebc5ff3a67a01

readconf.c

index 5a1055bcb49ea671ec09051916cc4b835d000a36..7b7a0d7e0af6480e8d0c56b5d135777953f63c78 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: readconf.c,v 1.286 2018/04/06 13:02:39 djm Exp $ */
+/* $OpenBSD: readconf.c,v 1.287 2018/05/22 00:13:26 djm Exp $ */
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -2072,6 +2072,12 @@ fill_default_options(Options * options)
        CLEAR_ON_NONE(options->proxy_command);
        CLEAR_ON_NONE(options->control_path);
        CLEAR_ON_NONE(options->revoked_host_keys);
+       if (options->jump_host != NULL &&
+           strcmp(options->jump_host, "none") == 0 &&
+           options->jump_port == 0 && options->jump_user == NULL) {
+               free(options->jump_host);
+               options->jump_host = NULL;
+       }
        /* options->identity_agent distinguishes NULL from 'none' */
        /* options->user will be set in the main program if appropriate */
        /* options->hostname will be set in the main program if appropriate */
@@ -2300,6 +2306,8 @@ parse_jump(const char *s, Options *o, int active)
        orig = sdup = xstrdup(s);
        first = active;
        do {
+               if (strcasecmp(s, "none") == 0)
+                       break;
                if ((cp = strrchr(sdup, ',')) == NULL)
                        cp = sdup; /* last */
                else
@@ -2320,14 +2328,19 @@ parse_jump(const char *s, Options *o, int active)
        } while (cp != sdup);
        /* success */
        if (active) {
-               o->jump_user = user;
-               o->jump_host = host;
-               o->jump_port = port;
-               o->proxy_command = xstrdup("none");
-               user = host = NULL;
-               if ((cp = strrchr(s, ',')) != NULL && cp != s) {
-                       o->jump_extra = xstrdup(s);
-                       o->jump_extra[cp - s] = '\0';
+               if (strcasecmp(s, "none") == 0) {
+                       o->jump_host = xstrdup("none");
+                       o->jump_port = 0;
+               } else {
+                       o->jump_user = user;
+                       o->jump_host = host;
+                       o->jump_port = port;
+                       o->proxy_command = xstrdup("none");
+                       user = host = NULL;
+                       if ((cp = strrchr(s, ',')) != NULL && cp != s) {
+                               o->jump_extra = xstrdup(s);
+                               o->jump_extra[cp - s] = '\0';
+                       }
                }
        }
        ret = 0;