You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by je...@apache.org on 2018/03/08 18:32:16 UTC

[geode] branch develop updated: GEODE-4755: Use a more portable File permission API (#1573)

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

jensdeppe pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/develop by this push:
     new d62173a  GEODE-4755: Use a more portable File permission API (#1573)
d62173a is described below

commit d62173a1b8be41dbe22a79ce4fe9faa6cea30565
Author: Jens Deppe <jd...@pivotal.io>
AuthorDate: Thu Mar 8 10:32:13 2018 -0800

    GEODE-4755: Use a more portable File permission API (#1573)
    
    - This lets jar deployment work on Windows
    - Unify creation of temporary staging directory
---
 .../internal/ClusterConfigurationService.java           | 11 ++---------
 .../internal/cache/ClusterConfigurationLoader.java      | 11 ++---------
 .../geode/management/internal/beans/FileUploader.java   | 17 +++++++++++------
 .../internal/cli/functions/DeployFunction.java          | 13 ++-----------
 .../web/controllers/AbstractCommandsController.java     | 12 ++----------
 5 files changed, 19 insertions(+), 45 deletions(-)

diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterConfigurationService.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterConfigurationService.java
index 8592f49..c81ca54 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterConfigurationService.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterConfigurationService.java
@@ -31,8 +31,6 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.nio.file.StandardCopyOption;
-import java.nio.file.attribute.PosixFilePermission;
-import java.nio.file.attribute.PosixFilePermissions;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -75,7 +73,6 @@ import org.apache.geode.cache.execute.ResultCollector;
 import org.apache.geode.distributed.DistributedLockService;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.DistributedSystem;
-import org.apache.geode.distributed.LockServiceDestroyedException;
 import org.apache.geode.distributed.internal.locks.DLockService;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.InternalRegionArguments;
@@ -84,6 +81,7 @@ import org.apache.geode.internal.cache.persistence.PersistentMemberManager;
 import org.apache.geode.internal.cache.persistence.PersistentMemberPattern;
 import org.apache.geode.internal.cache.xmlcache.CacheXmlGenerator;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.management.internal.beans.FileUploader;
 import org.apache.geode.management.internal.cli.CliUtil;
 import org.apache.geode.management.internal.configuration.callbacks.ConfigurationChangeListener;
 import org.apache.geode.management.internal.configuration.domain.Configuration;
@@ -435,12 +433,7 @@ public class ClusterConfigurationService {
     List<RemoteInputStream> result = rc.getResult();
     RemoteInputStream jarStream = result.get(0);
 
-    Set<PosixFilePermission> perms = new HashSet<>();
-    perms.add(PosixFilePermission.OWNER_READ);
-    perms.add(PosixFilePermission.OWNER_WRITE);
-    perms.add(PosixFilePermission.OWNER_EXECUTE);
-    Path tempDir =
-        Files.createTempDirectory("deploy-", PosixFilePermissions.asFileAttribute(perms));
+    Path tempDir = FileUploader.createSecuredTempDirectory("deploy-");
     Path tempJar = Paths.get(tempDir.toString(), jarName);
     FileOutputStream fos = new FileOutputStream(tempJar.toString());
     InputStream input = RemoteInputStreamClient.wrap(jarStream);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/ClusterConfigurationLoader.java b/geode-core/src/main/java/org/apache/geode/internal/cache/ClusterConfigurationLoader.java
index 7ec52aa..95520ad 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/ClusterConfigurationLoader.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/ClusterConfigurationLoader.java
@@ -23,11 +23,8 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.UnknownHostException;
-import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.nio.file.attribute.PosixFilePermission;
-import java.nio.file.attribute.PosixFilePermissions;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -63,6 +60,7 @@ import org.apache.geode.internal.DeployedJar;
 import org.apache.geode.internal.JarDeployer;
 import org.apache.geode.internal.config.ClusterConfigurationNotAvailableException;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.management.internal.beans.FileUploader;
 import org.apache.geode.management.internal.cli.CliUtil;
 import org.apache.geode.management.internal.configuration.domain.Configuration;
 import org.apache.geode.management.internal.configuration.functions.DownloadJarFunction;
@@ -141,12 +139,7 @@ public class ClusterConfigurationLoader {
     List<RemoteInputStream> result = rc.getResult();
     RemoteInputStream jarStream = result.get(0);
 
-    Set<PosixFilePermission> perms = new HashSet<>();
-    perms.add(PosixFilePermission.OWNER_READ);
-    perms.add(PosixFilePermission.OWNER_WRITE);
-    perms.add(PosixFilePermission.OWNER_EXECUTE);
-    Path tempDir =
-        Files.createTempDirectory("deploy-", PosixFilePermissions.asFileAttribute(perms));
+    Path tempDir = FileUploader.createSecuredTempDirectory("deploy-");
     Path tempJar = Paths.get(tempDir.toString(), jarName);
     FileOutputStream fos = new FileOutputStream(tempJar.toString());
 
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/beans/FileUploader.java b/geode-core/src/main/java/org/apache/geode/management/internal/beans/FileUploader.java
index bee1589..e8a9f3d 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/beans/FileUploader.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/beans/FileUploader.java
@@ -20,6 +20,7 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.Serializable;
+import java.nio.file.FileSystems;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -69,12 +70,7 @@ public class FileUploader implements FileUploaderMBean {
 
   @Override
   public RemoteFile uploadFile(String filename) throws IOException {
-    Set<PosixFilePermission> perms = new HashSet<>();
-    perms.add(PosixFilePermission.OWNER_READ);
-    perms.add(PosixFilePermission.OWNER_WRITE);
-    perms.add(PosixFilePermission.OWNER_EXECUTE);
-    Path tempDir =
-        Files.createTempDirectory(STAGED_DIR_PREFIX, PosixFilePermissions.asFileAttribute(perms));
+    Path tempDir = createSecuredTempDirectory(STAGED_DIR_PREFIX);
 
     File stagedFile = new File(tempDir.toString(), filename);
     BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(stagedFile));
@@ -117,4 +113,13 @@ public class FileUploader implements FileUploaderMBean {
       FileUtils.deleteQuietly(parent);
     }
   }
+
+  public static Path createSecuredTempDirectory(String prefix) throws IOException {
+    Path tempDir = Files.createTempDirectory(prefix);
+    tempDir.toFile().setExecutable(true, true);
+    tempDir.toFile().setWritable(true, true);
+    tempDir.toFile().setReadable(true, true);
+
+    return tempDir;
+  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DeployFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DeployFunction.java
index e169c87..a48ec01 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DeployFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DeployFunction.java
@@ -18,17 +18,12 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.nio.file.attribute.PosixFilePermission;
-import java.nio.file.attribute.PosixFilePermissions;
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import com.healthmarketscience.rmiio.RemoteInputStream;
 import com.healthmarketscience.rmiio.RemoteInputStreamClient;
@@ -45,6 +40,7 @@ import org.apache.geode.internal.DeployedJar;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.management.internal.beans.FileUploader;
 
 public class DeployFunction implements InternalFunction {
   private static final Logger logger = LogService.getLogger();
@@ -154,12 +150,7 @@ public class DeployFunction implements InternalFunction {
     Map<String, File> stagedJars = new HashMap<>();
 
     try {
-      Set<PosixFilePermission> perms = new HashSet<>();
-      perms.add(PosixFilePermission.OWNER_READ);
-      perms.add(PosixFilePermission.OWNER_WRITE);
-      perms.add(PosixFilePermission.OWNER_EXECUTE);
-      Path tempDir =
-          Files.createTempDirectory("deploy-", PosixFilePermissions.asFileAttribute(perms));
+      Path tempDir = FileUploader.createSecuredTempDirectory("deploy-");
 
       for (int i = 0; i < jarNames.size(); i++) {
         Path tempJar = Paths.get(tempDir.toString(), jarNames.get(i));
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/web/controllers/AbstractCommandsController.java b/geode-core/src/main/java/org/apache/geode/management/internal/web/controllers/AbstractCommandsController.java
index 2959200..bbf85c3 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/web/controllers/AbstractCommandsController.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/web/controllers/AbstractCommandsController.java
@@ -18,16 +18,11 @@ import java.io.File;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.StringWriter;
-import java.nio.file.Files;
 import java.nio.file.Path;
-import java.nio.file.attribute.PosixFilePermission;
-import java.nio.file.attribute.PosixFilePermissions;
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import javax.management.InstanceNotFoundException;
 import javax.management.JMX;
@@ -54,6 +49,7 @@ import org.apache.geode.management.MemberMXBean;
 import org.apache.geode.management.internal.MBeanJMXAdapter;
 import org.apache.geode.management.internal.ManagementAgent;
 import org.apache.geode.management.internal.SystemManagementService;
+import org.apache.geode.management.internal.beans.FileUploader;
 import org.apache.geode.management.internal.cli.shell.Gfsh;
 import org.apache.geode.management.internal.web.controllers.support.LoginHandlerInterceptor;
 import org.apache.geode.management.internal.web.util.UriUtils;
@@ -246,11 +242,7 @@ public abstract class AbstractCommandsController {
     List<String> filePaths = null;
     Path tempDir = null;
     if (multipartFiles != null) {
-      Set<PosixFilePermission> perms = new HashSet<>();
-      perms.add(PosixFilePermission.OWNER_READ);
-      perms.add(PosixFilePermission.OWNER_WRITE);
-      perms.add(PosixFilePermission.OWNER_EXECUTE);
-      tempDir = Files.createTempDirectory("uploaded-", PosixFilePermissions.asFileAttribute(perms));
+      tempDir = FileUploader.createSecuredTempDirectory("uploaded-");
       // staging the files to local
       filePaths = new ArrayList<>();
       for (MultipartFile multipartFile : multipartFiles) {

-- 
To stop receiving notification emails like this one, please contact
jensdeppe@apache.org.