[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.137 and 1.137.2.3

version 1.137, 2004/08/13 11:09:24 version 1.137.2.3, 2005/09/02 03:45:00
Line 26 
Line 26 
 static void add_listen_addr(ServerOptions *, char *, u_short);  static void add_listen_addr(ServerOptions *, char *, u_short);
 static void add_one_listen_addr(ServerOptions *, char *, u_short);  static void add_one_listen_addr(ServerOptions *, char *, u_short);
   
 /* AF_UNSPEC or AF_INET or AF_INET6 */  
 extern int IPv4or6;  
 /* Use of privilege separation or not */  /* Use of privilege separation or not */
 extern int use_privsep;  extern int use_privsep;
   
Line 40 
Line 38 
         options->num_ports = 0;          options->num_ports = 0;
         options->ports_from_cmdline = 0;          options->ports_from_cmdline = 0;
         options->listen_addrs = NULL;          options->listen_addrs = NULL;
           options->address_family = -1;
         options->num_host_key_files = 0;          options->num_host_key_files = 0;
         options->pid_file = NULL;          options->pid_file = NULL;
         options->server_key_bits = -1;          options->server_key_bits = -1;
Line 192 
Line 191 
         if (options->use_login == -1)          if (options->use_login == -1)
                 options->use_login = 0;                  options->use_login = 0;
         if (options->compression == -1)          if (options->compression == -1)
                 options->compression = 1;                  options->compression = COMP_DELAYED;
         if (options->allow_tcp_forwarding == -1)          if (options->allow_tcp_forwarding == -1)
                 options->allow_tcp_forwarding = 1;                  options->allow_tcp_forwarding = 1;
         if (options->gateway_ports == -1)          if (options->gateway_ports == -1)
Line 235 
Line 234 
         sKerberosAuthentication, sKerberosOrLocalPasswd, sKerberosTicketCleanup,          sKerberosAuthentication, sKerberosOrLocalPasswd, sKerberosTicketCleanup,
         sKerberosGetAFSToken,          sKerberosGetAFSToken,
         sKerberosTgtPassing, sChallengeResponseAuthentication,          sKerberosTgtPassing, sChallengeResponseAuthentication,
         sPasswordAuthentication, sKbdInteractiveAuthentication, sListenAddress,          sPasswordAuthentication, sKbdInteractiveAuthentication,
           sListenAddress, sAddressFamily,
         sPrintMotd, sPrintLastLog, sIgnoreRhosts,          sPrintMotd, sPrintLastLog, sIgnoreRhosts,
         sX11Forwarding, sX11DisplayOffset, sX11UseLocalhost,          sX11Forwarding, sX11DisplayOffset, sX11UseLocalhost,
         sStrictModes, sEmptyPasswd, sTCPKeepAlive,          sStrictModes, sEmptyPasswd, sTCPKeepAlive,
Line 300 
Line 300 
         { "skeyauthentication", sChallengeResponseAuthentication }, /* alias */          { "skeyauthentication", sChallengeResponseAuthentication }, /* alias */
         { "checkmail", sDeprecated },          { "checkmail", sDeprecated },
         { "listenaddress", sListenAddress },          { "listenaddress", sListenAddress },
           { "addressfamily", sAddressFamily },
         { "printmotd", sPrintMotd },          { "printmotd", sPrintMotd },
         { "printlastlog", sPrintLastLog },          { "printlastlog", sPrintLastLog },
         { "ignorerhosts", sIgnoreRhosts },          { "ignorerhosts", sIgnoreRhosts },
Line 362 
Line 363 
 static void  static void
 add_listen_addr(ServerOptions *options, char *addr, u_short port)  add_listen_addr(ServerOptions *options, char *addr, u_short port)
 {  {
         int i;          u_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;
           if (options->address_family == -1)
                   options->address_family = AF_UNSPEC;
         if (port == 0)          if (port == 0)
                 for (i = 0; i < options->num_ports; i++)                  for (i = 0; i < options->num_ports; i++)
                         add_one_listen_addr(options, addr, options->ports[i]);                          add_one_listen_addr(options, addr, options->ports[i]);
Line 381 
Line 384 
         int gaierr;          int gaierr;
   
         memset(&hints, 0, sizeof(hints));          memset(&hints, 0, sizeof(hints));
         hints.ai_family = IPv4or6;          hints.ai_family = options->address_family;
         hints.ai_socktype = SOCK_STREAM;          hints.ai_socktype = SOCK_STREAM;
         hints.ai_flags = (addr == NULL) ? AI_PASSIVE : 0;          hints.ai_flags = (addr == NULL) ? AI_PASSIVE : 0;
         snprintf(strport, sizeof strport, "%u", port);          snprintf(strport, sizeof strport, "%u", port);
Line 400 
Line 403 
     const char *filename, int linenum)      const char *filename, int linenum)
 {  {
         char *cp, **charptr, *arg, *p;          char *cp, **charptr, *arg, *p;
         int *intptr, value, i, n;          int *intptr, value, n;
         ServerOpCodes opcode;          ServerOpCodes opcode;
           u_short port;
           u_int i;
   
         cp = line;          cp = line;
         arg = strdelim(&cp);          arg = strdelim(&cp);
Line 468 
Line 473 
   
         case sListenAddress:          case sListenAddress:
                 arg = strdelim(&cp);                  arg = strdelim(&cp);
                 if (!arg || *arg == '\0' || strncmp(arg, "[]", 2) == 0)                  if (arg == NULL || *arg == '\0')
                         fatal("%s line %d: missing inet addr.",                          fatal("%s line %d: missing address",
                             filename, linenum);                              filename, linenum);
                 if (*arg == '[') {                  /* check for bare IPv6 address: no "[]" and 2 or more ":" */
                         if ((p = strchr(arg, ']')) == NULL)                  if (strchr(arg, '[') == NULL && (p = strchr(arg, ':')) != NULL
                                 fatal("%s line %d: bad ipv6 inet addr usage.",                      && strchr(p+1, ':') != NULL) {
                                     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, 0);                          add_listen_addr(options, arg, 0);
                         break;                          break;
                 }                  }
                 if (*p == ':') {                  p = hpdelim(&arg);
                         u_short port;                  if (p == NULL)
                           fatal("%s line %d: bad address:port usage",
                               filename, linenum);
                   p = cleanhostname(p);
                   if (arg == NULL)
                           port = 0;
                   else if ((port = a2port(arg)) == 0)
                           fatal("%s line %d: bad port number", filename, linenum);
   
                         p++;                  add_listen_addr(options, p, port);
                         if (*p == '\0')  
                                 fatal("%s line %d: bad inet addr:port usage.",                  break;
                                     filename, linenum);  
                         else {          case sAddressFamily:
                                 *(p-1) = '\0';                  arg = strdelim(&cp);
                                 if ((port = a2port(p)) == 0)                  if (!arg || *arg == '\0')
                                         fatal("%s line %d: bad port number.",                          fatal("%s line %d: missing address family.",
                                             filename, linenum);  
                                 add_listen_addr(options, arg, port);  
                         }  
                 } else if (*p == '\0')  
                         add_listen_addr(options, arg, 0);  
                 else  
                         fatal("%s line %d: bad inet addr usage.",  
                             filename, linenum);                              filename, linenum);
                   intptr = &options->address_family;
                   if (options->listen_addrs != NULL)
                           fatal("%s line %d: address family must be specified before "
                               "ListenAddress.", filename, linenum);
                   if (strcasecmp(arg, "inet") == 0)
                           value = AF_INET;
                   else if (strcasecmp(arg, "inet6") == 0)
                           value = AF_INET6;
                   else if (strcasecmp(arg, "any") == 0)
                           value = AF_UNSPEC;
                   else
                           fatal("%s line %d: unsupported address family \"%s\".",
                               filename, linenum, arg);
                   if (*intptr == -1)
                           *intptr = value;
                 break;                  break;
   
         case sHostKeyFile:          case sHostKeyFile:
Line 675 
Line 690 
   
         case sCompression:          case sCompression:
                 intptr = &options->compression;                  intptr = &options->compression;
                 goto parse_flag;                  arg = strdelim(&cp);
                   if (!arg || *arg == '\0')
                           fatal("%s line %d: missing yes/no/delayed "
                               "argument.", filename, linenum);
                   value = 0;      /* silence compiler */
                   if (strcmp(arg, "delayed") == 0)
                           value = COMP_DELAYED;
                   else if (strcmp(arg, "yes") == 0)
                           value = COMP_ZLIB;
                   else if (strcmp(arg, "no") == 0)
                           value = COMP_NONE;
                   else
                           fatal("%s line %d: Bad yes/no/delayed "
                               "argument: %s", filename, linenum, arg);
                   if (*intptr == -1)
                           *intptr = value;
                   break;
   
         case sGatewayPorts:          case sGatewayPorts:
                 intptr = &options->gateway_ports;                  intptr = &options->gateway_ports;
                 goto parse_flag;                  arg = strdelim(&cp);
                   if (!arg || *arg == '\0')
                           fatal("%s line %d: missing yes/no/clientspecified "
                               "argument.", filename, linenum);
                   value = 0;      /* silence compiler */
                   if (strcmp(arg, "clientspecified") == 0)
                           value = 2;
                   else if (strcmp(arg, "yes") == 0)
                           value = 1;
                   else if (strcmp(arg, "no") == 0)
                           value = 0;
                   else
                           fatal("%s line %d: Bad yes/no/clientspecified "
                               "argument: %s", filename, linenum, arg);
                   if (*intptr == -1)
                           *intptr = value;
                   break;
   
         case sUseDNS:          case sUseDNS:
                 intptr = &options->use_dns;                  intptr = &options->use_dns;
Line 939 
Line 986 
   
         obuf = cbuf = xstrdup(buffer_ptr(conf));          obuf = cbuf = xstrdup(buffer_ptr(conf));
         linenum = 1;          linenum = 1;
         while((cp = strsep(&cbuf, "\n")) != NULL) {          while ((cp = strsep(&cbuf, "\n")) != NULL) {
                 if (process_server_config_line(options, cp, filename,                  if (process_server_config_line(options, cp, filename,
                     linenum++) != 0)                      linenum++) != 0)
                         bad_options++;                          bad_options++;

Legend:
Removed from v.1.137  
changed lines
  Added in v.1.137.2.3