/** Guarded by {@link FSNamesystem#readLock()} * @throws AccessControlException * @throws ParentNotDirectoryException * @throws UnresolvedPathException */ private void checkTraverse(INodeAttributes[] inodeAttrs, INode[] inodes, byte[][] components, int last) throws AccessControlException, UnresolvedPathException, ParentNotDirectoryException { for (int i=0; i <= last; i++) { checkIsDirectory(inodes[i], components, i); check(inodeAttrs, components, i, FsAction.EXECUTE); } }
private void check(INode[] inodes, int i, FsAction access ) throws AccessControlException { check(i >= 0? inodes[i]: null, access); }
private void checkTraverse(INode[] inodes, int last ) throws AccessControlException { for(int j = 0; j <= last; j++) { check(inodes[j], FsAction.EXECUTE); } }
private void checkSubAccess(INode inode, FsAction access ) throws AccessControlException { if (inode == null || !inode.isDirectory()) { return; } Stack<INodeDirectory> directories = new Stack<INodeDirectory>(); for(directories.push((INodeDirectory)inode); !directories.isEmpty(); ) { INodeDirectory d = directories.pop(); check(d, access); for(INode child : d.getChildren()) { if (child.isDirectory()) { directories.push((INodeDirectory)child); } } } }