1255670Sdes#	$OpenBSD: sftp-cmds.sh,v 1.14 2013/06/21 02:26:26 djm Exp $
2113908Sdes#	Placed in the Public Domain.
3113908Sdes
4113908Sdes# XXX - TODO: 
5113908Sdes# - chmod / chown / chgrp
6113908Sdes# - -p flag for get & put
7113908Sdes
8113908Sdestid="sftp commands"
9113908Sdes
10124208Sdes# test that these files are readable!
11124208Sdesfor i in `(cd /bin;echo l*)`
12124208Sdesdo
13124208Sdes	if [ -r $i ]; then
14124208Sdes		GLOBFILES="$GLOBFILES $i"
15124208Sdes	fi
16124208Sdesdone
17113908Sdes
18124208Sdes# Path with embedded quote
19124208SdesQUOTECOPY=${COPY}".\"blah\""
20124208SdesQUOTECOPY_ARG=${COPY}'.\"blah\"'
21180746Sdes# File with spaces
22180746SdesSPACECOPY="${COPY} this has spaces.txt"
23180746SdesSPACECOPY_ARG="${COPY}\ this\ has\ spaces.txt"
24180746Sdes# File with glob metacharacters
25180746SdesGLOBMETACOPY="${COPY} [metachar].txt"
26124208Sdes
27239849Sdesrm -rf ${COPY} ${COPY}.1 ${COPY}.2 ${COPY}.dd ${COPY}.dd2
28124208Sdesmkdir ${COPY}.dd
29124208Sdes
30113908Sdesverbose "$tid: lls"
31204861Sdes(echo "lcd ${OBJ}" ; echo "lls") | ${SFTP} -D ${SFTPSERVER} 2>&1 | \
32180746Sdes	grep copy.dd >/dev/null 2>&1 || fail "lls failed"
33113908Sdes
34180746Sdesverbose "$tid: lls w/path"
35204861Sdesecho "lls ${OBJ}" | ${SFTP} -D ${SFTPSERVER} 2>&1 | \
36180746Sdes	grep copy.dd >/dev/null 2>&1 || fail "lls w/path failed"
37180746Sdes
38113908Sdesverbose "$tid: ls"
39204861Sdesecho "ls ${OBJ}" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
40113908Sdes	|| fail "ls failed"
41113908Sdes# XXX always successful
42113908Sdes
43113908Sdesverbose "$tid: shell"
44204861Sdesecho "!echo hi there" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
45113908Sdes	|| fail "shell failed"
46113908Sdes# XXX always successful
47113908Sdes
48113908Sdesverbose "$tid: pwd"
49204861Sdesecho "pwd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
50113908Sdes	|| fail "pwd failed"
51113908Sdes# XXX always successful
52113908Sdes
53113908Sdesverbose "$tid: lpwd"
54204861Sdesecho "lpwd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
55113908Sdes	|| fail "lpwd failed"
56113908Sdes# XXX always successful
57113908Sdes
58113908Sdesverbose "$tid: quit"
59204861Sdesecho "quit" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
60113908Sdes	|| fail "quit failed"
61113908Sdes# XXX always successful
62113908Sdes
63113908Sdesverbose "$tid: help"
64204861Sdesecho "help" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
65113908Sdes	|| fail "help failed"
66113908Sdes# XXX always successful
67113908Sdes
68113908Sdesrm -f ${COPY}
69113908Sdesverbose "$tid: get"
70204861Sdesecho "get $DATA $COPY" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
71113908Sdes	|| fail "get failed"
72113908Sdescmp $DATA ${COPY} || fail "corrupted copy after get"
73113908Sdes
74126274Sdesrm -f ${COPY}
75126274Sdesverbose "$tid: get quoted"
76204861Sdesecho "get \"$DATA\" $COPY" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
77126274Sdes	|| fail "get failed"
78126274Sdescmp $DATA ${COPY} || fail "corrupted copy after get"
79126274Sdes
80128456Sdesif [ "$os" != "cygwin" ]; then
81126274Sdesrm -f ${QUOTECOPY}
82126274Sdescp $DATA ${QUOTECOPY}
83126274Sdesverbose "$tid: get filename with quotes"
84204861Sdesecho "get \"$QUOTECOPY_ARG\" ${COPY}" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
85204861Sdes	|| fail "get failed"
86126274Sdescmp ${COPY} ${QUOTECOPY} || fail "corrupted copy after get with quotes"
87126274Sdesrm -f ${QUOTECOPY} ${COPY}
88128456Sdesfi
89126274Sdes
90180746Sdesrm -f "$SPACECOPY" ${COPY}
91180746Sdescp $DATA "$SPACECOPY"
92180746Sdesverbose "$tid: get filename with spaces"
93204861Sdesecho "get ${SPACECOPY_ARG} ${COPY}" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
94180746Sdes        || fail "get failed"
95180746Sdescmp ${COPY} "$SPACECOPY" || fail "corrupted copy after get with spaces"
96180746Sdes
97180746Sdesrm -f "$GLOBMETACOPY" ${COPY}
98180746Sdescp $DATA "$GLOBMETACOPY"
99180746Sdesverbose "$tid: get filename with glob metacharacters"
100180746Sdesecho "get \"${GLOBMETACOPY}\" ${COPY}" | \
101204861Sdes	${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || fail "get failed"
102180746Sdescmp ${COPY} "$GLOBMETACOPY" || \
103180746Sdes	fail "corrupted copy after get with glob metacharacters"
104180746Sdes
105124208Sdesrm -f ${COPY}.dd/*
106124208Sdesverbose "$tid: get to directory"
107204861Sdesecho "get $DATA ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
108124208Sdes        || fail "get failed"
109255670Sdescmp $DATA ${COPY}.dd/$DATANAME || fail "corrupted copy after get"
110124208Sdes
111124208Sdesrm -f ${COPY}.dd/*
112124208Sdesverbose "$tid: glob get to directory"
113204861Sdesecho "get /bin/l* ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
114124208Sdes        || fail "get failed"
115124208Sdesfor x in $GLOBFILES; do
116124208Sdes        cmp /bin/$x ${COPY}.dd/$x || fail "corrupted copy after get"
117124208Sdesdone
118124208Sdes
119124208Sdesrm -f ${COPY}.dd/*
120124208Sdesverbose "$tid: get to local dir"
121204861Sdes(echo "lcd ${COPY}.dd"; echo "get $DATA" ) | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
122124208Sdes        || fail "get failed"
123255670Sdescmp $DATA ${COPY}.dd/$DATANAME || fail "corrupted copy after get"
124124208Sdes
125124208Sdesrm -f ${COPY}.dd/*
126124208Sdesverbose "$tid: glob get to local dir"
127204861Sdes(echo "lcd ${COPY}.dd"; echo "get /bin/l*") | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
128124208Sdes        || fail "get failed"
129124208Sdesfor x in $GLOBFILES; do
130124208Sdes        cmp /bin/$x ${COPY}.dd/$x || fail "corrupted copy after get"
131124208Sdesdone
132124208Sdes
133113908Sdesrm -f ${COPY}
134113908Sdesverbose "$tid: put"
135180746Sdesecho "put $DATA $COPY" | \
136204861Sdes	${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || fail "put failed"
137113908Sdescmp $DATA ${COPY} || fail "corrupted copy after put"
138113908Sdes
139124208Sdesif [ "$os" != "cygwin" ]; then
140124208Sdesrm -f ${QUOTECOPY}
141124208Sdesverbose "$tid: put filename with quotes"
142180746Sdesecho "put $DATA \"$QUOTECOPY_ARG\"" | \
143204861Sdes	${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || fail "put failed"
144124208Sdescmp $DATA ${QUOTECOPY} || fail "corrupted copy after put with quotes"
145124208Sdesfi
146124208Sdes
147180746Sdesrm -f "$SPACECOPY"
148180746Sdesverbose "$tid: put filename with spaces"
149180746Sdesecho "put $DATA ${SPACECOPY_ARG}" | \
150204861Sdes	${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || fail "put failed"
151180746Sdescmp $DATA "$SPACECOPY" || fail "corrupted copy after put with spaces"
152180746Sdes
153124208Sdesrm -f ${COPY}.dd/*
154124208Sdesverbose "$tid: put to directory"
155204861Sdesecho "put $DATA ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
156124208Sdes	|| fail "put failed"
157255670Sdescmp $DATA ${COPY}.dd/$DATANAME || fail "corrupted copy after put"
158124208Sdes
159124208Sdesrm -f ${COPY}.dd/*
160124208Sdesverbose "$tid: glob put to directory"
161204861Sdesecho "put /bin/l? ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
162124208Sdes	|| fail "put failed"
163124208Sdesfor x in $GLOBFILES; do
164124208Sdes	cmp /bin/$x ${COPY}.dd/$x || fail "corrupted copy after put"
165124208Sdesdone
166124208Sdes
167124208Sdesrm -f ${COPY}.dd/*
168124208Sdesverbose "$tid: put to local dir"
169204861Sdes(echo "cd ${COPY}.dd"; echo "put $DATA") | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
170124208Sdes	|| fail "put failed"
171255670Sdescmp $DATA ${COPY}.dd/$DATANAME || fail "corrupted copy after put"
172124208Sdes
173124208Sdesrm -f ${COPY}.dd/*
174124208Sdesverbose "$tid: glob put to local dir"
175204861Sdes(echo "cd ${COPY}.dd"; echo "put /bin/l?") | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
176124208Sdes	|| fail "put failed"
177124208Sdesfor x in $GLOBFILES; do
178124208Sdes        cmp /bin/$x ${COPY}.dd/$x || fail "corrupted copy after put"
179124208Sdesdone
180124208Sdes
181113908Sdesverbose "$tid: rename"
182204861Sdesecho "rename $COPY ${COPY}.1" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
183113908Sdes	|| fail "rename failed"
184113908Sdestest -f ${COPY}.1 || fail "missing file after rename"
185113908Sdescmp $DATA ${COPY}.1 >/dev/null 2>&1 || fail "corrupted copy after rename"
186113908Sdes
187124208Sdesverbose "$tid: rename directory"
188180746Sdesecho "rename ${COPY}.dd ${COPY}.dd2" | \
189204861Sdes	${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || \
190180746Sdes	fail "rename directory failed"
191124208Sdestest -d ${COPY}.dd && fail "oldname exists after rename directory"
192124208Sdestest -d ${COPY}.dd2 || fail "missing newname after rename directory"
193124208Sdes
194113908Sdesverbose "$tid: ln"
195204861Sdesecho "ln ${COPY}.1 ${COPY}.2" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || fail "ln failed"
196218767Sdestest -f ${COPY}.2 || fail "missing file after ln"
197218767Sdescmp ${COPY}.1 ${COPY}.2 || fail "created file is not equal after ln"
198113908Sdes
199218767Sdesverbose "$tid: ln -s"
200218767Sdesrm -f ${COPY}.2
201218767Sdesecho "ln -s ${COPY}.1 ${COPY}.2" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || fail "ln -s failed"
202218767Sdestest -h ${COPY}.2 || fail "missing file after ln -s"
203218767Sdes
204113908Sdesverbose "$tid: mkdir"
205204861Sdesecho "mkdir ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
206113908Sdes	|| fail "mkdir failed"
207113908Sdestest -d ${COPY}.dd || fail "missing directory after mkdir"
208113908Sdes
209113908Sdes# XXX do more here
210113908Sdesverbose "$tid: chdir"
211204861Sdesecho "chdir ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
212113908Sdes	|| fail "chdir failed"
213113908Sdes
214113908Sdesverbose "$tid: rmdir"
215204861Sdesecho "rmdir ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
216113908Sdes	|| fail "rmdir failed"
217113908Sdestest -d ${COPY}.1 && fail "present directory after rmdir"
218113908Sdes
219113908Sdesverbose "$tid: lmkdir"
220204861Sdesecho "lmkdir ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
221113908Sdes	|| fail "lmkdir failed"
222113908Sdestest -d ${COPY}.dd || fail "missing directory after lmkdir"
223113908Sdes
224113908Sdes# XXX do more here
225113908Sdesverbose "$tid: lchdir"
226204861Sdesecho "lchdir ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
227113908Sdes	|| fail "lchdir failed"
228113908Sdes
229239849Sdesrm -rf ${COPY} ${COPY}.1 ${COPY}.2 ${COPY}.dd ${COPY}.dd2
230180746Sdesrm -rf ${QUOTECOPY} "$SPACECOPY" "$GLOBMETACOPY"
231113908Sdes
232204861Sdes
233