summaryrefslogtreecommitdiffstats
path: root/src/capabilities.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/capabilities.c')
-rw-r--r--src/capabilities.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/capabilities.c b/src/capabilities.c
index e03ffb4..f2410c1 100644
--- a/src/capabilities.c
+++ b/src/capabilities.c
@@ -33,13 +33,23 @@
static void try_cap(fastd_context_t *ctx, cap_value_t cap) {
char *name = cap_to_name(cap);
-
if (!name)
return;
- pr_debug(ctx, "Trying to acquire %s", name);
-
cap_t caps = cap_get_proc();
+ if (!caps)
+ goto end_free;
+
+ cap_flag_value_t val;
+ if (cap_get_flag(caps, cap, CAP_EFFECTIVE, &val) < 0) {
+ pr_debug_errno(ctx, "cap_get_flag");
+ goto end_free;
+ }
+
+ if (val == CAP_SET)
+ goto end_free;
+
+ pr_verbose(ctx, "Trying to acquire %s", name);
if (cap_set_flag(caps, CAP_EFFECTIVE, 1, &cap, CAP_SET) < 0) {
pr_debug_errno(ctx, "cap_set_flags");