From 4b22fd8ecefd059a66140be67f352eb6145a9d88 Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Tue, 22 May 2018 00:13:26 +0000 Subject: upstream: support ProxyJump=none to disable ProxyJump functionality; bz#2869 ok dtucker@ OpenBSD-Commit-ID: 1c06ee08eb78451b5837fcfd8cbebc5ff3a67a01 --- readconf.c | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/readconf.c b/readconf.c index 5a1055bcb..7b7a0d7e0 100644 --- a/readconf.c +++ b/readconf.c @@ -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 * Copyright (c) 1995 Tatu Ylonen , 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; -- cgit v1.2.3