core-agent-linux/qubes-rpc/qubes.Restore
Marek Marczykowski-Górecki 9c839d789f
qubes-rpc: fix issues found by shellcheck
Most of them are missing quotes, `` -> $(), and -o/-a usage in
conditions. Also add few directives disabling checks where were too
verbose.
2017-09-30 04:45:31 +02:00

42 linhas
1.4 KiB
Bash
Arquivo executável

#!/bin/sh
echo Starting Restorecopy >&2
read -r args
read -r paths
echo "Arguments: $args" >&2
echo "Paths: $paths" >&2
if [ -f "$args" ] ; then
echo "Performing restore from backup file $args" >&2
TARGET="$args"
echo "Copying $TARGET to STDOUT" >&2
# shellcheck disable=SC2086
/usr/lib/qubes/tar2qfile "$TARGET" $paths
else
echo "Checking if arguments is matching a command" >&2
COMMAND=$(echo "$args" | cut -d ' ' -f 1)
if command -v "$COMMAND" >/dev/null; then
tmpdir=$(mktemp -d)
mkfifo "$tmpdir/backup-data"
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 &
# shellcheck disable=SC2086
/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
echo "Invalid command $COMMAND" >&2
exit 2
fi
fi