Esempio n. 1
0
const char *capng_capability_to_name(unsigned int capability)
{
	if (!cap_valid(capability))
		return NULL;

	return capng_lookup_number(captab, captab_msgstr.str,
                                   CAP_NG_CAPABILITY_NAMES, capability);
}
Esempio n. 2
0
void
linux_cap_change(int on, ...)
{
  struct __user_cap_header_struct x;
  struct __user_cap_data_struct s[3] = {};

  x.version = _LINUX_CAPABILITY_VERSION_3;
  x.pid = syscall(SYS_gettid);

  if(syscall(SYS_capget, &x, s)) {
    perror("capget");
    exit(1);
  }

  va_list ap;
  va_start(ap, on);

  int cap;
  while((cap = va_arg(ap, int)) != -1) {

    if(!cap_valid(cap)) {
      fprintf(stderr, "cap %d is not valid\n", cap);
      exit(1);
    }

    if(on) {
      s[CAP_TO_INDEX(cap)].effective |= CAP_TO_MASK(cap);
    } else {
      s[CAP_TO_INDEX(cap)].effective &= ~CAP_TO_MASK(cap);
    }
  }

  if(syscall(SYS_capset, &x, s)) {
    perror("capset");
    exit(1);
  }
}
Esempio n. 3
0
int capng_update(capng_act_t action, capng_type_t type, unsigned int capability)
{
	// Before updating, we expect that the data is initialized to something
	if (m.state < CAPNG_INIT)
		return -1;
	if (!cap_valid(capability)) {
		errno = EINVAL;
		return -1;
	}

	if (m.cap_ver == 1) {
		if (CAPNG_EFFECTIVE & type)
			v1_update(action, capability, &m.data.v1.effective);
		if (CAPNG_PERMITTED & type)
			v1_update(action, capability, &m.data.v1.permitted);
		if (CAPNG_INHERITABLE & type)
			v1_update(action, capability, &m.data.v1.inheritable);
	} else {
		int idx;

		if (capability > 31) {
			idx = capability>>5;
			capability %= 32;
		} else