From 286f5a77c3bfec1e8892ca268087ac885ac871bf Mon Sep 17 00:00:00 2001 From: "djm@openbsd.org" Date: Fri, 22 Jul 2016 03:35:11 +0000 Subject: upstream commit reverse the order in which -J/JumpHost proxies are visited to be more intuitive and document reported by and manpage bits naddy@ Upstream-ID: 3a68fd6a841fd6cf8cedf6552a9607ba99df179a --- readconf.c | 25 ++++++++++++++++--------- ssh_config.5 | 7 ++++--- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/readconf.c b/readconf.c index 8b5b21907..c177202b1 100644 --- a/readconf.c +++ b/readconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.c,v 1.258 2016/07/20 10:45:27 naddy Exp $ */ +/* $OpenBSD: readconf.c,v 1.259 2016/07/22 03:35:11 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -2292,7 +2292,12 @@ parse_jump(const char *s, Options *o, int active) orig = sdup = xstrdup(s); first = active; - while ((cp = strsep(&sdup, ",")) && cp != NULL) { + do { + if ((cp = strrchr(sdup, ',')) == NULL) + cp = sdup; /* last */ + else + *cp++ = '\0'; + if (first) { /* First argument and configuration is active */ if (parse_user_host_port(cp, &user, &host, &port) != 0) @@ -2303,7 +2308,7 @@ parse_jump(const char *s, Options *o, int active) goto out; } first = 0; /* only check syntax for subsequent hosts */ - } + } while (cp != sdup); /* success */ if (active) { o->jump_user = user; @@ -2311,8 +2316,10 @@ parse_jump(const char *s, Options *o, int active) 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 ((cp = strrchr(s, ',')) != NULL && cp != s) { + o->jump_extra = xstrdup(s); + o->jump_extra[cp - s] = '\0'; + } } ret = 0; out: @@ -2636,6 +2643,9 @@ dump_client_config(Options *o, const char *host) strspn(o->jump_host, "1234567890.") == strlen(o->jump_host); snprintf(buf, sizeof(buf), "%d", o->jump_port); printf("proxyjump %s%s%s%s%s%s%s%s%s\n", + /* optional additional jump spec */ + o->jump_extra == NULL ? "" : o->jump_extra, + o->jump_extra == NULL ? "" : ",", /* optional user */ o->jump_user == NULL ? "" : o->jump_user, o->jump_user == NULL ? "" : "@", @@ -2647,9 +2657,6 @@ dump_client_config(Options *o, const char *host) i ? "]" : "", /* optional port number */ o->jump_port <= 0 ? "" : ":", - o->jump_port <= 0 ? "" : buf, - /* optional additional jump spec */ - o->jump_extra == NULL ? "" : ",", - o->jump_extra == NULL ? "" : o->jump_extra); + o->jump_port <= 0 ? "" : buf); } } diff --git a/ssh_config.5 b/ssh_config.5 index 56d7798ca..fd7af4b62 100644 --- a/ssh_config.5 +++ b/ssh_config.5 @@ -33,8 +33,8 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.\" $OpenBSD: ssh_config.5,v 1.234 2016/07/16 06:57:55 jmc Exp $ -.Dd $Mdocdate: July 16 2016 $ +.\" $OpenBSD: ssh_config.5,v 1.235 2016/07/22 03:35:11 djm Exp $ +.Dd $Mdocdate: July 22 2016 $ .Dt SSH_CONFIG 5 .Os .Sh NAME @@ -1367,7 +1367,8 @@ Specifies one or more jump proxies as .Op : Ns Ar port .Sm on .Xc . -Multiple proxies may be separated by comma characters. +Multiple proxies may be separated by comma characters and will be visited +left-to-right. Setting this option will cause .Xr ssh 1 to connect to the target host by first making a -- cgit v1.2.3