diff options
author | djm@openbsd.org <djm@openbsd.org> | 2023-01-17 10:02:34 +0000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2023-01-17 21:09:20 +1100 |
commit | cef2593c33ac46a58238ff998818754eabdf64ff (patch) | |
tree | 9015aad3099fd1d318a0385baaf7588bf5adf5df | |
parent | aff9493a89c71d6a080419b49ac64eead9730491 (diff) |
upstream: regression test for UnusedConnectionTimeout
OpenBSD-Regress-ID: 7f29001374a68e71e5e078f69e4520cf4bcca084
-rw-r--r-- | regress/Makefile | 3 | ||||
-rw-r--r-- | regress/connection-timeout.sh | 77 |
2 files changed, 79 insertions, 1 deletions
diff --git a/regress/Makefile b/regress/Makefile index e78e11b7..bf1d057a 100644 --- a/regress/Makefile +++ b/regress/Makefile @@ -102,7 +102,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/connection-timeout.sh b/regress/connection-timeout.sh new file mode 100644 index 00000000..adaf8bab --- /dev/null +++ b/regress/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 |