1*0fdf8faeSEd Maste# $OpenBSD: sftp-cmds.sh,v 1.20 2024/07/01 03:10:19 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" 31*0fdf8faeSEd Masteprintf "lcd ${OBJ}\nlls\n" | ${SFTP} -D ${SFTPSERVER} 2>&1 | \ 32*0fdf8faeSEd Maste grep copy.dd >/dev/null || 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 | \ 36*0fdf8faeSEd Maste grep copy.dd >/dev/null || 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" 44*0fdf8faeSEd Masteecho "!echo hi there" | ${SFTP} -D ${SFTPSERVER} 2>&1 | \ 45*0fdf8faeSEd Maste egrep '^hi there$' >/dev/null || fail "shell failed" 46ce3adf43SDag-Erling Smørgrav 47ce3adf43SDag-Erling Smørgravverbose "$tid: pwd" 48ce3adf43SDag-Erling Smørgravecho "pwd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 49ce3adf43SDag-Erling Smørgrav || fail "pwd failed" 50ce3adf43SDag-Erling Smørgrav# XXX always successful 51ce3adf43SDag-Erling Smørgrav 52ce3adf43SDag-Erling Smørgravverbose "$tid: lpwd" 53ce3adf43SDag-Erling Smørgravecho "lpwd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 54ce3adf43SDag-Erling Smørgrav || fail "lpwd failed" 55ce3adf43SDag-Erling Smørgrav# XXX always successful 56ce3adf43SDag-Erling Smørgrav 57ce3adf43SDag-Erling Smørgravverbose "$tid: quit" 58ce3adf43SDag-Erling Smørgravecho "quit" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 59ce3adf43SDag-Erling Smørgrav || fail "quit failed" 60ce3adf43SDag-Erling Smørgrav# XXX always successful 61ce3adf43SDag-Erling Smørgrav 62ce3adf43SDag-Erling Smørgravverbose "$tid: help" 63ce3adf43SDag-Erling Smørgravecho "help" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 64ce3adf43SDag-Erling Smørgrav || fail "help failed" 65ce3adf43SDag-Erling Smørgrav# XXX always successful 66ce3adf43SDag-Erling Smørgrav 67ce3adf43SDag-Erling Smørgravrm -f ${COPY} 68ce3adf43SDag-Erling Smørgravverbose "$tid: get" 69ce3adf43SDag-Erling Smørgravecho "get $DATA $COPY" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 70ce3adf43SDag-Erling Smørgrav || fail "get failed" 71ce3adf43SDag-Erling Smørgravcmp $DATA ${COPY} || fail "corrupted copy after get" 72ce3adf43SDag-Erling Smørgrav 73ce3adf43SDag-Erling Smørgravrm -f ${COPY} 74ce3adf43SDag-Erling Smørgravverbose "$tid: get quoted" 75ce3adf43SDag-Erling Smørgravecho "get \"$DATA\" $COPY" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 76ce3adf43SDag-Erling Smørgrav || fail "get failed" 77ce3adf43SDag-Erling Smørgravcmp $DATA ${COPY} || fail "corrupted copy after get" 78ce3adf43SDag-Erling Smørgrav 79ce3adf43SDag-Erling Smørgravrm -f ${QUOTECOPY} 80ce3adf43SDag-Erling Smørgravcp $DATA ${QUOTECOPY} 81ce3adf43SDag-Erling Smørgravverbose "$tid: get filename with quotes" 82ce3adf43SDag-Erling Smørgravecho "get \"$QUOTECOPY_ARG\" ${COPY}" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 83ce3adf43SDag-Erling Smørgrav || fail "get failed" 84ce3adf43SDag-Erling Smørgravcmp ${COPY} ${QUOTECOPY} || fail "corrupted copy after get with quotes" 85ce3adf43SDag-Erling Smørgravrm -f ${QUOTECOPY} ${COPY} 86ce3adf43SDag-Erling Smørgrav 87ce3adf43SDag-Erling Smørgravrm -f "$SPACECOPY" ${COPY} 88ce3adf43SDag-Erling Smørgravcp $DATA "$SPACECOPY" 89ce3adf43SDag-Erling Smørgravverbose "$tid: get filename with spaces" 90ce3adf43SDag-Erling Smørgravecho "get ${SPACECOPY_ARG} ${COPY}" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 91ce3adf43SDag-Erling Smørgrav || fail "get failed" 92ce3adf43SDag-Erling Smørgravcmp ${COPY} "$SPACECOPY" || fail "corrupted copy after get with spaces" 93ce3adf43SDag-Erling Smørgrav 94ce3adf43SDag-Erling Smørgravrm -f "$GLOBMETACOPY" ${COPY} 95ce3adf43SDag-Erling Smørgravcp $DATA "$GLOBMETACOPY" 96ce3adf43SDag-Erling Smørgravverbose "$tid: get filename with glob metacharacters" 97ce3adf43SDag-Erling Smørgravecho "get \"${GLOBMETACOPY}\" ${COPY}" | \ 98ce3adf43SDag-Erling Smørgrav ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || fail "get failed" 99ce3adf43SDag-Erling Smørgravcmp ${COPY} "$GLOBMETACOPY" || \ 100ce3adf43SDag-Erling Smørgrav fail "corrupted copy after get with glob metacharacters" 101ce3adf43SDag-Erling Smørgrav 102ce3adf43SDag-Erling Smørgravrm -f ${COPY}.dd/* 103ce3adf43SDag-Erling Smørgravverbose "$tid: get to directory" 104ce3adf43SDag-Erling Smørgravecho "get $DATA ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 105ce3adf43SDag-Erling Smørgrav || fail "get failed" 106*0fdf8faeSEd Mastecmp $DATA ${COPY}.dd/${DATANAME} || fail "corrupted copy after get" 107ce3adf43SDag-Erling Smørgrav 108ce3adf43SDag-Erling Smørgravrm -f ${COPY}.dd/* 109ce3adf43SDag-Erling Smørgravverbose "$tid: glob get to directory" 110ce3adf43SDag-Erling Smørgravecho "get /bin/l* ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 111ce3adf43SDag-Erling Smørgrav || fail "get failed" 112ce3adf43SDag-Erling Smørgravfor x in $GLOBFILES; do 113ce3adf43SDag-Erling Smørgrav cmp /bin/$x ${COPY}.dd/$x || fail "corrupted copy after get" 114ce3adf43SDag-Erling Smørgravdone 115ce3adf43SDag-Erling Smørgrav 116ce3adf43SDag-Erling Smørgravrm -f ${COPY}.dd/* 117ce3adf43SDag-Erling Smørgravverbose "$tid: get to local dir" 118*0fdf8faeSEd Masteprintf "lcd ${COPY}.dd\nget $DATA\n" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 119ce3adf43SDag-Erling Smørgrav || fail "get failed" 120*0fdf8faeSEd Mastecmp $DATA ${COPY}.dd/${DATANAME} || fail "corrupted copy after get" 121ce3adf43SDag-Erling Smørgrav 122ce3adf43SDag-Erling Smørgravrm -f ${COPY}.dd/* 123ce3adf43SDag-Erling Smørgravverbose "$tid: glob get to local dir" 124*0fdf8faeSEd Masteprintf "lcd ${COPY}.dd\nget /bin/l*\n" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 125ce3adf43SDag-Erling Smørgrav || fail "get failed" 126ce3adf43SDag-Erling Smørgravfor x in $GLOBFILES; do 127ce3adf43SDag-Erling Smørgrav cmp /bin/$x ${COPY}.dd/$x || fail "corrupted copy after get" 128ce3adf43SDag-Erling Smørgravdone 129ce3adf43SDag-Erling Smørgrav 130ce3adf43SDag-Erling Smørgravrm -f ${COPY} 131ce3adf43SDag-Erling Smørgravverbose "$tid: put" 132ce3adf43SDag-Erling Smørgravecho "put $DATA $COPY" | \ 133ce3adf43SDag-Erling Smørgrav ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || fail "put failed" 134ce3adf43SDag-Erling Smørgravcmp $DATA ${COPY} || fail "corrupted copy after put" 135ce3adf43SDag-Erling Smørgrav 136ce3adf43SDag-Erling Smørgravrm -f ${QUOTECOPY} 137ce3adf43SDag-Erling Smørgravverbose "$tid: put filename with quotes" 138ce3adf43SDag-Erling Smørgravecho "put $DATA \"$QUOTECOPY_ARG\"" | \ 139ce3adf43SDag-Erling Smørgrav ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || fail "put failed" 140ce3adf43SDag-Erling Smørgravcmp $DATA ${QUOTECOPY} || fail "corrupted copy after put with quotes" 141ce3adf43SDag-Erling Smørgrav 142ce3adf43SDag-Erling Smørgravrm -f "$SPACECOPY" 143ce3adf43SDag-Erling Smørgravverbose "$tid: put filename with spaces" 144ce3adf43SDag-Erling Smørgravecho "put $DATA ${SPACECOPY_ARG}" | \ 145ce3adf43SDag-Erling Smørgrav ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || fail "put failed" 146ce3adf43SDag-Erling Smørgravcmp $DATA "$SPACECOPY" || fail "corrupted copy after put with spaces" 147ce3adf43SDag-Erling Smørgrav 148ce3adf43SDag-Erling Smørgravrm -f ${COPY}.dd/* 149ce3adf43SDag-Erling Smørgravverbose "$tid: put to directory" 150ce3adf43SDag-Erling Smørgravecho "put $DATA ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 151ce3adf43SDag-Erling Smørgrav || fail "put failed" 152*0fdf8faeSEd Mastecmp $DATA ${COPY}.dd/${DATANAME} || fail "corrupted copy after put" 153ce3adf43SDag-Erling Smørgrav 154ce3adf43SDag-Erling Smørgravrm -f ${COPY}.dd/* 155ce3adf43SDag-Erling Smørgravverbose "$tid: glob put to directory" 156ce3adf43SDag-Erling Smørgravecho "put /bin/l? ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 157ce3adf43SDag-Erling Smørgrav || fail "put failed" 158ce3adf43SDag-Erling Smørgravfor x in $GLOBFILES; do 159ce3adf43SDag-Erling Smørgrav cmp /bin/$x ${COPY}.dd/$x || fail "corrupted copy after put" 160ce3adf43SDag-Erling Smørgravdone 161ce3adf43SDag-Erling Smørgrav 162ce3adf43SDag-Erling Smørgravrm -f ${COPY}.dd/* 163ce3adf43SDag-Erling Smørgravverbose "$tid: put to local dir" 164*0fdf8faeSEd Masteprintf "cd ${COPY}.dd\nput $DATA\n" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 165ce3adf43SDag-Erling Smørgrav || fail "put failed" 166*0fdf8faeSEd Mastecmp $DATA ${COPY}.dd/${DATANAME} || fail "corrupted copy after put" 167ce3adf43SDag-Erling Smørgrav 168ce3adf43SDag-Erling Smørgravrm -f ${COPY}.dd/* 169ce3adf43SDag-Erling Smørgravverbose "$tid: glob put to local dir" 170*0fdf8faeSEd Masteprintf "cd ${COPY}.dd\nput /bin/l*\n" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 171ce3adf43SDag-Erling Smørgrav || fail "put failed" 172ce3adf43SDag-Erling Smørgravfor x in $GLOBFILES; do 173ce3adf43SDag-Erling Smørgrav cmp /bin/$x ${COPY}.dd/$x || fail "corrupted copy after put" 174ce3adf43SDag-Erling Smørgravdone 175ce3adf43SDag-Erling Smørgrav 176ce3adf43SDag-Erling Smørgravverbose "$tid: rename" 177ce3adf43SDag-Erling Smørgravecho "rename $COPY ${COPY}.1" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 178ce3adf43SDag-Erling Smørgrav || fail "rename failed" 179ce3adf43SDag-Erling Smørgravtest -f ${COPY}.1 || fail "missing file after rename" 180ce3adf43SDag-Erling Smørgravcmp $DATA ${COPY}.1 >/dev/null 2>&1 || fail "corrupted copy after rename" 181ce3adf43SDag-Erling Smørgrav 182ce3adf43SDag-Erling Smørgravverbose "$tid: rename directory" 183ce3adf43SDag-Erling Smørgravecho "rename ${COPY}.dd ${COPY}.dd2" | \ 184ce3adf43SDag-Erling Smørgrav ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || \ 185ce3adf43SDag-Erling Smørgrav fail "rename directory failed" 186ce3adf43SDag-Erling Smørgravtest -d ${COPY}.dd && fail "oldname exists after rename directory" 187ce3adf43SDag-Erling Smørgravtest -d ${COPY}.dd2 || fail "missing newname after rename directory" 188ce3adf43SDag-Erling Smørgrav 189ce3adf43SDag-Erling Smørgravverbose "$tid: ln" 190ce3adf43SDag-Erling Smørgravecho "ln ${COPY}.1 ${COPY}.2" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || fail "ln failed" 191ce3adf43SDag-Erling Smørgravtest -f ${COPY}.2 || fail "missing file after ln" 192ce3adf43SDag-Erling Smørgravcmp ${COPY}.1 ${COPY}.2 || fail "created file is not equal after ln" 193ce3adf43SDag-Erling Smørgrav 194ce3adf43SDag-Erling Smørgravverbose "$tid: ln -s" 195ce3adf43SDag-Erling Smørgravrm -f ${COPY}.2 196ce3adf43SDag-Erling Smørgravecho "ln -s ${COPY}.1 ${COPY}.2" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || fail "ln -s failed" 197ce3adf43SDag-Erling Smørgravtest -h ${COPY}.2 || fail "missing file after ln -s" 198ce3adf43SDag-Erling Smørgrav 19938a52bd3SEd Masteverbose "$tid: cp" 20038a52bd3SEd Masterm -f ${COPY}.2 20138a52bd3SEd Masteecho "cp ${COPY}.1 ${COPY}.2" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || fail "cp failed" 20238a52bd3SEd Mastecmp ${COPY}.1 ${COPY}.2 || fail "created file is not equal after cp" 20338a52bd3SEd Maste 204ce3adf43SDag-Erling Smørgravverbose "$tid: mkdir" 205ce3adf43SDag-Erling Smørgravecho "mkdir ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 206ce3adf43SDag-Erling Smørgrav || fail "mkdir failed" 207ce3adf43SDag-Erling Smørgravtest -d ${COPY}.dd || fail "missing directory after mkdir" 208ce3adf43SDag-Erling Smørgrav 209ce3adf43SDag-Erling Smørgrav# XXX do more here 210ce3adf43SDag-Erling Smørgravverbose "$tid: chdir" 211ce3adf43SDag-Erling Smørgravecho "chdir ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 212ce3adf43SDag-Erling Smørgrav || fail "chdir failed" 213ce3adf43SDag-Erling Smørgrav 214ce3adf43SDag-Erling Smørgravverbose "$tid: rmdir" 215ce3adf43SDag-Erling Smørgravecho "rmdir ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 216ce3adf43SDag-Erling Smørgrav || fail "rmdir failed" 217ce3adf43SDag-Erling Smørgravtest -d ${COPY}.1 && fail "present directory after rmdir" 218ce3adf43SDag-Erling Smørgrav 219ce3adf43SDag-Erling Smørgravverbose "$tid: lmkdir" 220ce3adf43SDag-Erling Smørgravecho "lmkdir ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 221ce3adf43SDag-Erling Smørgrav || fail "lmkdir failed" 222ce3adf43SDag-Erling Smørgravtest -d ${COPY}.dd || fail "missing directory after lmkdir" 223ce3adf43SDag-Erling Smørgrav 224ce3adf43SDag-Erling Smørgrav# XXX do more here 225ce3adf43SDag-Erling Smørgravverbose "$tid: lchdir" 226ce3adf43SDag-Erling Smørgravecho "lchdir ${COPY}.dd" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \ 227ce3adf43SDag-Erling Smørgrav || fail "lchdir failed" 228ce3adf43SDag-Erling Smørgrav 229ce3adf43SDag-Erling Smørgravrm -rf ${COPY} ${COPY}.1 ${COPY}.2 ${COPY}.dd ${COPY}.dd2 230ce3adf43SDag-Erling Smørgravrm -rf ${QUOTECOPY} "$SPACECOPY" "$GLOBMETACOPY" 231ce3adf43SDag-Erling Smørgrav 232ce3adf43SDag-Erling Smørgrav 233