diff options
author | 2018-10-05 14:26:09 +0000 | |
---|---|---|
committer | 2018-10-05 14:26:09 +0000 | |
commit | c514dff9ea96685a62107b15c6cdb92065915e80 (patch) | |
tree | fa3dd9866221b544b0053cd7066f25c7a0509f08 | |
parent | Garbage-collect the now unused __statement() macro. (diff) | |
download | wireguard-openbsd-c514dff9ea96685a62107b15c6cdb92065915e80.tar.xz wireguard-openbsd-c514dff9ea96685a62107b15c6cdb92065915e80.zip |
Support using service names for port numbers.
* Try to resolve a port specification with getservbyname(3) if a
numeric conversion fails.
* Make the "Port" option in ssh_config handle its argument as a
port rather than a plain integer.
ok dtucker@ deraadt@
-rw-r--r-- | usr.bin/ssh/misc.c | 12 | ||||
-rw-r--r-- | usr.bin/ssh/readconf.c | 21 |
2 files changed, 23 insertions, 10 deletions
diff --git a/usr.bin/ssh/misc.c b/usr.bin/ssh/misc.c index e6051a05bd8..202b6d8e7a8 100644 --- a/usr.bin/ssh/misc.c +++ b/usr.bin/ssh/misc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.c,v 1.132 2018/10/03 06:38:35 djm Exp $ */ +/* $OpenBSD: misc.c,v 1.133 2018/10/05 14:26:09 naddy Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. * Copyright (c) 2005,2006 Damien Miller. All rights reserved. @@ -36,6 +36,7 @@ #include <netinet/in.h> #include <netinet/ip.h> #include <netinet/tcp.h> +#include <arpa/inet.h> #include <ctype.h> #include <errno.h> @@ -299,13 +300,16 @@ pwcopy(struct passwd *pw) int a2port(const char *s) { + struct servent *se; long long port; const char *errstr; port = strtonum(s, 0, 65535, &errstr); - if (errstr != NULL) - return -1; - return (int)port; + if (errstr == NULL) + return (int)port; + if ((se = getservbyname(s, "tcp")) != NULL) + return ntohs(se->s_port); + return -1; } int diff --git a/usr.bin/ssh/readconf.c b/usr.bin/ssh/readconf.c index 5fe0ccc7d3f..f23dcf0897e 100644 --- a/usr.bin/ssh/readconf.c +++ b/usr.bin/ssh/readconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: readconf.c,v 1.299 2018/10/03 06:38:35 djm Exp $ */ +/* $OpenBSD: readconf.c,v 1.300 2018/10/05 14:26:09 naddy Exp $ */ /* * Author: Tatu Ylonen <ylo@cs.hut.fi> * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland @@ -1143,7 +1143,20 @@ parse_command: return 0; case oPort: - intptr = &options->port; + arg = strdelim(&s); + if (!arg || *arg == '\0') + fatal("%.200s line %d: Missing argument.", + filename, linenum); + value = a2port(arg); + if (value <= 0) + fatal("%.200s line %d: Bad port '%s'.", + filename, linenum, arg); + if (*activep && options->port == -1) + options->port = value; + break; + + case oConnectionAttempts: + intptr = &options->connection_attempts; parse_int: arg = strdelim(&s); if ((errstr = atoi_err(arg, &value)) != NULL) @@ -1153,10 +1166,6 @@ parse_int: *intptr = value; break; - case oConnectionAttempts: - intptr = &options->connection_attempts; - goto parse_int; - case oCiphers: arg = strdelim(&s); if (!arg || *arg == '\0') |