Merge branch 'master' of https://code.google.com/p/plexi.fs
diff --git a/src/com/google/enterprise/adaptor/fs/AclBuilder.java b/src/com/google/enterprise/adaptor/fs/AclBuilder.java
index e8db799..28fa5a4 100644
--- a/src/com/google/enterprise/adaptor/fs/AclBuilder.java
+++ b/src/com/google/enterprise/adaptor/fs/AclBuilder.java
@@ -157,7 +157,6 @@
   private boolean hasReadPermission(Set<AclEntryPermission> p) {
     return p.contains(AclEntryPermission.READ_DATA)
         && p.contains(AclEntryPermission.READ_ACL)
-        && p.contains(AclEntryPermission.READ_ATTRIBUTES)
         && p.contains(AclEntryPermission.READ_NAMED_ATTRS);
   }
 
diff --git a/test/com/google/enterprise/adaptor/fs/AclBuilderTest.java b/test/com/google/enterprise/adaptor/fs/AclBuilderTest.java
index b6ea1e2..d789456 100644
--- a/test/com/google/enterprise/adaptor/fs/AclBuilderTest.java
+++ b/test/com/google/enterprise/adaptor/fs/AclBuilderTest.java
@@ -283,6 +283,26 @@
   }
 
   @Test
+  public void testReadAttributesPermNotNeeded() throws Exception {
+    AclFileAttributeView aclView = new AclView(
+        user("joe").type(ALLOW).perms(GENERIC_READ)
+            .flags(FILE_INHERIT, DIRECTORY_INHERIT),
+        user("mike").type(ALLOW)
+            .perms(READ_DATA, READ_ACL, READ_NAMED_ATTRS)
+            .flags(FILE_INHERIT, DIRECTORY_INHERIT));
+    AclBuilder aclBuilder = newBuilder(aclView);
+
+    // This node's ACLs should include both joe and mike.
+    Acl expected = emptyExpectedBuilder()
+        .setPermitUsers(users("joe", "mike")).build();
+    assertEquals(expected, aclBuilder.getAcl().build());
+    assertEquals(expected, 
+        aclBuilder.getInheritableByAllDescendentFoldersAcl().build());
+    assertEquals(expected,
+        aclBuilder.getInheritableByAllDescendentFilesAcl().build());
+  }
+
+  @Test
   public void testWindowsBuiltinUsers() throws Exception {
     ArrayList<AclEntry> entries = Lists.newArrayList();
     // Add all the permitted builtin users.