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