[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.37 and 1.38

version 1.37, 2000/06/20 01:39:43 version 1.38, 2000/07/08 23:17:31
Line 164 
Line 164 
         { NULL, 0 }          { NULL, 0 }
 };  };
   
 /* Characters considered whitespace in strtok calls. */  /* Characters considered whitespace in strsep calls. */
 #define WHITESPACE " \t\r\n="  #define WHITESPACE " \t\r\n="
   
   
Line 237 
Line 237 
                     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. */          /* Skip leading whitespace. */
         cp = line + strspn(line, WHITESPACE);          s = line + strspn(line, WHITESPACE);
         if (!*cp || *cp == '\n' || *cp == '#')          if (!*s || *s == '\n' || *s == '#')
                 return 0;                  return 0;
   
         /* Get the keyword. (Each line is supposed to begin with a keyword). */          /* Get the keyword. (Each line is supposed to begin with a keyword). */
         cp = strtok(cp, WHITESPACE);          keyword = strsep(&s, WHITESPACE);
         opcode = parse_token(cp, filename, linenum);          opcode = parse_token(keyword, filename, linenum);
   
         switch (opcode) {          switch (opcode) {
         case oBadOption:          case oBadOption:
Line 258 
Line 258 
         case oForwardAgent:          case oForwardAgent:
                 intptr = &options->forward_agent;                  intptr = &options->forward_agent;
 parse_flag:  parse_flag:
                 cp = strtok(NULL, WHITESPACE);                  arg = strsep(&s, WHITESPACE);
                 if (!cp)                  if (!arg)
                         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 344 
   
         case oStrictHostKeyChecking:          case oStrictHostKeyChecking:
                 intptr = &options->strict_host_key_checking;                  intptr = &options->strict_host_key_checking;
                 cp = strtok(NULL, WHITESPACE);                  arg = strsep(&s, WHITESPACE);
                 if (!cp)                  if (!arg)
                         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 379 
   
         case oIdentityFile:          case oIdentityFile:
         case oIdentityFile2:          case oIdentityFile2:
                 cp = strtok(NULL, WHITESPACE);                  arg = strsep(&s, WHITESPACE);
                 if (!cp)                  if (!arg)
                         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 392 
                         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 404 
         case oUser:          case oUser:
                 charptr = &options->user;                  charptr = &options->user;
 parse_string:  parse_string:
                 cp = strtok(NULL, WHITESPACE);                  arg = strsep(&s, WHITESPACE);
                 if (!cp)                  if (!arg)
                         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 434 
         case oProxyCommand:          case oProxyCommand:
                 charptr = &options->proxy_command;                  charptr = &options->proxy_command;
                 string = xstrdup("");                  string = xstrdup("");
                 while ((cp = strtok(NULL, WHITESPACE)) != NULL) {                  while ((arg = strsep(&s, WHITESPACE)) != NULL) {
                         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 448 
         case oPort:          case oPort:
                 intptr = &options->port;                  intptr = &options->port;
 parse_int:  parse_int:
                 cp = strtok(NULL, WHITESPACE);                  arg = strsep(&s, WHITESPACE);
                 if (!cp)                  if (!arg)
                         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 468 
   
         case oCipher:          case oCipher:
                 intptr = &options->cipher;                  intptr = &options->cipher;
                 cp = strtok(NULL, WHITESPACE);                  arg = strsep(&s, WHITESPACE);
                 if (!cp)                  if (!arg)
                         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 = strsep(&s, WHITESPACE);
                 if (!cp)                  if (!arg)
                         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 = strsep(&s, WHITESPACE);
                 if (!cp)                  if (!arg)
                         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 = strsep(&s, WHITESPACE);
                 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 = strsep(&s, WHITESPACE);
                 if (!cp)                  if (!arg)
                         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 = strsep(&s, WHITESPACE);
                 if (!cp)                  if (!arg)
                         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 534 
                 break;                  break;
   
         case oLocalForward:          case oLocalForward:
                 cp = strtok(NULL, WHITESPACE);                  arg = strsep(&s, WHITESPACE);
                 if (!cp)                  if (!arg)
                         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 = strsep(&s, WHITESPACE);
                 if (!cp)                  if (!arg)
                         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 554 
   
         case oHost:          case oHost:
                 *activep = 0;                  *activep = 0;
                 while ((cp = strtok(NULL, WHITESPACE)) != NULL)                  while ((arg = strsep(&s, WHITESPACE)) != NULL)
                         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 strsep already returned NULL. */
                 return 0;                  return 0;
   
         case oEscapeChar:          case oEscapeChar:
                 intptr = &options->escape_char;                  intptr = &options->escape_char;
                 cp = strtok(NULL, WHITESPACE);                  arg = strsep(&s, WHITESPACE);
                 if (!cp)                  if (!arg)
                         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 590 
         }          }
   
         /* 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 (strsep(&s, WHITESPACE) != NULL)
                 fatal("%.200s line %d: garbage at end of line.",                  fatal("%.200s line %d: garbage at end of line.",
                       filename, linenum);                        filename, linenum);
         return 0;          return 0;

Legend:
Removed from v.1.37  
changed lines
  Added in v.1.38