/** * Translate posix file permissions to short mode. * * @param permission posix file permission * @return mode for file */ public static short translatePosixPermissionToMode(Set<PosixFilePermission> permission) { int mode = 0; for (PosixFilePermission action : PosixFilePermission.values()) { mode = mode << 1; mode += permission.contains(action) ? 1 : 0; } return (short) mode; }
private static void addPermissions(Set<PosixFilePermission> permissions, String prefix, long mode) { if ((mode & 1) == 1) { permissions.add(PosixFilePermission.valueOf(prefix + "_EXECUTE")); } if ((mode & 2) == 2) { permissions.add(PosixFilePermission.valueOf(prefix + "_WRITE")); } if ((mode & 4) == 4) { permissions.add(PosixFilePermission.valueOf(prefix + "_READ")); } }
/** * 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; }
while (iter.hasNext()) { PosixFilePermission perm = iter.next(); if (perm.toString().equalsIgnoreCase("OWNER_READ")) smak[0] = 'r'; if (perm.toString().equalsIgnoreCase("OWNER_WRITE")) smak[1] = 'w'; if (perm.toString().equalsIgnoreCase("OWNER_EXECUTE")) smak[2] = 'x'; if (perm.toString().equalsIgnoreCase("GROUP_READ")) smak[3] = 'r'; if (perm.toString().equalsIgnoreCase("GROUP_WRITE")) smak[4] = 'w'; if (perm.toString().equalsIgnoreCase("GROUP_EXECUTE")) smak[5] = 'x'; if (perm.toString().equalsIgnoreCase("OTHERS_READ")) smak[6] = 'r'; if (perm.toString().equalsIgnoreCase("OTHERS_WRITE")) smak[7] = 'w'; if (perm.toString().equalsIgnoreCase("OTHERS_EXECUTE")) smak[8] = 'x';
/** {@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; } }
@Restricted(NoExternalUse.class) public static int permissionsToMode(Set<PosixFilePermission> permissions) { PosixFilePermission[] allPermissions = PosixFilePermission.values(); int result = 0; for (int i = 0; i < allPermissions.length; i++) { result <<= 1; result |= permissions.contains(allPermissions[i]) ? 1 : 0; } return result; }
private static long modeFromPermissions(Set<PosixFilePermission> permissions, String prefix) { long mode = 0; if (permissions.contains(PosixFilePermission.valueOf(prefix + "_READ"))) { mode |= 4; } if (permissions.contains(PosixFilePermission.valueOf(prefix + "_WRITE"))) { mode |= 2; } if (permissions.contains(PosixFilePermission.valueOf(prefix + "_EXECUTE"))) { mode |= 1; } return mode; }
static int toMask(Set<PosixFilePermission> permissions) { int mask = 0; for (PosixFilePermission permission : permissions) { mask |= 1 << permission.ordinal(); } return mask; }
@Restricted(NoExternalUse.class) public static Set<PosixFilePermission> modeToPermissions(int mode) throws IOException { // Anything larger is a file type, not a permission. int PERMISSIONS_MASK = 07777; // setgid/setuid/sticky are not supported. int MAX_SUPPORTED_MODE = 0777; mode = mode & PERMISSIONS_MASK; if ((mode & MAX_SUPPORTED_MODE) != mode) { throw new IOException("Invalid mode: " + mode); } PosixFilePermission[] allPermissions = PosixFilePermission.values(); Set<PosixFilePermission> result = EnumSet.noneOf(PosixFilePermission.class); for (int i = 0; i < allPermissions.length; i++) { if ((mode & 1) == 1) { result.add(allPermissions[allPermissions.length - i - 1]); } mode >>= 1; } return result; }
private Set<PosixFilePermission> singleIntToFilePermission(Integer mode, String groupType) { Set<PosixFilePermission> permissions = new HashSet<>(9); if (Arrays.asList(new Integer[] { 1, 3, 5, 7 }).contains(mode)) { permissions.add(PosixFilePermission.valueOf(groupType + "_EXECUTE")); } if (Arrays.asList(new Integer[] { 2, 3, 6, 7 }).contains(mode)) { permissions.add(PosixFilePermission.valueOf(groupType + "_WRITE")); } if (Arrays.asList(new Integer[] { 4, 5, 6, 7 }).contains(mode)) { permissions.add(PosixFilePermission.valueOf(groupType + "_READ")); } return permissions; }
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()];
/** * Translate posix file permissions to short mode. * * @param permission posix file permission * @return mode for file */ public static short translatePosixPermissionToMode(Set<PosixFilePermission> permission) { int mode = 0; for (PosixFilePermission action : PosixFilePermission.values()) { mode = mode << 1; mode += permission.contains(action) ? 1 : 0; } return (short) mode; }
/** * 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; }
public PosixFilePermissionGenerator() { this.values = PosixFilePermission.values(); this.index_gen = new IntegerGenerator(0, this.values.length - 1); }
@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()); } }