]> andersk Git - gssapi-openssh.git/blob - openssh/regress/test-exec.sh
Import of OpenSSH 3.8.1p1
[gssapi-openssh.git] / openssh / regress / test-exec.sh
1 #       $OpenBSD: test-exec.sh,v 1.15 2004/02/24 16:56:30 markus Exp $
2 #       Placed in the Public Domain.
3
4 PORT=4242
5 #SUDO=sudo
6
7 if [ -x /usr/ucb/whoami ]; then
8         USER=`/usr/ucb/whoami`
9 elif whoami >/dev/null 2>&1; then
10         USER=`whoami`
11 else
12         USER=`id -un`
13 fi
14
15 OBJ=$1
16 if [ "x$OBJ" = "x" ]; then
17         echo '$OBJ not defined'
18         exit 2
19 fi
20 if [ ! -d $OBJ ]; then
21         echo "not a directory: $OBJ"
22         exit 2
23 fi
24 SCRIPT=$2
25 if [ "x$SCRIPT" = "x" ]; then
26         echo '$SCRIPT not defined'
27         exit 2
28 fi
29 if [ ! -f $SCRIPT ]; then
30         echo "not a file: $SCRIPT"
31         exit 2
32 fi
33 if $TEST_SHELL -n $SCRIPT; then
34         true
35 else
36         echo "syntax error in $SCRIPT"
37         exit 2
38 fi
39 unset SSH_AUTH_SOCK
40
41 # defaults
42 SSH=ssh
43 SSHD=sshd
44 SSHAGENT=ssh-agent
45 SSHADD=ssh-add
46 SSHKEYGEN=ssh-keygen
47 SSHKEYSCAN=ssh-keyscan
48 SFTP=sftp
49 SFTPSERVER=/usr/libexec/openssh/sftp-server
50
51 if [ "x$TEST_SSH_SSH" != "x" ]; then
52         SSH="${TEST_SSH_SSH}"
53 fi
54 if [ "x$TEST_SSH_SSHD" != "x" ]; then
55         SSHD="${TEST_SSH_SSHD}"
56 fi
57 if [ "x$TEST_SSH_SSHAGENT" != "x" ]; then
58         SSHAGENT="${TEST_SSH_SSHAGENT}"
59 fi
60 if [ "x$TEST_SSH_SSHADD" != "x" ]; then
61         SSHADD="${TEST_SSH_SSHADD}"
62 fi
63 if [ "x$TEST_SSH_SSHKEYGEN" != "x" ]; then
64         SSHKEYGEN="${TEST_SSH_SSHKEYGEN}"
65 fi
66 if [ "x$TEST_SSH_SSHKEYSCAN" != "x" ]; then
67         SSHKEYSCAN="${TEST_SSH_SSHKEYSCAN}"
68 fi
69 if [ "x$TEST_SSH_SFTP" != "x" ]; then
70         SFTP="${TEST_SSH_SFTP}"
71 fi
72 if [ "x$TEST_SSH_SFTPSERVER" != "x" ]; then
73         SFTPSERVER="${TEST_SSH_SFTPSERVER}"
74 fi
75
76 # these should be used in tests
77 export SSH SSHD SSHAGENT SSHADD SSHKEYGEN SSHKEYSCAN SFTP SFTPSERVER
78 #echo $SSH $SSHD $SSHAGENT $SSHADD $SSHKEYGEN $SSHKEYSCAN $SFTP $SFTPSERVER
79
80 # helper
81 echon()
82 {
83        if [ "x`echo -n`" = "x" ]; then
84                echo -n "$@"
85        elif [ "x`echo '\c'`" = "x" ]; then
86                echo "$@\c"
87        else
88                fatal "Don't know how to echo without newline."
89        fi
90 }
91
92 have_prog()
93 {
94         saved_IFS="$IFS"
95         IFS=":"
96         for i in $PATH
97         do
98                 if [ -x $i/$1 ]; then
99                         IFS="$saved_IFS"
100                         return 0
101                 fi
102         done
103         IFS="$saved_IFS"
104         return 1
105 }
106
107 cleanup ()
108 {
109         if [ -f $PIDFILE ]; then
110                 pid=`cat $PIDFILE`
111                 if [ "X$pid" = "X" ]; then
112                         echo no sshd running
113                 else
114                         if [ $pid -lt 2 ]; then
115                                 echo bad pid for ssd: $pid
116                         else
117                                 $SUDO kill $pid
118                         fi
119                 fi
120         fi
121 }
122
123 trace ()
124 {
125         if [ "X$TEST_SSH_TRACE" = "Xyes" ]; then
126                 echo "$@"
127         fi
128 }
129
130 verbose ()
131 {
132         if [ "X$TEST_SSH_QUIET" != "Xyes" ]; then
133                 echo "$@"
134         fi
135 }
136
137
138 fail ()
139 {
140         RESULT=1
141         echo "$@"
142 }
143
144 fatal ()
145 {
146         echon "FATAL: "
147         fail "$@"
148         cleanup
149         exit $RESULT
150 }
151
152 RESULT=0
153 PIDFILE=$OBJ/pidfile
154
155 trap fatal 3 2
156
157 # create server config
158 cat << EOF > $OBJ/sshd_config
159         Port                    $PORT
160         ListenAddress           127.0.0.1
161         #ListenAddress          ::1
162         PidFile                 $PIDFILE
163         AuthorizedKeysFile      $OBJ/authorized_keys_%u
164         LogLevel                QUIET
165         StrictModes             no
166 EOF
167
168 # server config for proxy connects
169 cp $OBJ/sshd_config $OBJ/sshd_proxy
170
171 # allow group-writable directories in proxy-mode
172 echo 'StrictModes no' >> $OBJ/sshd_proxy
173
174 # create client config
175 cat << EOF > $OBJ/ssh_config
176 Host *
177         Hostname                127.0.0.1
178         HostKeyAlias            localhost-with-alias
179         Port                    $PORT
180         User                    $USER
181         GlobalKnownHostsFile    $OBJ/known_hosts
182         UserKnownHostsFile      $OBJ/known_hosts
183         RSAAuthentication       yes
184         PubkeyAuthentication    yes
185         ChallengeResponseAuthentication no
186         HostbasedAuthentication no
187         PasswordAuthentication  no
188         RhostsRSAAuthentication no
189         BatchMode               yes
190         StrictHostKeyChecking   yes
191 EOF
192
193 rm -f $OBJ/known_hosts $OBJ/authorized_keys_$USER
194
195 trace "generate keys"
196 for t in rsa rsa1; do
197         # generate user key
198         rm -f $OBJ/$t
199         ${SSHKEYGEN} -q -N '' -t $t  -f $OBJ/$t ||\
200                 fail "ssh-keygen for $t failed"
201
202         # known hosts file for client
203         (
204                 echon 'localhost-with-alias,127.0.0.1,::1 '
205                 cat $OBJ/$t.pub
206         ) >> $OBJ/known_hosts
207
208         # setup authorized keys
209         cat $OBJ/$t.pub >> $OBJ/authorized_keys_$USER
210         echo IdentityFile $OBJ/$t >> $OBJ/ssh_config
211
212         # use key as host key, too
213         $SUDO cp $OBJ/$t $OBJ/host.$t
214         echo HostKey $OBJ/host.$t >> $OBJ/sshd_config
215
216         # don't use SUDO for proxy connect
217         echo HostKey $OBJ/$t >> $OBJ/sshd_proxy
218 done
219 chmod 644 $OBJ/authorized_keys_$USER
220
221 # create a proxy version of the client config
222 (
223         cat $OBJ/ssh_config
224         echo proxycommand ${SUDO} ${SSHD} -i -f $OBJ/sshd_proxy
225 ) > $OBJ/ssh_proxy
226
227 # check proxy config
228 ${SSHD} -t -f $OBJ/sshd_proxy   || fatal "sshd_proxy broken"
229
230 start_sshd ()
231 {
232         # start sshd
233         $SUDO ${SSHD} -f $OBJ/sshd_config -t    || fatal "sshd_config broken"
234         $SUDO ${SSHD} -f $OBJ/sshd_config
235
236         trace "wait for sshd"
237         i=0;
238         while [ ! -f $PIDFILE -a $i -lt 10 ]; do
239                 i=`expr $i + 1`
240                 sleep $i
241         done
242
243         test -f $PIDFILE || fatal "no sshd running on port $PORT"
244 }
245
246 # source test body
247 . $SCRIPT
248
249 # kill sshd
250 cleanup
251 if [ $RESULT -eq 0 ]; then
252         verbose ok $tid
253 else
254         echo failed $tid
255 fi
256 exit $RESULT
This page took 0.056786 seconds and 5 git commands to generate.