aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Eßer <se@FreeBSD.org>2022-02-04 22:37:12 +0000
committerStefan Eßer <se@FreeBSD.org>2022-02-04 22:44:34 +0000
commitc454c57163574ace86b49626b06637e93e05d5e6 (patch)
tree41b16be03eea0ff49efc983e79adba5271f3449c
parent7510633e76cf66ceea6a4b27d0892535f73e3ad5 (diff)
downloadsrc-c454c57163574ace86b49626b06637e93e05d5e6.tar.gz
src-c454c57163574ace86b49626b06637e93e05d5e6.zip
whereis: fix fetching of user.cs_path sysctl variable
The current implementation of sysctlbyname() does not support the user sub-tree. This function exits with a return value of 0, but sets the passed string buffer to an empty string. As a result, the whereis program did not use the value of the sysctl variable "user.cs_path", but only the value of the environment variable "PATH". This update makes whereis use the sysctl function with a fixed OID, which already supports the user sub-tree. MFC after: 3 days
-rw-r--r--usr.bin/whereis/whereis.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/usr.bin/whereis/whereis.c b/usr.bin/whereis/whereis.c
index 48426d376181..abf94b7860e2 100644
--- a/usr.bin/whereis/whereis.c
+++ b/usr.bin/whereis/whereis.c
@@ -261,6 +261,7 @@ defaults(void)
DIR *dir;
struct stat sb;
struct dirent *dirp;
+ const int oid[2] = {CTL_USER, USER_CS_PATH};
/* default to -bms if none has been specified */
if (!opt_b && !opt_m && !opt_s)
@@ -269,13 +270,12 @@ defaults(void)
/* -b defaults to default path + /usr/libexec +
* user's path */
if (!bindirs) {
- if (sysctlbyname("user.cs_path", (void *)NULL, &s,
- (void *)NULL, 0) == -1)
- err(EX_OSERR, "sysctlbyname(\"user.cs_path\")");
+ if (sysctl(oid, 2, NULL, &s, NULL, 0) == -1)
+ err(EX_OSERR, "sysctl(\"user.cs_path\")");
if ((b = malloc(s + 1)) == NULL)
abort();
- if (sysctlbyname("user.cs_path", b, &s, (void *)NULL, 0) == -1)
- err(EX_OSERR, "sysctlbyname(\"user.cs_path\")");
+ if (sysctl(oid, 2, b, &s, NULL, 0) == -1)
+ err(EX_OSERR, "sysctl(\"user.cs_path\")");
nele = 0;
decolonify(b, &bindirs, &nele);
bindirs = realloc(bindirs, (nele + 2) * sizeof(char *));