in src/main/java/com/microsoft/azure/datalake/store/acl/AclEntry.java [105:152]
public static AclEntry parseAclEntry(String entryString, boolean removeAcl) throws IllegalArgumentException {
if (entryString == null || entryString.equals("")) return null;
AclEntry aclEntry = new AclEntry();
String aclString = entryString.trim();
// check if this is default ACL
int fColonPos = aclString.indexOf(":");
String firstToken = aclString.substring(0, fColonPos).toLowerCase().trim();
if (firstToken.equals("default")) {
aclEntry.scope = com.microsoft.azure.datalake.store.acl.AclScope.DEFAULT;
aclString = aclString.substring(fColonPos+1);
} else {
aclEntry.scope = com.microsoft.azure.datalake.store.acl.AclScope.ACCESS;
}
// remaining string should have 3 entries (or 2 for removeacl)
String[] parts = aclString.split(":", 5); // without the 5, java discards trailing empty strings
if (parts.length <2 || parts.length >3) throw new IllegalArgumentException("invalid aclEntryString " + entryString);
if (parts.length == 2 && !removeAcl) throw new IllegalArgumentException("invalid aclEntryString " + entryString);
// entry type (user/group/other/mask)
try {
aclEntry.type = AclType.valueOf(parts[0].toUpperCase().trim());
} catch (IllegalArgumentException ex) {
throw new IllegalArgumentException("Invalid ACL AclType in " + entryString);
} catch (NullPointerException ex) {
throw new IllegalArgumentException("ACL Entry AclType missing in " + entryString);
}
// user/group name
aclEntry.name = parts[1].trim();
if (aclEntry.type == AclType.MASK && !aclEntry.name.equals(""))
throw new IllegalArgumentException("mask entry cannot contain user/group name: " + entryString);
if (aclEntry.type == AclType.OTHER && !aclEntry.name.equals(""))
throw new IllegalArgumentException("entry of type 'other' should not contain user/group name: " + entryString);
// permission (rwx)
if (!removeAcl) {
try {
aclEntry.action = AclAction.fromRwx(parts[2]);
} catch (IllegalArgumentException ex) {
throw new IllegalArgumentException("Invalid ACL action in " + entryString);
} catch (NullPointerException ex) {
throw new IllegalArgumentException("ACL action missing in " + entryString);
}
}
return aclEntry;
}