Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1199745

[RFC v6 24/40] richacl: Set the other permissions to the other mask

From Andreas Gruenbacher <andreas.gruenbacher@gmail.com>
Newsgroups linux.kernel
Subject [RFC v6 24/40] richacl: Set the other permissions to the other mask
Date 2015-08-04 14:10 +0200
Message-ID <pTJcG-1D3-89@gated-at.bofh.it> (permalink)
References <pTJ2V-1c2-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Change the acl so that everyone@ is granted the permissions set in the
other mask.

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
---
 fs/richacl_compat.c | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/fs/richacl_compat.c b/fs/richacl_compat.c
index 807372d..76d5ab9 100644
--- a/fs/richacl_compat.c
+++ b/fs/richacl_compat.c
@@ -458,3 +458,38 @@ richacl_set_owner_permissions(struct richacl_alloc *alloc)
 	}
 	return 0;
 }
+
+/**
+ * richacl_set_other_permissions  -  set the other permissions to the other mask
+ *
+ * Change the acl so that everyone@ is granted the permissions set in the other
+ * mask.  This leaves at most one efective everyone@ allow entry at the end of
+ * the acl.
+ */
+static int
+richacl_set_other_permissions(struct richacl_alloc *alloc)
+{
+	struct richacl *acl = alloc->acl;
+	unsigned int x = RICHACE_POSIX_ALWAYS_ALLOWED;
+	unsigned int other_mask = acl->a_other_mask & ~x;
+	struct richace *ace = acl->a_entries + acl->a_count - 1;
+
+	if (!(other_mask &&
+	      (acl->a_flags & RICHACL_WRITE_THROUGH) &&
+	      (acl->a_flags & RICHACL_MASKED)))
+		return 0;
+
+	if (acl->a_count == 0 ||
+	    !richace_is_everyone(ace) ||
+	    richace_is_inherit_only(ace)) {
+		ace++;
+		if (richacl_insert_entry(alloc, &ace))
+			return -1;
+		ace->e_type = RICHACE_ACCESS_ALLOWED_ACE_TYPE;
+		ace->e_flags = RICHACE_SPECIAL_WHO;
+		ace->e_mask = other_mask;
+		ace->e_id.special = RICHACE_EVERYONE_SPECIAL_ID;
+	} else
+		richace_change_mask(alloc, &ace, other_mask);
+	return 0;
+}
-- 
2.5.0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[RFC v6 00/40] Richacls Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:00 +0200
  [RFC v6 25/40] richacl: Isolate the owner and group classes Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:00 +0200
  [RFC v6 33/40] richacl: Add support for unmapped identifiers Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:00 +0200
  [RFC v6 39/40] nfs: Add richacl support Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:00 +0200
  [RFC v6 29/40] nfsd: Use richacls as internal acl representation Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:00 +0200
  [RFC v6 23/40] richacl: Set the owner permissions to the owner mask Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:10 +0200
  [RFC v6 21/40] richacl: Move everyone@ aces down the acl Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:10 +0200
  [RFC v6 31/40] nfsd: Add support for the v4.1 dacl attribute Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:10 +0200
  [RFC v6 14/40] richacl: Create-time inheritance Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:10 +0200
  [RFC v6 19/40] ext4: Add richacl feature flag Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:10 +0200
  [RFC v6 28/40] nfsd: Keep list of acls to dispose of in compoundargs Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:10 +0200
  [RFC v6 26/40] richacl: Apply the file masks to a richacl Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:10 +0200
  [RFC v6 20/40] richacl: acl editing helper functions Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:10 +0200
  [RFC v6 15/40] richacl: Automatic Inheritance Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:10 +0200
  [RFC v6 22/40] richacl: Propagate everyone@ permissions to other aces Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:10 +0200
  [RFC v6 24/40] richacl: Set the other permissions to the other mask Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:10 +0200
  [RFC v6 18/40] ext4: Add richacl support Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:10 +0200
  [RFC v6 11/40] vfs: Cache base_acl objects in inodes Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:10 +0200
  [RFC v6 12/40] vfs: Cache richacl in struct inode Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:10 +0200
  [RFC v6 17/40] vfs: Add richacl permission checking Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:10 +0200
  [RFC v6 27/40] richacl: Create richacl from mode values Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:10 +0200
  [RFC v6 01/40] vfs: Add IS_ACL() and IS_RICHACL() tests Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:20 +0200
  [RFC v6 07/40] richacl: Permission mapping functions Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:20 +0200
  [RFC v6 05/40] vfs: Add permission flags for setting file attributes Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:20 +0200
  [RFC v6 04/40] vfs: Make the inode passed to inode_change_ok non-const Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:20 +0200
  [RFC v6 02/40] vfs: Add MAY_CREATE_FILE and MAY_CREATE_DIR permission flags Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:20 +0200
  [RFC v6 09/40] richacl: Update the file masks in chmod() Andreas Gruenbacher <andreas.gruenbacher@gmail.com> - 2015-08-04 14:20 +0200

csiph-web