summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 92e19cb)
raw | patch | inline | side by side (parent: 92e19cb)
author | Marc Fournier <marc.fournier@camptocamp.com> | |
Wed, 25 Jan 2017 07:10:48 +0000 (08:10 +0100) | ||
committer | Ruben Kerkhof <ruben@rubenkerkhof.com> | |
Fri, 24 Feb 2017 16:21:58 +0000 (17:21 +0100) |
Related to #2143
contrib/systemd.collectd.service | patch | blob | history | |
src/smart.c | patch | blob | history |
index d0f1bdea9c049a757a2ce2ae06a8f96146994815..7bc15d7c6349bc95dadcc16d0bccdda98d279126 100644 (file)
# exec CAP_SETUID CAP_SETGID
# iptables CAP_NET_ADMIN
# ping CAP_NET_RAW
+# smart CAP_SYS_RAWIO
# turbostat CAP_SYS_RAWIO
#
# Example, if you use the iptables plugin alongside the dns or ping plugin:
diff --git a/src/smart.c b/src/smart.c
index 93bfcbec8aff9cc9314b254a0e821fa585a899c9..5bb6af438ddaab0e90d17a7e965ec6cdc6964ea0 100644 (file)
--- a/src/smart.c
+++ b/src/smart.c
#include <atasmart.h>
#include <libudev.h>
+#ifdef HAVE_SYS_CAPABILITY_H
+#include <sys/capability.h>
+#endif
+
static const char *config_keys[] = {"Disk", "IgnoreSelected", "IgnoreSleepMode",
"UseSerial"};
return (0);
} /* int smart_read */
+static int smart_init(void) {
+#if defined(HAVE_SYS_CAPABILITY_H) && defined(CAP_SYS_RAWIO)
+ if (check_capability(CAP_SYS_RAWIO) != 0) {
+ if (getuid() == 0)
+ WARNING("smart plugin: Running collectd as root, but the "
+ "CAP_SYS_RAWIO capability is missing. The plugin's read "
+ "function will probably fail. Is your init system dropping "
+ "capabilities?");
+ else
+ WARNING("smart plugin: collectd doesn't have the CAP_SYS_RAWIO "
+ "capability. If you don't want to run collectd as root, try "
+ "running \"setcap cap_sys_rawio=ep\" on the collectd binary.");
+ }
+#endif
+ return (0);
+} /* int smart_init */
+
void module_register(void) {
plugin_register_config("smart", smart_config, config_keys, config_keys_num);
+ plugin_register_init("smart", smart_init);
plugin_register_read("smart", smart_read);
} /* void module_register */