diff options
Diffstat (limited to 'src/lib/libtls/tls_client.c')
-rw-r--r-- | src/lib/libtls/tls_client.c | 19 |
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: | |||
123 | int | 123 | int |
124 | tls_connect_socket(struct tls *ctx, int socket, const char *hostname) | 124 | tls_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 | |||
131 | int | ||
132 | tls_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 | } |