From f0c1a9ee7c7a6acbfc0c4270f9167022504a6a45 Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Fri, 23 Feb 2018 11:15:22 -0500 Subject: [PATCH] Rename inherit_default_acl() to assign_default_acl(). The inherit_default_acl() function was called with two path names, and the default ACL of the second path was retrieved and applied to the first path. However, the only situation in which the function was used was when the default ACL of the parent path was already available -- so we were wasting time re-retrieving it. This commit changes the name of the function to assign_default_acl(), and it now takes an acl_t as its second parameter rather than a path. The one place it is used now passes it the (already-known) parent's default ACL rather than that parent's path. --- src/apply-default-acl.c | 44 ++++++++++++++++------------------------- 1 file changed, 17 insertions(+), 27 deletions(-) diff --git a/src/apply-default-acl.c b/src/apply-default-acl.c index b89a732..a496195 100644 --- a/src/apply-default-acl.c +++ b/src/apply-default-acl.c @@ -556,59 +556,49 @@ int any_can_execute_or_dir(const char* path) { /** - * @brief Inherit the default ACL from @c parent to @c path. + * @brief Set @c acl as the default ACL on @c path if it's a directory. * - * The @c parent parameter does not necessarily need to be the parent - * of @c path, although that will usually be the case. This overwrites - * any existing default ACL on @c path. - * - * @param parent - * The parent directory whose ACL we want to inherit. + * This overwrites any existing default ACL on @c path. If no default + * ACL exists, then one is created. If @c path is not a directory, we + * return ACL_FAILURE but no error is raised. * * @param path - * The target directory whose ACL we wish to overwrite (or create). + * The target directory whose ACL we wish to replace or create. + * + * @param acl + * The ACL to set as default on @c path. * * @return - * - @c ACL_SUCCESS - The default ACL was inherited successfully. - * - @c ACL_FAILURE - Either @c parent or @c path is not a directory. + * - @c ACL_SUCCESS - The default ACL was assigned successfully. + * - @c ACL_FAILURE - If @c path is not a directory. * - @c ACL_ERROR - Unexpected library error. */ -int inherit_default_acl(const char* path, const char* parent) { - - /* Our return value. */ - int result = ACL_SUCCESS; +int assign_default_acl(const char* path, acl_t acl) { if (path == NULL) { errno = ENOENT; return ACL_ERROR; } - if (!is_directory(path) || !is_directory(parent)) { + if (!is_directory(path)) { return ACL_FAILURE; } - acl_t parent_acl = acl_get_file(parent, ACL_TYPE_DEFAULT); - if (parent_acl == (acl_t)NULL) { - perror("inherit_default_acl (acl_get_file)"); - return ACL_ERROR; - } - - acl_t path_acl = acl_dup(parent_acl); + /* Our return value; success unless something bad happens. */ + int result = ACL_SUCCESS; + acl_t path_acl = acl_dup(acl); if (path_acl == (acl_t)NULL) { perror("inherit_default_acl (acl_dup)"); - acl_free(parent_acl); - return ACL_ERROR; + return ACL_ERROR; /* Nothing to clean up in this case. */ } int sf_result = acl_set_file(path, ACL_TYPE_DEFAULT, path_acl); if (sf_result == -1) { perror("inherit_default_acl (acl_set_file)"); result = ACL_ERROR; - goto cleanup; } - cleanup: acl_free(path_acl); return result; } @@ -786,7 +776,7 @@ int apply_default_acl(const char* path, bool no_exec_mask) { } /* If it's a directory, inherit the parent's default. */ - int inherit_result = inherit_default_acl(path, parent); + int inherit_result = assign_default_acl(path, defacl); if (inherit_result == ACL_ERROR) { perror("apply_default_acl (inherit_acls)"); result = ACL_ERROR; -- 2.43.2