summaryrefslogtreecommitdiff
path: root/src/usr.bin/nc/netcat.c
diff options
context:
space:
mode:
authorjsing <>2019-02-26 17:32:47 +0000
committerjsing <>2019-02-26 17:32:47 +0000
commit3486d8962fbbe65a8a38eec62dfd4364fa3806e8 (patch)
tree3c430b276af6c2bc0df271cf915ea45a1440f92a /src/usr.bin/nc/netcat.c
parentfe373f28c7092386d10c01fab09c2761dac7d20a (diff)
downloadopenbsd-3486d8962fbbe65a8a38eec62dfd4364fa3806e8.tar.gz
openbsd-3486d8962fbbe65a8a38eec62dfd4364fa3806e8.tar.bz2
openbsd-3486d8962fbbe65a8a38eec62dfd4364fa3806e8.zip
Correctly handle tls_read() and tls_write() failures.
Otherwise a TLS error (for example the remote end sent a fatal alert) is silently ignored. ok bluhm@ tb@
Diffstat (limited to 'src/usr.bin/nc/netcat.c')
-rw-r--r--src/usr.bin/nc/netcat.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/usr.bin/nc/netcat.c b/src/usr.bin/nc/netcat.c
index afa02343d9..048502bd1e 100644
--- a/src/usr.bin/nc/netcat.c
+++ b/src/usr.bin/nc/netcat.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: netcat.c,v 1.202 2019/01/10 12:44:54 mestre Exp $ */ 1/* $OpenBSD: netcat.c,v 1.203 2019/02/26 17:32:47 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2001 Eric Jackson <ericj@monkey.org> 3 * Copyright (c) 2001 Eric Jackson <ericj@monkey.org>
4 * Copyright (c) 2015 Bob Beck. All rights reserved. 4 * Copyright (c) 2015 Bob Beck. All rights reserved.
@@ -1267,9 +1267,11 @@ drainbuf(int fd, unsigned char *buf, size_t *bufpos, struct tls *tls)
1267 ssize_t n; 1267 ssize_t n;
1268 ssize_t adjust; 1268 ssize_t adjust;
1269 1269
1270 if (tls) 1270 if (tls) {
1271 n = tls_write(tls, buf, *bufpos); 1271 n = tls_write(tls, buf, *bufpos);
1272 else { 1272 if (n == -1)
1273 errx(1, "tls write failed (%s)", tls_error(tls));
1274 } else {
1273 n = write(fd, buf, *bufpos); 1275 n = write(fd, buf, *bufpos);
1274 /* don't treat EAGAIN, EINTR as error */ 1276 /* don't treat EAGAIN, EINTR as error */
1275 if (n == -1 && (errno == EAGAIN || errno == EINTR)) 1277 if (n == -1 && (errno == EAGAIN || errno == EINTR))
@@ -1291,9 +1293,11 @@ fillbuf(int fd, unsigned char *buf, size_t *bufpos, struct tls *tls)
1291 size_t num = BUFSIZE - *bufpos; 1293 size_t num = BUFSIZE - *bufpos;
1292 ssize_t n; 1294 ssize_t n;
1293 1295
1294 if (tls) 1296 if (tls) {
1295 n = tls_read(tls, buf + *bufpos, num); 1297 n = tls_read(tls, buf + *bufpos, num);
1296 else { 1298 if (n == -1)
1299 errx(1, "tls read failed (%s)", tls_error(tls));
1300 } else {
1297 n = read(fd, buf + *bufpos, num); 1301 n = read(fd, buf + *bufpos, num);
1298 /* don't treat EAGAIN, EINTR as error */ 1302 /* don't treat EAGAIN, EINTR as error */
1299 if (n == -1 && (errno == EAGAIN || errno == EINTR)) 1303 if (n == -1 && (errno == EAGAIN || errno == EINTR))