#!/bin/bash # deny-rsync [message]: send an rsync-protocol error message protocol_version=29 exit_code=4 # same as a daemon that refuses an option # byte_escape 29 ==> \035 function byte_escape { octbyte="000$(bc <<<"obase=8; $1")" echo -n "\\${octbyte: -3}" } msg="$1" if [ "${#msg}" -gt 255 ]; then # message is too long for this naive script to handle msg="${msg:0:252}..." fi # send protocol version echo -ne "$(byte_escape $protocol_version)\\000\\000\\000" # send checksum seed echo -ne "\\000\\000\\000\\000" # the following is equivalent to rwrite(FERROR, $msg) # message header: length 17; MPLEX_BASE + code FERROR echo -ne "$(byte_escape ${#msg})\\000\\000\\010" # data echo -n "$msg" exit $exit_code