common: _require_command needs to handle parameters

_require_command fails when a parameter based command is passed to
it, such as "xfs_io -F" or "btrfs filesystem defrag" as the command
string does not point at a binary.  Rather than hacking at all the
callers and limiting what we can do with $*_PROGS variables, just
make _require_command handle this case sanely.

Change _require_command to check for one or two variables passed to
it and to fail if none or more than 2 parameters are passed. This
will catch most cases where unquoted parameter-based commands are
passed. Further, for the command variable, the executable we need to
check for is always going to be the first token in the variable.
Hence we can simply ignore everything after the first token for the
purposes of existence and executable checks on the command.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
Dave Chinner
2015-05-04 16:48:05 +10:00
committed by Dave Chinner
parent d5425f4db9
commit 9435b928bf
+14 -2
View File
@@ -1286,10 +1286,22 @@ _require_realtime()
# this test requires that a specified command (executable) exists
# $1 - command, $2 - name for error message
#
# Note: the command string might have parameters, so strip them before checking
# whether it is executable.
_require_command()
{
[ -n "$1" ] && _cmd="$1" || _cmd="$2"
[ -n "$1" -a -x "$1" ] || _notrun "$_cmd utility required, skipped this test"
if [ $# -eq 2 ]; then
_name="$2"
elif [ $# -eq 1 ]; then
_name="$1"
else
_fail "usage: _require_command <command> [<name>]"
fi
_command=`echo "$1" | awk '{ print $1 }'`
if [ ! -x $command ]; then
_notrun "$_name utility required, skipped this test"
fi
}
# this test requires the device to be valid block device