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