Merge branch 'collectd-5.5' into collectd-5.6
[collectd.git] / src / daemon / common.c
index c6559a8..212d72c 100644 (file)
 # include <arpa/inet.h>
 #endif
 
+#if HAVE_CAPABILITY
+# include <sys/capability.h>
+#endif
+
 #ifdef HAVE_LIBKSTAT
 extern kstat_ctl_t *kc;
 #endif
 
+/* AIX doesn't have MSG_DONTWAIT */
+#ifndef MSG_DONTWAIT
+#  define MSG_DONTWAIT MSG_NONBLOCK
+#endif
+
 #if !HAVE_GETPWNAM_R
 static pthread_mutex_t getpwnam_r_lock = PTHREAD_MUTEX_INITIALIZER;
 #endif
@@ -1120,7 +1129,7 @@ int parse_value (const char *value_orig, value_t *ret_value, int ds_type)
   }
 
   if (value == endptr) {
-    ERROR ("parse_value: Failed to parse string as %s: %s.",
+    ERROR ("parse_value: Failed to parse string as %s: \"%s\".",
         DS_TYPE_TO_STRING (ds_type), value);
     sfree (value);
     return -1;
@@ -1668,3 +1677,26 @@ void strarray_free (char **array, size_t array_len) /* {{{ */
                sfree (array[i]);
        sfree (array);
 } /* }}} void strarray_free */
+
+#if HAVE_CAPABILITY
+int check_capability (int arg) /* {{{ */
+{
+       cap_value_t cap = (cap_value_t) arg;
+
+       if (!CAP_IS_SUPPORTED (cap))
+               return (-1);
+
+       int have_cap = cap_get_bound (cap);
+       if (have_cap != 1)
+               return (-1);
+
+       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.");
+       return (0);
+} /* }}} int check_capability */
+#endif /* HAVE_CAPABILITY */