11305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# $OpenBSD: test-exec.sh,v 1.37 2010/02/24 06:21:56 djm Exp $ 21305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Placed in the Public Domain. 31305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 41305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#SUDO=sudo 51305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 61305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Unbreak GNU head(1) 71305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood_POSIX2_VERSION=199209 81305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodexport _POSIX2_VERSION 91305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 101305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodcase `uname -s 2>/dev/null` in 111305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodOSF1*) 121305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood BIN_SH=xpg4 131305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood export BIN_SH 141305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood ;; 151305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodesac 161305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 171305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ ! -z "$TEST_SSH_PORT" ]; then 181305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood PORT="$TEST_SSH_PORT" 191305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodelse 201305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood PORT=4242 211305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 221305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 231305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ -x /usr/ucb/whoami ]; then 241305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood USER=`/usr/ucb/whoami` 251305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodelif whoami >/dev/null 2>&1; then 261305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood USER=`whoami` 271305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodelif logname >/dev/null 2>&1; then 281305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood USER=`logname` 291305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodelse 301305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood USER=`id -un` 311305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 321305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 331305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodOBJ=$1 341305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ "x$OBJ" = "x" ]; then 351305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo '$OBJ not defined' 361305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood exit 2 371305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 381305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ ! -d $OBJ ]; then 391305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo "not a directory: $OBJ" 401305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood exit 2 411305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 421305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodSCRIPT=$2 431305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ "x$SCRIPT" = "x" ]; then 441305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo '$SCRIPT not defined' 451305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood exit 2 461305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 471305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ ! -f $SCRIPT ]; then 481305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo "not a file: $SCRIPT" 491305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood exit 2 501305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 511305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif $TEST_SHELL -n $SCRIPT; then 521305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood true 531305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodelse 541305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo "syntax error in $SCRIPT" 551305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood exit 2 561305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 571305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodunset SSH_AUTH_SOCK 581305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 591305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodSRC=`dirname ${SCRIPT}` 601305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 611305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# defaults 621305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodSSH=ssh 631305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodSSHD=sshd 641305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodSSHAGENT=ssh-agent 651305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodSSHADD=ssh-add 661305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodSSHKEYGEN=ssh-keygen 671305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodSSHKEYSCAN=ssh-keyscan 681305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodSFTP=sftp 691305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodSFTPSERVER=/usr/libexec/openssh/sftp-server 701305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodSCP=scp 711305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 721305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Interop testing 731305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodPLINK=plink 741305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodPUTTYGEN=puttygen 751305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodCONCH=conch 761305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 771305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ "x$TEST_SSH_SSH" != "x" ]; then 781305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood SSH="${TEST_SSH_SSH}" 791305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 801305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ "x$TEST_SSH_SSHD" != "x" ]; then 811305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood SSHD="${TEST_SSH_SSHD}" 821305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 831305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ "x$TEST_SSH_SSHAGENT" != "x" ]; then 841305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood SSHAGENT="${TEST_SSH_SSHAGENT}" 851305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 861305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ "x$TEST_SSH_SSHADD" != "x" ]; then 871305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood SSHADD="${TEST_SSH_SSHADD}" 881305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 891305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ "x$TEST_SSH_SSHKEYGEN" != "x" ]; then 901305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood SSHKEYGEN="${TEST_SSH_SSHKEYGEN}" 911305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 921305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ "x$TEST_SSH_SSHKEYSCAN" != "x" ]; then 931305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood SSHKEYSCAN="${TEST_SSH_SSHKEYSCAN}" 941305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 951305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ "x$TEST_SSH_SFTP" != "x" ]; then 961305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood SFTP="${TEST_SSH_SFTP}" 971305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 981305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ "x$TEST_SSH_SFTPSERVER" != "x" ]; then 991305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood SFTPSERVER="${TEST_SSH_SFTPSERVER}" 1001305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 1011305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ "x$TEST_SSH_SCP" != "x" ]; then 1021305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood SCP="${TEST_SSH_SCP}" 1031305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 1041305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ "x$TEST_SSH_PLINK" != "x" ]; then 1051305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood # Find real binary, if it exists 1061305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood case "${TEST_SSH_PLINK}" in 1071305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood /*) PLINK="${TEST_SSH_PLINK}" ;; 1081305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood *) PLINK=`which ${TEST_SSH_PLINK} 2>/dev/null` ;; 1091305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood esac 1101305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 1111305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ "x$TEST_SSH_PUTTYGEN" != "x" ]; then 1121305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood # Find real binary, if it exists 1131305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood case "${TEST_SSH_PUTTYGEN}" in 1141305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood /*) PUTTYGEN="${TEST_SSH_PUTTYGEN}" ;; 1151305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood *) PUTTYGEN=`which ${TEST_SSH_PUTTYGEN} 2>/dev/null` ;; 1161305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood esac 1171305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 1181305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ "x$TEST_SSH_CONCH" != "x" ]; then 1191305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood # Find real binary, if it exists 1201305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood case "${TEST_SSH_CONCH}" in 1211305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood /*) CONCH="${TEST_SSH_CONCH}" ;; 1221305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood *) CONCH=`which ${TEST_SSH_CONCH} 2>/dev/null` ;; 1231305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood esac 1241305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 1251305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 1261305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Path to sshd must be absolute for rexec 1271305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodcase "$SSHD" in 1281305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood/*) ;; 1291305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood*) SSHD=`which sshd` ;; 1301305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodesac 1311305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 1321305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ "x$TEST_SSH_LOGFILE" = "x" ]; then 1331305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood TEST_SSH_LOGFILE=/dev/null 1341305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 1351305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 1361305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# these should be used in tests 1371305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodexport SSH SSHD SSHAGENT SSHADD SSHKEYGEN SSHKEYSCAN SFTP SFTPSERVER SCP 1381305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood#echo $SSH $SSHD $SSHAGENT $SSHADD $SSHKEYGEN $SSHKEYSCAN $SFTP $SFTPSERVER $SCP 1391305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 1401305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# helper 1411305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodechon() 1421305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood{ 1431305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood if [ "x`echo -n`" = "x" ]; then 1441305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo -n "$@" 1451305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood elif [ "x`echo '\c'`" = "x" ]; then 1461305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo "$@\c" 1471305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood else 1481305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood fatal "Don't know how to echo without newline." 1491305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood fi 1501305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood} 1511305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 1521305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodhave_prog() 1531305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood{ 1541305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood saved_IFS="$IFS" 1551305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood IFS=":" 1561305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood for i in $PATH 1571305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood do 1581305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood if [ -x $i/$1 ]; then 1591305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood IFS="$saved_IFS" 1601305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood return 0 1611305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood fi 1621305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood done 1631305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood IFS="$saved_IFS" 1641305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood return 1 1651305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood} 1661305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 1671305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodcleanup () 1681305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood{ 1691305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood if [ -f $PIDFILE ]; then 1701305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood pid=`$SUDO cat $PIDFILE` 1711305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood if [ "X$pid" = "X" ]; then 1721305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo no sshd running 1731305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood else 1741305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood if [ $pid -lt 2 ]; then 1751305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo bad pid for ssh: $pid 1761305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood else 1771305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood $SUDO kill $pid 1781305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood trace "wait for sshd to exit" 1791305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood i=0; 1801305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood while [ -f $PIDFILE -a $i -lt 5 ]; do 1811305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood i=`expr $i + 1` 1821305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood sleep $i 1831305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood done 1841305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood test -f $PIDFILE && \ 1851305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood fatal "sshd didn't exit port $PORT pid $pid" 1861305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood fi 1871305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood fi 1881305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood fi 1891305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood} 1901305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 1911305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodtrace () 1921305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood{ 1931305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo "trace: $@" >>$TEST_SSH_LOGFILE 1941305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood if [ "X$TEST_SSH_TRACE" = "Xyes" ]; then 1951305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo "$@" 1961305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood fi 1971305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood} 1981305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 1991305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodverbose () 2001305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood{ 2011305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo "verbose: $@" >>$TEST_SSH_LOGFILE 2021305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood if [ "X$TEST_SSH_QUIET" != "Xyes" ]; then 2031305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo "$@" 2041305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood fi 2051305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood} 2061305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 2071305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodwarn () 2081305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood{ 2091305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo "WARNING: $@" >>$TEST_SSH_LOGFILE 2101305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo "WARNING: $@" 2111305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood} 2121305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 2131305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfail () 2141305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood{ 2151305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo "FAIL: $@" >>$TEST_SSH_LOGFILE 2161305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood RESULT=1 2171305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo "$@" 2181305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood} 2191305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 2201305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfatal () 2211305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood{ 2221305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo "FATAL: $@" >>$TEST_SSH_LOGFILE 2231305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echon "FATAL: " 2241305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood fail "$@" 2251305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood cleanup 2261305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood exit $RESULT 2271305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood} 2281305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 2291305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Check whether preprocessor symbols are defined in config.h. 2301305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodconfig_defined () 2311305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood{ 2321305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood str=$1 2331305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood while test "x$2" != "x" ; do 2341305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood str="$str|$2" 2351305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood shift 2361305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood done 2371305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood egrep "^#define.*($str)" ${BUILDDIR}/config.h >/dev/null 2>&1 2381305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood} 2391305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 2401305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodRESULT=0 2411305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodPIDFILE=$OBJ/pidfile 2421305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 2431305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodtrap fatal 3 2 2441305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 2451305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# create server config 2461305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodcat << EOF > $OBJ/sshd_config 2471305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood StrictModes no 2481305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood Port $PORT 2491305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood Protocol 2,1 2501305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood AddressFamily inet 2511305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood ListenAddress 127.0.0.1 2521305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood #ListenAddress ::1 2531305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood PidFile $PIDFILE 2541305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood AuthorizedKeysFile $OBJ/authorized_keys_%u 2551305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood LogLevel VERBOSE 2561305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood AcceptEnv _XXX_TEST_* 2571305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood AcceptEnv _XXX_TEST 2581305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood Subsystem sftp $SFTPSERVER 2591305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodEOF 2601305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 2611305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ ! -z "$TEST_SSH_SSHD_CONFOPTS" ]; then 2621305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood trace "adding sshd_config option $TEST_SSH_SSHD_CONFOPTS" 2631305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo "$TEST_SSH_SSHD_CONFOPTS" >> $OBJ/sshd_config 2641305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 2651305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 2661305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# server config for proxy connects 2671305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodcp $OBJ/sshd_config $OBJ/sshd_proxy 2681305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 2691305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# allow group-writable directories in proxy-mode 2701305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodecho 'StrictModes no' >> $OBJ/sshd_proxy 2711305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 2721305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# create client config 2731305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodcat << EOF > $OBJ/ssh_config 2741305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodHost * 2751305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood Protocol 2,1 2761305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood Hostname 127.0.0.1 2771305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood HostKeyAlias localhost-with-alias 2781305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood Port $PORT 2791305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood User $USER 2801305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood GlobalKnownHostsFile $OBJ/known_hosts 2811305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood UserKnownHostsFile $OBJ/known_hosts 2821305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood RSAAuthentication yes 2831305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood PubkeyAuthentication yes 2841305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood ChallengeResponseAuthentication no 2851305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood HostbasedAuthentication no 2861305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood PasswordAuthentication no 2871305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood BatchMode yes 2881305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood StrictHostKeyChecking yes 2891305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodEOF 2901305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 2911305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ ! -z "$TEST_SSH_SSH_CONFOPTS" ]; then 2921305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood trace "adding ssh_config option $TEST_SSH_SSHD_CONFOPTS" 2931305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo "$TEST_SSH_SSH_CONFOPTS" >> $OBJ/ssh_config 2941305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 2951305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 2961305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodrm -f $OBJ/known_hosts $OBJ/authorized_keys_$USER 2971305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 2981305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodtrace "generate keys" 2991305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfor t in rsa rsa1; do 3001305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood # generate user key 3011305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood rm -f $OBJ/$t 3021305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood ${SSHKEYGEN} -b 1024 -q -N '' -t $t -f $OBJ/$t ||\ 3031305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood fail "ssh-keygen for $t failed" 3041305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 3051305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood # known hosts file for client 3061305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood ( 3071305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echon 'localhost-with-alias,127.0.0.1,::1 ' 3081305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood cat $OBJ/$t.pub 3091305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood ) >> $OBJ/known_hosts 3101305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 3111305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood # setup authorized keys 3121305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood cat $OBJ/$t.pub >> $OBJ/authorized_keys_$USER 3131305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo IdentityFile $OBJ/$t >> $OBJ/ssh_config 3141305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 3151305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood # use key as host key, too 3161305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood $SUDO cp $OBJ/$t $OBJ/host.$t 3171305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo HostKey $OBJ/host.$t >> $OBJ/sshd_config 3181305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 3191305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood # don't use SUDO for proxy connect 3201305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo HostKey $OBJ/$t >> $OBJ/sshd_proxy 3211305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwooddone 3221305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodchmod 644 $OBJ/authorized_keys_$USER 3231305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 3241305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# Activate Twisted Conch tests if the binary is present 3251305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodREGRESS_INTEROP_CONCH=no 3261305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif test -x "$CONCH" ; then 3271305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood REGRESS_INTEROP_CONCH=yes 3281305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 3291305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 3301305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# If PuTTY is present and we are running a PuTTY test, prepare keys and 3311305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# configuration 3321305e95ba6ff9fa202d0818caf10405df4b0f648Mike LockwoodREGRESS_INTEROP_PUTTY=no 3331305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif test -x "$PUTTYGEN" -a -x "$PLINK" ; then 3341305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood REGRESS_INTEROP_PUTTY=yes 3351305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 3361305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodcase "$SCRIPT" in 3371305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood*putty*) ;; 3381305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood*) REGRESS_INTEROP_PUTTY=no ;; 3391305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodesac 3401305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 3411305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif test "$REGRESS_INTEROP_PUTTY" = "yes" ; then 3421305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood mkdir -p ${OBJ}/.putty 3431305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 3441305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood # Add a PuTTY key to authorized_keys 3451305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood rm -f ${OBJ}/putty.rsa2 3461305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood puttygen -t rsa -o ${OBJ}/putty.rsa2 < /dev/null > /dev/null 3471305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood puttygen -O public-openssh ${OBJ}/putty.rsa2 \ 3481305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood >> $OBJ/authorized_keys_$USER 3491305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 3501305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood # Convert rsa2 host key to PuTTY format 3511305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood ${SRC}/ssh2putty.sh 127.0.0.1 $PORT $OBJ/rsa > \ 3521305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood ${OBJ}/.putty/sshhostkeys 3531305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood ${SRC}/ssh2putty.sh 127.0.0.1 22 $OBJ/rsa >> \ 3541305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood ${OBJ}/.putty/sshhostkeys 3551305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 3561305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood # Setup proxied session 3571305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood mkdir -p ${OBJ}/.putty/sessions 3581305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood rm -f ${OBJ}/.putty/sessions/localhost_proxy 3591305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo "Hostname=127.0.0.1" >> ${OBJ}/.putty/sessions/localhost_proxy 3601305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo "PortNumber=$PORT" >> ${OBJ}/.putty/sessions/localhost_proxy 3611305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo "ProxyMethod=5" >> ${OBJ}/.putty/sessions/localhost_proxy 3621305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo "ProxyTelnetCommand=sh ${SRC}/sshd-log-wrapper.sh ${SSHD} ${TEST_SSH_LOGFILE} -i -f $OBJ/sshd_proxy" >> ${OBJ}/.putty/sessions/localhost_proxy 3631305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 3641305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood REGRESS_INTEROP_PUTTY=yes 3651305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 3661305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 3671305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# create a proxy version of the client config 3681305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood( 3691305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood cat $OBJ/ssh_config 3701305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo proxycommand ${SUDO} sh ${SRC}/sshd-log-wrapper.sh ${SSHD} ${TEST_SSH_LOGFILE} -i -f $OBJ/sshd_proxy 3711305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood) > $OBJ/ssh_proxy 3721305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 3731305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# check proxy config 3741305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood${SSHD} -t -f $OBJ/sshd_proxy || fatal "sshd_proxy broken" 3751305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 3761305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodstart_sshd () 3771305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood{ 3781305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood # start sshd 3791305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood $SUDO ${SSHD} -f $OBJ/sshd_config "$@" -t || fatal "sshd_config broken" 3801305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood $SUDO ${SSHD} -f $OBJ/sshd_config -e "$@" >>$TEST_SSH_LOGFILE 2>&1 3811305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 3821305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood trace "wait for sshd" 3831305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood i=0; 3841305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood while [ ! -f $PIDFILE -a $i -lt 10 ]; do 3851305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood i=`expr $i + 1` 3861305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood sleep $i 3871305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood done 3881305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 3891305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood test -f $PIDFILE || fatal "no sshd running on port $PORT" 3901305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood} 3911305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 3921305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# source test body 3931305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood. $SCRIPT 3941305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood 3951305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood# kill sshd 3961305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodcleanup 3971305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodif [ $RESULT -eq 0 ]; then 3981305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood verbose ok $tid 3991305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodelse 4001305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwood echo failed $tid 4011305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodfi 4021305e95ba6ff9fa202d0818caf10405df4b0f648Mike Lockwoodexit $RESULT 403