2 # Send an error message via the rsync-protocol to a non-daemon client rsync.
4 # Usage: deny-rsync "message"
7 exit_code=4 # same as a daemon that refuses an option
9 # e.g. byte_escape 29 => \035
10 function byte_escape {
11 echo -ne "\\0$(printf "%o" $1)"
15 if [ "${#msg}" -gt 254 ]; then
16 # truncate a message that is too long for this naive script to handle
19 msglen=$(( ${#msg} + 1 )) # add 1 for the newline we append below
21 # send protocol version
22 echo -ne "$(byte_escape $protocol_version)\\000\\000\\000"
25 echo -ne "\\000\\000\\000\\000"
27 # the following is equivalent to rwrite(FERROR, "$msg\n")
28 # message header: length 17; MPLEX_BASE + code FERROR
29 echo -ne "$(byte_escape $msglen)\\000\\000\\010"
33 # make sure the client gets the message and not a write error