]> andersk Git - openssh.git/blobdiff - readconf.c
- (djm) Fix rsh path in RPMs. Report from Jason L Tibbitts III
[openssh.git] / readconf.c
index 1e3476b8e86cd5d87c6807408f5f00e6e828a99a..cbcc927c75d60e2a257591dd56dc2cf5e62678e5 100644 (file)
@@ -92,7 +92,7 @@ typedef enum {
        oBadOption,
        oForwardAgent, oForwardX11, oGatewayPorts, oRhostsAuthentication,
        oPasswordAuthentication, oRSAAuthentication, oFallBackToRsh, oUseRsh,
-       oSkeyAuthentication,
+       oSkeyAuthentication, oXAuthLocation,
 #ifdef KRB4
        oKerberosAuthentication,
 #endif /* KRB4 */
@@ -104,7 +104,8 @@ typedef enum {
        oGlobalKnownHostsFile, oUserKnownHostsFile, oConnectionAttempts,
        oBatchMode, oCheckHostIP, oStrictHostKeyChecking, oCompression,
        oCompressionLevel, oKeepAlives, oNumberOfPasswordPrompts, oTISAuthentication,
-       oUsePrivilegedPort, oLogLevel, oCiphers, oProtocol
+       oUsePrivilegedPort, oLogLevel, oCiphers, oProtocol, oIdentityFile2,
+       oGlobalKnownHostsFile2, oUserKnownHostsFile2, oDSAAuthentication
 } OpCodes;
 
 /* Textual representations of the tokens. */
@@ -115,11 +116,13 @@ static struct {
 } keywords[] = {
        { "forwardagent", oForwardAgent },
        { "forwardx11", oForwardX11 },
+       { "xauthlocation", oXAuthLocation },
        { "gatewayports", oGatewayPorts },
        { "useprivilegedport", oUsePrivilegedPort },
        { "rhostsauthentication", oRhostsAuthentication },
        { "passwordauthentication", oPasswordAuthentication },
        { "rsaauthentication", oRSAAuthentication },
+       { "dsaauthentication", oDSAAuthentication },
        { "skeyauthentication", oSkeyAuthentication },
 #ifdef KRB4
        { "kerberosauthentication", oKerberosAuthentication },
@@ -131,6 +134,7 @@ static struct {
        { "fallbacktorsh", oFallBackToRsh },
        { "usersh", oUseRsh },
        { "identityfile", oIdentityFile },
+       { "identityfile2", oIdentityFile2 },
        { "hostname", oHostName },
        { "proxycommand", oProxyCommand },
        { "port", oPort },
@@ -145,6 +149,8 @@ static struct {
        { "rhostsrsaauthentication", oRhostsRSAAuthentication },
        { "globalknownhostsfile", oGlobalKnownHostsFile },
        { "userknownhostsfile", oUserKnownHostsFile },
+       { "globalknownhostsfile2", oGlobalKnownHostsFile2 },
+       { "userknownhostsfile2", oUserKnownHostsFile2 },
        { "connectionattempts", oConnectionAttempts },
        { "batchmode", oBatchMode },
        { "checkhostip", oCheckHostIP },
@@ -286,6 +292,10 @@ parse_flag:
                intptr = &options->password_authentication;
                goto parse_flag;
 
+       case oDSAAuthentication:
+               intptr = &options->dsa_authentication;
+               goto parse_flag;
+
        case oRSAAuthentication:
                intptr = &options->rsa_authentication;
                goto parse_flag;
@@ -368,17 +378,29 @@ parse_flag:
                goto parse_int;
 
        case oIdentityFile:
+       case oIdentityFile2:
                cp = strtok(NULL, WHITESPACE);
                if (!cp)
                        fatal("%.200s line %d: Missing argument.", filename, linenum);
                if (*activep) {
-                       if (options->num_identity_files >= SSH_MAX_IDENTITY_FILES)
+                       intptr = (opcode == oIdentityFile) ?
+                           &options->num_identity_files :
+                           &options->num_identity_files2;
+                       if (*intptr >= SSH_MAX_IDENTITY_FILES)
                                fatal("%.200s line %d: Too many identity files specified (max %d).",
                                      filename, linenum, SSH_MAX_IDENTITY_FILES);
-                       options->identity_files[options->num_identity_files++] = xstrdup(cp);
+                       charptr = (opcode == oIdentityFile) ?
+                           &options->identity_files[*intptr] :
+                           &options->identity_files2[*intptr];
+                       *charptr = xstrdup(cp);
+                       *intptr = *intptr + 1;
                }
                break;
 
+       case oXAuthLocation:
+               charptr=&options->xauth_location;
+               goto parse_string;
+
        case oUser:
                charptr = &options->user;
 parse_string:
@@ -397,6 +419,14 @@ parse_string:
                charptr = &options->user_hostfile;
                goto parse_string;
 
+       case oGlobalKnownHostsFile2:
+               charptr = &options->system_hostfile2;
+               goto parse_string;
+
+       case oUserKnownHostsFile2:
+               charptr = &options->user_hostfile2;
+               goto parse_string;
+
        case oHostName:
                charptr = &options->hostname;
                goto parse_string;
@@ -439,6 +469,8 @@ parse_int:
        case oCipher:
                intptr = &options->cipher;
                cp = strtok(NULL, WHITESPACE);
+               if (!cp)
+                       fatal("%.200s line %d: Missing argument.", filename, linenum);
                value = cipher_number(cp);
                if (value == -1)
                        fatal("%.200s line %d: Bad cipher '%s'.",
@@ -449,8 +481,10 @@ parse_int:
 
        case oCiphers:
                cp = strtok(NULL, WHITESPACE);
+               if (!cp)
+                       fatal("%.200s line %d: Missing argument.", filename, linenum);
                if (!ciphers_valid(cp))
-                       fatal("%.200s line %d: Bad cipher spec '%s'.",
+                       fatal("%.200s line %d: Bad SSH2 cipher spec '%s'.",
                              filename, linenum, cp ? cp : "<NONE>");
                if (*activep && options->ciphers == NULL)
                        options->ciphers = xstrdup(cp);
@@ -459,6 +493,8 @@ parse_int:
        case oProtocol:
                intptr = &options->protocol;
                cp = strtok(NULL, WHITESPACE);
+               if (!cp)
+                       fatal("%.200s line %d: Missing argument.", filename, linenum);
                value = proto_spec(cp);
                if (value == SSH_PROTO_UNKNOWN)
                        fatal("%.200s line %d: Bad protocol spec '%s'.",
@@ -613,10 +649,12 @@ initialize_options(Options * options)
        memset(options, 'X', sizeof(*options));
        options->forward_agent = -1;
        options->forward_x11 = -1;
+       options->xauth_location = NULL;
        options->gateway_ports = -1;
        options->use_privileged_port = -1;
        options->rhosts_authentication = -1;
        options->rsa_authentication = -1;
+       options->dsa_authentication = -1;
        options->skey_authentication = -1;
 #ifdef KRB4
        options->kerberos_authentication = -1;
@@ -642,12 +680,15 @@ initialize_options(Options * options)
        options->ciphers = NULL;
        options->protocol = SSH_PROTO_UNKNOWN;
        options->num_identity_files = 0;
+       options->num_identity_files2 = 0;
        options->hostname = NULL;
        options->proxy_command = NULL;
        options->user = NULL;
        options->escape_char = -1;
        options->system_hostfile = NULL;
        options->user_hostfile = NULL;
+       options->system_hostfile2 = NULL;
+       options->user_hostfile2 = NULL;
        options->num_local_forwards = 0;
        options->num_remote_forwards = 0;
        options->log_level = (LogLevel) - 1;
@@ -662,9 +703,13 @@ void
 fill_default_options(Options * options)
 {
        if (options->forward_agent == -1)
-               options->forward_agent = 1;
+               options->forward_agent = 0;
        if (options->forward_x11 == -1)
                options->forward_x11 = 0;
+#ifdef XAUTH_PATH
+       if (options->xauth_location == NULL)
+               options->xauth_location = XAUTH_PATH;
+#endif /* XAUTH_PATH */
        if (options->gateway_ports == -1)
                options->gateway_ports = 0;
        if (options->use_privileged_port == -1)
@@ -673,6 +718,8 @@ fill_default_options(Options * options)
                options->rhosts_authentication = 1;
        if (options->rsa_authentication == -1)
                options->rsa_authentication = 1;
+       if (options->dsa_authentication == -1)
+               options->dsa_authentication = 1;
        if (options->skey_authentication == -1)
                options->skey_authentication = 0;
 #ifdef KRB4
@@ -714,20 +761,31 @@ fill_default_options(Options * options)
        /* Selected in ssh_login(). */
        if (options->cipher == -1)
                options->cipher = SSH_CIPHER_NOT_SET;
+       /* options->ciphers, default set in myproposals.h */
        if (options->protocol == SSH_PROTO_UNKNOWN)
-               options->protocol = SSH_PROTO_1;
+               options->protocol = SSH_PROTO_1|SSH_PROTO_2|SSH_PROTO_1_PREFERRED;
        if (options->num_identity_files == 0) {
                options->identity_files[0] =
                        xmalloc(2 + strlen(SSH_CLIENT_IDENTITY) + 1);
                sprintf(options->identity_files[0], "~/%.100s", SSH_CLIENT_IDENTITY);
                options->num_identity_files = 1;
        }
+       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)
                options->escape_char = '~';
        if (options->system_hostfile == NULL)
                options->system_hostfile = SSH_SYSTEM_HOSTFILE;
        if (options->user_hostfile == NULL)
                options->user_hostfile = SSH_USER_HOSTFILE;
+       if (options->system_hostfile2 == NULL)
+               options->system_hostfile2 = SSH_SYSTEM_HOSTFILE2;
+       if (options->user_hostfile2 == NULL)
+               options->user_hostfile2 = SSH_USER_HOSTFILE2;
        if (options->log_level == (LogLevel) - 1)
                options->log_level = SYSLOG_LEVEL_INFO;
        /* options->proxy_command should not be set by default */
This page took 0.040666 seconds and 4 git commands to generate.