This is an automated email from the ASF dual-hosted git repository.

vy pushed a commit to branch LOG4J2-2828
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit 52696e7d6b12a7fa86428b18326a13b685191c06
Author: Volkan Yazıcı <volkan.yaz...@gmail.com>
AuthorDate: Wed Jun 17 10:25:14 2020 +0200

    LOG4J2-2828 Retain file permissions after rollover in 
RollingRandomAccessFileAppender.
---
 .../rolling/RollingRandomAccessFileManager.java    |  4 ++
 .../RollingRandomAccessFileManagerTest.java        | 73 ++++++++++++++++++++--
 2 files changed, 73 insertions(+), 4 deletions(-)

diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.java
index ad7df84..7f7bf85 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.java
@@ -22,6 +22,7 @@ import java.io.OutputStream;
 import java.io.RandomAccessFile;
 import java.io.Serializable;
 import java.nio.ByteBuffer;
+import java.nio.file.Paths;
 
 import org.apache.logging.log4j.core.Layout;
 import org.apache.logging.log4j.core.LoggerContext;
@@ -140,6 +141,9 @@ public class RollingRandomAccessFileManager extends 
RollingFileManager {
 
     private void createFileAfterRollover(String fileName) throws IOException {
         this.randomAccessFile = new RandomAccessFile(fileName, "rw");
+        if (isAttributeViewEnabled()) {
+            defineAttributeView(Paths.get(fileName));
+        }
         if (isAppend()) {
             randomAccessFile.seek(randomAccessFile.length());
         }
diff --git 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerTest.java
 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerTest.java
index 8f7f717..c87907a 100644
--- 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerTest.java
+++ 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManagerTest.java
@@ -23,19 +23,25 @@ import static 
org.apache.logging.log4j.hamcrest.FileMatchers.isEmpty;
 import static org.apache.logging.log4j.hamcrest.FileMatchers.lastModified;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.lessThanOrEqualTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.RandomAccessFile;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.attribute.PosixFileAttributeView;
+import java.nio.file.attribute.PosixFilePermission;
+import java.nio.file.attribute.PosixFilePermissions;
+import java.util.Set;
 import java.util.concurrent.locks.LockSupport;
+import java.util.zip.Deflater;
 
+import org.apache.logging.log4j.core.config.DefaultConfiguration;
 import org.apache.logging.log4j.core.util.Closer;
+import org.apache.logging.log4j.core.util.FileUtils;
 import org.apache.logging.log4j.core.util.NullOutputStream;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.Test;
@@ -198,4 +204,63 @@ public class RollingRandomAccessFileManagerTest {
         assertThat(file, lastModified(equalTo(manager.getFileTime())));
     }
 
+    @Test
+    public void testRolloverRetainsFileAttributes() throws Exception {
+
+        // Short-circuit if host doesn't support file attributes.
+        if (!FileUtils.isFilePosixAttributeViewSupported()) {
+            return;
+        }
+
+        // Create the initial file.
+        final File file = File.createTempFile("log4j2", "test");
+        LockSupport.parkNanos(1000000); // 1 millisec
+
+        // Set the initial file attributes.
+        final String filePermissionsString = "rwxrwxrwx";
+        final Set<PosixFilePermission> filePermissions =
+                PosixFilePermissions.fromString(filePermissionsString);
+        FileUtils.defineFilePosixAttributeView(file.toPath(), filePermissions, 
null, null);
+
+        // Create the manager.
+        final RolloverStrategy rolloverStrategy = DefaultRolloverStrategy
+                .newBuilder()
+                .setMax("7")
+                .setMin("1")
+                .setFileIndex("max")
+                .setStopCustomActionsOnError(false)
+                .setConfig(new DefaultConfiguration())
+                .build();
+        final RollingRandomAccessFileManager manager =
+                
RollingRandomAccessFileManager.getRollingRandomAccessFileManager(
+                        file.getAbsolutePath(),
+                        Strings.EMPTY,
+                        true,
+                        true,
+                        RollingRandomAccessFileManager.DEFAULT_BUFFER_SIZE,
+                        new SizeBasedTriggeringPolicy(Long.MAX_VALUE),
+                        rolloverStrategy,
+                        null,
+                        null,
+                        filePermissionsString,
+                        null,
+                        null,
+                        null);
+        assertNotNull(manager);
+        manager.initialize();
+
+        // Trigger a rollover.
+        manager.rollover();
+
+        // Verify the rolled over file attributes.
+        final Set<PosixFilePermission> actualFilePermissions = Files
+                .getFileAttributeView(
+                        Paths.get(manager.getFileName()),
+                        PosixFileAttributeView.class)
+                .readAttributes()
+                .permissions();
+        assertEquals(filePermissions, actualFilePermissions);
+
+    }
+
 }

Reply via email to