summaryrefslogtreecommitdiffstats
path: root/usr.bin/ssh/sshconnect.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/ssh/sshconnect.c')
-rw-r--r--usr.bin/ssh/sshconnect.c38
1 files changed, 22 insertions, 16 deletions
diff --git a/usr.bin/ssh/sshconnect.c b/usr.bin/ssh/sshconnect.c
index a3bcf58ac53..3e726ad6d48 100644
--- a/usr.bin/ssh/sshconnect.c
+++ b/usr.bin/ssh/sshconnect.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sshconnect.c,v 1.285 2017/09/03 23:33:13 djm Exp $ */
+/* $OpenBSD: sshconnect.c,v 1.286 2017/09/12 06:32:07 djm Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -93,7 +93,7 @@ expand_proxy_command(const char *proxy_command, const char *user,
* a connected fd back to us.
*/
static int
-ssh_proxy_fdpass_connect(const char *host, u_short port,
+ssh_proxy_fdpass_connect(struct ssh *ssh, const char *host, u_short port,
const char *proxy_command)
{
char *command_string;
@@ -164,7 +164,8 @@ ssh_proxy_fdpass_connect(const char *host, u_short port,
fatal("Couldn't wait for child: %s", strerror(errno));
/* Set the connection file descriptors. */
- packet_set_connection(sock, sock);
+ if (ssh_packet_set_connection(ssh, sock, sock) == NULL)
+ return -1; /* ssh_packet_set_connection logs error */
return 0;
}
@@ -173,7 +174,8 @@ ssh_proxy_fdpass_connect(const char *host, u_short port,
* Connect to the given ssh server using a proxy command.
*/
static int
-ssh_proxy_connect(const char *host, u_short port, const char *proxy_command)
+ssh_proxy_connect(struct ssh *ssh, const char *host, u_short port,
+ const char *proxy_command)
{
char *command_string;
int pin[2], pout[2];
@@ -240,9 +242,9 @@ ssh_proxy_connect(const char *host, u_short port, const char *proxy_command)
free(command_string);
/* Set the connection file descriptors. */
- packet_set_connection(pout[0], pin[1]);
+ if (ssh_packet_set_connection(ssh, pout[0], pin[1]) == NULL)
+ return -1; /* ssh_packet_set_connection logs error */
- /* Indicate OK return */
return 0;
}
@@ -398,7 +400,7 @@ timeout_connect(int sockfd, const struct sockaddr *serv_addr,
* the daemon.
*/
static int
-ssh_connect_direct(const char *host, struct addrinfo *aitop,
+ssh_connect_direct(struct ssh *ssh, const char *host, struct addrinfo *aitop,
struct sockaddr_storage *hostaddr, u_short port, int family,
int connection_attempts, int *timeout_ms, int want_keepalive, int needpriv)
{
@@ -472,27 +474,31 @@ ssh_connect_direct(const char *host, struct addrinfo *aitop,
error("setsockopt SO_KEEPALIVE: %.100s", strerror(errno));
/* Set the connection. */
- packet_set_connection(sock, sock);
+ if (ssh_packet_set_connection(ssh, sock, sock) == NULL)
+ return -1; /* ssh_packet_set_connection logs error */
- return 0;
+ return 0;
}
int
-ssh_connect(const char *host, struct addrinfo *addrs,
+ssh_connect(struct ssh *ssh, const char *host, struct addrinfo *addrs,
struct sockaddr_storage *hostaddr, u_short port, int family,
int connection_attempts, int *timeout_ms, int want_keepalive, int needpriv)
{
if (options.proxy_command == NULL) {
- return ssh_connect_direct(host, addrs, hostaddr, port, family,
- connection_attempts, timeout_ms, want_keepalive, needpriv);
+ return ssh_connect_direct(ssh, host, addrs, hostaddr, port,
+ family, connection_attempts, timeout_ms, want_keepalive,
+ needpriv);
} else if (strcmp(options.proxy_command, "-") == 0) {
- packet_set_connection(STDIN_FILENO, STDOUT_FILENO);
- return 0; /* Always succeeds */
+ if ((ssh_packet_set_connection(ssh,
+ STDIN_FILENO, STDOUT_FILENO)) == NULL)
+ return -1; /* ssh_packet_set_connection logs error */
+ return 0;
} else if (options.proxy_use_fdpass) {
- return ssh_proxy_fdpass_connect(host, port,
+ return ssh_proxy_fdpass_connect(ssh, host, port,
options.proxy_command);
}
- return ssh_proxy_connect(host, port, options.proxy_command);
+ return ssh_proxy_connect(ssh, host, port, options.proxy_command);
}
static void