diff options
author | djm@openbsd.org <djm@openbsd.org> | 2020-12-21 09:19:53 +0000 |
---|---|---|
committer | Darren Tucker <dtucker@dtucker.net> | 2020-12-21 22:35:41 +1100 |
commit | a11ca015879eab941add8c6bdaaec7d41107c6f5 (patch) | |
tree | 72a864f965282516403a2e7792dc4f5d9f3b3e7f /readconf.c | |
parent | d97fb879724f1670bf55d9adfea7278a93c33ae2 (diff) | |
download | openssh-git-a11ca015879eab941add8c6bdaaec7d41107c6f5.tar.gz |
upstream: properly fix ProxyJump parsing; Thanks to tb@ for
pointing out my error (parse_ssh_uri() can return -1/0/1, that I missed).
Reported by Raf Czlonka via bugs@
ok tb@
OpenBSD-Commit-ID: a2991a3794bcaf1ca2b025212cce11cdb5f6b7d6
Diffstat (limited to 'readconf.c')
-rw-r--r-- | readconf.c | 13 |
1 files changed, 9 insertions, 4 deletions
@@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.c,v 1.344 2020/12/17 23:10:27 djm Exp $ */ +/* $OpenBSD: readconf.c,v 1.345 2020/12/21 09:19:53 djm Exp $ */ /* * Author: Tatu Ylonen <ylo@cs.hut.fi> * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland @@ -2783,7 +2783,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; @@ -2799,14 +2799,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); |