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.c18
1 files changed, 6 insertions, 12 deletions
diff --git a/src/lib/libtls/tls_client.c b/src/lib/libtls/tls_client.c
index d9354c3140..85733cdd5e 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.10 2015/01/30 14:25:37 bluhm Exp $ */ 1/* $OpenBSD: tls_client.c,v 1.11 2015/02/07 09:50:09 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -136,7 +136,7 @@ tls_connect_fds(struct tls *ctx, int fd_read, int fd_write,
136{ 136{
137 union { struct in_addr ip4; struct in6_addr ip6; } addrbuf; 137 union { struct in_addr ip4; struct in6_addr ip6; } addrbuf;
138 X509 *cert = NULL; 138 X509 *cert = NULL;
139 int ret, ssl_err; 139 int ret, err;
140 140
141 if (ctx->flags & TLS_CONNECTING) 141 if (ctx->flags & TLS_CONNECTING)
142 goto connecting; 142 goto connecting;
@@ -216,18 +216,12 @@ tls_connect_fds(struct tls *ctx, int fd_read, int fd_write,
216 216
217 connecting: 217 connecting:
218 if ((ret = SSL_connect(ctx->ssl_conn)) != 1) { 218 if ((ret = SSL_connect(ctx->ssl_conn)) != 1) {
219 ssl_err = SSL_get_error(ctx->ssl_conn, ret); 219 err = tls_ssl_error(ctx, ret, "connect");
220 switch (ssl_err) { 220 if (err == TLS_READ_AGAIN || err == TLS_WRITE_AGAIN) {
221 case SSL_ERROR_WANT_READ:
222 ctx->flags |= TLS_CONNECTING; 221 ctx->flags |= TLS_CONNECTING;
223 return (TLS_READ_AGAIN); 222 return (err);
224 case SSL_ERROR_WANT_WRITE:
225 ctx->flags |= TLS_CONNECTING;
226 return (TLS_WRITE_AGAIN);
227 default:
228 tls_set_error(ctx, "TLS connect failed (%i)", ssl_err);
229 goto err;
230 } 223 }
224 goto err;
231 } 225 }
232 ctx->flags &= ~TLS_CONNECTING; 226 ctx->flags &= ~TLS_CONNECTING;
233 227