freebsd-ports/security/ssh/files/patch-bo
2002-06-29 18:13:36 +00:00

158 lines
4.9 KiB
Text

--- servconf.c.orig Thu Jan 17 05:35:34 2002
+++ servconf.c Fri Jun 21 16:22:56 2002
@@ -88,8 +88,8 @@
void initialize_server_options(ServerOptions *options)
{
memset(options, 0, sizeof(*options));
- options->port = -1;
- options->listen_addr.s_addr = INADDR_ANY;
+ options->num_ports = 0;
+ options->listen_addrs = NULL;
options->host_key_file = NULL;
options->random_seed_file = NULL;
options->pid_file = NULL;
@@ -99,6 +99,9 @@
options->permit_root_login = -1;
options->ignore_rhosts = -1;
options->ignore_root_rhosts = -1;
+#ifdef ENABLE_LOG_AUTH
+ options->log_auth = -1;
+#endif /* ENABLE_LOG_AUTH */
options->quiet_mode = -1;
options->fascist_logging = -1;
options->print_motd = -1;
@@ -145,17 +148,33 @@
void fill_default_server_options(ServerOptions *options)
{
- if (options->port == -1)
+ struct addrinfo hints, *ai, *aitop;
+ char strport[PORTSTRLEN];
+ int i;
+
+ if (options->num_ports == 0)
+ options->ports[options->num_ports++] = SSH_DEFAULT_PORT;
+ if (options->listen_addrs == NULL)
{
- struct servent *sp;
+ for (i = 0; i < options->num_ports; i++)
+ {
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_flags = AI_PASSIVE;
+ hints.ai_family = IPv4or6;
+ hints.ai_socktype = SOCK_STREAM;
+ sprintf(strport, "%d", options->ports[i]);
+ if (getaddrinfo(NULL, strport, &hints, &aitop) != 0)
+ {
+ fprintf(stderr, "fatal: getaddrinfo: Cannot get anyaddr.\n");
+ exit(1);
+ }
+ for (ai = aitop; ai->ai_next; ai = ai->ai_next);
+ ai->ai_next = options->listen_addrs;
+ options->listen_addrs = aitop;
+ }
+ /* freeaddrinfo(options->listen_addrs) in sshd.c */
+ }
- sp = getservbyname(SSH_SERVICE_NAME, "tcp");
- if (sp)
- options->port = ntohs(sp->s_port);
- else
- options->port = SSH_DEFAULT_PORT;
- endservent();
- }
if (options->host_key_file == NULL)
options->host_key_file = HOST_KEY_FILE;
if (options->random_seed_file == NULL)
@@ -250,6 +269,9 @@
{
sPort, sHostKeyFile, sServerKeyBits, sLoginGraceTime, sKeyRegenerationTime,
sPermitRootLogin, sQuietMode, sFascistLogging, sLogFacility,
+#ifdef ENABLE_LOG_AUTH
+ sLogAuth,
+#endif /* ENABLE_LOG_AUTH */
sRhostsAuthentication, sRhostsRSAAuthentication, sRSAAuthentication,
sTISAuthentication, sPasswordAuthentication, sAllowHosts, sDenyHosts,
sListenAddress, sPrintMotd, sIgnoreRhosts, sX11Forwarding, sX11DisplayOffset,
@@ -282,6 +304,9 @@
{ "quietmode", sQuietMode },
{ "fascistlogging", sFascistLogging },
{ "syslogfacility", sLogFacility },
+#ifdef ENABLE_LOG_AUTH
+ { "logauth", sLogAuth },
+#endif /* ENABLE_LOG_AUTH */
{ "rhostsauthentication", sRhostsAuthentication },
{ "rhostsrsaauthentication", sRhostsRSAAuthentication },
{ "rsaauthentication", sRSAAuthentication },
@@ -375,6 +400,9 @@
char *cp, **charptr;
int linenum, *intptr, i, value;
ServerOpCodes opcode;
+ struct addrinfo hints, *ai, *aitop;
+ char strport[PORTSTRLEN];
+ int gaierr;
f = fopen(filename, "r");
if (!f)
@@ -397,7 +425,14 @@
switch (opcode)
{
case sPort:
- intptr = &options->port;
+ if (options->num_ports >= MAX_PORTS)
+ {
+ fprintf(stderr, "%s line %d: too many ports.\n",
+ filename, linenum);
+ exit(1);
+ }
+ options->ports[options->num_ports] = -1;
+ intptr = &options->ports[options->num_ports++];
parse_int:
cp = strtok(NULL, WHITESPACE);
if (!cp)
@@ -460,12 +495,26 @@
filename, linenum);
exit(1);
}
-#ifdef BROKEN_INET_ADDR
- options->listen_addr.s_addr = inet_network(cp);
-#else /* BROKEN_INET_ADDR */
- options->listen_addr.s_addr = inet_addr(cp);
-#endif /* BROKEN_INET_ADDR */
- break;
+ if (options->num_ports == 0)
+ options->ports[options->num_ports++] = SSH_DEFAULT_PORT;
+ for (i = 0; i < options->num_ports; i++)
+ {
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = IPv4or6;
+ hints.ai_socktype = SOCK_STREAM;
+ sprintf(strport, "%d", options->ports[i]);
+ if ((gaierr = getaddrinfo(cp, strport, &hints, &aitop)) != 0)
+ {
+ fprintf(stderr, "%s line %d: bad addr or host. (%s)\n",
+ filename, linenum, gai_strerror(gaierr));
+ exit(1);
+ }
+ for (ai = aitop; ai->ai_next; ai = ai->ai_next);
+ ai->ai_next = options->listen_addrs;
+ options->listen_addrs = aitop;
+ }
+ strtok(cp, WHITESPACE); /* getaddrinfo() may use strtok() */
+ break;
case sHostKeyFile:
charptr = &options->host_key_file;
@@ -539,6 +588,12 @@
if (*intptr == -1)
*intptr = value;
break;
+
+#ifdef ENABLE_LOG_AUTH
+ case sLogAuth:
+ intptr = &options->log_auth;
+ goto parse_flag;
+#endif /* ENABLE_LOG_AUTH */
case sIgnoreRhosts:
intptr = &options->ignore_rhosts;