The deny-rsync script from bug 3945.
authorMatt McCutchen <matt@mattmccutchen.net>
Tue, 24 Jun 2008 05:56:13 +0000 (22:56 -0700)
committerWayne Davison <wayned@samba.org>
Tue, 24 Jun 2008 06:04:21 +0000 (23:04 -0700)
support/deny-rsync [new file with mode: 0755]

diff --git a/support/deny-rsync b/support/deny-rsync
new file mode 100755 (executable)
index 0000000..c563186
--- /dev/null
@@ -0,0 +1,31 @@
+#!/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