summaryrefslogtreecommitdiff
path: root/src/lib/libtls/tls_client.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libtls/tls_client.c')
-rw-r--r--src/lib/libtls/tls_client.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/lib/libtls/tls_client.c b/src/lib/libtls/tls_client.c
index 853766f87b..a4528b9b87 100644
--- a/src/lib/libtls/tls_client.c
+++ b/src/lib/libtls/tls_client.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls_client.c,v 1.1 2014/10/31 13:46:17 jsing Exp $ */ 1/* $OpenBSD: tls_client.c,v 1.2 2014/11/02 14:45:05 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -123,6 +123,15 @@ err:
123int 123int
124tls_connect_socket(struct tls *ctx, int socket, const char *hostname) 124tls_connect_socket(struct tls *ctx, int socket, const char *hostname)
125{ 125{
126 ctx->socket = socket;
127
128 return tls_connect_fds(ctx, socket, socket, hostname);
129}
130
131int
132tls_connect_fds(struct tls *ctx, int fd_read, int fd_write,
133 const char *hostname)
134{
126 union { struct in_addr ip4; struct in6_addr ip6; } addrbuf; 135 union { struct in_addr ip4; struct in6_addr ip6; } addrbuf;
127 X509 *cert = NULL; 136 X509 *cert = NULL;
128 int ret; 137 int ret;
@@ -132,7 +141,10 @@ tls_connect_socket(struct tls *ctx, int socket, const char *hostname)
132 goto err; 141 goto err;
133 } 142 }
134 143
135 ctx->socket = socket; 144 if (fd_read < 0 || fd_write < 0) {
145 tls_set_error(ctx, "invalid file descriptors");
146 return (-1);
147 }
136 148
137 if ((ctx->ssl_ctx = SSL_CTX_new(SSLv23_client_method())) == NULL) { 149 if ((ctx->ssl_ctx = SSL_CTX_new(SSLv23_client_method())) == NULL) {
138 tls_set_error(ctx, "ssl context failure"); 150 tls_set_error(ctx, "ssl context failure");
@@ -166,7 +178,8 @@ tls_connect_socket(struct tls *ctx, int socket, const char *hostname)
166 tls_set_error(ctx, "ssl connection failure"); 178 tls_set_error(ctx, "ssl connection failure");
167 goto err; 179 goto err;
168 } 180 }
169 if (SSL_set_fd(ctx->ssl_conn, ctx->socket) != 1) { 181 if (SSL_set_rfd(ctx->ssl_conn, fd_read) != 1 ||
182 SSL_set_wfd(ctx->ssl_conn, fd_write) != 1) {
170 tls_set_error(ctx, "ssl file descriptor failure"); 183 tls_set_error(ctx, "ssl file descriptor failure");
171 goto err; 184 goto err;
172 } 185 }