util-lib: Don't propagate EACCES from find_binary PATH lookup to caller

On one of my test machines, test-path-util was failing because the
find_binary("xxxx-xxxx") was returning -EACCES instead of -ENOENT. This
happens because the PATH entry on that host contains a directory which
the user in question doesn't have access to. Typically applications
ignore permission errors when searching through PATH, for example in
bash:

    $ whoami
    cdown
    $ PATH=/root:/bin type sh
    sh is /bin/sh

This behaviour is present on zsh and other shells as well, though. This
patch brings our PATH search behaviour closer to other major Unix tools.
This commit is contained in:
Chris Down 2019-09-25 17:09:38 +01:00
parent afe42aef39
commit 4e1ddb6612

View file

@ -651,7 +651,9 @@ int find_binary(const char *name, char **ret) {
return 0;
}
last_error = -errno;
/* PATH entries which we don't have access to are ignored, as per tradition. */
if (errno != EACCES)
last_error = -errno;
}
return last_error;