2017-06-09 23:09:58 +02:00
|
|
|
#!/bin/sh
|
2013-11-19 13:35:51 +01:00
|
|
|
echo Starting Restorecopy >&2
|
2017-09-30 04:45:31 +02:00
|
|
|
read -r args
|
|
|
|
read -r paths
|
|
|
|
echo "Arguments: $args" >&2
|
|
|
|
echo "Paths: $paths" >&2
|
2013-11-09 19:01:57 +01:00
|
|
|
if [ -f "$args" ] ; then
|
2013-11-19 13:35:51 +01:00
|
|
|
echo "Performing restore from backup file $args" >&2
|
2013-11-09 19:01:57 +01:00
|
|
|
TARGET="$args"
|
2013-11-19 13:35:51 +01:00
|
|
|
echo "Copying $TARGET to STDOUT" >&2
|
2017-09-30 04:45:31 +02:00
|
|
|
# shellcheck disable=SC2086
|
2015-11-02 02:53:12 +01:00
|
|
|
/usr/lib/qubes/tar2qfile "$TARGET" $paths
|
2013-11-09 19:01:57 +01:00
|
|
|
else
|
2013-11-19 13:35:51 +01:00
|
|
|
echo "Checking if arguments is matching a command" >&2
|
2017-09-30 04:45:31 +02:00
|
|
|
COMMAND=$(echo "$args" | cut -d ' ' -f 1)
|
|
|
|
if command -v "$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
|
2013-11-09 19:01:57 +01:00
|
|
|
# Parsing args to handle quotes correctly
|
|
|
|
# Dangerous method if args are uncontrolled
|
|
|
|
eval "set -- $args"
|
|
|
|
# Use named pipe to pass original stdin to tar2file
|
2017-09-30 04:45:31 +02:00
|
|
|
"$@" > "$tmpdir/backup-data" < /dev/null &
|
|
|
|
# shellcheck disable=SC2086
|
|
|
|
/usr/lib/qubes/tar2qfile "$tmpdir/backup-data" $paths
|
2015-11-02 03:10:22 +01:00
|
|
|
# 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=$?
|
2020-02-26 19:47:44 +01:00
|
|
|
wait $!
|
2017-09-30 04:45:31 +02:00
|
|
|
rm "$tmpdir/backup-data"
|
|
|
|
rmdir "$tmpdir"
|
|
|
|
exit "$retcode"
|
2013-11-09 19:01:57 +01:00
|
|
|
else
|
2013-11-19 13:35:51 +01:00
|
|
|
echo "Invalid command $COMMAND" >&2
|
|
|
|
exit 2
|
2013-11-09 19:01:57 +01:00
|
|
|
fi
|
|
|
|
fi
|