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