X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fping.c;h=66a254d52d9d5ded6fd39dab3d0279523548b0b1;hb=9d9678b9e753ea0936612021f4f87f8092ab4e31;hp=4932bae57e14b8c234a664c5efb03e6e39c1d39e;hpb=da612fa9c6a3343b43789569d64197d7c690be52;p=collectd.git diff --git a/src/ping.c b/src/ping.c index 4932bae5..66a254d5 100644 --- a/src/ping.c +++ b/src/ping.c @@ -28,7 +28,6 @@ #include "common.h" #include "plugin.h" -#include "configfile.h" #include "utils_complain.h" #include @@ -36,6 +35,10 @@ # include /* NI_MAXHOST */ #endif +#ifdef HAVE_SYS_CAPABILITY_H +# include +#endif + #include #ifndef NI_MAXHOST @@ -389,7 +392,7 @@ static int start_thread (void) /* {{{ */ ping_thread_loop = 1; ping_thread_error = 0; status = plugin_thread_create (&ping_thread_id, /* attr = */ NULL, - ping_thread, /* arg = */ (void *) 0); + ping_thread, /* arg = */ (void *) 0, "ping"); if (status != 0) { ping_thread_loop = 0; @@ -448,6 +451,20 @@ static int ping_init (void) /* {{{ */ "Will use a timeout of %gs.", ping_timeout); } +#if defined(HAVE_SYS_CAPABILITY_H) && defined(CAP_NET_RAW) + if (check_capability (CAP_NET_RAW) != 0) + { + if (getuid () == 0) + WARNING ("ping plugin: Running collectd as root, but the CAP_NET_RAW " + "capability is missing. The plugin's read function will probably " + "fail. Is your init system dropping capabilities?"); + else + WARNING ("ping plugin: collectd doesn't have the CAP_NET_RAW capability. " + "If you don't want to run collectd as root, try running \"setcap " + "cap_net_raw=ep\" on the collectd binary."); + } +#endif + return (start_thread ()); } /* }}} int ping_init */ @@ -598,16 +615,11 @@ static int ping_config (const char *key, const char *value) /* {{{ */ static void submit (const char *host, const char *type, /* {{{ */ gauge_t value) { - value_t values[1]; value_list_t vl = VALUE_LIST_INIT; - values[0].gauge = value; - - vl.values = values; + vl.values = &(value_t) { .gauge = value }; vl.values_len = 1; - sstrncpy (vl.host, hostname_g, sizeof (vl.host)); sstrncpy (vl.plugin, "ping", sizeof (vl.plugin)); - sstrncpy (vl.plugin_instance, "", sizeof (vl.plugin_instance)); sstrncpy (vl.type_instance, host, sizeof (vl.type_instance)); sstrncpy (vl.type, type, sizeof (vl.type));