diff options
author | beck <> | 2015-09-10 10:22:28 +0000 |
---|---|---|
committer | beck <> | 2015-09-10 10:22:28 +0000 |
commit | d7b1cca0f8903e9e46ffbef6af5b6edd9d88ae39 (patch) | |
tree | f452172498692f9d194b8101802284e56f8e3c6a | |
parent | f7415644a66ca9d04e5e06312a163e677032b695 (diff) | |
download | openbsd-d7b1cca0f8903e9e46ffbef6af5b6edd9d88ae39.tar.gz openbsd-d7b1cca0f8903e9e46ffbef6af5b6edd9d88ae39.tar.bz2 openbsd-d7b1cca0f8903e9e46ffbef6af5b6edd9d88ae39.zip |
Change tls_read and tls_write semantics to return an ssize_t to better
match read() and write() semantics to make porting existing code using
read/write easier.. requested by bluhm@ who convinced jsing and I to break
the api
ok jsing@ bluhm@
-rw-r--r-- | src/lib/libtls/tls.c | 28 | ||||
-rw-r--r-- | src/lib/libtls/tls.h | 7 |
2 files changed, 14 insertions, 21 deletions
diff --git a/src/lib/libtls/tls.c b/src/lib/libtls/tls.c index fe5bc964e2..c89b805af9 100644 --- a/src/lib/libtls/tls.c +++ b/src/lib/libtls/tls.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls.c,v 1.20 2015/09/10 10:14:20 jsing Exp $ */ | 1 | /* $OpenBSD: tls.c,v 1.21 2015/09/10 10:22:28 beck Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> |
4 | * | 4 | * |
@@ -383,13 +383,11 @@ tls_handshake(struct tls *ctx) | |||
383 | return (rv); | 383 | return (rv); |
384 | } | 384 | } |
385 | 385 | ||
386 | int | 386 | ssize_t |
387 | tls_read(struct tls *ctx, void *buf, size_t buflen, size_t *outlen) | 387 | tls_read(struct tls *ctx, void *buf, size_t buflen) |
388 | { | 388 | { |
389 | ssize_t rv = -1; | ||
389 | int ssl_ret; | 390 | int ssl_ret; |
390 | int rv = -1; | ||
391 | |||
392 | *outlen = 0; | ||
393 | 391 | ||
394 | if ((ctx->state & TLS_HANDSHAKE_COMPLETE) == 0) { | 392 | if ((ctx->state & TLS_HANDSHAKE_COMPLETE) == 0) { |
395 | if ((rv = tls_handshake(ctx)) != 0) | 393 | if ((rv = tls_handshake(ctx)) != 0) |
@@ -402,24 +400,21 @@ tls_read(struct tls *ctx, void *buf, size_t buflen, size_t *outlen) | |||
402 | } | 400 | } |
403 | 401 | ||
404 | if ((ssl_ret = SSL_read(ctx->ssl_conn, buf, buflen)) > 0) { | 402 | if ((ssl_ret = SSL_read(ctx->ssl_conn, buf, buflen)) > 0) { |
405 | *outlen = (size_t)ssl_ret; | 403 | rv = (ssize_t)ssl_ret; |
406 | rv = 0; | ||
407 | goto out; | 404 | goto out; |
408 | } | 405 | } |
409 | 406 | ||
410 | rv = tls_ssl_error(ctx, ctx->ssl_conn, ssl_ret, "read"); | 407 | rv = (ssize_t)tls_ssl_error(ctx, ctx->ssl_conn, ssl_ret, "read"); |
411 | out: | 408 | out: |
412 | errno = 0; | 409 | errno = 0; |
413 | return (rv); | 410 | return (rv); |
414 | } | 411 | } |
415 | 412 | ||
416 | int | 413 | ssize_t |
417 | tls_write(struct tls *ctx, const void *buf, size_t buflen, size_t *outlen) | 414 | tls_write(struct tls *ctx, const void *buf, size_t buflen) |
418 | { | 415 | { |
416 | ssize_t rv = -1; | ||
419 | int ssl_ret; | 417 | int ssl_ret; |
420 | int rv = -1; | ||
421 | |||
422 | *outlen = 0; | ||
423 | 418 | ||
424 | if ((ctx->state & TLS_HANDSHAKE_COMPLETE) == 0) { | 419 | if ((ctx->state & TLS_HANDSHAKE_COMPLETE) == 0) { |
425 | if ((rv = tls_handshake(ctx)) != 0) | 420 | if ((rv = tls_handshake(ctx)) != 0) |
@@ -432,12 +427,11 @@ tls_write(struct tls *ctx, const void *buf, size_t buflen, size_t *outlen) | |||
432 | } | 427 | } |
433 | 428 | ||
434 | if ((ssl_ret = SSL_write(ctx->ssl_conn, buf, buflen)) > 0) { | 429 | if ((ssl_ret = SSL_write(ctx->ssl_conn, buf, buflen)) > 0) { |
435 | *outlen = (size_t)ssl_ret; | 430 | rv = (ssize_t)ssl_ret; |
436 | rv = 0; | ||
437 | goto out; | 431 | goto out; |
438 | } | 432 | } |
439 | 433 | ||
440 | rv = tls_ssl_error(ctx, ctx->ssl_conn, ssl_ret, "write"); | 434 | rv = (ssize_t)tls_ssl_error(ctx, ctx->ssl_conn, ssl_ret, "write"); |
441 | out: | 435 | out: |
442 | errno = 0; | 436 | errno = 0; |
443 | return (rv); | 437 | return (rv); |
diff --git a/src/lib/libtls/tls.h b/src/lib/libtls/tls.h index 8548fe1d83..13b88c31d4 100644 --- a/src/lib/libtls/tls.h +++ b/src/lib/libtls/tls.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls.h,v 1.16 2015/09/10 10:14:20 jsing Exp $ */ | 1 | /* $OpenBSD: tls.h,v 1.17 2015/09/10 10:22:28 beck Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> |
4 | * | 4 | * |
@@ -95,9 +95,8 @@ int tls_connect_servername(struct tls *_ctx, const char *_host, | |||
95 | const char *_port, const char *_servername); | 95 | const char *_port, const char *_servername); |
96 | int tls_connect_socket(struct tls *_ctx, int _s, const char *_servername); | 96 | int tls_connect_socket(struct tls *_ctx, int _s, const char *_servername); |
97 | int tls_handshake(struct tls *_ctx); | 97 | int tls_handshake(struct tls *_ctx); |
98 | int tls_read(struct tls *_ctx, void *_buf, size_t _buflen, size_t *_outlen); | 98 | ssize_t tls_read(struct tls *_ctx, void *_buf, size_t _buflen); |
99 | int tls_write(struct tls *_ctx, const void *_buf, size_t _buflen, | 99 | ssize_t tls_write(struct tls *_ctx, const void *_buf, size_t _buflen); |
100 | size_t *_outlen); | ||
101 | int tls_close(struct tls *_ctx); | 100 | int tls_close(struct tls *_ctx); |
102 | 101 | ||
103 | uint8_t *tls_load_file(const char *_file, size_t *_len, char *_password); | 102 | uint8_t *tls_load_file(const char *_file, size_t *_len, char *_password); |