--- /dev/null
+#!/usr/bin/perl
+
+use strict;
+use warnings FATAL => 'all';
+
+use constant LOGFILE => '/var/log/rsync-shell.log';
+
+my %commands = (
+ "backup" => \&backup,
+ "rsync" => \&rsync,
+);
+
+sub backup {
+ exec '/usr/bin/sudo',
+ '/afs/hcoop.net/common/etc/scripts/hcoop-backup-wrapper';
+}
+
+sub rsync {
+ my ($cmdline) = @_;
+
+ if ( $cmdline !~ m!^--server --sender -vre\.iL \. /vicepa/hcoop-backups/files/[0-9]{4}\.[0-9]{2}\.[0-9]{2}$!s ) {
+ die "Incorrect arguments to rsync.\n";
+ }
+
+ exec '/usr/bin/rsync', split(' ', $cmdline)
+ or die "Could not run rsync command.\n";
+}
+
+sub main {
+ -f LOGFILE && open (LOG, '>>', LOGFILE)
+ or die "Can't open log file.\n";
+
+ print LOG "Session started on ", `date`;
+ print LOG "Commands: ", map { "<$_> " } @ARGV;
+ print LOG "\n";
+
+ $ARGV[1] =~ /^([^ ]+) *(.*?)$/s;
+ my $cmd = $commands{$1}
+ or die "Unsupported command.\n";
+
+ $cmd->($2);
+}
+
+main()
+