capability: add new ambient_capabilities_supported() helper
This new function reports whether ambient caps are available, and should be quick because the result is cached.
This commit is contained in:
parent
6067611a08
commit
39f608e4b0
|
@ -370,3 +370,18 @@ int drop_capability(cap_value_t cv) {
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool ambient_capabilities_supported(void) {
|
||||
static int cache = -1;
|
||||
|
||||
if (cache >= 0)
|
||||
return cache;
|
||||
|
||||
/* If PR_CAP_AMBIENT returns something valid, or an unexpected error code we assume that ambient caps are
|
||||
* available. */
|
||||
|
||||
cache = prctl(PR_CAP_AMBIENT, PR_CAP_AMBIENT_IS_SET, CAP_KILL, 0, 0) >= 0 ||
|
||||
!IN_SET(errno, EINVAL, EOPNOTSUPP, ENOSYS);
|
||||
|
||||
return cache;
|
||||
}
|
||||
|
|
|
@ -55,3 +55,5 @@ static inline bool cap_test_all(uint64_t caps) {
|
|||
m = (UINT64_C(1) << (cap_last_cap() + 1)) - 1;
|
||||
return (caps & m) == m;
|
||||
}
|
||||
|
||||
bool ambient_capabilities_supported(void);
|
||||
|
|
|
@ -205,6 +205,8 @@ int main(int argc, char *argv[]) {
|
|||
log_parse_environment();
|
||||
log_open();
|
||||
|
||||
log_info("have ambient caps: %s", yes_no(ambient_capabilities_supported()));
|
||||
|
||||
if (getuid() != 0)
|
||||
return EXIT_TEST_SKIP;
|
||||
|
||||
|
|
Loading…
Reference in a new issue