xref: /freebsd/crypto/openssh/regress/sftp-cmds.sh (revision 0fdf8fae8b569bf9fff3b5171e669dcd7cf9c79e)
1#	$OpenBSD: sftp-cmds.sh,v 1.20 2024/07/01 03:10:19 djm Exp $
2#	Placed in the Public Domain.
3
4# XXX - TODO:
5# - chmod / chown / chgrp
6# - -p flag for get & put
7
8tid="sftp commands"
9
10# test that these files are readable!
11for i in `(cd /bin;echo l*)`
12do
13	if [ -r $i ]; then
14		GLOBFILES="$GLOBFILES $i"
15	fi
16done
17
18# Path with embedded quote
19QUOTECOPY=${COPY}".\"blah\""
20QUOTECOPY_ARG=${COPY}'.\"blah\"'
21# File with spaces
22SPACECOPY="${COPY} this has spaces.txt"
23SPACECOPY_ARG="${COPY}\ this\ has\ spaces.txt"
24# File with glob metacharacters
25GLOBMETACOPY="${COPY} [metachar].txt"
26
27rm -rf ${COPY} ${COPY}.1 ${COPY}.2 ${COPY}.dd ${COPY}.dd2
28mkdir ${COPY}.dd
29
30verbose "$tid: lls"
31printf "lcd ${OBJ}\nlls\n" | ${SFTP} -D ${SFTPSERVER} 2>&1 | \
32	grep copy.dd >/dev/null || fail "lls failed"
33
34verbose "$tid: lls w/path"
35echo "lls ${OBJ}" | ${SFTP} -D ${SFTPSERVER} 2>&1 | \
36	grep copy.dd >/dev/null || fail "lls w/path failed"
37
38verbose "$tid: ls"
39echo "ls ${OBJ}" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
40	|| fail "ls failed"
41# XXX always successful
42
43verbose "$tid: shell"
44echo "!echo hi there" | ${SFTP} -D ${SFTPSERVER} 2>&1 | \
45	egrep '^hi there$' >/dev/null || fail "shell failed"
46
47verbose "$tid: pwd"
48echo "pwd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
49	|| fail "pwd failed"
50# XXX always successful
51
52verbose "$tid: lpwd"
53echo "lpwd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
54	|| fail "lpwd failed"
55# XXX always successful
56
57verbose "$tid: quit"
58echo "quit" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
59	|| fail "quit failed"
60# XXX always successful
61
62verbose "$tid: help"
63echo "help" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
64	|| fail "help failed"
65# XXX always successful
66
67rm -f ${COPY}
68verbose "$tid: get"
69echo "get $DATA $COPY" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
70	|| fail "get failed"
71cmp $DATA ${COPY} || fail "corrupted copy after get"
72
73rm -f ${COPY}
74verbose "$tid: get quoted"
75echo "get \"$DATA\" $COPY" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
76	|| fail "get failed"
77cmp $DATA ${COPY} || fail "corrupted copy after get"
78
79rm -f ${QUOTECOPY}
80cp $DATA ${QUOTECOPY}
81verbose "$tid: get filename with quotes"
82echo "get \"$QUOTECOPY_ARG\" ${COPY}" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
83	|| fail "get failed"
84cmp ${COPY} ${QUOTECOPY} || fail "corrupted copy after get with quotes"
85rm -f ${QUOTECOPY} ${COPY}
86
87rm -f "$SPACECOPY" ${COPY}
88cp $DATA "$SPACECOPY"
89verbose "$tid: get filename with spaces"
90echo "get ${SPACECOPY_ARG} ${COPY}" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
91        || fail "get failed"
92cmp ${COPY} "$SPACECOPY" || fail "corrupted copy after get with spaces"
93
94rm -f "$GLOBMETACOPY" ${COPY}
95cp $DATA "$GLOBMETACOPY"
96verbose "$tid: get filename with glob metacharacters"
97echo "get \"${GLOBMETACOPY}\" ${COPY}" | \
98	${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || fail "get failed"
99cmp ${COPY} "$GLOBMETACOPY" || \
100	fail "corrupted copy after get with glob metacharacters"
101
102rm -f ${COPY}.dd/*
103verbose "$tid: get to directory"
104echo "get $DATA ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
105        || fail "get failed"
106cmp $DATA ${COPY}.dd/${DATANAME} || fail "corrupted copy after get"
107
108rm -f ${COPY}.dd/*
109verbose "$tid: glob get to directory"
110echo "get /bin/l* ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
111        || fail "get failed"
112for x in $GLOBFILES; do
113        cmp /bin/$x ${COPY}.dd/$x || fail "corrupted copy after get"
114done
115
116rm -f ${COPY}.dd/*
117verbose "$tid: get to local dir"
118printf "lcd ${COPY}.dd\nget $DATA\n" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
119        || fail "get failed"
120cmp $DATA ${COPY}.dd/${DATANAME} || fail "corrupted copy after get"
121
122rm -f ${COPY}.dd/*
123verbose "$tid: glob get to local dir"
124printf "lcd ${COPY}.dd\nget /bin/l*\n" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
125        || fail "get failed"
126for x in $GLOBFILES; do
127        cmp /bin/$x ${COPY}.dd/$x || fail "corrupted copy after get"
128done
129
130rm -f ${COPY}
131verbose "$tid: put"
132echo "put $DATA $COPY" | \
133	${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || fail "put failed"
134cmp $DATA ${COPY} || fail "corrupted copy after put"
135
136rm -f ${QUOTECOPY}
137verbose "$tid: put filename with quotes"
138echo "put $DATA \"$QUOTECOPY_ARG\"" | \
139	${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || fail "put failed"
140cmp $DATA ${QUOTECOPY} || fail "corrupted copy after put with quotes"
141
142rm -f "$SPACECOPY"
143verbose "$tid: put filename with spaces"
144echo "put $DATA ${SPACECOPY_ARG}" | \
145	${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || fail "put failed"
146cmp $DATA "$SPACECOPY" || fail "corrupted copy after put with spaces"
147
148rm -f ${COPY}.dd/*
149verbose "$tid: put to directory"
150echo "put $DATA ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
151	|| fail "put failed"
152cmp $DATA ${COPY}.dd/${DATANAME} || fail "corrupted copy after put"
153
154rm -f ${COPY}.dd/*
155verbose "$tid: glob put to directory"
156echo "put /bin/l? ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
157	|| fail "put failed"
158for x in $GLOBFILES; do
159	cmp /bin/$x ${COPY}.dd/$x || fail "corrupted copy after put"
160done
161
162rm -f ${COPY}.dd/*
163verbose "$tid: put to local dir"
164printf "cd ${COPY}.dd\nput $DATA\n" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
165	|| fail "put failed"
166cmp $DATA ${COPY}.dd/${DATANAME} || fail "corrupted copy after put"
167
168rm -f ${COPY}.dd/*
169verbose "$tid: glob put to local dir"
170printf "cd ${COPY}.dd\nput /bin/l*\n" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
171	|| fail "put failed"
172for x in $GLOBFILES; do
173        cmp /bin/$x ${COPY}.dd/$x || fail "corrupted copy after put"
174done
175
176verbose "$tid: rename"
177echo "rename $COPY ${COPY}.1" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
178	|| fail "rename failed"
179test -f ${COPY}.1 || fail "missing file after rename"
180cmp $DATA ${COPY}.1 >/dev/null 2>&1 || fail "corrupted copy after rename"
181
182verbose "$tid: rename directory"
183echo "rename ${COPY}.dd ${COPY}.dd2" | \
184	${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || \
185	fail "rename directory failed"
186test -d ${COPY}.dd && fail "oldname exists after rename directory"
187test -d ${COPY}.dd2 || fail "missing newname after rename directory"
188
189verbose "$tid: ln"
190echo "ln ${COPY}.1 ${COPY}.2" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || fail "ln failed"
191test -f ${COPY}.2 || fail "missing file after ln"
192cmp ${COPY}.1 ${COPY}.2 || fail "created file is not equal after ln"
193
194verbose "$tid: ln -s"
195rm -f ${COPY}.2
196echo "ln -s ${COPY}.1 ${COPY}.2" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || fail "ln -s failed"
197test -h ${COPY}.2 || fail "missing file after ln -s"
198
199verbose "$tid: cp"
200rm -f ${COPY}.2
201echo "cp ${COPY}.1 ${COPY}.2" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || fail "cp failed"
202cmp ${COPY}.1 ${COPY}.2 || fail "created file is not equal after cp"
203
204verbose "$tid: mkdir"
205echo "mkdir ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
206	|| fail "mkdir failed"
207test -d ${COPY}.dd || fail "missing directory after mkdir"
208
209# XXX do more here
210verbose "$tid: chdir"
211echo "chdir ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
212	|| fail "chdir failed"
213
214verbose "$tid: rmdir"
215echo "rmdir ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
216	|| fail "rmdir failed"
217test -d ${COPY}.1 && fail "present directory after rmdir"
218
219verbose "$tid: lmkdir"
220echo "lmkdir ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
221	|| fail "lmkdir failed"
222test -d ${COPY}.dd || fail "missing directory after lmkdir"
223
224# XXX do more here
225verbose "$tid: lchdir"
226echo "lchdir ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
227	|| fail "lchdir failed"
228
229rm -rf ${COPY} ${COPY}.1 ${COPY}.2 ${COPY}.dd ${COPY}.dd2
230rm -rf ${QUOTECOPY} "$SPACECOPY" "$GLOBMETACOPY"
231
232
233