]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
acl-util: several cleanups
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 5 Dec 2022 06:32:32 +0000 (15:32 +0900)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 5 Dec 2022 09:37:58 +0000 (10:37 +0100)
- add missing assertions,
- rename function arguments for storing result,
- rename variables which conflict our macros,
- always initialize function arguments for results on success.

src/shared/acl-util.c
src/shared/acl-util.h

index c6c673984d20672f094539d84063089794757f97..b734ee1e0c97f1d7095fe0ce3e2db6dc51884812 100644 (file)
@@ -90,6 +90,7 @@ int add_base_acls_if_needed(acl_t *acl_p, const char *path) {
         _cleanup_(acl_freep) acl_t basic = NULL;
 
         assert(acl_p);
+        assert(path);
 
         for (r = acl_get_entry(*acl_p, ACL_FIRST_ENTRY, &i);
              r > 0;
@@ -208,12 +209,16 @@ int acl_search_groups(const char *path, char ***ret_groups) {
         return ret;
 }
 
-int parse_acl(const char *text, acl_t *acl_access, acl_t *acl_default, bool want_mask) {
+int parse_acl(const char *text, acl_t *ret_acl_access, acl_t *ret_acl_default, bool want_mask) {
         _cleanup_free_ char **a = NULL, **d = NULL; /* strings are not freed */
         _cleanup_strv_free_ char **split = NULL;
         int r = -EINVAL;
         _cleanup_(acl_freep) acl_t a_acl = NULL, d_acl = NULL;
 
+        assert(text);
+        assert(ret_acl_access);
+        assert(ret_acl_default);
+
         split = strv_split(text, ",");
         if (!split)
                 return -ENOMEM;
@@ -266,8 +271,8 @@ int parse_acl(const char *text, acl_t *acl_access, acl_t *acl_default, bool want
                 }
         }
 
-        *acl_access = TAKE_PTR(a_acl);
-        *acl_default = TAKE_PTR(d_acl);
+        *ret_acl_access = TAKE_PTR(a_acl);
+        *ret_acl_default = TAKE_PTR(d_acl);
 
         return 0;
 }
@@ -322,7 +327,7 @@ static int acl_entry_equal(acl_entry_t a, acl_entry_t b) {
         }
 }
 
-static int find_acl_entry(acl_t acl, acl_entry_t entry, acl_entry_t *out) {
+static int find_acl_entry(acl_t acl, acl_entry_t entry, acl_entry_t *ret) {
         acl_entry_t i;
         int r;
 
@@ -334,36 +339,40 @@ static int find_acl_entry(acl_t acl, acl_entry_t entry, acl_entry_t *out) {
                 if (r < 0)
                         return r;
                 if (r > 0) {
-                        *out = i;
-                        return 1;
+                        if (ret)
+                                *ret = i;
+                        return 0;
                 }
         }
         if (r < 0)
                 return -errno;
-        return 0;
+
+        return -ENOENT;
 }
 
-int acls_for_file(const char *path, acl_type_t type, acl_t new, acl_t *acl) {
-        _cleanup_(acl_freep) acl_t old;
+int acls_for_file(const char *path, acl_type_t type, acl_t acl, acl_t *ret) {
+        _cleanup_(acl_freep) acl_t applied = NULL;
         acl_entry_t i;
         int r;
 
-        old = acl_get_file(path, type);
-        if (!old)
+        assert(path);
+
+        applied = acl_get_file(path, type);
+        if (!applied)
                 return -errno;
 
-        for (r = acl_get_entry(new, ACL_FIRST_ENTRY, &i);
+        for (r = acl_get_entry(acl, ACL_FIRST_ENTRY, &i);
              r > 0;
-             r = acl_get_entry(new, ACL_NEXT_ENTRY, &i)) {
+             r = acl_get_entry(acl, ACL_NEXT_ENTRY, &i)) {
 
                 acl_entry_t j;
 
-                r = find_acl_entry(old, i, &j);
-                if (r < 0)
-                        return r;
-                if (r == 0)
-                        if (acl_create_entry(&old, &j) < 0)
+                r = find_acl_entry(applied, i, &j);
+                if (r == -ENOENT) {
+                        if (acl_create_entry(&applied, &j) < 0)
                                 return -errno;
+                } else if (r < 0)
+                        return r;
 
                 if (acl_copy_entry(j, i) < 0)
                         return -errno;
@@ -371,7 +380,8 @@ int acls_for_file(const char *path, acl_type_t type, acl_t new, acl_t *acl) {
         if (r < 0)
                 return -errno;
 
-        *acl = TAKE_PTR(old);
+        if (ret)
+                *ret = TAKE_PTR(applied);
 
         return 0;
 }
index 03595c665152ba5e6936a13be08ef752af7c8cde..d3a341fbe612f4062f5d8750e92fb2f40c106905 100644 (file)
@@ -15,8 +15,8 @@ int acl_find_uid(acl_t acl, uid_t uid, acl_entry_t *entry);
 int calc_acl_mask_if_needed(acl_t *acl_p);
 int add_base_acls_if_needed(acl_t *acl_p, const char *path);
 int acl_search_groups(const char* path, char ***ret_groups);
-int parse_acl(const char *text, acl_t *acl_access, acl_t *acl_default, bool want_mask);
-int acls_for_file(const char *path, acl_type_t type, acl_t new, acl_t *acl);
+int parse_acl(const char *text, acl_t *ret_acl_access, acl_t *ret_acl_default, bool want_mask);
+int acls_for_file(const char *path, acl_type_t type, acl_t new, acl_t *ret);
 int fd_add_uid_acl_permission(int fd, uid_t uid, unsigned mask);
 
 /* acl_free takes multiple argument types.