On Mon, Dec 21, 2020 at 08:10:59PM +1100, Damien Miller wrote: > Sorry, this snuck back in along with another commit. > > Does this fix it?
Yes. I was hesitating doing something equivalent to this, but went for the plain revert in my proposed diff. ok tb > > diff --git a/readconf.c b/readconf.c > index cec6844..85e8c6f 100644 > --- a/readconf.c > +++ b/readconf.c > @@ -2769,7 +2769,7 @@ parse_jump(const char *s, Options *o, int active) > { > char *orig, *sdup, *cp; > char *host = NULL, *user = NULL; > - int ret = -1, port = -1, first; > + int r, ret = -1, port = -1, first; > > active &= o->proxy_command == NULL && o->jump_host == NULL; > > @@ -2785,14 +2785,19 @@ parse_jump(const char *s, Options *o, int active) > > if (first) { > /* First argument and configuration is active */ > - if (parse_ssh_uri(cp, &user, &host, &port) == -1 && > - parse_user_host_port(cp, &user, &host, &port) != 0) > + r = parse_ssh_uri(cp, &user, &host, &port); > + if (r == -1 || (r == 1 && > + parse_user_host_port(cp, &user, &host, &port) != 0)) > goto out; > } else { > /* Subsequent argument or inactive configuration */ > if (parse_ssh_uri(cp, NULL, NULL, NULL) == -1 && > parse_user_host_port(cp, NULL, NULL, NULL) != 0) > goto out; > + r = parse_ssh_uri(cp, NULL, NULL, NULL); > + if (r == -1 || (r == 1 && > + parse_user_host_port(cp, NULL, NULL, NULL) != 0)) > + goto out; > } > first = 0; /* only check syntax for subsequent hosts */ > } while (cp != sdup); > > On Mon, 21 Dec 2020, Theo Buehler wrote: > > > Not sure if you saw that. Seems to be a logic error due to the fact that > > parse_ssh_uri() has three possible return values (-1, 0, 1), not 2. > > Full original report is here: > > > > https://marc.info/?l=openbsd-bugs&m=160844761615469&w=2 > > > > ----- Forwarded message from Theo Buehler <t...@theobuehler.org> ----- > > > > Date: Sun, 20 Dec 2020 14:18:02 +0100 > > From: Theo Buehler <t...@theobuehler.org> > > To: Raf Czlonka <rczlo...@gmail.com> > > Cc: bugs@openbsd.org > > Subject: Re: ssh_config(5) ProxyJump option not working in the latest > > snapshot > > > > > I can see that there's been a number of changes committed to OpenSSH > > > recently[0] so, unless there's a snapshot-only change, this is most > > > likely related. > > > > Reverting this part of the change in readconf.c r1.344 "fixes" it for me. > > The issue I run into with 'ssh -J host1 host2' is that parse_ssh_uri() > > returns 1, in which case there no longer is a fallback to > > parse_user_host_port(), so options->jump_host remains unset and the > > "Setting implicit ProxyCommand from ProxyJump" path is no longer taken > > in main(). > > > > Index: readconf.c > > =================================================================== > > RCS file: /cvs/src/usr.bin/ssh/readconf.c,v > > retrieving revision 1.344 > > diff -u -p -r1.344 readconf.c > > --- readconf.c 17 Dec 2020 23:10:27 -0000 1.344 > > +++ readconf.c 20 Dec 2020 11:49:16 -0000 > > @@ -2778,12 +2778,12 @@ parse_jump(const char *s, Options *o, in > > > > if (first) { > > /* First argument and configuration is active */ > > - if (parse_ssh_uri(cp, &user, &host, &port) == -1 && > > + if (parse_ssh_uri(cp, &user, &host, &port) == -1 || > > parse_user_host_port(cp, &user, &host, &port) != 0) > > goto out; > > } else { > > /* Subsequent argument or inactive configuration */ > > - if (parse_ssh_uri(cp, NULL, NULL, NULL) == -1 && > > + if (parse_ssh_uri(cp, NULL, NULL, NULL) == -1 || > > parse_user_host_port(cp, NULL, NULL, NULL) != 0) > > goto out; > > } > > > > > > ----- End forwarded message ----- > >