diff options
author | jsing <> | 2015-04-02 13:19:15 +0000 |
---|---|---|
committer | jsing <> | 2015-04-02 13:19:15 +0000 |
commit | f2f92a2f5098f67338df0882b17ec3f65d4364d0 (patch) | |
tree | d0086594500ece17ecc850e62e7bf342bb51b3e1 /src/lib/libtls/tls.c | |
parent | eb612cbe415759f36d06b1f632d581cf43bc4473 (diff) | |
download | openbsd-f2f92a2f5098f67338df0882b17ec3f65d4364d0.tar.gz openbsd-f2f92a2f5098f67338df0882b17ec3f65d4364d0.tar.bz2 openbsd-f2f92a2f5098f67338df0882b17ec3f65d4364d0.zip |
Handle the case where multiple calls to SSL_shutdown() are required to
close the connection. Also correctly handle the error on failure.
Diff from cookieandscream via github.
Diffstat (limited to 'src/lib/libtls/tls.c')
-rw-r--r-- | src/lib/libtls/tls.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/lib/libtls/tls.c b/src/lib/libtls/tls.c index b7b6570ff9..d942c35fec 100644 --- a/src/lib/libtls/tls.c +++ b/src/lib/libtls/tls.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls.c,v 1.8 2015/03/31 12:21:27 jsing Exp $ */ | 1 | /* $OpenBSD: tls.c,v 1.9 2015/04/02 13:19:15 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> |
4 | * | 4 | * |
@@ -326,12 +326,15 @@ tls_write(struct tls *ctx, const void *buf, size_t buflen, size_t *outlen) | |||
326 | int | 326 | int |
327 | tls_close(struct tls *ctx) | 327 | tls_close(struct tls *ctx) |
328 | { | 328 | { |
329 | /* XXX - handle case where multiple calls are required. */ | 329 | int ssl_ret; |
330 | |||
330 | if (ctx->ssl_conn != NULL) { | 331 | if (ctx->ssl_conn != NULL) { |
331 | if (SSL_shutdown(ctx->ssl_conn) == -1) { | 332 | ssl_ret = SSL_shutdown(ctx->ssl_conn); |
332 | tls_set_error(ctx, "SSL shutdown failed"); | 333 | if (ssl_ret == 0) |
333 | goto err; | 334 | ssl_ret = SSL_shutdown(ctx->ssl_conn); |
334 | } | 335 | if (ssl_ret < 0) |
336 | return tls_ssl_error(ctx, ctx->ssl_conn, ssl_ret, | ||
337 | "shutdown"); | ||
335 | } | 338 | } |
336 | 339 | ||
337 | if (ctx->socket != -1) { | 340 | if (ctx->socket != -1) { |