X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Flvm.c;h=3077c93cc5ee4ff185efb1369bce647fcf117257;hp=63107279be19da94f6754caf7423f2140da29114;hb=54619dc85fd308b21ed09a0271e5c7383c7921b9;hpb=4eca75de34e9c3d7f2391b9c7a5951a27a713804 diff --git a/src/lvm.c b/src/lvm.c index 63107279..3077c93c 100644 --- a/src/lvm.c +++ b/src/lvm.c @@ -21,12 +21,16 @@ * Benjamin Gilbert **/ -#include - #include "collectd.h" -#include "common.h" #include "plugin.h" +#include "utils/common/common.h" + +#include + +#ifdef HAVE_SYS_CAPABILITY_H +#include +#endif /* HAVE_SYS_CAPABILITY_H */ #define NO_VALUE UINT64_MAX #define PERCENT_SCALE_FACTOR 1e-8 @@ -77,7 +81,8 @@ static void report_lv_utilization(lv_t lv, char const *vg_name, return; used_bytes = lv_size * (used_percent_unscaled * PERCENT_SCALE_FACTOR); - snprintf(plugin_instance, sizeof(plugin_instance), "%s-%s", vg_name, lv_name); + ssnprintf(plugin_instance, sizeof(plugin_instance), "%s-%s", vg_name, + lv_name); lvm_submit(plugin_instance, "used", used_bytes); lvm_submit(plugin_instance, "free", lv_size - used_bytes); } @@ -183,6 +188,24 @@ static int lvm_read(void) { return 0; } /*lvm_read */ +static int c_lvm_init(void) { +#if defined(HAVE_SYS_CAPABILITY_H) && defined(CAP_SYS_ADMIN) + if (check_capability(CAP_SYS_ADMIN) != 0) { + if (getuid() == 0) + WARNING("lvm plugin: Running collectd as root, but the " + "CAP_SYS_ADMIN capability is missing. The plugin's read " + "function will probably fail. Is your init system dropping " + "capabilities?"); + else + WARNING("lvm plugin: collectd doesn't have the CAP_SYS_ADMIN " + "capability. If you don't want to run collectd as root, try " + "running \"setcap cap_sys_admin=ep\" on the collectd binary."); + } +#endif + return 0; +} + void module_register(void) { + plugin_register_init("lvm", c_lvm_init); plugin_register_read("lvm", lvm_read); } /* void module_register */