[BACK]Return to servconf.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Diff for /src/usr.bin/ssh/servconf.c between version 1.73 and 1.74

version 1.73, 2001/04/02 14:20:23 version 1.74, 2001/04/06 22:25:25
Line 32 
Line 32 
 #include "mac.h"  #include "mac.h"
   
 /* add listen address */  /* add listen address */
 void add_listen_addr(ServerOptions *options, char *addr);  void add_listen_addr(ServerOptions *options, char *addr, char *port);
   void add_one_listen_addr(ServerOptions *options, char *addr, u_short port);
   
 /* AF_UNSPEC or AF_INET or AF_INET6 */  /* AF_UNSPEC or AF_INET or AF_INET6 */
 extern int IPv4or6;  extern int IPv4or6;
Line 114 
Line 115 
         if (options->num_ports == 0)          if (options->num_ports == 0)
                 options->ports[options->num_ports++] = SSH_DEFAULT_PORT;                  options->ports[options->num_ports++] = SSH_DEFAULT_PORT;
         if (options->listen_addrs == NULL)          if (options->listen_addrs == NULL)
                 add_listen_addr(options, NULL);                  add_listen_addr(options, NULL, NULL);
         if (options->pid_file == NULL)          if (options->pid_file == NULL)
                 options->pid_file = _PATH_SSH_DAEMON_PID_FILE;                  options->pid_file = _PATH_SSH_DAEMON_PID_FILE;
         if (options->server_key_bits == -1)          if (options->server_key_bits == -1)
Line 306 
Line 307 
  * add listen address   * add listen address
  */   */
 void  void
 add_listen_addr(ServerOptions *options, char *addr)  add_listen_addr(ServerOptions *options, char *addr, char *port)
 {  {
         struct addrinfo hints, *ai, *aitop;  
         char strport[NI_MAXSERV];  
         int gaierr;  
         int i;          int i;
   
         if (options->num_ports == 0)          if (options->num_ports == 0)
                 options->ports[options->num_ports++] = SSH_DEFAULT_PORT;                  options->ports[options->num_ports++] = SSH_DEFAULT_PORT;
         for (i = 0; i < options->num_ports; i++) {          if (port == NULL)
                 memset(&hints, 0, sizeof(hints));                  for (i = 0; i < options->num_ports; i++)
                 hints.ai_family = IPv4or6;                          add_one_listen_addr(options, addr, options->ports[i]);
                 hints.ai_socktype = SOCK_STREAM;          else
                 hints.ai_flags = (addr == NULL) ? AI_PASSIVE : 0;                  add_one_listen_addr(options, addr, atoi(port));
                 snprintf(strport, sizeof strport, "%d", options->ports[i]);  
                 if ((gaierr = getaddrinfo(addr, strport, &hints, &aitop)) != 0)  
                         fatal("bad addr or host: %s (%s)",  
                             addr ? addr : "<NULL>",  
                             gai_strerror(gaierr));  
                 for (ai = aitop; ai->ai_next; ai = ai->ai_next)  
                         ;  
                 ai->ai_next = options->listen_addrs;  
                 options->listen_addrs = aitop;  
         }  
 }  }
   
   void
   add_one_listen_addr(ServerOptions *options, char *addr, u_short port)
   {
           struct addrinfo hints, *ai, *aitop;
           char strport[NI_MAXSERV];
           int gaierr;
   
           memset(&hints, 0, sizeof(hints));
           hints.ai_family = IPv4or6;
           hints.ai_socktype = SOCK_STREAM;
           hints.ai_flags = (addr == NULL) ? AI_PASSIVE : 0;
           snprintf(strport, sizeof strport, "%d", port);
           if ((gaierr = getaddrinfo(addr, strport, &hints, &aitop)) != 0)
                   fatal("bad addr or host: %s (%s)",
                       addr ? addr : "<NULL>",
                       gai_strerror(gaierr));
           for (ai = aitop; ai->ai_next; ai = ai->ai_next)
                   ;
           ai->ai_next = options->listen_addrs;
           options->listen_addrs = aitop;
   }
   
 /* Reads the server configuration file. */  /* Reads the server configuration file. */
   
 void  void
Line 339 
Line 349 
 {  {
         FILE *f;          FILE *f;
         char line[1024];          char line[1024];
         char *cp, **charptr, *arg;          char *cp, **charptr, *arg, *p;
         int linenum, *intptr, value;          int linenum, *intptr, value;
         int bad_options = 0;          int bad_options = 0;
         ServerOpCodes opcode;          ServerOpCodes opcode;
Line 408 
Line 418 
   
                 case sListenAddress:                  case sListenAddress:
                         arg = strdelim(&cp);                          arg = strdelim(&cp);
                         if (!arg || *arg == '\0')                          if (!arg || *arg == '\0' || strncmp(arg, "[]", 2) == 0)
                                 fatal("%s line %d: missing inet addr.",                                  fatal("%s line %d: missing inet addr.",
                                     filename, linenum);                                      filename, linenum);
                         add_listen_addr(options, arg);                          if (*arg == '[') {
                                   if ((p = strchr(arg, ']')) == NULL)
                                           fatal("%s line %d: bad ipv6 inet addr usage.",
                                               filename, linenum);
                                   arg++;
                                   memmove(p, p+1, strlen(p+1)+1);
                           } else if (((p = strchr(arg, ':')) == NULL) ||
                                       (strchr(p+1, ':') != NULL)) {
                                   add_listen_addr(options, arg, NULL);
                                   break;
                           }
                           if (*p == ':') {
                                   p++;
                                   if (*p == '\0')
                                           fatal("%s line %d: bad inet addr:port usage.",
                                               filename, linenum);
                                   else {
                                           *(p-1) = '\0';
                                           add_listen_addr(options, arg, p);
                                   }
                           } else if (*p == '\0')
                                   add_listen_addr(options, arg, NULL);
                           else
                                   fatal("%s line %d: bad inet addr usage.",
                                       filename, linenum);
                         break;                          break;
   
                 case sHostKeyFile:                  case sHostKeyFile:

Legend:
Removed from v.1.73  
changed lines
  Added in v.1.74