sbin/sysctl: Always honor skip in sysctl_all
Fix broken CTLFLAG_SKIP when present on the first child of the requested node. We don't need to ignore skip for the first node because in sysctl_all() we've implicitly visited the first node already when oid is specified. The first call to show_var() in here is after we have iterated to the next node. When the command line specifically requests a non-node sysctl we go straight into show_var() without calling sysctl_all(). Reported by: jhb Reviewed by: jhb Sponsored by: iXsystems, Inc. Differential Revision: https://reviews.freebsd.org/D27674
This commit is contained in:
parent
0ec2ce0d32
commit
a5ec1dd453
@ -1227,7 +1227,6 @@ sysctl_all(int *oid, int len)
|
||||
int name1[22], name2[22];
|
||||
int i, j;
|
||||
size_t l1, l2;
|
||||
bool honor_skip = false;
|
||||
|
||||
name1[0] = CTL_SYSCTL;
|
||||
name1[1] = (oid != NULL || Nflag || dflag || tflag) ?
|
||||
@ -1258,12 +1257,11 @@ sysctl_all(int *oid, int len)
|
||||
if (memcmp(name2, oid, len * sizeof(int)) != 0)
|
||||
return (0);
|
||||
|
||||
i = show_var(name2, l2, honor_skip);
|
||||
i = show_var(name2, l2, true);
|
||||
if (!i && !bflag)
|
||||
putchar('\n');
|
||||
|
||||
memcpy(name1 + 2, name2, l2 * sizeof(int));
|
||||
l1 = 2 + l2;
|
||||
honor_skip = true;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user