import of openssh-5.8p1
[openssh.git] / regress / forwarding.sh
1 #       $OpenBSD: forwarding.sh,v 1.7 2010/01/11 02:53:44 dtucker Exp $
2 #       Placed in the Public Domain.
3
4 tid="local and remote forwarding"
5 DATA=/bin/ls${EXEEXT}
6
7 start_sshd
8
9 base=33
10 last=$PORT
11 fwd=""
12 for j in 0 1 2; do
13         for i in 0 1 2; do
14                 a=$base$j$i
15                 b=`expr $a + 50`
16                 c=$last
17                 # fwd chain: $a -> $b -> $c
18                 fwd="$fwd -L$a:127.0.0.1:$b -R$b:127.0.0.1:$c"
19                 last=$a
20         done
21 done
22 for p in 1 2; do
23         q=`expr 3 - $p`
24         trace "start forwarding, fork to background"
25         ${SSH} -$p -F $OBJ/ssh_config -f $fwd somehost sleep 10
26
27         trace "transfer over forwarded channels and check result"
28         ${SSH} -$q -F $OBJ/ssh_config -p$last -o 'ConnectionAttempts=4' \
29                 somehost cat $DATA > $OBJ/ls.copy
30         test -f $OBJ/ls.copy                    || fail "failed copy $DATA"
31         cmp $DATA $OBJ/ls.copy                  || fail "corrupted copy of $DATA"
32
33         sleep 10
34 done
35
36 for p in 1 2; do
37 for d in L R; do
38         trace "exit on -$d forward failure, proto $p"
39
40         # this one should succeed
41         ${SSH} -$p -F $OBJ/ssh_config \
42             -$d ${base}01:127.0.0.1:$PORT \
43             -$d ${base}02:127.0.0.1:$PORT \
44             -$d ${base}03:127.0.0.1:$PORT \
45             -$d ${base}04:127.0.0.1:$PORT \
46             -oExitOnForwardFailure=yes somehost true
47         if [ $? != 0 ]; then
48                 fail "connection failed, should not"
49         else
50                 # this one should fail
51                 ${SSH} -q -$p -F $OBJ/ssh_config \
52                     -$d ${base}01:127.0.0.1:$PORT \
53                     -$d ${base}02:127.0.0.1:$PORT \
54                     -$d ${base}03:127.0.0.1:$PORT \
55                     -$d ${base}01:127.0.0.1:$PORT \
56                     -$d ${base}04:127.0.0.1:$PORT \
57                     -oExitOnForwardFailure=yes somehost true
58                 r=$?
59                 if [ $r != 255 ]; then
60                         fail "connection not termintated, but should ($r)"
61                 fi
62         fi
63 done
64 done
65
66 for p in 1 2; do
67         trace "simple clear forwarding proto $p"
68         ${SSH} -$p -F $OBJ/ssh_config -oClearAllForwardings=yes somehost true
69
70         trace "clear local forward proto $p"
71         ${SSH} -$p -f -F $OBJ/ssh_config -L ${base}01:127.0.0.1:$PORT \
72             -oClearAllForwardings=yes somehost sleep 10
73         if [ $? != 0 ]; then
74                 fail "connection failed with cleared local forwarding"
75         else
76                 # this one should fail
77                 ${SSH} -$p -F $OBJ/ssh_config -p ${base}01 true \
78                      2>${TEST_SSH_LOGFILE} && \
79                         fail "local forwarding not cleared"
80         fi
81         sleep 10
82         
83         trace "clear remote forward proto $p"
84         ${SSH} -$p -f -F $OBJ/ssh_config -R ${base}01:127.0.0.1:$PORT \
85             -oClearAllForwardings=yes somehost sleep 10
86         if [ $? != 0 ]; then
87                 fail "connection failed with cleared remote forwarding"
88         else
89                 # this one should fail
90                 ${SSH} -$p -F $OBJ/ssh_config -p ${base}01 true \
91                      2>${TEST_SSH_LOGFILE} && \
92                         fail "remote forwarding not cleared"
93         fi
94         sleep 10
95 done
96
97 for p in 2; do
98         trace "stdio forwarding proto $p"
99         cmd="${SSH} -$p -F $OBJ/ssh_config"
100         $cmd -o "ProxyCommand $cmd -q -W localhost:$PORT somehost" \
101                 somehost true
102         if [ $? != 0 ]; then
103                 fail "stdio forwarding proto $p"
104         fi
105 done