diff options
Diffstat (limited to 'src/lib/libtls/tls.c')
-rw-r--r-- | src/lib/libtls/tls.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/lib/libtls/tls.c b/src/lib/libtls/tls.c index 65103f106d..277970c932 100644 --- a/src/lib/libtls/tls.c +++ b/src/lib/libtls/tls.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls.c,v 1.26 2015/09/12 19:54:31 jsing Exp $ */ | 1 | /* $OpenBSD: tls.c,v 1.27 2015/09/12 21:00:38 beck Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> |
4 | * | 4 | * |
@@ -323,6 +323,10 @@ tls_reset(struct tls *ctx) | |||
323 | free(ctx->errmsg); | 323 | free(ctx->errmsg); |
324 | ctx->errmsg = NULL; | 324 | ctx->errmsg = NULL; |
325 | ctx->errnum = 0; | 325 | ctx->errnum = 0; |
326 | |||
327 | tls_free_conninfo(ctx->conninfo); | ||
328 | free(ctx->conninfo); | ||
329 | ctx->conninfo = NULL; | ||
326 | } | 330 | } |
327 | 331 | ||
328 | int | 332 | int |
@@ -376,14 +380,19 @@ tls_handshake(struct tls *ctx) | |||
376 | { | 380 | { |
377 | int rv = -1; | 381 | int rv = -1; |
378 | 382 | ||
383 | if ((ctx->conninfo = calloc(1, sizeof(*ctx->conninfo))) == NULL) | ||
384 | goto out; | ||
385 | |||
379 | if ((ctx->flags & TLS_CLIENT) != 0) | 386 | if ((ctx->flags & TLS_CLIENT) != 0) |
380 | rv = tls_handshake_client(ctx); | 387 | rv = tls_handshake_client(ctx); |
381 | else if ((ctx->flags & TLS_SERVER_CONN) != 0) | 388 | else if ((ctx->flags & TLS_SERVER_CONN) != 0) |
382 | rv = tls_handshake_server(ctx); | 389 | rv = tls_handshake_server(ctx); |
383 | 390 | ||
384 | if (rv == 0) | 391 | if (rv == 0 && |
385 | ctx->ssl_peer_cert = SSL_get_peer_certificate(ctx->ssl_conn); | 392 | (ctx->ssl_peer_cert = SSL_get_peer_certificate(ctx->ssl_conn)) && |
386 | 393 | (tls_get_conninfo(ctx) == -1)) | |
394 | rv = -1; | ||
395 | out: | ||
387 | /* Prevent callers from performing incorrect error handling */ | 396 | /* Prevent callers from performing incorrect error handling */ |
388 | errno = 0; | 397 | errno = 0; |
389 | return (rv); | 398 | return (rv); |