summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbeck <>2015-09-10 10:22:28 +0000
committerbeck <>2015-09-10 10:22:28 +0000
commitd7b1cca0f8903e9e46ffbef6af5b6edd9d88ae39 (patch)
treef452172498692f9d194b8101802284e56f8e3c6a
parentf7415644a66ca9d04e5e06312a163e677032b695 (diff)
downloadopenbsd-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.c28
-rw-r--r--src/lib/libtls/tls.h7
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
386int 386ssize_t
387tls_read(struct tls *ctx, void *buf, size_t buflen, size_t *outlen) 387tls_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
416int 413ssize_t
417tls_write(struct tls *ctx, const void *buf, size_t buflen, size_t *outlen) 414tls_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);
96int tls_connect_socket(struct tls *_ctx, int _s, const char *_servername); 96int tls_connect_socket(struct tls *_ctx, int _s, const char *_servername);
97int tls_handshake(struct tls *_ctx); 97int tls_handshake(struct tls *_ctx);
98int tls_read(struct tls *_ctx, void *_buf, size_t _buflen, size_t *_outlen); 98ssize_t tls_read(struct tls *_ctx, void *_buf, size_t _buflen);
99int tls_write(struct tls *_ctx, const void *_buf, size_t _buflen, 99ssize_t tls_write(struct tls *_ctx, const void *_buf, size_t _buflen);
100 size_t *_outlen);
101int tls_close(struct tls *_ctx); 100int tls_close(struct tls *_ctx);
102 101
103uint8_t *tls_load_file(const char *_file, size_t *_len, char *_password); 102uint8_t *tls_load_file(const char *_file, size_t *_len, char *_password);