Skip to content
This repository was archived by the owner on Feb 10, 2023. It is now read-only.

Commit 095d712

Browse files
authored
Merge pull request #3 from Statflo/directory-permissions-fix
Directory permissions fix
2 parents b513c8d + 9a292e5 commit 095d712

File tree

3 files changed

+44
-27
lines changed

3 files changed

+44
-27
lines changed

src/main/java/com/upplication/s3fs/util/S3Utils.java

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -87,27 +87,30 @@ public S3BasicFileAttributes getS3FileAttributes(S3Path s3Path) throws NoSuchFil
8787
* @return S3PosixFileAttributes never null
8888
* @throws NoSuchFileException if the Path doesnt exists
8989
*/
90-
public S3PosixFileAttributes getS3PosixFileAttributes(S3Path s3Path) throws NoSuchFileException {
91-
S3ObjectSummary objectSummary = getS3ObjectSummary(s3Path);
92-
93-
String key = s3Path.getKey();
94-
String bucketName = s3Path.getFileStore().name();
95-
96-
S3BasicFileAttributes attrs = toS3FileAttributes(objectSummary, key);
97-
S3UserPrincipal userPrincipal = null;
98-
Set<PosixFilePermission> permissions = null;
99-
100-
if (!attrs.isDirectory()) {
101-
AmazonS3 client = s3Path.getFileSystem().getClient();
102-
AccessControlList acl = client.getObjectAcl(bucketName, key);
103-
Owner owner = acl.getOwner();
104-
105-
userPrincipal = new S3UserPrincipal(owner.getId() + ":" + owner.getDisplayName());
106-
permissions = toPosixFilePermissions(acl.getGrantsAsList());
107-
}
108-
109-
return new S3PosixFileAttributes((String)attrs.fileKey(), attrs.lastModifiedTime(),
110-
attrs.size(), attrs.isDirectory(), attrs.isRegularFile(), userPrincipal, null, permissions);
90+
public S3PosixFileAttributes getS3PosixFileAttributes(final S3Path s3Path) throws NoSuchFileException {
91+
final String key = s3Path.getKey();
92+
final String bucketName = s3Path.getFileStore().name();
93+
final S3ObjectSummary objectSummary = getS3ObjectSummary(s3Path);
94+
final S3BasicFileAttributes attrs = toS3FileAttributes(objectSummary, key);
95+
final AmazonS3 client = s3Path.getFileSystem().getClient();
96+
final AccessControlList acl = (!attrs.isDirectory())
97+
? client.getObjectAcl(bucketName, key)
98+
: client.getBucketAcl(bucketName);
99+
100+
final Owner owner = acl.getOwner();
101+
final Set<PosixFilePermission> permissions = toPosixFilePermissions(acl.getGrantsAsList());
102+
final S3UserPrincipal userPrincipal = new S3UserPrincipal(owner.getId() + ":" + owner.getDisplayName());
103+
104+
return new S3PosixFileAttributes(
105+
(String) attrs.fileKey(),
106+
attrs.lastModifiedTime(),
107+
attrs.size(),
108+
attrs.isDirectory(),
109+
attrs.isRegularFile(),
110+
userPrincipal,
111+
null,
112+
permissions
113+
);
111114
}
112115

113116

@@ -189,4 +192,4 @@ public S3BasicFileAttributes toS3FileAttributes(S3ObjectSummary objectSummary, S
189192
}
190193
return new S3BasicFileAttributes(resolvedKey, lastModifiedTime, size, directory, regularFile);
191194
}
192-
}
195+
}

src/test/java/com/upplication/s3fs/S3UtilsIT.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
import static com.upplication.s3fs.AmazonS3Factory.ACCESS_KEY;
44
import static com.upplication.s3fs.AmazonS3Factory.SECRET_KEY;
55
import static com.upplication.s3fs.util.S3EndpointConstant.S3_GLOBAL_URI_IT;
6+
67
import static org.junit.Assert.assertEquals;
78
import static org.junit.Assert.assertNotNull;
89
import static org.junit.Assert.assertNull;
10+
import static org.junit.Assert.assertTrue;
911

1012
import java.io.ByteArrayInputStream;
1113
import java.io.IOException;
@@ -22,6 +24,7 @@
2224
import org.junit.Before;
2325

2426
import com.github.marschall.memoryfilesystem.MemoryFileSystemBuilder;
27+
import java.nio.file.attribute.PosixFilePermission;
2528
import org.junit.Test;
2629

2730

@@ -229,6 +232,10 @@ public void lookup_S3PosixFileAttributes_when_S3Path_is_file() throws IOExceptio
229232
assertNotNull(result.owner());
230233
assertNull(result.group());
231234
assertNotNull(result.permissions());
235+
236+
assertTrue(result.permissions().contains(PosixFilePermission.OWNER_EXECUTE));
237+
assertTrue(result.permissions().contains(PosixFilePermission.OWNER_WRITE));
238+
assertTrue(result.permissions().contains(PosixFilePermission.OWNER_READ));
232239
}
233240

234241
@Test
@@ -254,9 +261,13 @@ public void lookup_S3PosixFileAttributes_when_S3Path_is_a_directory_and_is_virtu
254261
assertNotNull(result.lastModifiedTime());
255262
assertNotNull(result.size());
256263
// posix
257-
assertNull(result.owner());
264+
assertNotNull(result.owner());
258265
assertNull(result.group());
259-
assertNull(result.permissions());
266+
assertNotNull(result.permissions());
267+
268+
assertTrue(result.permissions().contains(PosixFilePermission.OWNER_EXECUTE));
269+
assertTrue(result.permissions().contains(PosixFilePermission.OWNER_WRITE));
270+
assertTrue(result.permissions().contains(PosixFilePermission.OWNER_READ));
260271
}
261272

262273
@Test
@@ -285,9 +296,13 @@ public void lookup_S3PosixFileAttributes_when_S3Path_is_a_directory_and_is_not_v
285296
assertNotNull(result.lastModifiedTime());
286297
assertNotNull(result.size());
287298
// posix
288-
assertNull(result.owner());
299+
assertNotNull(result.owner());
289300
assertNull(result.group());
290-
assertNull(result.permissions());
301+
assertNotNull(result.permissions());
302+
303+
assertTrue(result.permissions().contains(PosixFilePermission.OWNER_EXECUTE));
304+
assertTrue(result.permissions().contains(PosixFilePermission.OWNER_WRITE));
305+
assertTrue(result.permissions().contains(PosixFilePermission.OWNER_READ));
291306
}
292307

293308
public S3ObjectSummary getS3ObjectSummary(S3Path s3Path) throws NoSuchFileException {

src/test/java/com/upplication/s3fs/S3UtilsTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ public void getS3ObjectSummary() throws IOException {
5252
assertEquals(19, file1ObjectSummary.getSize());
5353
}
5454

55-
5655
@Test(expected = NoSuchFileException.class)
5756
public void getS3ObjectSummary404() throws IOException {
5857
S3Path root = fileSystem.getPath("/bucket");

0 commit comments

Comments
 (0)