]> andersk Git - openssh.git/blobdiff - readconf.c
- djm@cvs.openbsd.org 2010/01/27 19:21:39
[openssh.git] / readconf.c
index ba70d9da0d75277225141adf242c0c6aecad8890..d424c16974477eeca622230dbe6edcf05feea5eb 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: readconf.c,v 1.171 2008/11/04 08:22:13 djm Exp $ */
+/* $OpenBSD: readconf.c,v 1.182 2010/01/09 23:04:13 dtucker Exp $ */
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -130,7 +130,7 @@ typedef enum {
        oServerAliveInterval, oServerAliveCountMax, oIdentitiesOnly,
        oSendEnv, oControlPath, oControlMaster, oHashKnownHosts,
        oTunnel, oTunnelDevice, oLocalCommand, oPermitLocalCommand,
-       oVisualHostKey, oZeroKnowledgePasswordAuthentication,
+       oVisualHostKey, oUseRoaming, oZeroKnowledgePasswordAuthentication,
        oDeprecated, oUnsupported
 } OpCodes;
 
@@ -172,7 +172,7 @@ static struct {
        { "fallbacktorsh", oDeprecated },
        { "usersh", oDeprecated },
        { "identityfile", oIdentityFile },
-       { "identityfile2", oIdentityFile },                     /* alias */
+       { "identityfile2", oIdentityFile },                     /* obsolete */
        { "identitiesonly", oIdentitiesOnly },
        { "hostname", oHostName },
        { "hostkeyalias", oHostKeyAlias },
@@ -188,8 +188,8 @@ static struct {
        { "host", oHost },
        { "escapechar", oEscapeChar },
        { "globalknownhostsfile", oGlobalKnownHostsFile },
-       { "userknownhostsfile", oUserKnownHostsFile },          /* obsolete */
-       { "globalknownhostsfile2", oGlobalKnownHostsFile2 },
+       { "globalknownhostsfile2", oGlobalKnownHostsFile2 },    /* obsolete */
+       { "userknownhostsfile", oUserKnownHostsFile },
        { "userknownhostsfile2", oUserKnownHostsFile2 },        /* obsolete */
        { "connectionattempts", oConnectionAttempts },
        { "batchmode", oBatchMode },
@@ -228,6 +228,7 @@ static struct {
        { "localcommand", oLocalCommand },
        { "permitlocalcommand", oPermitLocalCommand },
        { "visualhostkey", oVisualHostKey },
+       { "useroaming", oUseRoaming },
 #ifdef JPAKE
        { "zeroknowledgepasswordauthentication",
            oZeroKnowledgePasswordAuthentication },
@@ -256,10 +257,9 @@ add_local_forward(Options *options, const Forward *newfwd)
                fatal("Too many local forwards (max %d).", SSH_MAX_FORWARDS_PER_DIRECTION);
        fwd = &options->local_forwards[options->num_local_forwards++];
 
-       fwd->listen_host = (newfwd->listen_host == NULL) ?
-           NULL : xstrdup(newfwd->listen_host);
+       fwd->listen_host = newfwd->listen_host;
        fwd->listen_port = newfwd->listen_port;
-       fwd->connect_host = xstrdup(newfwd->connect_host);
+       fwd->connect_host = newfwd->connect_host;
        fwd->connect_port = newfwd->connect_port;
 }
 
@@ -277,10 +277,9 @@ add_remote_forward(Options *options, const Forward *newfwd)
                    SSH_MAX_FORWARDS_PER_DIRECTION);
        fwd = &options->remote_forwards[options->num_remote_forwards++];
 
-       fwd->listen_host = (newfwd->listen_host == NULL) ?
-           NULL : xstrdup(newfwd->listen_host);
+       fwd->listen_host = newfwd->listen_host;
        fwd->listen_port = newfwd->listen_port;
-       fwd->connect_host = xstrdup(newfwd->connect_host);
+       fwd->connect_host = newfwd->connect_host;
        fwd->connect_port = newfwd->connect_port;
 }
 
@@ -737,7 +736,8 @@ parse_int:
                }
 
                if (parse_forward(&fwd, fwdarg,
-                   opcode == oDynamicForward ? 1 : 0) == 0)
+                   opcode == oDynamicForward ? 1 : 0,
+                   opcode == oRemoteForward ? 1 : 0) == 0)
                        fatal("%.200s line %d: Bad forwarding specification.",
                            filename, linenum);
 
@@ -915,6 +915,10 @@ parse_int:
                intptr = &options->visual_host_key;
                goto parse_flag;
 
+       case oUseRoaming:
+               intptr = &options->use_roaming;
+               goto parse_flag;
+
        case oDeprecated:
                debug("%s line %d: Deprecated option \"%s\"",
                    filename, linenum, keyword);
@@ -1064,6 +1068,7 @@ initialize_options(Options * options)
        options->tun_remote = -1;
        options->local_command = NULL;
        options->permit_local_command = -1;
+       options->use_roaming = -1;
        options->visual_host_key = -1;
        options->zero_knowledge_password_authentication = -1;
 }
@@ -1137,7 +1142,7 @@ fill_default_options(Options * options)
        /* options->macs, default set in myproposals.h */
        /* options->hostkeyalgorithms, default set in myproposals.h */
        if (options->protocol == SSH_PROTO_UNKNOWN)
-               options->protocol = SSH_PROTO_1|SSH_PROTO_2;
+               options->protocol = SSH_PROTO_2;
        if (options->num_identity_files == 0) {
                if (options->protocol & SSH_PROTO_1) {
                        len = 2 + strlen(_PATH_SSH_CLIENT_IDENTITY) + 1;
@@ -1200,6 +1205,8 @@ fill_default_options(Options * options)
                options->tun_remote = SSH_TUNID_ANY;
        if (options->permit_local_command == -1)
                options->permit_local_command = 0;
+       if (options->use_roaming == -1)
+               options->use_roaming = 1;
        if (options->visual_host_key == -1)
                options->visual_host_key = 0;
        if (options->zero_knowledge_password_authentication == -1)
@@ -1222,7 +1229,7 @@ fill_default_options(Options * options)
  * returns number of arguments parsed or zero on error
  */
 int
-parse_forward(Forward *fwd, const char *fwdspec, int dynamicfwd)
+parse_forward(Forward *fwd, const char *fwdspec, int dynamicfwd, int remotefwd)
 {
        int i;
        char *p, *cp, *fwdarg[4];
@@ -1281,23 +1288,31 @@ parse_forward(Forward *fwd, const char *fwdspec, int dynamicfwd)
        } else {
                if (!(i == 3 || i == 4))
                        goto fail_free;
-               if (fwd->connect_port == 0)
+               if (fwd->connect_port <= 0)
                        goto fail_free;
        }
 
-       if (fwd->listen_port == 0)
+       if (fwd->listen_port < 0 || (!remotefwd && fwd->listen_port == 0))
                goto fail_free;
 
        if (fwd->connect_host != NULL &&
            strlen(fwd->connect_host) >= NI_MAXHOST)
                goto fail_free;
+       if (fwd->listen_host != NULL &&
+           strlen(fwd->listen_host) >= NI_MAXHOST)
+               goto fail_free;
+
 
        return (i);
 
  fail_free:
-       if (fwd->connect_host != NULL)
+       if (fwd->connect_host != NULL) {
                xfree(fwd->connect_host);
-       if (fwd->listen_host != NULL)
+               fwd->connect_host = NULL;
+       }
+       if (fwd->listen_host != NULL) {
                xfree(fwd->listen_host);
+               fwd->listen_host = NULL;
+       }
        return (0);
 }
This page took 0.114427 seconds and 4 git commands to generate.