summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/test-lib.sh28
1 files changed, 27 insertions, 1 deletions
diff --git a/tests/test-lib.sh b/tests/test-lib.sh
index 456a30a24..06087ea29 100644
--- a/tests/test-lib.sh
+++ b/tests/test-lib.sh
@@ -23,6 +23,31 @@ if test $? != 11; then
Exit 77
fi
+# Having an unsearchable directory in PATH causes execve to fail with EACCES
+# when applied to an unresolvable program name, contrary to the desired ENOENT.
+# Avoid the problem by rewriting PATH to exclude unsearchable directories.
+sanitize_path_()
+{
+ local saved_IFS=$IFS
+ IFS=:
+ set - $PATH
+ IFS=$saved_IFS
+
+ local d d1
+ local colon=
+ local new_path=
+ for d in "$@"; do
+ test -z "$d" && d1=. || d1=$d
+ if ls -d "$d1/." > /dev/null 2>&1; then
+ new_path="$new_path$colon$d"
+ colon=':'
+ fi
+ done
+
+ PATH=$new_path
+ export PATH
+}
+
skip_test_()
{
echo "$0: skipping test: $@" | head -1 1>&9
@@ -54,7 +79,6 @@ require_selinux_enforcing_()
|| skip_test_ "This test is useful only with SELinux in Enforcing mode."
}
-
require_openat_support_()
{
# Skip this test if your system has neither the openat-style functions
@@ -396,5 +420,7 @@ else
compare() { cmp "$@"; }
fi
+sanitize_path_
+
# Initialize; all bourne shell scripts end with "Exit $fail".
fail=0