X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fdaemon%2Fcommon.c;h=d2cc19dad307ce6edd2d63bfa07c219cf1dc237a;hb=c442c66d9e98852f1b8eaa1b816d6ee7f84d0342;hp=02df0968acb3aa03d84b26702d662fdb8ad36c1d;hpb=7aa46a8e912feef20c2bb1e614f2d4e4e1639493;p=collectd.git diff --git a/src/daemon/common.c b/src/daemon/common.c index 02df0968..d2cc19da 100644 --- a/src/daemon/common.c +++ b/src/daemon/common.c @@ -60,7 +60,7 @@ # include #endif -#ifdef HAVE_SYS_CAPABILITY_H +#if HAVE_CAPABILITY # include #endif @@ -1721,51 +1721,25 @@ void strarray_free (char **array, size_t array_len) /* {{{ */ sfree (array); } /* }}} void strarray_free */ -#ifdef HAVE_SYS_CAPABILITY_H -int check_capability (int capability) /* {{{ */ +#if HAVE_CAPABILITY +int check_capability (int arg) /* {{{ */ { -#ifdef _LINUX_CAPABILITY_VERSION_3 - cap_user_header_t cap_header = calloc(1, sizeof (*cap_header)); - if (cap_header == NULL) - { - ERROR("check_capability: calloc failed"); - return (-1); - } + cap_value_t cap = (cap_value_t) arg; - cap_user_data_t cap_data = calloc(1, sizeof (*cap_data)); - if (cap_data == NULL) - { - ERROR("check_capability: calloc failed"); - sfree(cap_header); + if (!CAP_IS_SUPPORTED (cap)) return (-1); - } - cap_header->pid = getpid(); - cap_header->version = _LINUX_CAPABILITY_VERSION_3; - if (capget(cap_header, cap_data) < 0) - { - ERROR("check_capability: capget failed"); - sfree(cap_header); - sfree(cap_data); + int have_cap = cap_get_bound (cap); + if (have_cap != 1) return (-1); - } - if ((cap_data->effective & (1 << capability)) == 0) - { - sfree(cap_header); - sfree(cap_data); - return (-1); - } - else - { - sfree(cap_header); - sfree(cap_data); - return (0); - } + return (0); +} /* }}} int check_capability */ #else +int check_capability (__attribute__((unused)) int arg) /* {{{ */ +{ WARNING ("check_capability: unsupported capability implementation. " - "Some plugin(s) may require elevated privileges to work properly."); + "Some plugin(s) may require elevated privileges to work properly."); return (0); -#endif /* _LINUX_CAPABILITY_VERSION_3 */ } /* }}} int check_capability */ -#endif /* HAVE_SYS_CAPABILITY_H */ +#endif /* HAVE_CAPABILITY */