core-agent-linux/qubes-rpc/qubes.Restore

39 lines
1.3 KiB
Plaintext
Raw Normal View History

2013-11-19 13:35:51 +01:00
echo Starting Restorecopy >&2
read args
read paths
2013-11-19 13:35:51 +01:00
echo Arguments: $args >&2
echo Paths: $paths >&2
if [ -f "$args" ] ; then
2013-11-19 13:35:51 +01:00
echo "Performing restore from backup file $args" >&2
TARGET="$args"
2013-11-19 13:35:51 +01:00
echo "Copying $TARGET to STDOUT" >&2
/usr/lib/qubes/tar2qfile "$TARGET" $paths
else
2013-11-19 13:35:51 +01:00
echo "Checking if arguments is matching a command" >&2
COMMAND=`echo $args | cut -d ' ' -f 1`
if type "$COMMAND" >/dev/null; then
tmpdir=`mktemp -d`
mkfifo $tmpdir/backup-data
2013-11-19 13:35:51 +01:00
echo "Redirecting $args to STDOUT" >&2
# Parsing args to handle quotes correctly
# Dangerous method if args are uncontrolled
eval "set -- $args"
# Use named pipe to pass original stdin to tar2file
$@ > $tmpdir/backup-data < /dev/null &
/usr/lib/qubes/tar2qfile $tmpdir/backup-data $paths
# Restoration may be terminated earlier because of selected files. This
# will be seen as EPIPE to the retrieving process, which may cause retcode
# other than 0 in some cases - which would be incorrectly treated as backup
# restore error. So instead of that, use tar2qfile exit code (and have dom0
# detect if anything wrong with actual data)
retcode=$?
wait -n
rm $tmpdir/backup-data
rmdir $tmpdir
exit $retcode
else
2013-11-19 13:35:51 +01:00
echo "Invalid command $COMMAND" >&2
exit 2
fi
fi