[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.49 and 1.49.2.1

version 1.49, 2000/10/11 20:27:23 version 1.49.2.1, 2001/02/16 20:13:10
Line 15 
Line 15 
 RCSID("$OpenBSD$");  RCSID("$OpenBSD$");
   
 #include "ssh.h"  #include "ssh.h"
 #include "readconf.h"  
 #include "match.h"  
 #include "xmalloc.h"  #include "xmalloc.h"
 #include "compat.h"  #include "compat.h"
   #include "cipher.h"
   #include "pathnames.h"
   #include "log.h"
   #include "readconf.h"
   #include "match.h"
   #include "misc.h"
   #include "kex.h"
   #include "mac.h"
   
 /* Format of the configuration file:  /* Format of the configuration file:
   
Line 68 
Line 74 
    # Defaults for various options     # Defaults for various options
    Host *     Host *
      ForwardAgent no       ForwardAgent no
      ForwardX11 yes       ForwardX11 no
      RhostsAuthentication yes       RhostsAuthentication yes
      PasswordAuthentication yes       PasswordAuthentication yes
      RSAAuthentication yes       RSAAuthentication yes
Line 89 
Line 95 
         oBadOption,          oBadOption,
         oForwardAgent, oForwardX11, oGatewayPorts, oRhostsAuthentication,          oForwardAgent, oForwardX11, oGatewayPorts, oRhostsAuthentication,
         oPasswordAuthentication, oRSAAuthentication, oFallBackToRsh, oUseRsh,          oPasswordAuthentication, oRSAAuthentication, oFallBackToRsh, oUseRsh,
         oSkeyAuthentication, oXAuthLocation,          oChallengeResponseAuthentication, oXAuthLocation,
 #ifdef KRB4  #ifdef KRB4
         oKerberosAuthentication,          oKerberosAuthentication,
 #endif /* KRB4 */  #endif /* KRB4 */
Line 100 
Line 106 
         oUser, oHost, oEscapeChar, oRhostsRSAAuthentication, oProxyCommand,          oUser, oHost, oEscapeChar, oRhostsRSAAuthentication, oProxyCommand,
         oGlobalKnownHostsFile, oUserKnownHostsFile, oConnectionAttempts,          oGlobalKnownHostsFile, oUserKnownHostsFile, oConnectionAttempts,
         oBatchMode, oCheckHostIP, oStrictHostKeyChecking, oCompression,          oBatchMode, oCheckHostIP, oStrictHostKeyChecking, oCompression,
         oCompressionLevel, oKeepAlives, oNumberOfPasswordPrompts, oTISAuthentication,          oCompressionLevel, oKeepAlives, oNumberOfPasswordPrompts,
         oUsePrivilegedPort, oLogLevel, oCiphers, oProtocol, oIdentityFile2,          oUsePrivilegedPort, oLogLevel, oCiphers, oProtocol, oMacs,
         oGlobalKnownHostsFile2, oUserKnownHostsFile2, oDSAAuthentication,          oGlobalKnownHostsFile2, oUserKnownHostsFile2, oPubkeyAuthentication,
         oKbdInteractiveAuthentication, oKbdInteractiveDevices          oKbdInteractiveAuthentication, oKbdInteractiveDevices, oHostKeyAlias
 } OpCodes;  } OpCodes;
   
 /* Textual representations of the tokens. */  /* Textual representations of the tokens. */
Line 122 
Line 128 
         { "kbdinteractiveauthentication", oKbdInteractiveAuthentication },          { "kbdinteractiveauthentication", oKbdInteractiveAuthentication },
         { "kbdinteractivedevices", oKbdInteractiveDevices },          { "kbdinteractivedevices", oKbdInteractiveDevices },
         { "rsaauthentication", oRSAAuthentication },          { "rsaauthentication", oRSAAuthentication },
         { "dsaauthentication", oDSAAuthentication },          { "pubkeyauthentication", oPubkeyAuthentication },
         { "skeyauthentication", oSkeyAuthentication },          { "dsaauthentication", oPubkeyAuthentication },             /* alias */
           { "challengeresponseauthentication", oChallengeResponseAuthentication },
           { "skeyauthentication", oChallengeResponseAuthentication }, /* alias */
           { "tisauthentication", oChallengeResponseAuthentication },  /* alias */
 #ifdef KRB4  #ifdef KRB4
         { "kerberosauthentication", oKerberosAuthentication },          { "kerberosauthentication", oKerberosAuthentication },
 #endif /* KRB4 */  #endif /* KRB4 */
Line 134 
Line 143 
         { "fallbacktorsh", oFallBackToRsh },          { "fallbacktorsh", oFallBackToRsh },
         { "usersh", oUseRsh },          { "usersh", oUseRsh },
         { "identityfile", oIdentityFile },          { "identityfile", oIdentityFile },
         { "identityfile2", oIdentityFile2 },          { "identityfile2", oIdentityFile },                     /* alias */
         { "hostname", oHostName },          { "hostname", oHostName },
           { "hostkeyalias", oHostKeyAlias },
         { "proxycommand", oProxyCommand },          { "proxycommand", oProxyCommand },
         { "port", oPort },          { "port", oPort },
         { "cipher", oCipher },          { "cipher", oCipher },
         { "ciphers", oCiphers },          { "ciphers", oCiphers },
           { "macs", oMacs },
         { "protocol", oProtocol },          { "protocol", oProtocol },
         { "remoteforward", oRemoteForward },          { "remoteforward", oRemoteForward },
         { "localforward", oLocalForward },          { "localforward", oLocalForward },
Line 159 
Line 170 
         { "compressionlevel", oCompressionLevel },          { "compressionlevel", oCompressionLevel },
         { "keepalive", oKeepAlives },          { "keepalive", oKeepAlives },
         { "numberofpasswordprompts", oNumberOfPasswordPrompts },          { "numberofpasswordprompts", oNumberOfPasswordPrompts },
         { "tisauthentication", oTISAuthentication },  
         { "loglevel", oLogLevel },          { "loglevel", oLogLevel },
         { NULL, 0 }          { NULL, 0 }
 };  };
Line 212 
Line 222 
 static OpCodes  static OpCodes
 parse_token(const char *cp, const char *filename, int linenum)  parse_token(const char *cp, const char *filename, int linenum)
 {  {
         unsigned int i;          u_int i;
   
         for (i = 0; keywords[i].name; i++)          for (i = 0; keywords[i].name; i++)
                 if (strcasecmp(cp, keywords[i].name) == 0)                  if (strcasecmp(cp, keywords[i].name) == 0)
Line 243 
Line 253 
         /* Ignore leading whitespace. */          /* Ignore leading whitespace. */
         if (*keyword == '\0')          if (*keyword == '\0')
                 keyword = strdelim(&s);                  keyword = strdelim(&s);
         if (!*keyword || *keyword == '\n' || *keyword == '#')          if (keyword == NULL || !*keyword || *keyword == '\n' || *keyword == '#')
                 return 0;                  return 0;
   
         opcode = parse_token(keyword, filename, linenum);          opcode = parse_token(keyword, filename, linenum);
Line 298 
Line 308 
                 charptr = &options->kbd_interactive_devices;                  charptr = &options->kbd_interactive_devices;
                 goto parse_string;                  goto parse_string;
   
         case oDSAAuthentication:          case oPubkeyAuthentication:
                 intptr = &options->dsa_authentication;                  intptr = &options->pubkey_authentication;
                 goto parse_flag;                  goto parse_flag;
   
         case oRSAAuthentication:          case oRSAAuthentication:
Line 310 
Line 320 
                 intptr = &options->rhosts_rsa_authentication;                  intptr = &options->rhosts_rsa_authentication;
                 goto parse_flag;                  goto parse_flag;
   
         case oTISAuthentication:          case oChallengeResponseAuthentication:
                 /* fallthrough, there is no difference on the client side */                  intptr = &options->challenge_reponse_authentication;
         case oSkeyAuthentication:  
                 intptr = &options->skey_authentication;  
                 goto parse_flag;                  goto parse_flag;
   
 #ifdef KRB4  #ifdef KRB4
Line 352 
Line 360 
                 intptr = &options->strict_host_key_checking;                  intptr = &options->strict_host_key_checking;
                 arg = strdelim(&s);                  arg = strdelim(&s);
                 if (!arg || *arg == '\0')                  if (!arg || *arg == '\0')
                         fatal("%.200s line %d: Missing yes/no argument.",                          fatal("%.200s line %d: Missing yes/no/ask argument.",
                               filename, linenum);                                filename, linenum);
                 value = 0;      /* To avoid compiler warning... */                  value = 0;      /* To avoid compiler warning... */
                 if (strcmp(arg, "yes") == 0 || strcmp(arg, "true") == 0)                  if (strcmp(arg, "yes") == 0 || strcmp(arg, "true") == 0)
Line 384 
Line 392 
                 goto parse_int;                  goto parse_int;
   
         case oIdentityFile:          case oIdentityFile:
         case oIdentityFile2:  
                 arg = strdelim(&s);                  arg = strdelim(&s);
                 if (!arg || *arg == '\0')                  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 = &options->num_identity_files;
                             &options->num_identity_files :  
                             &options->num_identity_files2;  
                         if (*intptr >= SSH_MAX_IDENTITY_FILES)                          if (*intptr >= SSH_MAX_IDENTITY_FILES)
                                 fatal("%.200s line %d: Too many identity files specified (max %d).",                                  fatal("%.200s line %d: Too many identity files specified (max %d).",
                                       filename, linenum, SSH_MAX_IDENTITY_FILES);                                        filename, linenum, SSH_MAX_IDENTITY_FILES);
                         charptr = (opcode == oIdentityFile) ?                          charptr =  &options->identity_files[*intptr];
                             &options->identity_files[*intptr] :  
                             &options->identity_files2[*intptr];  
                         *charptr = xstrdup(arg);                          *charptr = xstrdup(arg);
                         *intptr = *intptr + 1;                          *intptr = *intptr + 1;
                 }                  }
Line 437 
Line 440 
                 charptr = &options->hostname;                  charptr = &options->hostname;
                 goto parse_string;                  goto parse_string;
   
           case oHostKeyAlias:
                   charptr = &options->host_key_alias;
                   goto parse_string;
   
         case oProxyCommand:          case oProxyCommand:
                 charptr = &options->proxy_command;                  charptr = &options->proxy_command;
                 string = xstrdup("");                  string = xstrdup("");
Line 496 
Line 503 
                         options->ciphers = xstrdup(arg);                          options->ciphers = xstrdup(arg);
                 break;                  break;
   
           case oMacs:
                   arg = strdelim(&s);
                   if (!arg || *arg == '\0')
                           fatal("%.200s line %d: Missing argument.", filename, linenum);
                   if (!mac_valid(arg))
                           fatal("%.200s line %d: Bad SSH2 Mac spec '%s'.",
                                 filename, linenum, arg ? arg : "<NONE>");
                   if (*activep && options->macs == NULL)
                           options->macs = xstrdup(arg);
                   break;
   
         case oProtocol:          case oProtocol:
                 intptr = &options->protocol;                  intptr = &options->protocol;
                 arg = strdelim(&s);                  arg = strdelim(&s);
Line 575 
Line 593 
                 if (!arg || *arg == '\0')                  if (!arg || *arg == '\0')
                         fatal("%.200s line %d: Missing argument.", filename, linenum);                          fatal("%.200s line %d: Missing argument.", filename, linenum);
                 if (arg[0] == '^' && arg[2] == 0 &&                  if (arg[0] == '^' && arg[2] == 0 &&
                     (unsigned char) arg[1] >= 64 && (unsigned char) arg[1] < 128)                      (u_char) arg[1] >= 64 && (u_char) arg[1] < 128)
                         value = (unsigned char) arg[1] & 31;                          value = (u_char) arg[1] & 31;
                 else if (strlen(arg) == 1)                  else if (strlen(arg) == 1)
                         value = (unsigned char) arg[0];                          value = (u_char) arg[0];
                 else if (strcmp(arg, "none") == 0)                  else if (strcmp(arg, "none") == 0)
                         value = -2;                          value = -2;
                 else {                  else {
Line 596 
Line 614 
         }          }
   
         /* Check that there is no garbage at end of line. */          /* Check that there is no garbage at end of line. */
         if ((arg = strdelim(&s)) != NULL && *arg != '\0')          if ((arg = strdelim(&s)) != NULL && *arg != '\0') {
         {  
                 fatal("%.200s line %d: garbage at end of line; \"%.200s\".",                  fatal("%.200s line %d: garbage at end of line; \"%.200s\".",
                       filename, linenum, arg);                        filename, linenum, arg);
         }          }
Line 662 
Line 679 
         options->use_privileged_port = -1;          options->use_privileged_port = -1;
         options->rhosts_authentication = -1;          options->rhosts_authentication = -1;
         options->rsa_authentication = -1;          options->rsa_authentication = -1;
         options->dsa_authentication = -1;          options->pubkey_authentication = -1;
         options->skey_authentication = -1;          options->challenge_reponse_authentication = -1;
 #ifdef KRB4  #ifdef KRB4
         options->kerberos_authentication = -1;          options->kerberos_authentication = -1;
 #endif  #endif
Line 688 
Line 705 
         options->number_of_password_prompts = -1;          options->number_of_password_prompts = -1;
         options->cipher = -1;          options->cipher = -1;
         options->ciphers = NULL;          options->ciphers = NULL;
           options->macs = NULL;
         options->protocol = SSH_PROTO_UNKNOWN;          options->protocol = SSH_PROTO_UNKNOWN;
         options->num_identity_files = 0;          options->num_identity_files = 0;
         options->num_identity_files2 = 0;  
         options->hostname = NULL;          options->hostname = NULL;
           options->host_key_alias = NULL;
         options->proxy_command = NULL;          options->proxy_command = NULL;
         options->user = NULL;          options->user = NULL;
         options->escape_char = -1;          options->escape_char = -1;
Line 712 
Line 730 
 void  void
 fill_default_options(Options * options)  fill_default_options(Options * options)
 {  {
           int len;
   
         if (options->forward_agent == -1)          if (options->forward_agent == -1)
                 options->forward_agent = 0;                  options->forward_agent = 0;
         if (options->forward_x11 == -1)          if (options->forward_x11 == -1)
Line 728 
Line 748 
                 options->rhosts_authentication = 1;                  options->rhosts_authentication = 1;
         if (options->rsa_authentication == -1)          if (options->rsa_authentication == -1)
                 options->rsa_authentication = 1;                  options->rsa_authentication = 1;
         if (options->dsa_authentication == -1)          if (options->pubkey_authentication == -1)
                 options->dsa_authentication = 1;                  options->pubkey_authentication = 1;
         if (options->skey_authentication == -1)          if (options->challenge_reponse_authentication == -1)
                 options->skey_authentication = 0;                  options->challenge_reponse_authentication = 0;
 #ifdef KRB4  #ifdef KRB4
         if (options->kerberos_authentication == -1)          if (options->kerberos_authentication == -1)
                 options->kerberos_authentication = 1;                  options->kerberos_authentication = 1;
Line 745 
Line 765 
         if (options->password_authentication == -1)          if (options->password_authentication == -1)
                 options->password_authentication = 1;                  options->password_authentication = 1;
         if (options->kbd_interactive_authentication == -1)          if (options->kbd_interactive_authentication == -1)
                 options->kbd_interactive_authentication = 0;                  options->kbd_interactive_authentication = 1;
         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)
Line 774 
Line 794 
         if (options->cipher == -1)          if (options->cipher == -1)
                 options->cipher = SSH_CIPHER_NOT_SET;                  options->cipher = SSH_CIPHER_NOT_SET;
         /* options->ciphers, default set in myproposals.h */          /* options->ciphers, default set in myproposals.h */
           /* options->macs, default set in myproposals.h */
         if (options->protocol == SSH_PROTO_UNKNOWN)          if (options->protocol == SSH_PROTO_UNKNOWN)
                 options->protocol = SSH_PROTO_1|SSH_PROTO_2|SSH_PROTO_1_PREFERRED;                  options->protocol = SSH_PROTO_1|SSH_PROTO_2|SSH_PROTO_1_PREFERRED;
         if (options->num_identity_files == 0) {          if (options->num_identity_files == 0) {
                 options->identity_files[0] =                  if (options->protocol & SSH_PROTO_1) {
                         xmalloc(2 + strlen(SSH_CLIENT_IDENTITY) + 1);                          len = 2 + strlen(_PATH_SSH_CLIENT_IDENTITY) + 1;
                 sprintf(options->identity_files[0], "~/%.100s", SSH_CLIENT_IDENTITY);                          options->identity_files[options->num_identity_files] =
                 options->num_identity_files = 1;                              xmalloc(len);
                           snprintf(options->identity_files[options->num_identity_files++],
                               len, "~/%.100s", _PATH_SSH_CLIENT_IDENTITY);
                   }
                   if (options->protocol & SSH_PROTO_2) {
                           len = 2 + strlen(_PATH_SSH_CLIENT_ID_DSA) + 1;
                           options->identity_files[options->num_identity_files] =
                               xmalloc(len);
                           snprintf(options->identity_files[options->num_identity_files++],
                               len, "~/%.100s", _PATH_SSH_CLIENT_ID_DSA);
                   }
         }          }
         if (options->num_identity_files2 == 0) {  
                 options->identity_files2[0] =  
                         xmalloc(2 + strlen(SSH_CLIENT_ID_DSA) + 1);  
                 sprintf(options->identity_files2[0], "~/%.100s", SSH_CLIENT_ID_DSA);  
                 options->num_identity_files2 = 1;  
         }  
         if (options->escape_char == -1)          if (options->escape_char == -1)
                 options->escape_char = '~';                  options->escape_char = '~';
         if (options->system_hostfile == NULL)          if (options->system_hostfile == NULL)
                 options->system_hostfile = SSH_SYSTEM_HOSTFILE;                  options->system_hostfile = _PATH_SSH_SYSTEM_HOSTFILE;
         if (options->user_hostfile == NULL)          if (options->user_hostfile == NULL)
                 options->user_hostfile = SSH_USER_HOSTFILE;                  options->user_hostfile = _PATH_SSH_USER_HOSTFILE;
         if (options->system_hostfile2 == NULL)          if (options->system_hostfile2 == NULL)
                 options->system_hostfile2 = SSH_SYSTEM_HOSTFILE2;                  options->system_hostfile2 = _PATH_SSH_SYSTEM_HOSTFILE2;
         if (options->user_hostfile2 == NULL)          if (options->user_hostfile2 == NULL)
                 options->user_hostfile2 = SSH_USER_HOSTFILE2;                  options->user_hostfile2 = _PATH_SSH_USER_HOSTFILE2;
         if (options->log_level == (LogLevel) - 1)          if (options->log_level == (LogLevel) - 1)
                 options->log_level = SYSLOG_LEVEL_INFO;                  options->log_level = SYSLOG_LEVEL_INFO;
         /* options->proxy_command should not be set by default */          /* options->proxy_command should not be set by default */
         /* options->user will be set in the main program if appropriate */          /* options->user will be set in the main program if appropriate */
         /* options->hostname will be set in the main program if appropriate */          /* options->hostname will be set in the main program if appropriate */
           /* options->host_key_alias should not be set by default */
 }  }

Legend:
Removed from v.1.49  
changed lines
  Added in v.1.49.2.1