]> andersk Git - openssh.git/blobdiff - readconf.c
20001229
[openssh.git] / readconf.c
index f31b1c4e65380f50819cbac4021c606bd0d0f6a7..6f5ac8ca65f288f49f4ee02607fb9d4ea61aa460 100644 (file)
@@ -1,23 +1,20 @@
 /*
- *
- * readconf.c
- *
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
- *
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
  *                    All rights reserved
- *
- * Created: Sat Apr 22 00:03:10 1995 ylo
- *
  * Functions for reading the configuration files.
  *
+ * As far as I am concerned, the code I have written for this software
+ * can be used freely for any purpose.  Any derived versions of this
+ * software must be clearly marked as such, and if the derived work is
+ * incompatible with the protocol description in the RFC file, it must be
+ * called by a name other than "ssh" or "Secure Shell".
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: readconf.c,v 1.45 2000/08/02 17:27:04 provos Exp $");
+RCSID("$OpenBSD: readconf.c,v 1.51 2000/12/19 23:17:57 markus Exp $");
 
 #include "ssh.h"
-#include "cipher.h"
 #include "readconf.h"
 #include "match.h"
 #include "xmalloc.h"
@@ -71,7 +68,7 @@ RCSID("$OpenBSD: readconf.c,v 1.45 2000/08/02 17:27:04 provos Exp $");
    # Defaults for various options
    Host *
      ForwardAgent no
-     ForwardX11 yes
+     ForwardX11 no
      RhostsAuthentication yes
      PasswordAuthentication yes
      RSAAuthentication yes
@@ -104,8 +101,9 @@ typedef enum {
        oGlobalKnownHostsFile, oUserKnownHostsFile, oConnectionAttempts,
        oBatchMode, oCheckHostIP, oStrictHostKeyChecking, oCompression,
        oCompressionLevel, oKeepAlives, oNumberOfPasswordPrompts, oTISAuthentication,
-       oUsePrivilegedPort, oLogLevel, oCiphers, oProtocol, oIdentityFile2,
-       oGlobalKnownHostsFile2, oUserKnownHostsFile2, oDSAAuthentication
+       oUsePrivilegedPort, oLogLevel, oCiphers, oProtocol,
+       oGlobalKnownHostsFile2, oUserKnownHostsFile2, oPubkeyAuthentication,
+       oKbdInteractiveAuthentication, oKbdInteractiveDevices
 } OpCodes;
 
 /* Textual representations of the tokens. */
@@ -121,8 +119,11 @@ static struct {
        { "useprivilegedport", oUsePrivilegedPort },
        { "rhostsauthentication", oRhostsAuthentication },
        { "passwordauthentication", oPasswordAuthentication },
+       { "kbdinteractiveauthentication", oKbdInteractiveAuthentication },
+       { "kbdinteractivedevices", oKbdInteractiveDevices },
        { "rsaauthentication", oRSAAuthentication },
-       { "dsaauthentication", oDSAAuthentication },
+       { "pubkeyauthentication", oPubkeyAuthentication },
+       { "dsaauthentication", oPubkeyAuthentication },         /* alias */
        { "skeyauthentication", oSkeyAuthentication },
 #ifdef KRB4
        { "kerberosauthentication", oKerberosAuthentication },
@@ -134,7 +135,7 @@ static struct {
        { "fallbacktorsh", oFallBackToRsh },
        { "usersh", oUseRsh },
        { "identityfile", oIdentityFile },
-       { "identityfile2", oIdentityFile2 },
+       { "identityfile2", oIdentityFile },                     /* alias */
        { "hostname", oHostName },
        { "proxycommand", oProxyCommand },
        { "port", oPort },
@@ -174,9 +175,11 @@ add_local_forward(Options *options, u_short port, const char *host,
                  u_short host_port)
 {
        Forward *fwd;
+#ifndef HAVE_CYGWIN
        extern uid_t original_real_uid;
        if (port < IPPORT_RESERVED && original_real_uid != 0)
                fatal("Privileged ports can only be forwarded by root.\n");
+#endif
        if (options->num_local_forwards >= SSH_MAX_FORWARDS_PER_DIRECTION)
                fatal("Too many local forwards (max %d).", SSH_MAX_FORWARDS_PER_DIRECTION);
        fwd = &options->local_forwards[options->num_local_forwards++];
@@ -212,7 +215,7 @@ add_remote_forward(Options *options, u_short port, const char *host,
 static OpCodes
 parse_token(const char *cp, const char *filename, int linenum)
 {
-       unsigned int i;
+       u_int i;
 
        for (i = 0; keywords[i].name; i++)
                if (strcasecmp(cp, keywords[i].name) == 0)
@@ -290,8 +293,16 @@ parse_flag:
                intptr = &options->password_authentication;
                goto parse_flag;
 
-       case oDSAAuthentication:
-               intptr = &options->dsa_authentication;
+       case oKbdInteractiveAuthentication:
+               intptr = &options->kbd_interactive_authentication;
+               goto parse_flag;
+
+       case oKbdInteractiveDevices:
+               charptr = &options->kbd_interactive_devices;
+               goto parse_string;
+
+       case oPubkeyAuthentication:
+               intptr = &options->pubkey_authentication;
                goto parse_flag;
 
        case oRSAAuthentication:
@@ -376,20 +387,15 @@ parse_flag:
                goto parse_int;
 
        case oIdentityFile:
-       case oIdentityFile2:
                arg = strdelim(&s);
                if (!arg || *arg == '\0')
                        fatal("%.200s line %d: Missing argument.", filename, linenum);
                if (*activep) {
-                       intptr = (opcode == oIdentityFile) ?
-                           &options->num_identity_files :
-                           &options->num_identity_files2;
+                       intptr = &options->num_identity_files;
                        if (*intptr >= SSH_MAX_IDENTITY_FILES)
                                fatal("%.200s line %d: Too many identity files specified (max %d).",
                                      filename, linenum, SSH_MAX_IDENTITY_FILES);
-                       charptr = (opcode == oIdentityFile) ?
-                           &options->identity_files[*intptr] :
-                           &options->identity_files2[*intptr];
+                       charptr =  &options->identity_files[*intptr];
                        *charptr = xstrdup(arg);
                        *intptr = *intptr + 1;
                }
@@ -567,10 +573,10 @@ parse_int:
                if (!arg || *arg == '\0')
                        fatal("%.200s line %d: Missing argument.", filename, linenum);
                if (arg[0] == '^' && arg[2] == 0 &&
-                   (unsigned char) arg[1] >= 64 && (unsigned char) arg[1] < 128)
-                       value = (unsigned char) arg[1] & 31;
+                   (u_char) arg[1] >= 64 && (u_char) arg[1] < 128)
+                       value = (u_char) arg[1] & 31;
                else if (strlen(arg) == 1)
-                       value = (unsigned char) arg[0];
+                       value = (u_char) arg[0];
                else if (strcmp(arg, "none") == 0)
                        value = -2;
                else {
@@ -654,7 +660,7 @@ initialize_options(Options * options)
        options->use_privileged_port = -1;
        options->rhosts_authentication = -1;
        options->rsa_authentication = -1;
-       options->dsa_authentication = -1;
+       options->pubkey_authentication = -1;
        options->skey_authentication = -1;
 #ifdef KRB4
        options->kerberos_authentication = -1;
@@ -664,6 +670,8 @@ initialize_options(Options * options)
        options->afs_token_passing = -1;
 #endif
        options->password_authentication = -1;
+       options->kbd_interactive_authentication = -1;
+       options->kbd_interactive_devices = NULL;
        options->rhosts_rsa_authentication = -1;
        options->fallback_to_rsh = -1;
        options->use_rsh = -1;
@@ -680,7 +688,6 @@ 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;
@@ -718,8 +725,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->pubkey_authentication == -1)
+               options->pubkey_authentication = 1;
        if (options->skey_authentication == -1)
                options->skey_authentication = 0;
 #ifdef KRB4
@@ -734,6 +741,8 @@ fill_default_options(Options * options)
 #endif /* AFS */
        if (options->password_authentication == -1)
                options->password_authentication = 1;
+       if (options->kbd_interactive_authentication == -1)
+               options->kbd_interactive_authentication = 0;
        if (options->rhosts_rsa_authentication == -1)
                options->rhosts_rsa_authentication = 1;
        if (options->fallback_to_rsh == -1)
@@ -765,16 +774,18 @@ fill_default_options(Options * options)
        if (options->protocol == SSH_PROTO_UNKNOWN)
                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->protocol & SSH_PROTO_1) {
+                       options->identity_files[options->num_identity_files] =
+                           xmalloc(2 + strlen(SSH_CLIENT_IDENTITY) + 1);
+                       sprintf(options->identity_files[options->num_identity_files++],
+                           "~/%.100s", SSH_CLIENT_IDENTITY);
+               }
+               if (options->protocol & SSH_PROTO_2) {
+                       options->identity_files[options->num_identity_files] =
+                           xmalloc(2 + strlen(SSH_CLIENT_ID_DSA) + 1);
+                       sprintf(options->identity_files[options->num_identity_files++],
+                           "~/%.100s", SSH_CLIENT_ID_DSA);
+               }
        }
        if (options->escape_char == -1)
                options->escape_char = '~';
This page took 0.040842 seconds and 4 git commands to generate.