Skip to content

Commit bd2cf77

Browse files
artembilanspring-builds
authored andcommitted
GH-9294: Set permissions to target file on rename
* GH-9294: Set permissions to target file on rename Fixes: #9294 When the `deleteSourceFiles` property of `FileWritingMessageHandler` is `true`, the `chmod` is not set on the target file. * Fix `FileWritingMessageHandler.handleFileMessage()` logic to `setPermissions(resultFile)` after `move` operation * * Set only `OWNER_READ` permission for file in unit test (cherry picked from commit 3e71ea5)
1 parent 89425f0 commit bd2cf77

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

Diff for: spring-integration-file/src/main/java/org/springframework/integration/file/FileWritingMessageHandler.java

+1
Original file line numberDiff line numberDiff line change
@@ -629,6 +629,7 @@ private File handleFileMessage(File sourceFile, File tempFile, File resultFile,
629629

630630
if (!FileExistsMode.APPEND.equals(this.fileExistsMode) && this.deleteSourceFiles) {
631631
rename(sourceFile, resultFile);
632+
setPermissions(resultFile);
632633
return resultFile;
633634
}
634635
else {

Diff for: spring-integration-file/src/test/java/org/springframework/integration/file/FileWritingMessageHandlerTests.java

+19
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
import org.junit.jupiter.api.BeforeEach;
3737
import org.junit.jupiter.api.Disabled;
3838
import org.junit.jupiter.api.Test;
39+
import org.junit.jupiter.api.condition.DisabledOnOs;
40+
import org.junit.jupiter.api.condition.OS;
3941
import org.junit.jupiter.api.io.TempDir;
4042

4143
import org.springframework.beans.DirectFieldAccessor;
@@ -301,6 +303,23 @@ public void deleteFilesTrueWithFilePayload() throws Exception {
301303
assertThat(sourceFile.exists()).isFalse();
302304
}
303305

306+
@Test
307+
@DisabledOnOs(OS.WINDOWS)
308+
public void deleteFilesWithChmod() throws Exception {
309+
QueueChannel output = new QueueChannel();
310+
handler.setDeleteSourceFiles(true);
311+
handler.setOutputChannel(output);
312+
handler.setChmod(0400);
313+
Message<?> message = MessageBuilder.withPayload(sourceFile).build();
314+
handler.handleMessage(message);
315+
Message<?> result = output.receive(0);
316+
assertFileContentIsMatching(result);
317+
File resultFile = messageToFile(result);
318+
Set<PosixFilePermission> posixFilePermissions = Files.getPosixFilePermissions(resultFile.toPath());
319+
assertThat(posixFilePermissions).containsOnly(PosixFilePermission.OWNER_READ);
320+
assertThat(sourceFile.exists()).isFalse();
321+
}
322+
304323
@Test
305324
public void deleteSourceFileWithStringPayloadAndFileInstanceHeader() throws Exception {
306325
QueueChannel output = new QueueChannel();

0 commit comments

Comments
 (0)