diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2014-01-01 04:35:54 +0100 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2014-01-03 01:45:48 +0100 |
commit | 5ce70e5bcd62e89b52485961c3699312ee4a7e0e (patch) | |
tree | 3cfa1d90fb492d5b71a38b4a8d57fe8bc5674416 /src/shared/capability.c | |
parent | build-sys: add --disable-dbus autoconf option (diff) | |
download | systemd-5ce70e5bcd62e89b52485961c3699312ee4a7e0e.tar.xz systemd-5ce70e5bcd62e89b52485961c3699312ee4a7e0e.zip |
Introduce cleanup functions for cap_free
Unfortunately a different cleanup function is necessary per type,
because cap_t** and char** are incompatible with void**.
Diffstat (limited to 'src/shared/capability.c')
-rw-r--r-- | src/shared/capability.c | 24 |
1 files changed, 6 insertions, 18 deletions
diff --git a/src/shared/capability.c b/src/shared/capability.c index 72c671cf84..f8ee1c6838 100644 --- a/src/shared/capability.c +++ b/src/shared/capability.c @@ -37,21 +37,17 @@ #include "fileio.h" int have_effective_cap(int value) { - cap_t cap; + _cleanup_cap_free_ cap_t cap; cap_flag_value_t fv; - int r; cap = cap_get_proc(); if (!cap) return -errno; if (cap_get_flag(cap, value, CAP_EFFECTIVE, &fv) < 0) - r = -errno; + return -errno; else - r = fv == CAP_SET; - - cap_free(cap); - return r; + return fv == CAP_SET; } unsigned long cap_last_cap(void) { @@ -89,7 +85,7 @@ unsigned long cap_last_cap(void) { int capability_bounding_set_drop(uint64_t drop, bool right_now) { unsigned long i; - cap_t after_cap = NULL, temp_cap = NULL; + _cleanup_cap_free_ cap_t after_cap = NULL, temp_cap = NULL; cap_flag_value_t fv; int r; @@ -102,10 +98,8 @@ int capability_bounding_set_drop(uint64_t drop, bool right_now) { if (!after_cap) return -errno; - if (cap_get_flag(after_cap, CAP_SETPCAP, CAP_EFFECTIVE, &fv) < 0) { - cap_free(after_cap); + if (cap_get_flag(after_cap, CAP_SETPCAP, CAP_EFFECTIVE, &fv) < 0) return -errno; - } if (fv != CAP_SET) { static const cap_value_t v = CAP_SETPCAP; @@ -162,13 +156,7 @@ int capability_bounding_set_drop(uint64_t drop, bool right_now) { r = 0; finish: - if (temp_cap) - cap_free(temp_cap); - - if (after_cap) { - cap_set_proc(after_cap); - cap_free(after_cap); - } + cap_set_proc(after_cap); return r; } |