]> andersk Git - openssh.git/blobdiff - sshconnect.c
- (bal) auth1.c minor resync while looking at the code.
[openssh.git] / sshconnect.c
index 6004bf5e41db05b29495545f156c406fca280203..b0ba3f0c6cf3e57791ca31cb3922e9e1d1985e17 100644 (file)
@@ -13,7 +13,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: sshconnect.c,v 1.133 2002/07/29 18:57:30 markus Exp $");
+RCSID("$OpenBSD: sshconnect.c,v 1.137 2002/11/21 23:03:51 deraadt Exp $");
 
 #include <openssl/bn.h>
 
@@ -41,6 +41,7 @@ extern Options options;
 extern char *__progname;
 extern uid_t original_real_uid;
 extern uid_t original_effective_uid;
+extern pid_t proxy_command_pid;
 
 #ifndef INET6_ADDRSTRLEN               /* for non IPv6 machines */
 #define INET6_ADDRSTRLEN 46
@@ -64,9 +65,16 @@ ssh_proxy_connect(const char *host, u_short port, const char *proxy_command)
        /* Convert the port number into a string. */
        snprintf(strport, sizeof strport, "%hu", port);
 
-       /* Build the final command string in the buffer by making the
-          appropriate substitutions to the given proxy command. */
+       /*
+        * Build the final command string in the buffer by making the
+        * appropriate substitutions to the given proxy command.
+        *
+        * Use "exec" to avoid "sh -c" processes on some platforms 
+        * (e.g. Solaris)
+        */
        buffer_init(&command);
+       buffer_append(&command, "exec ", 5);
+
        for (cp = proxy_command; *cp; cp++) {
                if (cp[0] == '%' && cp[1] == '%') {
                        buffer_append(&command, "%", 1);
@@ -134,6 +142,8 @@ ssh_proxy_connect(const char *host, u_short port, const char *proxy_command)
        /* Parent. */
        if (pid < 0)
                fatal("fork failed: %.100s", strerror(errno));
+       else
+               proxy_command_pid = pid; /* save pid to clean up later */
 
        /* Close child side of the descriptors. */
        close(pin[0]);
@@ -229,7 +239,6 @@ ssh_connect(const char *host, struct sockaddr_storage * hostaddr,
        int sock = -1, attempt;
        char ntop[NI_MAXHOST], strport[NI_MAXSERV];
        struct addrinfo hints, *ai, *aitop;
-       struct linger linger;
        struct servent *sp;
        /*
         * Did we get only other errors than "Connection refused" (which
@@ -238,7 +247,7 @@ ssh_connect(const char *host, struct sockaddr_storage * hostaddr,
         */
        int full_failure = 1;
 
-       debug("ssh_connect: needpriv %d", needpriv);
+       debug2("ssh_connect: needpriv %d", needpriv);
 
        /* Get default port if port has not been set. */
        if (port == 0) {
@@ -323,22 +332,13 @@ ssh_connect(const char *host, struct sockaddr_storage * hostaddr,
 
        /* Return failure if we didn't get a successful connection. */
        if (attempt >= connection_attempts) {
-               log("ssh: connect to host %s port %s: %s",
+               logit("ssh: connect to host %s port %s: %s",
                    host, strport, strerror(errno));
                return full_failure ? ECONNABORTED : ECONNREFUSED;
        }
 
        debug("Connection established.");
 
-       /*
-        * Set socket options.  We would like the socket to disappear as soon
-        * as it has been closed for whatever reason.
-        */
-       /* setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void *)&on, sizeof(on)); */
-       linger.l_onoff = 1;
-       linger.l_linger = 5;
-       setsockopt(sock, SOL_SOCKET, SO_LINGER, (void *)&linger, sizeof(linger));
-
        /* Set keepalives if requested. */
        if (options.keepalives &&
            setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, (void *)&on,
@@ -421,7 +421,7 @@ ssh_exchange_identification(void)
                        enable_compat13();
                        minor1 = 3;
                        if (options.forward_agent) {
-                               log("Agent forwarding disabled for protocol 1.3");
+                               logit("Agent forwarding disabled for protocol 1.3");
                                options.forward_agent = 0;
                        }
                }
@@ -612,16 +612,16 @@ check_host_key(char *host, struct sockaddr *hostaddr, Key *host_key,
                debug("Found key in %s:%d", host_file, host_line);
                if (options.check_host_ip && ip_status == HOST_NEW) {
                        if (readonly)
-                               log("%s host key for IP address "
+                               logit("%s host key for IP address "
                                    "'%.128s' not in list of known hosts.",
                                    type, ip);
                        else if (!add_host_to_hostfile(user_hostfile, ip,
                            host_key))
-                               log("Failed to add the %s host key for IP "
+                               logit("Failed to add the %s host key for IP "
                                    "address '%.128s' to the list of known "
                                    "hosts (%.30s).", type, ip, user_hostfile);
                        else
-                               log("Warning: Permanently added the %s host "
+                               logit("Warning: Permanently added the %s host "
                                    "key for IP address '%.128s' to the list "
                                    "of known hosts.", type, ip);
                }
@@ -649,10 +649,10 @@ check_host_key(char *host, struct sockaddr *hostaddr, Key *host_key,
                            "%s key fingerprint is %s.\n"
                            "Are you sure you want to continue connecting "
                            "(yes/no)? ",
-                            host, ip,
-                            has_keys ? ",\nbut keys of different type are already "
-                            "known for this host." : ".",
-                            type, fp);
+                           host, ip,
+                           has_keys ? ",\nbut keys of different type are already "
+                           "known for this host." : ".",
+                           type, fp);
                        xfree(fp);
                        if (!confirm(msg))
                                goto fail;
@@ -668,10 +668,10 @@ check_host_key(char *host, struct sockaddr *hostaddr, Key *host_key,
                 * local known_hosts file.
                 */
                if (!add_host_to_hostfile(user_hostfile, hostp, host_key))
-                       log("Failed to add the host to the list of known "
+                       logit("Failed to add the host to the list of known "
                            "hosts (%.500s).", user_hostfile);
                else
-                       log("Warning: Permanently added '%.200s' (%s) to the "
+                       logit("Warning: Permanently added '%.200s' (%s) to the "
                            "list of known hosts.", hostp, type);
                break;
        case HOST_CHANGED:
@@ -774,7 +774,7 @@ check_host_key(char *host, struct sockaddr *hostaddr, Key *host_key,
                            host_file, host_line);
                }
                if (options.strict_host_key_checking == 1) {
-                       log(msg);
+                       logit(msg);
                        error("Exiting, you have requested strict checking.");
                        goto fail;
                } else if (options.strict_host_key_checking == 2) {
@@ -783,7 +783,7 @@ check_host_key(char *host, struct sockaddr *hostaddr, Key *host_key,
                        if (!confirm(msg))
                                goto fail;
                } else {
-                       log(msg);
+                       logit(msg);
                }
        }
 
@@ -881,7 +881,7 @@ show_key_from_file(const char *file, const char *host, int keytype)
        if ((ret = lookup_key_in_hostfile_by_type(file, host,
            keytype, found, &line))) {
                fp = key_fingerprint(found, SSH_FP_MD5, SSH_FP_HEX);
-               log("WARNING: %s key found for host %s\n"
+               logit("WARNING: %s key found for host %s\n"
                    "in %s:%d\n"
                    "%s key fingerprint %s.",
                    key_type(found), host, file, line,
This page took 0.040905 seconds and 4 git commands to generate.