Annotation of embedaddon/rsync/support/deny-rsync, revision 1.1

1.1     ! misho       1: #!/bin/bash
        !             2: # Send an error message via the rsync-protocol to a non-daemon client rsync.
        !             3: #
        !             4: # Usage:  deny-rsync "message"
        !             5: 
        !             6: protocol_version=29
        !             7: exit_code=4 # same as a daemon that refuses an option
        !             8: 
        !             9: # e.g. byte_escape 29 => \035
        !            10: function byte_escape {
        !            11:     echo -ne "\\0$(printf "%o" $1)"
        !            12: }
        !            13: 
        !            14: msg="$1"
        !            15: if [ "${#msg}" -gt 254 ]; then
        !            16:     # truncate a message that is too long for this naive script to handle
        !            17:     msg="${msg:0:251}..."
        !            18: fi
        !            19: msglen=$(( ${#msg} + 1 )) # add 1 for the newline we append below
        !            20: 
        !            21: # Send protocol version.  All numbers are LSB-first 4-byte ints.
        !            22: echo -ne "$(byte_escape $protocol_version)\\000\\000\\000"
        !            23: 
        !            24: # Send a zero checksum seed.
        !            25: echo -ne "\\000\\000\\000\\000"
        !            26: 
        !            27: # The following is equivalent to rprintf(FERROR_XFER, "%s\n", $msg).
        !            28: # 1. Message header: ((MPLEX_BASE + FERROR_XFER) << 24) + $msglen.
        !            29: echo -ne "$(byte_escape $msglen)\\000\\000\\010"
        !            30: # 2. The actual data.
        !            31: echo -E "$msg"
        !            32: 
        !            33: # Make sure the client gets our message, not a write failure.
        !            34: sleep 1
        !            35: 
        !            36: exit $exit_code

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>