Preserve file permissions in images built by Gradle
This commit copies the file mode along with other attributes when copying files from the source archive to the build container while building an image using the Gradle plugin. This preserves file permissions on any resources included in the source archive. Fixes gh-25915
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2020 the original author or authors.
|
||||
* Copyright 2012-2021 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -80,7 +80,7 @@ public class ZipFileTarArchive implements TarArchive {
|
||||
+ "' is not compatible with buildpacks; ensure jar file is valid and launch script is not enabled");
|
||||
}
|
||||
catch (IOException ex) {
|
||||
throw new IllegalStateException("File is not readable", ex);
|
||||
throw new IllegalStateException("File '" + jarFile + "' is not readable", ex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,6 +99,7 @@ public class ZipFileTarArchive implements TarArchive {
|
||||
tarEntry.setUserId(this.owner.getUid());
|
||||
tarEntry.setGroupId(this.owner.getGid());
|
||||
tarEntry.setModTime(NORMALIZED_MOD_TIME);
|
||||
tarEntry.setMode(zipEntry.getUnixMode());
|
||||
if (!zipEntry.isDirectory()) {
|
||||
tarEntry.setSize(zipEntry.getSize());
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2020 the original author or authors.
|
||||
* Copyright 2012-2021 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -38,6 +38,7 @@ import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException
|
||||
* Tests for {@link ZipFileTarArchive}.
|
||||
*
|
||||
* @author Phillip Webb
|
||||
* @author Scott Frederick
|
||||
*/
|
||||
class ZipFileTarArchiveTests {
|
||||
|
||||
@@ -77,6 +78,7 @@ class ZipFileTarArchiveTests {
|
||||
assertThat(fileEntry.getLongUserId()).isEqualTo(123);
|
||||
assertThat(fileEntry.getLongGroupId()).isEqualTo(456);
|
||||
assertThat(fileEntry.getSize()).isEqualTo(4);
|
||||
assertThat(fileEntry.getMode()).isEqualTo(0755);
|
||||
String fileContent = StreamUtils.copyToString(tarStream, StandardCharsets.UTF_8);
|
||||
assertThat(fileContent).isEqualTo("test");
|
||||
}
|
||||
@@ -88,6 +90,7 @@ class ZipFileTarArchiveTests {
|
||||
zip.putArchiveEntry(dirEntry);
|
||||
zip.closeArchiveEntry();
|
||||
ZipArchiveEntry fileEntry = new ZipArchiveEntry("spring/boot");
|
||||
fileEntry.setUnixMode(0755);
|
||||
zip.putArchiveEntry(fileEntry);
|
||||
zip.write("test".getBytes(StandardCharsets.UTF_8));
|
||||
zip.closeArchiveEntry();
|
||||
|
||||
Reference in New Issue
Block a user