upstream: 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@

OpenBSD-Commit-ID: e7f03633133205ab3dfbc67f9df7475fabae660d
This commit is contained in:
naddy@openbsd.org 2018-10-05 14:26:09 +00:00 committed by Damien Miller
parent e0d6501e86
commit 2581333d56
2 changed files with 23 additions and 10 deletions

12
misc.c
View File

@ -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.
@ -50,6 +50,7 @@
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
#include <arpa/inet.h>
#include <ctype.h>
#include <errno.h>
@ -332,13 +333,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

View File

@ -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
@ -1158,7 +1158,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)
@ -1168,10 +1181,6 @@ parse_int:
*intptr = value;
break;
case oConnectionAttempts:
intptr = &options->connection_attempts;
goto parse_int;
case oCiphers:
arg = strdelim(&s);
if (!arg || *arg == '\0')