@Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof AccessControlList)) { return false; } AccessControlList that = (AccessControlList) o; // If the extended acl object is empty (does not have any extended entries), it is equivalent // to a null object. boolean extendedNull = (mExtendedEntries == null && that.mExtendedEntries == null); boolean extendedNotNull1 = mExtendedEntries != null && (mExtendedEntries.equals(that.mExtendedEntries) || ( !mExtendedEntries.hasExtended() && that.mExtendedEntries == null)); boolean extendedNotNull2 = that.mExtendedEntries != null && (that.mExtendedEntries.equals(mExtendedEntries) || ( !that.mExtendedEntries.hasExtended() && mExtendedEntries == null)); boolean extendedEquals = extendedNull || extendedNotNull1 || extendedNotNull2; return mOwningUser.equals(that.mOwningUser) && mOwningGroup.equals(that.mOwningGroup) && mMode == that.mMode && extendedEquals; }
/** * @param entries the extended acl entries * @return a list of the proto representation of the named group actions */ public static List<Acl.NamedAclActions> getNamedGroupsProto(ExtendedACLEntries entries) { List<Acl.NamedAclActions> actions = new ArrayList<>(entries.getNamedGroupActions().size()); for (Map.Entry<String, AclActions> kv : entries.getNamedGroupActions().entrySet()) { Acl.NamedAclActions namedActions = Acl.NamedAclActions.newBuilder() .setName(kv.getKey()) .setActions(toProto(kv.getValue())) .build(); actions.add(namedActions); } return actions; } }
/** * @param entries the extended acl entries * @return a list of the proto representation of the named users actions */ public static List<Acl.NamedAclActions> getNamedUsersProto(ExtendedACLEntries entries) { List<Acl.NamedAclActions> actions = new ArrayList<>(entries.getNamedUserActions().size()); for (Map.Entry<String, AclActions> kv : entries.getNamedUserActions().entrySet()) { Acl.NamedAclActions namedActions = Acl.NamedAclActions.newBuilder() .setName(kv.getKey()) .setActions(toProto(kv.getValue())) .build(); actions.add(namedActions); } return actions; }
acl.mExtendedEntries = new ExtendedACLEntries(mExtendedEntries); AclActions mask = acl.mExtendedEntries.getMask(); AclActions groupAction = new AclActions(); groupAction.updateByModeBits(defaultMode.getGroupBits());
/** * Returns a list of {@link AclEntry} which represent this ACL instance. The mask will only be * included if extended ACL entries exist. * * @return an immutable list of ACL entries */ public List<AclEntry> getEntries() { ImmutableList.Builder<AclEntry> builder = new ImmutableList.Builder<>(); builder.add(new AclEntry.Builder() .setType(AclEntryType.OWNING_USER) .setSubject(mOwningUser) .setActions(getOwningUserActions()) .build()); builder.add(new AclEntry.Builder() .setType(AclEntryType.OWNING_GROUP) .setSubject(mOwningGroup) .setActions(getOwningGroupActions()) .build()); builder.add(new AclEntry.Builder() .setType(AclEntryType.OTHER) .setActions(getOtherActions()) .build()); if (hasExtended()) { builder.addAll(mExtendedEntries.getEntries()); } return builder.build(); }
AclActions actions = mExtendedEntries.getNamedUser(user); if (actions != null) { AclActions result = new AclActions(actions); AclActions actions = mExtendedEntries.getNamedGroup(group); if (actions != null) { isGroupKnown = true;
case MASK: if (mExtendedEntries == null) { mExtendedEntries = new ExtendedACLEntries(); mExtendedEntries.setEntry(entry); return; case OWNING_USER:
builder.addAllUserActions(getNamedUsersProto(acl.getExtendedEntries())); builder.addAllGroupActions(getNamedGroupsProto(acl.getExtendedEntries())); builder.setMaskActions(toProto(acl.getExtendedEntries().getMask()));
/** * @return true if has extended ACL (named users, named groups) */ public boolean hasExtended() { return mExtendedEntries != null && mExtendedEntries.hasExtended(); }
/** * Removes the specified entry. A base entry is not allowed to be removed. * * @param entry the entry to be removed */ public void removeEntry(AclEntry entry) { switch (entry.getType()) { case NAMED_USER: // fall through case NAMED_GROUP: // fall through case MASK: if (mExtendedEntries != null) { mExtendedEntries.removeEntry(entry); } return; case OWNING_USER: // fall through case OWNING_GROUP: // fall through case OTHER: throw new IllegalStateException( "Deleting base entry is not allowed. entry: " + entry); default: throw new IllegalStateException("Unknown ACL entry type: " + entry.getType()); } }
/** * Creates a child directory's access ACL and default ACL based on the default ACL. * @param umask child's umask * @return child directory's access ACL and default ACL */ public Pair<AccessControlList, DefaultAccessControlList> generateChildDirACL(Short umask) { AccessControlList acl = generateChildFileACL(umask); DefaultAccessControlList dAcl = new DefaultAccessControlList(acl); dAcl.setEmpty(false); dAcl.mOwningUser = mOwningUser; dAcl.mOwningGroup = mOwningGroup; dAcl.mMode = mMode; if (mExtendedEntries == null) { dAcl.mExtendedEntries = null; } else { dAcl.mExtendedEntries = new ExtendedACLEntries(mExtendedEntries); } return new Pair<>(acl, dAcl); }
/** * @param acl the access control list to convert * @return the proto representation of this object */ public static PAcl toProto(AccessControlList acl) { PAcl.Builder pAcl = PAcl.newBuilder(); pAcl.setOwner(acl.getOwningUser()); pAcl.setOwningGroup(acl.getOwningGroup()); pAcl.setMode(acl.getMode()); if (acl.hasExtended()) { for (AclEntry entry : acl.getExtendedEntries().getEntries()) { pAcl.addEntries(toProto(entry)); } } pAcl.setIsDefault(false); return pAcl.build(); }
/** * Removes the specified entry. A base entry is not allowed to be removed. * * @param entry the entry to be removed */ public void removeEntry(AclEntry entry) { switch (entry.getType()) { case NAMED_USER: mNamedUserActions.remove(entry.getSubject()); return; case NAMED_GROUP: mNamedGroupActions.remove(entry.getSubject()); return; case MASK: if (hasExtended()) { throw new IllegalStateException( "Deleting the mask for extended ACLs is not allowed. entry: " + entry); } else { mMaskActions = new AclActions(); } return; case OWNING_USER: // fall through case OWNING_GROUP: // fall through case OTHER: throw new IllegalStateException( "Deleting base entry is not allowed. entry: " + entry); default: throw new IllegalStateException("Unknown ACL entry type: " + entry.getType()); } }
@Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof DefaultAccessControlList)) { return false; } DefaultAccessControlList that = (DefaultAccessControlList) o; // If the extended acl object is empty (does not have any extended entries), it is equivalent // to a null object. boolean extendedNull = (mExtendedEntries == null && that.mExtendedEntries == null); boolean extendedNotNull1 = mExtendedEntries != null && (mExtendedEntries.equals(that.mExtendedEntries) || ( !mExtendedEntries.hasExtended() && that.mExtendedEntries == null)); boolean extendedNotNull2 = that.mExtendedEntries != null && (that.mExtendedEntries.equals(mExtendedEntries) || ( !that.mExtendedEntries.hasExtended() && mExtendedEntries == null)); boolean extendedEquals = extendedNull || extendedNotNull1 || extendedNotNull2; return mOwningUser.equals(that.mOwningUser) && mOwningGroup.equals(that.mOwningGroup) && mMode == that.mMode && extendedEquals && mEmpty == (that.mEmpty); }
.build()); if (hasExtended()) {