From 00e28ecca5f996eb20b19dfb7c8600b3dc03f865 Mon Sep 17 00:00:00 2001 From: Alexander Bluhm Date: Tue, 21 Jan 2020 22:47:40 +0000 Subject: Connect netcat client to server and close stdin. Then netcat waits for the other side to terminate. Check that netcat is sleeping and does not run in a busy loop. Add tests for TCP, TLS, and UDP. --- regress/usr.bin/nc/Makefile | 73 +++++++++++++++++++++++++++++++++++++++-- regress/usr.bin/nc/server-tcp.c | 3 +- 2 files changed, 73 insertions(+), 3 deletions(-) diff --git a/regress/usr.bin/nc/Makefile b/regress/usr.bin/nc/Makefile index bf4ceea9ede..61e9682dc8a 100644 --- a/regress/usr.bin/nc/Makefile +++ b/regress/usr.bin/nc/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.5 2020/01/17 20:45:50 bluhm Exp $ +# $OpenBSD: Makefile,v 1.6 2020/01/21 22:47:39 bluhm Exp $ # Copyright (c) 2020 Alexander Bluhm # @@ -90,6 +90,11 @@ TRANSFER_SERVER_WAIT = \ until grep -q 'command' server.out; \ do [[ `date +%s` -lt $$timeout ]] || { echo timeout; exit 1; }; done +RUNNING_WAIT = \ + let timeout=`date +%s`+5; \ + while ps -xww -o comm,stat | grep -q '${NC:T} .*R'; \ + do [[ `date +%s` -lt $$timeout ]] || { echo timeout; exit 1; }; done + ### TCP #### REGRESS_TARGETS += run-tcp @@ -214,6 +219,25 @@ run-tcp6-bad-localhost-client: ! ${NC} -6 -v 127.0.0.1 ${PORT} ${CLIENT_LOG} grep 'no address associated with name' client.err +REGRESS_TARGETS += run-tcp-sleep +run-tcp-sleep: + @echo '======== $@ ========' + ${SERVER_NC} -n -v -l 127.0.0.1 0 ${SERVER_BG} + ${LISTEN_WAIT} + ${PORT_GET} + ${CLIENT_NC} -n -v 127.0.0.1 ${PORT} ${CLIENT_BG} + ${CONNECT_WAIT} + ${TRANSFER_WAIT} + grep '^greeting$$' client.out + grep '^command$$' server.out + grep 'Listening on 127.0.0.1 ' server.err + grep 'Connection received on 127.0.0.1 ' server.err + grep 'Connection to 127.0.0.1 .* succeeded!' client.err + # netcat waits for the other side to terminate, check it is sleeping + ${RUNNING_WAIT} + ps -xww -o comm,stat,args | grep '^${NC:T} .*S.* -v -l 127' + ps -xww -o comm,stat,args | grep '^${NC:T} .*S.* -v 127' + # TCP keep REGRESS_TARGETS += run-tcp-keep @@ -587,6 +611,30 @@ run-tls-client-no-hash: client.crt server.crt ca.crt client.hash # non existing hash is not checked ! grep 'Cert Hash: SHA256:' server.err +REGRESS_TARGETS += run-tls-sleep +run-tls-sleep: 127.0.0.1.crt + @echo '======== $@ ========' + ${SERVER_NC} -c -C 127.0.0.1.crt -K 127.0.0.1.key -n -v -l 127.0.0.1 0 \ + ${SERVER_BG} + ${LISTEN_WAIT} + ${PORT_GET} + ${CLIENT_NC} -c -R 127.0.0.1.crt -n -v 127.0.0.1 ${PORT} ${CLIENT_BG} + ${CONNECT_WAIT} + ${TLS_WAIT} + ${TRANSFER_WAIT} + grep '^greeting$$' client.out + grep '^command$$' server.out + grep 'Listening on 127.0.0.1 ' server.err + grep 'Connection received on 127.0.0.1 ' server.err + # XXX success message should be issued after TLS handshake + grep 'Connection to 127.0.0.1 .* succeeded!' client.err + grep 'Subject: .*/OU=server/CN=127.0.0.1' client.err + grep 'Issuer: .*/OU=server/CN=127.0.0.1' client.err + # netcat waits for the other side to terminate, check it is sleeping + ${RUNNING_WAIT} + ps -xww -o comm,stat,args | grep '^${NC:T} .*S.* -v -l 127' + ps -xww -o comm,stat,args | grep '^${NC:T} .*S.* -v 127' + # TLS keep REGRESS_TARGETS += run-tls-keep @@ -738,6 +786,24 @@ run-udp-keep: ! grep 'Connection received on ' server.err grep 'Connection to 127.0.0.1 .* succeeded!' client.err +REGRESS_TARGETS += run-udp-sleep +run-udp-sleep: + @echo '======== $@ ========' + ${SERVER_NC} -u -n -v -l 127.0.0.1 0 ${SERVER_BG} + ${BIND_WAIT} + ${PORT_GET} + # the -v option would cause udptest() to write additional X + ${CLIENT_NC} -u -n 127.0.0.1 ${PORT} ${CLIENT_BG} + ${TRANSFER_WAIT} + grep '^greeting$$' client.out + grep '^command$$' server.out + grep 'Bound on 127.0.0.1 ' server.err + grep 'Connection received on 127.0.0.1 ' server.err + # netcat waits for the other side to terminate, check it is sleeping + ${RUNNING_WAIT} + ps -xww -o comm,stat,args | grep '^${NC:T} .*S.* -v -l 127' + ps -xww -o comm,stat,args | grep '^${NC:T} .*S.* -n 127' + ### UNIX #### REGRESS_TARGETS += run-unix @@ -1041,7 +1107,10 @@ REGRESS_EXPECTED_FAILURES = \ run-tcp-server-shutdown-eof \ run-tcp-server-shutdown-reverse-eof \ run-tcp-client-shutdown-eof \ - run-tcp-client-shutdown-reverse-eof + run-tcp-client-shutdown-reverse-eof \ + run-tcp-sleep \ + run-tls-sleep \ + run-udp-sleep .PHONY: ${REGRESS_SETUP} ${REGRESS_CLEANUP} ${REGRESS_TARGETS} diff --git a/regress/usr.bin/nc/server-tcp.c b/regress/usr.bin/nc/server-tcp.c index 31c619f5fad..40d0f250e1e 100644 --- a/regress/usr.bin/nc/server-tcp.c +++ b/regress/usr.bin/nc/server-tcp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: server-tcp.c,v 1.2 2020/01/17 20:45:50 bluhm Exp $ */ +/* $OpenBSD: server-tcp.c,v 1.3 2020/01/21 22:47:39 bluhm Exp $ */ /* * Copyright (c) 2020 Alexander Bluhm @@ -127,6 +127,7 @@ listen_socket(const char *host, const char *port) cause = "bind"; save_errno = errno; close(s); + s = -1; errno = save_errno; continue; } -- cgit v1.2.3