sftp-cmds.sh revision 1.16
1# $OpenBSD: sftp-cmds.sh,v 1.16 2024/03/25 03:30:31 dtucker 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" 25printf "cd ${OBJ}\nlls\n" | ${SFTP} -D ${SFTPSERVER} 2>&1 | \ 26 grep copy.dd >/dev/null || fail "lls failed" 27 28verbose "$tid: lls w/path" 29echo "lls ${OBJ}" | ${SFTP} -D ${SFTPSERVER} 2>&1 | \ 30 grep copy.dd >/dev/null || 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" 113printf "lcd ${COPY}.dd\nget $DATA\n" | ${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" 119printf "lcd ${COPY}.dd\nget /bin/l*\n" | ${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" 159printf "cd ${COPY}.dd\nput $DATA\n" | ${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" 165printf "cd ${COPY}.dd\nput /bin/l*\n" | ${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: cp" 195rm -f ${COPY}.2 196echo "cp ${COPY}.1 ${COPY}.2" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || fail "cp failed" 197cmp ${COPY}.1 ${COPY}.2 || fail "created file is not equal after cp" 198 199verbose "$tid: mkdir" 200echo "mkdir ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 201 || fail "mkdir failed" 202test -d ${COPY}.dd || fail "missing directory after mkdir" 203 204# XXX do more here 205verbose "$tid: chdir" 206echo "chdir ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 207 || fail "chdir failed" 208 209verbose "$tid: rmdir" 210echo "rmdir ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 211 || fail "rmdir failed" 212test -d ${COPY}.1 && fail "present directory after rmdir" 213 214verbose "$tid: lmkdir" 215echo "lmkdir ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 216 || fail "lmkdir failed" 217test -d ${COPY}.dd || fail "missing directory after lmkdir" 218 219# XXX do more here 220verbose "$tid: lchdir" 221echo "lchdir ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 222 || fail "lchdir failed" 223 224rm -rf ${COPY} ${COPY}.1 ${COPY}.2 ${COPY}.dd ${COPY}.dd2 225rm -rf ${QUOTECOPY} "$SPACECOPY" "$GLOBMETACOPY" 226 227 228