reverse the order in which -J/JumpHost proxies are visited to be
authordjm <djm@openbsd.org>
Fri, 22 Jul 2016 03:35:11 +0000 (03:35 +0000)
committerdjm <djm@openbsd.org>
Fri, 22 Jul 2016 03:35:11 +0000 (03:35 +0000)
more intuitive and document

reported by and manpage bits naddy@

usr.bin/ssh/readconf.c
usr.bin/ssh/ssh_config.5

index c947a69..c84e7e4 100644 (file)
@@ -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 <ylo@cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -2275,7 +2275,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)
@@ -2286,7 +2291,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;
@@ -2294,8 +2299,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:
@@ -2619,6 +2626,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 ? "" : "@",
@@ -2630,9 +2640,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);
        }
 }
index 56d7798..fd7af4b 100644 (file)
@@ -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