Annotation of embedaddon/rsync/support/deny-rsync, revision 1.1.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>