scp.sh revision 157016
1157016Sdes# $OpenBSD: scp.sh,v 1.7 2006/01/31 10:36:33 djm Exp $ 2137015Sdes# Placed in the Public Domain. 3137015Sdes 4137015Sdestid="scp" 5137015Sdes 6137015Sdes#set -x 7137015Sdes 8137015Sdes# Figure out if diff understands "-N" 9137015Sdesif diff -N ${SRC}/scp.sh ${SRC}/scp.sh 2>/dev/null; then 10137015Sdes DIFFOPT="-rN" 11137015Sdeselse 12137015Sdes DIFFOPT="-r" 13137015Sdesfi 14137015Sdes 15146998SdesDATA=/bin/ls${EXEEXT} 16137015SdesCOPY=${OBJ}/copy 17137015SdesCOPY2=${OBJ}/copy2 18137015SdesDIR=${COPY}.dd 19137015SdesDIR2=${COPY}.dd2 20137015Sdes 21137015SdesSRC=`dirname ${SCRIPT}` 22146998Sdescp ${SRC}/scp-ssh-wrapper.sh ${OBJ}/scp-ssh-wrapper.scp 23146998Sdeschmod 755 ${OBJ}/scp-ssh-wrapper.scp 24146998Sdesscpopts="-q -S ${OBJ}/scp-ssh-wrapper.scp" 25137015Sdes 26137015Sdesscpclean() { 27137015Sdes rm -rf ${COPY} ${COPY2} ${DIR} ${DIR2} 28137015Sdes mkdir ${DIR} ${DIR2} 29137015Sdes} 30137015Sdes 31157016Sdesverbose "$tid: simple copy local file to local file" 32157016Sdesscpclean 33157016Sdes$SCP $scpopts ${DATA} ${COPY} || fail "copy failed" 34157016Sdescmp ${DATA} ${COPY} || fail "corrupted copy" 35157016Sdes 36137015Sdesverbose "$tid: simple copy local file to remote file" 37137015Sdesscpclean 38137015Sdes$SCP $scpopts ${DATA} somehost:${COPY} || fail "copy failed" 39137015Sdescmp ${DATA} ${COPY} || fail "corrupted copy" 40137015Sdes 41137015Sdesverbose "$tid: simple copy remote file to local file" 42137015Sdesscpclean 43137015Sdes$SCP $scpopts somehost:${DATA} ${COPY} || fail "copy failed" 44137015Sdescmp ${DATA} ${COPY} || fail "corrupted copy" 45137015Sdes 46137015Sdesverbose "$tid: simple copy local file to remote dir" 47137015Sdesscpclean 48137015Sdescp ${DATA} ${COPY} 49137015Sdes$SCP $scpopts ${COPY} somehost:${DIR} || fail "copy failed" 50137015Sdescmp ${COPY} ${DIR}/copy || fail "corrupted copy" 51137015Sdes 52157016Sdesverbose "$tid: simple copy local file to local dir" 53157016Sdesscpclean 54157016Sdescp ${DATA} ${COPY} 55157016Sdes$SCP $scpopts ${COPY} ${DIR} || fail "copy failed" 56157016Sdescmp ${COPY} ${DIR}/copy || fail "corrupted copy" 57157016Sdes 58137015Sdesverbose "$tid: simple copy remote file to local dir" 59137015Sdesscpclean 60137015Sdescp ${DATA} ${COPY} 61137015Sdes$SCP $scpopts somehost:${COPY} ${DIR} || fail "copy failed" 62137015Sdescmp ${COPY} ${DIR}/copy || fail "corrupted copy" 63137015Sdes 64137015Sdesverbose "$tid: recursive local dir to remote dir" 65137015Sdesscpclean 66137015Sdesrm -rf ${DIR2} 67137015Sdescp ${DATA} ${DIR}/copy 68137015Sdes$SCP $scpopts -r ${DIR} somehost:${DIR2} || fail "copy failed" 69137015Sdesdiff ${DIFFOPT} ${DIR} ${DIR2} || fail "corrupted copy" 70137015Sdes 71157016Sdesverbose "$tid: recursive local dir to local dir" 72157016Sdesscpclean 73157016Sdesrm -rf ${DIR2} 74157016Sdescp ${DATA} ${DIR}/copy 75157016Sdes$SCP $scpopts -r ${DIR} ${DIR2} || fail "copy failed" 76157016Sdesdiff ${DIFFOPT} ${DIR} ${DIR2} || fail "corrupted copy" 77157016Sdes 78137015Sdesverbose "$tid: recursive remote dir to local dir" 79137015Sdesscpclean 80137015Sdesrm -rf ${DIR2} 81137015Sdescp ${DATA} ${DIR}/copy 82137015Sdes$SCP $scpopts -r somehost:${DIR} ${DIR2} || fail "copy failed" 83137015Sdesdiff ${DIFFOPT} ${DIR} ${DIR2} || fail "corrupted copy" 84137015Sdes 85157016Sdesverbose "$tid: shell metacharacters" 86157016Sdesscpclean 87157016Sdes(cd ${DIR} && \ 88157016Sdestouch '`touch metachartest`' && \ 89157016Sdes$SCP $scpopts *metachar* ${DIR2} 2>/dev/null; \ 90157016Sdes[ ! -f metachartest ] ) || fail "shell metacharacters" 91157016Sdes 92146998Sdesif [ ! -z "$SUDO" ]; then 93146998Sdes verbose "$tid: skipped file after scp -p with failed chown+utimes" 94146998Sdes scpclean 95146998Sdes cp -p ${DATA} ${DIR}/copy 96146998Sdes cp -p ${DATA} ${DIR}/copy2 97146998Sdes cp ${DATA} ${DIR2}/copy 98146998Sdes chmod 660 ${DIR2}/copy 99146998Sdes $SUDO chown root ${DIR2}/copy 100146998Sdes $SCP -p $scpopts somehost:${DIR}/\* ${DIR2} >/dev/null 2>&1 101157016Sdes $SUDO diff ${DIFFOPT} ${DIR} ${DIR2} || fail "corrupted copy" 102146998Sdes $SUDO rm ${DIR2}/copy 103146998Sdesfi 104146998Sdes 105137015Sdesfor i in 0 1 2 3 4; do 106137015Sdes verbose "$tid: disallow bad server #$i" 107137015Sdes SCPTESTMODE=badserver_$i 108137015Sdes export DIR SCPTESTMODE 109137015Sdes scpclean 110137015Sdes $SCP $scpopts somehost:${DATA} ${DIR} >/dev/null 2>/dev/null 111137015Sdes [ -d {$DIR}/rootpathdir ] && fail "allows dir relative to root dir" 112137015Sdes [ -d ${DIR}/dotpathdir ] && fail "allows dir creation in non-recursive mode" 113137015Sdes 114137015Sdes scpclean 115137015Sdes $SCP -r $scpopts somehost:${DATA} ${DIR2} >/dev/null 2>/dev/null 116137015Sdes [ -d ${DIR}/dotpathdir ] && fail "allows dir creation outside of subdir" 117137015Sdesdone 118137015Sdes 119157016Sdesverbose "$tid: detect non-directory target" 120137015Sdesscpclean 121157016Sdesecho a > ${COPY} 122157016Sdesecho b > ${COPY2} 123157016Sdes$SCP $scpopts ${DATA} ${COPY} ${COPY2} 124157016Sdescmp ${COPY} ${COPY2} >/dev/null && fail "corrupt target" 125157016Sdes 126157016Sdesscpclean 127146998Sdesrm -f ${OBJ}/scp-ssh-wrapper.scp 128