mirror of
https://git.FreeBSD.org/src.git
synced 2024-11-24 07:40:52 +00:00
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
This commit is contained in:
parent
7510633e76
commit
c454c57163
@ -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 *));
|
||||
|
Loading…
Reference in New Issue
Block a user