chiark / gitweb /
capability: add new ambient_capabilities_supported() helper
authorLennart Poettering <lennart@poettering.net>
Wed, 9 Aug 2017 13:07:15 +0000 (15:07 +0200)
committerSven Eden <yamakuzure@gmx.net>
Mon, 25 Sep 2017 12:31:22 +0000 (14:31 +0200)
This new function reports whether ambient caps are available, and should
be quick because the result is cached.

src/basic/capability-util.c

index 952bcc2d7d434782c987031a0d7e7d56ea54aee5..9900eafd5075536e34f8e11217c9d815bc6e8ea6 100644 (file)
@@ -373,3 +373,18 @@ int drop_capability(cap_value_t cv) {
         return 0;
 }
 #endif // 0
+
+bool ambient_capabilities_supported(void) {
+        static int cache = -1;
+
+        if (cache >= 0)
+                return cache;
+
+        /* If PR_CAP_AMBIENT returns something valid, or an unexpected error code we assume that ambient caps are
+         * available. */
+
+        cache = prctl(PR_CAP_AMBIENT, PR_CAP_AMBIENT_IS_SET, CAP_KILL, 0, 0) >= 0 ||
+                !IN_SET(errno, EINVAL, EOPNOTSUPP, ENOSYS);
+
+        return cache;
+}