summaryrefslogtreecommitdiffstats
path: root/src/basic/path-util.c
diff options
context:
space:
mode:
authorChris Down <chris@chrisdown.name>2019-09-25 18:09:38 +0200
committerChris Down <chris@chrisdown.name>2019-09-26 10:19:20 +0200
commit4e1ddb661272ddb2f03d6046369c973657dfdd62 (patch)
treebdf9120a129766893cc85ef4a40d1e3b5772c2e7 /src/basic/path-util.c
parentdhcp4: make IPServiceType configurable (diff)
downloadsystemd-4e1ddb661272ddb2f03d6046369c973657dfdd62.tar.xz
systemd-4e1ddb661272ddb2f03d6046369c973657dfdd62.zip
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.
Diffstat (limited to '')
-rw-r--r--src/basic/path-util.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/basic/path-util.c b/src/basic/path-util.c
index 18c7dabbae..b9544b4bac 100644
--- a/src/basic/path-util.c
+++ b/src/basic/path-util.c
@@ -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;