From d4f0be8877e66c4ae90e5a33fa1aa1de7a683c14 Mon Sep 17 00:00:00 2001 From: djm Date: Tue, 17 Jan 2023 10:02:34 +0000 Subject: [PATCH] regression test for UnusedConnectionTimeout --- regress/usr.bin/ssh/Makefile | 5 +- regress/usr.bin/ssh/connection-timeout.sh | 77 +++++++++++++++++++++++ 2 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 regress/usr.bin/ssh/connection-timeout.sh diff --git a/regress/usr.bin/ssh/Makefile b/regress/usr.bin/ssh/Makefile index c4a56b976cd..ef9cfea144f 100644 --- a/regress/usr.bin/ssh/Makefile +++ b/regress/usr.bin/ssh/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.122 2023/01/06 08:07:39 djm Exp $ +# $OpenBSD: Makefile,v 1.123 2023/01/17 10:02:34 djm Exp $ OPENSSL?= yes @@ -100,7 +100,8 @@ LTESTS= connect \ knownhosts-command \ agent-restrict \ hostbased \ - channel-timeout + channel-timeout \ + connection-timeout INTEROP_TESTS= putty-transfer putty-ciphers putty-kex conch-ciphers #INTEROP_TESTS+=ssh-com ssh-com-client ssh-com-keygen ssh-com-sftp diff --git a/regress/usr.bin/ssh/connection-timeout.sh b/regress/usr.bin/ssh/connection-timeout.sh new file mode 100644 index 00000000000..adaf8bab231 --- /dev/null +++ b/regress/usr.bin/ssh/connection-timeout.sh @@ -0,0 +1,77 @@ +# $OpenBSD: connection-timeout.sh,v 1.1 2023/01/17 10:02:34 djm Exp $ +# Placed in the Public Domain. + +tid="unused connection timeout" + +CTL=$OBJ/ctl-sock +cp $OBJ/sshd_proxy $OBJ/sshd_proxy.orig + +check_ssh() { + test -S $CTL || return 1 + if ! ${REAL_SSH} -qF$OBJ/ssh_proxy -O check \ + -oControlPath=$CTL somehost >/dev/null 2>&1 ; then + return 1 + fi + return 0 +} + +start_ssh() { + trace "start ssh" + ${SSH} -nNfF $OBJ/ssh_proxy "$@" -oExitOnForwardFailure=yes \ + -oControlMaster=yes -oControlPath=$CTL somehost + r=$? + test $r -eq 0 || fatal "failed to start ssh $r" + check_ssh || fatal "ssh process unresponsive" +} + +stop_ssh() { + test -S $CTL || return + check_ssh || fatal "ssh process is unresponsive: cannot close" + if ! ${REAL_SSH} -qF$OBJ/ssh_proxy -O exit \ + -oControlPath=$CTL >/dev/null somehost >/dev/null ; then + fatal "ssh process did not respond to close" + fi + n=0 + while [ "$n" -lt 20 ] ; do + test -S $CTL || break + sleep 1 + n=`expr $n + 1` + done + if test -S $CTL ; then + fatal "ssh process did not exit" + fi +} + +trap "stop_ssh" EXIT + +verbose "no timeout" +start_ssh +sleep 5 +check_ssh || fatal "ssh unexpectedly missing" +stop_ssh + +(cat $OBJ/sshd_proxy.orig ; echo "UnusedConnectionTimeout 2") > $OBJ/sshd_proxy + +verbose "timeout" +start_ssh +sleep 8 +check_ssh && fail "ssh unexpectedly present" +stop_ssh + +verbose "timeout after session" +start_ssh +${REAL_SSH} -qoControlPath=$CTL -oControlMaster=no -Fnone somehost "exit 0" || + fail "session failed" +sleep 8 +check_ssh && fail "ssh unexpectedly present" +stop_ssh + +LPORT=`expr $PORT + 1` +RPORT=`expr $LPORT + 1` +DPORT=`expr $RPORT + 1` +RDPORT=`expr $DPORT + 1` +verbose "timeout with listeners" +start_ssh -L$LPORT:127.0.0.1:$PORT -R$RPORT:127.0.0.1:$PORT -D$DPORT -R$RDPORT +sleep 8 +check_ssh && fail "ssh unexpectedly present" +stop_ssh -- 2.20.1