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

Diff for /src/usr.bin/ssh/readconf.c between version 1.31.2.1 and 1.31.2.2

version 1.31.2.1, 2000/06/12 02:37:34 version 1.31.2.2, 2000/09/01 18:23:21
Line 14 
Line 14 
  */   */
   
 #include "includes.h"  #include "includes.h"
 RCSID("$Id$");  RCSID("$OpenBSD$");
   
 #include "ssh.h"  #include "ssh.h"
 #include "cipher.h"  #include "cipher.h"
Line 164 
Line 164 
         { NULL, 0 }          { NULL, 0 }
 };  };
   
 /* Characters considered whitespace in strtok calls. */  
 #define WHITESPACE " \t\r\n"  
   
   
 /*  /*
  * Adds a local TCP/IP port forward to options.  Never returns if there is an   * Adds a local TCP/IP port forward to options.  Never returns if there is an
  * error.   * error.
Line 237 
Line 233 
                     char *line, const char *filename, int linenum,                      char *line, const char *filename, int linenum,
                     int *activep)                      int *activep)
 {  {
         char buf[256], *cp, *string, **charptr, *cp2;          char buf[256], *s, *string, **charptr, *endofnumber, *keyword, *arg;
         int opcode, *intptr, value;          int opcode, *intptr, value;
         u_short fwd_port, fwd_host_port;          u_short fwd_port, fwd_host_port;
   
         /* Skip leading whitespace. */          s = line;
         cp = line + strspn(line, WHITESPACE);          /* Get the keyword. (Each line is supposed to begin with a keyword). */
         if (!*cp || *cp == '\n' || *cp == '#')          keyword = strdelim(&s);
           /* Ignore leading whitespace. */
           if (*keyword == '\0')
                   keyword = strdelim(&s);
           if (!*keyword || *keyword == '\n' || *keyword == '#')
                 return 0;                  return 0;
   
         /* Get the keyword. (Each line is supposed to begin with a keyword). */          opcode = parse_token(keyword, filename, linenum);
         cp = strtok(cp, WHITESPACE);  
         opcode = parse_token(cp, filename, linenum);  
   
         switch (opcode) {          switch (opcode) {
         case oBadOption:          case oBadOption:
Line 258 
Line 256 
         case oForwardAgent:          case oForwardAgent:
                 intptr = &options->forward_agent;                  intptr = &options->forward_agent;
 parse_flag:  parse_flag:
                 cp = strtok(NULL, WHITESPACE);                  arg = strdelim(&s);
                 if (!cp)                  if (!arg || *arg == '\0')
                         fatal("%.200s line %d: Missing yes/no argument.", filename, linenum);                          fatal("%.200s line %d: Missing yes/no argument.", filename, linenum);
                 value = 0;      /* To avoid compiler warning... */                  value = 0;      /* To avoid compiler warning... */
                 if (strcmp(cp, "yes") == 0 || strcmp(cp, "true") == 0)                  if (strcmp(arg, "yes") == 0 || strcmp(arg, "true") == 0)
                         value = 1;                          value = 1;
                 else if (strcmp(cp, "no") == 0 || strcmp(cp, "false") == 0)                  else if (strcmp(arg, "no") == 0 || strcmp(arg, "false") == 0)
                         value = 0;                          value = 0;
                 else                  else
                         fatal("%.200s line %d: Bad yes/no argument.", filename, linenum);                          fatal("%.200s line %d: Bad yes/no argument.", filename, linenum);
Line 344 
Line 342 
   
         case oStrictHostKeyChecking:          case oStrictHostKeyChecking:
                 intptr = &options->strict_host_key_checking;                  intptr = &options->strict_host_key_checking;
                 cp = strtok(NULL, WHITESPACE);                  arg = strdelim(&s);
                 if (!cp)                  if (!arg || *arg == '\0')
                         fatal("%.200s line %d: Missing yes/no argument.",                          fatal("%.200s line %d: Missing yes/no argument.",
                               filename, linenum);                                filename, linenum);
                 value = 0;      /* To avoid compiler warning... */                  value = 0;      /* To avoid compiler warning... */
                 if (strcmp(cp, "yes") == 0 || strcmp(cp, "true") == 0)                  if (strcmp(arg, "yes") == 0 || strcmp(arg, "true") == 0)
                         value = 1;                          value = 1;
                 else if (strcmp(cp, "no") == 0 || strcmp(cp, "false") == 0)                  else if (strcmp(arg, "no") == 0 || strcmp(arg, "false") == 0)
                         value = 0;                          value = 0;
                 else if (strcmp(cp, "ask") == 0)                  else if (strcmp(arg, "ask") == 0)
                         value = 2;                          value = 2;
                 else                  else
                         fatal("%.200s line %d: Bad yes/no/ask argument.", filename, linenum);                          fatal("%.200s line %d: Bad yes/no/ask argument.", filename, linenum);
Line 379 
Line 377 
   
         case oIdentityFile:          case oIdentityFile:
         case oIdentityFile2:          case oIdentityFile2:
                 cp = strtok(NULL, WHITESPACE);                  arg = strdelim(&s);
                 if (!cp)                  if (!arg || *arg == '\0')
                         fatal("%.200s line %d: Missing argument.", filename, linenum);                          fatal("%.200s line %d: Missing argument.", filename, linenum);
                 if (*activep) {                  if (*activep) {
                         intptr = (opcode == oIdentityFile) ?                          intptr = (opcode == oIdentityFile) ?
Line 392 
Line 390 
                         charptr = (opcode == oIdentityFile) ?                          charptr = (opcode == oIdentityFile) ?
                             &options->identity_files[*intptr] :                              &options->identity_files[*intptr] :
                             &options->identity_files2[*intptr];                              &options->identity_files2[*intptr];
                         *charptr = xstrdup(cp);                          *charptr = xstrdup(arg);
                         *intptr = *intptr + 1;                          *intptr = *intptr + 1;
                 }                  }
                 break;                  break;
Line 404 
Line 402 
         case oUser:          case oUser:
                 charptr = &options->user;                  charptr = &options->user;
 parse_string:  parse_string:
                 cp = strtok(NULL, WHITESPACE);                  arg = strdelim(&s);
                 if (!cp)                  if (!arg || *arg == '\0')
                         fatal("%.200s line %d: Missing argument.", filename, linenum);                          fatal("%.200s line %d: Missing argument.", filename, linenum);
                 if (*activep && *charptr == NULL)                  if (*activep && *charptr == NULL)
                         *charptr = xstrdup(cp);                          *charptr = xstrdup(arg);
                 break;                  break;
   
         case oGlobalKnownHostsFile:          case oGlobalKnownHostsFile:
Line 434 
Line 432 
         case oProxyCommand:          case oProxyCommand:
                 charptr = &options->proxy_command;                  charptr = &options->proxy_command;
                 string = xstrdup("");                  string = xstrdup("");
                 while ((cp = strtok(NULL, WHITESPACE)) != NULL) {                  while ((arg = strdelim(&s)) != NULL && *arg != '\0') {
                         string = xrealloc(string, strlen(string) + strlen(cp) + 2);                          string = xrealloc(string, strlen(string) + strlen(arg) + 2);
                         strcat(string, " ");                          strcat(string, " ");
                         strcat(string, cp);                          strcat(string, arg);
                 }                  }
                 if (*activep && *charptr == NULL)                  if (*activep && *charptr == NULL)
                         *charptr = string;                          *charptr = string;
Line 448 
Line 446 
         case oPort:          case oPort:
                 intptr = &options->port;                  intptr = &options->port;
 parse_int:  parse_int:
                 cp = strtok(NULL, WHITESPACE);                  arg = strdelim(&s);
                 if (!cp)                  if (!arg || *arg == '\0')
                         fatal("%.200s line %d: Missing argument.", filename, linenum);                          fatal("%.200s line %d: Missing argument.", filename, linenum);
                 if (cp[0] < '0' || cp[0] > '9')                  if (arg[0] < '0' || arg[0] > '9')
                         fatal("%.200s line %d: Bad number.", filename, linenum);                          fatal("%.200s line %d: Bad number.", filename, linenum);
   
                 /* Octal, decimal, or hex format? */                  /* Octal, decimal, or hex format? */
                 value = strtol(cp, &cp2, 0);                  value = strtol(arg, &endofnumber, 0);
                 if (cp == cp2)                  if (arg == endofnumber)
                         fatal("%.200s line %d: Bad number.", filename, linenum);                          fatal("%.200s line %d: Bad number.", filename, linenum);
                 if (*activep && *intptr == -1)                  if (*activep && *intptr == -1)
                         *intptr = value;                          *intptr = value;
Line 468 
Line 466 
   
         case oCipher:          case oCipher:
                 intptr = &options->cipher;                  intptr = &options->cipher;
                 cp = strtok(NULL, WHITESPACE);                  arg = strdelim(&s);
                 if (!cp)                  if (!arg || *arg == '\0')
                         fatal("%.200s line %d: Missing argument.", filename, linenum);                          fatal("%.200s line %d: Missing argument.", filename, linenum);
                 value = cipher_number(cp);                  value = cipher_number(arg);
                 if (value == -1)                  if (value == -1)
                         fatal("%.200s line %d: Bad cipher '%s'.",                          fatal("%.200s line %d: Bad cipher '%s'.",
                               filename, linenum, cp ? cp : "<NONE>");                                filename, linenum, arg ? arg : "<NONE>");
                 if (*activep && *intptr == -1)                  if (*activep && *intptr == -1)
                         *intptr = value;                          *intptr = value;
                 break;                  break;
   
         case oCiphers:          case oCiphers:
                 cp = strtok(NULL, WHITESPACE);                  arg = strdelim(&s);
                 if (!cp)                  if (!arg || *arg == '\0')
                         fatal("%.200s line %d: Missing argument.", filename, linenum);                          fatal("%.200s line %d: Missing argument.", filename, linenum);
                 if (!ciphers_valid(cp))                  if (!ciphers_valid(arg))
                         fatal("%.200s line %d: Bad SSH2 cipher spec '%s'.",                          fatal("%.200s line %d: Bad SSH2 cipher spec '%s'.",
                               filename, linenum, cp ? cp : "<NONE>");                                filename, linenum, arg ? arg : "<NONE>");
                 if (*activep && options->ciphers == NULL)                  if (*activep && options->ciphers == NULL)
                         options->ciphers = xstrdup(cp);                          options->ciphers = xstrdup(arg);
                 break;                  break;
   
         case oProtocol:          case oProtocol:
                 intptr = &options->protocol;                  intptr = &options->protocol;
                 cp = strtok(NULL, WHITESPACE);                  arg = strdelim(&s);
                 if (!cp)                  if (!arg || *arg == '\0')
                         fatal("%.200s line %d: Missing argument.", filename, linenum);                          fatal("%.200s line %d: Missing argument.", filename, linenum);
                 value = proto_spec(cp);                  value = proto_spec(arg);
                 if (value == SSH_PROTO_UNKNOWN)                  if (value == SSH_PROTO_UNKNOWN)
                         fatal("%.200s line %d: Bad protocol spec '%s'.",                          fatal("%.200s line %d: Bad protocol spec '%s'.",
                               filename, linenum, cp ? cp : "<NONE>");                                filename, linenum, arg ? arg : "<NONE>");
                 if (*activep && *intptr == SSH_PROTO_UNKNOWN)                  if (*activep && *intptr == SSH_PROTO_UNKNOWN)
                         *intptr = value;                          *intptr = value;
                 break;                  break;
   
         case oLogLevel:          case oLogLevel:
                 intptr = (int *) &options->log_level;                  intptr = (int *) &options->log_level;
                 cp = strtok(NULL, WHITESPACE);                  arg = strdelim(&s);
                 value = log_level_number(cp);                  value = log_level_number(arg);
                 if (value == (LogLevel) - 1)                  if (value == (LogLevel) - 1)
                         fatal("%.200s line %d: unsupported log level '%s'\n",                          fatal("%.200s line %d: unsupported log level '%s'\n",
                               filename, linenum, cp ? cp : "<NONE>");                                filename, linenum, arg ? arg : "<NONE>");
                 if (*activep && (LogLevel) * intptr == -1)                  if (*activep && (LogLevel) * intptr == -1)
                         *intptr = (LogLevel) value;                          *intptr = (LogLevel) value;
                 break;                  break;
   
         case oRemoteForward:          case oRemoteForward:
                 cp = strtok(NULL, WHITESPACE);                  arg = strdelim(&s);
                 if (!cp)                  if (!arg || *arg == '\0')
                         fatal("%.200s line %d: Missing argument.", filename, linenum);                          fatal("%.200s line %d: Missing argument.", filename, linenum);
                 if (cp[0] < '0' || cp[0] > '9')                  if (arg[0] < '0' || arg[0] > '9')
                         fatal("%.200s line %d: Badly formatted port number.",                          fatal("%.200s line %d: Badly formatted port number.",
                               filename, linenum);                                filename, linenum);
                 fwd_port = atoi(cp);                  fwd_port = atoi(arg);
                 cp = strtok(NULL, WHITESPACE);                  arg = strdelim(&s);
                 if (!cp)                  if (!arg || *arg == '\0')
                         fatal("%.200s line %d: Missing second argument.",                          fatal("%.200s line %d: Missing second argument.",
                               filename, linenum);                                filename, linenum);
                 if (sscanf(cp, "%255[^:]:%hu", buf, &fwd_host_port) != 2)                  if (sscanf(arg, "%255[^:]:%hu", buf, &fwd_host_port) != 2)
                         fatal("%.200s line %d: Badly formatted host:port.",                          fatal("%.200s line %d: Badly formatted host:port.",
                               filename, linenum);                                filename, linenum);
                 if (*activep)                  if (*activep)
Line 534 
Line 532 
                 break;                  break;
   
         case oLocalForward:          case oLocalForward:
                 cp = strtok(NULL, WHITESPACE);                  arg = strdelim(&s);
                 if (!cp)                  if (!arg || *arg == '\0')
                         fatal("%.200s line %d: Missing argument.", filename, linenum);                          fatal("%.200s line %d: Missing argument.", filename, linenum);
                 if (cp[0] < '0' || cp[0] > '9')                  if (arg[0] < '0' || arg[0] > '9')
                         fatal("%.200s line %d: Badly formatted port number.",                          fatal("%.200s line %d: Badly formatted port number.",
                               filename, linenum);                                filename, linenum);
                 fwd_port = atoi(cp);                  fwd_port = atoi(arg);
                 cp = strtok(NULL, WHITESPACE);                  arg = strdelim(&s);
                 if (!cp)                  if (!arg || *arg == '\0')
                         fatal("%.200s line %d: Missing second argument.",                          fatal("%.200s line %d: Missing second argument.",
                               filename, linenum);                                filename, linenum);
                 if (sscanf(cp, "%255[^:]:%hu", buf, &fwd_host_port) != 2)                  if (sscanf(arg, "%255[^:]:%hu", buf, &fwd_host_port) != 2)
                         fatal("%.200s line %d: Badly formatted host:port.",                          fatal("%.200s line %d: Badly formatted host:port.",
                               filename, linenum);                                filename, linenum);
                 if (*activep)                  if (*activep)
Line 554 
Line 552 
   
         case oHost:          case oHost:
                 *activep = 0;                  *activep = 0;
                 while ((cp = strtok(NULL, WHITESPACE)) != NULL)                  while ((arg = strdelim(&s)) != NULL && *arg != '\0')
                         if (match_pattern(host, cp)) {                          if (match_pattern(host, arg)) {
                                 debug("Applying options for %.100s", cp);                                  debug("Applying options for %.100s", arg);
                                 *activep = 1;                                  *activep = 1;
                                 break;                                  break;
                         }                          }
                 /* Avoid garbage check below, as strtok already returned NULL. */                  /* Avoid garbage check below, as strdelim is done. */
                 return 0;                  return 0;
   
         case oEscapeChar:          case oEscapeChar:
                 intptr = &options->escape_char;                  intptr = &options->escape_char;
                 cp = strtok(NULL, WHITESPACE);                  arg = strdelim(&s);
                 if (!cp)                  if (!arg || *arg == '\0')
                         fatal("%.200s line %d: Missing argument.", filename, linenum);                          fatal("%.200s line %d: Missing argument.", filename, linenum);
                 if (cp[0] == '^' && cp[2] == 0 &&                  if (arg[0] == '^' && arg[2] == 0 &&
                     (unsigned char) cp[1] >= 64 && (unsigned char) cp[1] < 128)                      (unsigned char) arg[1] >= 64 && (unsigned char) arg[1] < 128)
                         value = (unsigned char) cp[1] & 31;                          value = (unsigned char) arg[1] & 31;
                 else if (strlen(cp) == 1)                  else if (strlen(arg) == 1)
                         value = (unsigned char) cp[0];                          value = (unsigned char) arg[0];
                 else if (strcmp(cp, "none") == 0)                  else if (strcmp(arg, "none") == 0)
                         value = -2;                          value = -2;
                 else {                  else {
                         fatal("%.200s line %d: Bad escape character.",                          fatal("%.200s line %d: Bad escape character.",
Line 590 
Line 588 
         }          }
   
         /* Check that there is no garbage at end of line. */          /* Check that there is no garbage at end of line. */
         if (strtok(NULL, WHITESPACE) != NULL)          if ((arg = strdelim(&s)) != NULL && *arg != '\0')
                 fatal("%.200s line %d: garbage at end of line.",          {
                       filename, linenum);                  fatal("%.200s line %d: garbage at end of line; \"%.200s\".",
                         filename, linenum, arg);
           }
         return 0;          return 0;
 }  }
   
Line 737 
Line 737 
         if (options->rhosts_rsa_authentication == -1)          if (options->rhosts_rsa_authentication == -1)
                 options->rhosts_rsa_authentication = 1;                  options->rhosts_rsa_authentication = 1;
         if (options->fallback_to_rsh == -1)          if (options->fallback_to_rsh == -1)
                 options->fallback_to_rsh = 1;                  options->fallback_to_rsh = 0;
         if (options->use_rsh == -1)          if (options->use_rsh == -1)
                 options->use_rsh = 0;                  options->use_rsh = 0;
         if (options->batch_mode == -1)          if (options->batch_mode == -1)

Legend:
Removed from v.1.31.2.1  
changed lines
  Added in v.1.31.2.2