in src/native/unix/native/jsvc-unix.c [308:355]
static int set_caps(int cap_type)
{
cap_t c;
int ncap;
int flag = CAP_SET;
cap_value_t *caps;
if (ld_libcap()) {
return set_legacy_caps(cap_type);
}
if (cap_type == CAPS_UID) {
ncap = sizeof(caps_uid) / sizeof(cap_value_t);
caps = caps_uid;
}
else if (cap_type == CAPS_UID_MIN) {
ncap = sizeof(caps_uid_min) / sizeof(cap_value_t);
caps = caps_uid_min;
}
else if (cap_type == CAPS_NO_UID) {
ncap = sizeof(caps_no_uid) / sizeof(cap_value_t);
caps = caps_no_uid;
}
else if (cap_type == CAPS_NO_UID_MIN) {
ncap = sizeof(caps_no_uid_min) / sizeof(cap_value_t);
caps = caps_no_uid_min;
}
else {
ncap = sizeof(caps_no_uid_min) / sizeof(cap_value_t);
caps = caps_no_uid_min;
flag = CAP_CLEAR;
}
c = (*fp_cap_init) ();
(*fp_cap_clear) (c);
(*fp_cap_set_flag) (c, CAP_EFFECTIVE, ncap, caps, flag);
(*fp_cap_set_flag) (c, CAP_INHERITABLE, ncap, caps, flag);
(*fp_cap_set_flag) (c, CAP_PERMITTED, ncap, caps, flag);
if ((*fp_cap_set_proc) (c) != 0) {
return -1;
}
(*fp_cap_free) (c);
if (cap_type == CAPS_UID || cap_type == CAPS_UID_MIN)
log_debug("increased capability set.");
else if (cap_type == CAPS_NO_UID || cap_type == CAPS_NO_UID_MIN)
log_debug("decreased capability set.");
else
log_debug("dropped capabilities.");
return 0;
}