~ubuntu-branches/ubuntu/edgy/openssh/edgy

« back to all changes in this revision

Viewing changes to regress/test-exec.sh

  • Committer: Bazaar Package Importer
  • Author(s): Noah Meyerhans
  • Date: 2006-10-31 17:53:38 UTC
  • Revision ID: james.westby@ubuntu.com-20061031175338-kh299ada2qc2kzlb
Tags: upstream-3.8.1p1
ImportĀ upstreamĀ versionĀ 3.8.1p1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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