Author: rgodfrey
Date: Mon Nov 24 21:13:31 2014
New Revision: 1641474

URL: http://svn.apache.org/r1641474
Log:
QPID-6242 : Ensure created directory has sufficient permissions to create a 
file for AES key

Modified:
    
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/encryption/AESKeyFileEncrypterFactory.java

Modified: 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/encryption/AESKeyFileEncrypterFactory.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/encryption/AESKeyFileEncrypterFactory.java?rev=1641474&r1=1641473&r2=1641474&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/encryption/AESKeyFileEncrypterFactory.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/encryption/AESKeyFileEncrypterFactory.java
 Mon Nov 24 21:13:31 2014
@@ -26,9 +26,25 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.nio.file.attribute.*;
+import java.nio.file.attribute.AclEntry;
+import java.nio.file.attribute.AclEntryPermission;
+import java.nio.file.attribute.AclEntryType;
+import java.nio.file.attribute.AclFileAttributeView;
+import java.nio.file.attribute.FileAttribute;
+import java.nio.file.attribute.PosixFileAttributeView;
+import java.nio.file.attribute.PosixFilePermission;
+import java.nio.file.attribute.PosixFilePermissions;
+import java.nio.file.attribute.UserPrincipal;
 import java.security.NoSuchAlgorithmException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Set;
 
 import javax.crypto.KeyGenerator;
 import javax.crypto.SecretKey;
@@ -262,7 +278,8 @@ public class AESKeyFileEncrypterFactory 
             final UserPrincipal owner = Files.getOwner(parentFilePath);
             AclFileAttributeView attributeView = 
Files.getFileAttributeView(parentFilePath, AclFileAttributeView.class);
             List<AclEntry> acls = new ArrayList<>(attributeView.getAcl());
-            Iterator<AclEntry> iter = acls.iterator();
+            ListIterator<AclEntry> iter = acls.listIterator();
+            boolean found = false;
             while(iter.hasNext())
             {
                 AclEntry acl = iter.next();
@@ -270,6 +287,23 @@ public class AESKeyFileEncrypterFactory 
                 {
                     iter.remove();
                 }
+                else if(acl.type() == AclEntryType.ALLOW)
+                {
+                    found = true;
+                    AclEntry.Builder builder = AclEntry.newBuilder(acl);
+                    Set<AclEntryPermission> permissions = 
EnumSet.copyOf(acl.permissions());
+                    
permissions.addAll(Arrays.asList(AclEntryPermission.ADD_FILE, 
AclEntryPermission.ADD_SUBDIRECTORY, AclEntryPermission.LIST_DIRECTORY));
+                    builder.setPermissions(permissions);
+                    iter.set(builder.build());
+                }
+            }
+            if(!found)
+            {
+                AclEntry.Builder builder = AclEntry.newBuilder();
+                builder.setPermissions(AclEntryPermission.ADD_FILE, 
AclEntryPermission.ADD_SUBDIRECTORY, AclEntryPermission.LIST_DIRECTORY);
+                builder.setType(AclEntryType.ALLOW);
+                builder.setPrincipal(owner);
+                acls.add(builder.build());
             }
             attributeView.setAcl(acls);
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to