diff options
Diffstat (limited to 'debian/byteback/usr/sbin/byteback-receive')
-rwxr-xr-x | debian/byteback/usr/sbin/byteback-receive | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/debian/byteback/usr/sbin/byteback-receive b/debian/byteback/usr/sbin/byteback-receive new file mode 100755 index 0000000..05e6a7c --- /dev/null +++ b/debian/byteback/usr/sbin/byteback-receive @@ -0,0 +1,54 @@ +#!/usr/bin/ruby +# +# Program to receive backups and run rsync in receive mode. Must check that +# user as authorised by SSH is allowed to access particular directory. + +#STDERR.print ARGV.inspect + "\n" + +require 'trollop' + +def error(message) + STDERR.print "*** #{message}\n" + exit 1 +end + +#STDERR.print "ARGV=#{ARGV.inspect}\nSSH_ORIGINAL_COMMAND=#{ENV['SSH_ORIGINAL_COMMAND']}\n" + +if ENV['SSH_ORIGINAL_COMMAND'] + ARGV.concat(ENV['SSH_ORIGINAL_COMMAND'].split(" ")) +end + +#STDERR.print "after ARGV=#{ARGV.inspect}\n" + +byteback_host = ENV['BYTEBACK_HOST'] +error("BYTEBACK_HOST environment not set") unless byteback_host + +byteback_root = ENV['HOME'] + "/" + ENV["BYTEBACK_HOST"] +error("#{byteback_root} does not exist") unless File.directory?(byteback_root) + +# force destination to be where we expect +# +if ARGV[0] == 'rsync' + ARGV[-1] = "#{byteback_root}/current" + exec(*ARGV) +elsif ARGV[0] == 'byteback-snapshot' || (ARGV[0] == 'sudo' && ARGV[1] == 'byteback-snapshot') + ARGV.concat(["--root", "#{byteback_root}"]) + exec(*ARGV) +end + +opts = Trollop::options do + opt :verbose, "Print diagnostics" + opt :ping, "Check connection parameters and exit" + opt :complete, "Mark current backup as complete" +end + +error("Please only choose one mode") if opts[:ping] && opts[:complete] +if opts[:complete] + system("byteback-snapshot", byteback_root) +elsif opts[:ping] + exit 0 +else + STDERR.print "byteback-receive failed\n" + exit 9 +end + |