summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjsing <>2015-04-15 16:08:43 +0000
committerjsing <>2015-04-15 16:08:43 +0000
commit304dc978f4617f2656dad35305db42599e6b3c72 (patch)
tree3cd20258e0378ecd5c66a1f533c8323464a98762 /src
parentdcb31e966f316332772152f9dc4003581bf31395 (diff)
downloadopenbsd-304dc978f4617f2656dad35305db42599e6b3c72.tar.gz
openbsd-304dc978f4617f2656dad35305db42599e6b3c72.tar.bz2
openbsd-304dc978f4617f2656dad35305db42599e6b3c72.zip
Treat SSL_ERROR_ZERO_RETURN as a success, rather than a failure. Also
ensure that outlen is set to zero so that tls_read() has read(2) like semantics for EOF. Spotted by doug@
Diffstat (limited to 'src')
-rw-r--r--src/lib/libtls/tls.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/lib/libtls/tls.c b/src/lib/libtls/tls.c
index 002cccda5f..f4bd108dac 100644
--- a/src/lib/libtls/tls.c
+++ b/src/lib/libtls/tls.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls.c,v 1.10 2015/04/15 16:05:23 jsing Exp $ */ 1/* $OpenBSD: tls.c,v 1.11 2015/04/15 16:08:43 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -246,11 +246,8 @@ tls_ssl_error(struct tls *ctx, SSL *ssl_conn, int ssl_ret, const char *prefix)
246 ssl_err = SSL_get_error(ssl_conn, ssl_ret); 246 ssl_err = SSL_get_error(ssl_conn, ssl_ret);
247 switch (ssl_err) { 247 switch (ssl_err) {
248 case SSL_ERROR_NONE: 248 case SSL_ERROR_NONE:
249 return (0);
250
251 case SSL_ERROR_ZERO_RETURN: 249 case SSL_ERROR_ZERO_RETURN:
252 tls_set_error(ctx, "%s failed: TLS connection closed", prefix); 250 return (0);
253 return (-1);
254 251
255 case SSL_ERROR_WANT_READ: 252 case SSL_ERROR_WANT_READ:
256 return (TLS_READ_AGAIN); 253 return (TLS_READ_AGAIN);
@@ -301,6 +298,8 @@ tls_read(struct tls *ctx, void *buf, size_t buflen, size_t *outlen)
301 return (0); 298 return (0);
302 } 299 }
303 300
301 *outlen = 0;
302
304 return tls_ssl_error(ctx, ctx->ssl_conn, ssl_ret, "read"); 303 return tls_ssl_error(ctx, ctx->ssl_conn, ssl_ret, "read");
305} 304}
306 305
@@ -320,6 +319,8 @@ tls_write(struct tls *ctx, const void *buf, size_t buflen, size_t *outlen)
320 return (0); 319 return (0);
321 } 320 }
322 321
322 *outlen = 0;
323
323 return tls_ssl_error(ctx, ctx->ssl_conn, ssl_ret, "write"); 324 return tls_ssl_error(ctx, ctx->ssl_conn, ssl_ret, "write");
324} 325}
325 326