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