X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fdns.c;h=be6d0dcb4223684e31c62e51a903ae0f853e83ef;hb=e5e5d99350fa54e22f07b90fbc3102df51565ad9;hp=2c3a90436da56e17196bcdde7ed245ac575d03a9;hpb=73a6f82a63747f088352a61e201beac2d185b2ac;p=collectd.git diff --git a/src/dns.c b/src/dns.c index 2c3a9043..be6d0dcb 100644 --- a/src/dns.c +++ b/src/dns.c @@ -25,6 +25,7 @@ #define _BSD_SOURCE #include "collectd.h" + #include "common.h" #include "plugin.h" #include "configfile.h" @@ -34,6 +35,10 @@ #include +#ifdef HAVE_SYS_CAPABILITY_H +# include +#endif + /* * Private data types */ @@ -210,7 +215,7 @@ static int dns_run_pcap_loop (void) { pcap_t *pcap_obj; char pcap_error[PCAP_ERRBUF_SIZE]; - struct bpf_program fp; + struct bpf_program fp = { 0 }; int status; @@ -237,7 +242,6 @@ static int dns_run_pcap_loop (void) return (PCAP_ERROR); } - memset (&fp, 0, sizeof (fp)); status = pcap_compile (pcap_obj, &fp, "udp port 53", 1, 0); if (status < 0) { @@ -347,6 +351,20 @@ static int dns_init (void) listen_thread_init = 1; +#ifdef HAVE_SYS_CAPABILITY_H + if (check_capability (CAP_NET_RAW) != 0) + { + if (getuid () == 0) + WARNING ("dns 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 ("dns 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 (0); } /* int dns_init */ @@ -390,7 +408,6 @@ static int dns_read (void) unsigned int keys[T_MAX]; unsigned int values[T_MAX]; int len; - int i; counter_list_t *ptr; @@ -412,7 +429,7 @@ static int dns_read (void) } pthread_mutex_unlock (&qtype_mutex); - for (i = 0; i < len; i++) + for (int i = 0; i < len; i++) { DEBUG ("dns plugin: qtype = %u; counter = %u;", keys[i], values[i]); submit_derive ("dns_qtype", qtype_str (keys[i]), values[i]); @@ -428,7 +445,7 @@ static int dns_read (void) } pthread_mutex_unlock (&opcode_mutex); - for (i = 0; i < len; i++) + for (int i = 0; i < len; i++) { DEBUG ("dns plugin: opcode = %u; counter = %u;", keys[i], values[i]); submit_derive ("dns_opcode", opcode_str (keys[i]), values[i]); @@ -444,7 +461,7 @@ static int dns_read (void) } pthread_mutex_unlock (&rcode_mutex); - for (i = 0; i < len; i++) + for (int i = 0; i < len; i++) { DEBUG ("dns plugin: rcode = %u; counter = %u;", keys[i], values[i]); submit_derive ("dns_rcode", rcode_str (keys[i]), values[i]);