/** * Convert POSIX attributes to property map. * * @param attrs Attributes view. * @return IGFS properties map. */ public static Map<String, String> posixAttributesToMap(PosixFileAttributes attrs) { if (attrs == null) return null; Map<String, String> props = U.newHashMap(3); props.put(IgfsUtils.PROP_USER_NAME, attrs.owner().getName()); props.put(IgfsUtils.PROP_GROUP_NAME, attrs.group().getName()); int perm = 0; for(PosixFilePermission p : attrs.permissions()) perm |= (1 << 8 - p.ordinal()); props.put(IgfsUtils.PROP_PERMISSION, '0' + Integer.toOctalString(perm)); return props; }
/** {@inheritDoc} */ @Override public String permissions(String path) throws IOException { Path p = path(path); PosixFileAttributeView attrView = Files.getFileAttributeView(p, PosixFileAttributeView.class); if (attrView == null) throw new UnsupportedOperationException("Posix file attributes not available"); int perm = 0; for(PosixFilePermission pfp : attrView.readAttributes().permissions()) perm |= (1 << 8 - pfp.ordinal()); return '0' + Integer.toOctalString(perm); }
public static int posixToIntMode(Set<PosixFilePermission> perms) { int mask = 0; for (PosixFilePermission perm : perms) { mask |= 1 << (PERMISSIONS_LENGTH - perm.ordinal() - 1); } return mask; } }
static int toMask(Set<PosixFilePermission> permissions) { int mask = 0; for (PosixFilePermission permission : permissions) { mask |= 1 << permission.ordinal(); } return mask; }
static Set<PosixFilePermission> toSet(int mask) { Set<PosixFilePermission> set = EnumSet.noneOf(PosixFilePermission.class); for (PosixFilePermission permission : PosixFilePermission.values()) { int flag = 1 << permission.ordinal() & mask; if (flag != 0) { set.add(permission); } } return set; }
int[] bitVals = { 400, 200, 100, 40, 20, 10, 4, 2, 1 }; // Enums are in the usual ugo/rwx order for (PosixFilePermission perm : perms) { umask -= bitVals[perm.ordinal()];
/** * Convert POSIX attributes to property map. * * @param attrs Attributes view. * @return IGFS properties map. */ public static Map<String, String> posixAttributesToMap(PosixFileAttributes attrs) { if (attrs == null) return null; Map<String, String> props = U.newHashMap(3); props.put(IgfsUtils.PROP_USER_NAME, attrs.owner().getName()); props.put(IgfsUtils.PROP_GROUP_NAME, attrs.group().getName()); int perm = 0; for(PosixFilePermission p : attrs.permissions()) perm |= (1 << 8 - p.ordinal()); props.put(IgfsUtils.PROP_PERMISSION, '0' + Integer.toOctalString(perm)); return props; }
@Override public void checkAccess(AccessMode mode) throws AccessDeniedException { UserPrincipal user = this.attributes.getCurrentUser(); PosixFilePermission permission; if (user == this.getOwner()) { permission = this.translateOwnerMode(mode); } else { GroupPrincipal group = this.attributes.getCurrentGroup(); if (group == this.group) { permission = this.translateGroupMode(mode); } else { permission = this.translateOthersMode(mode); } } int flag = 1 << permission.ordinal() & this.permissions; if (flag == 0) { throw new AccessDeniedException(this.path.toString()); } }