]> gitweb.michael.orlitzky.com - apply-default-acl.git/commitdiff
Rename inherit_default_acl() to assign_default_acl().
authorMichael Orlitzky <michael@orlitzky.com>
Fri, 23 Feb 2018 16:15:22 +0000 (11:15 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Fri, 23 Feb 2018 16:15:22 +0000 (11:15 -0500)
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

index b89a732d9251556357dc9d52396aa657af80e15d..a4961957b7487fa10591f87e93ee54f41d3d2d31 100644 (file)
@@ -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;