You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2019/01/06 10:14:44 UTC

[groovy] branch master updated: GROOVY-8949: Run dependency management call as privileged action(closes #848)

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

sunlan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/master by this push:
     new 9018229  GROOVY-8949: Run dependency management call as privileged action(closes #848)
9018229 is described below

commit 9018229f2adf703e9ac51423b8934aafe62413de
Author: Dimitry Polivaev <dp...@gmx.de>
AuthorDate: Tue Jan 1 15:48:14 2019 +0100

    GROOVY-8949: Run dependency management call as privileged action(closes #848)
---
 src/main/groovy/groovy/grape/Grape.java       | 35 ++++++++++++++++++---------
 src/main/groovy/groovy/grape/GrapeEngine.java |  4 +++
 src/main/groovy/groovy/grape/GrapeIvy.groovy  |  8 +++---
 3 files changed, 30 insertions(+), 17 deletions(-)

diff --git a/src/main/groovy/groovy/grape/Grape.java b/src/main/groovy/groovy/grape/Grape.java
index 0bbe9ee..cfa08ad 100644
--- a/src/main/groovy/groovy/grape/Grape.java
+++ b/src/main/groovy/groovy/grape/Grape.java
@@ -19,6 +19,8 @@
 package groovy.grape;
 
 import java.net.URI;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -152,18 +154,27 @@ public class Grape {
         }
     }
 
-    public static void grab(Map<String, Object> args, Map... dependencies) {
+    public static void grab(final Map<String, Object> args, final Map... dependencies) {
         if (enableGrapes) {
-            GrapeEngine instance = getInstance();
-            if (instance != null) {
-                if (!args.containsKey(AUTO_DOWNLOAD_SETTING)) {
-                    args.put(AUTO_DOWNLOAD_SETTING, enableAutoDownload);
-                }
-                if (!args.containsKey(DISABLE_CHECKSUMS_SETTING)) {
-                    args.put(DISABLE_CHECKSUMS_SETTING, disableChecksums);
+            AccessController.doPrivileged(new PrivilegedAction<Void>() {
+                @Override
+                public Void run() {
+                    GrapeEngine instance = getInstance();
+                    if (instance != null) {
+                        if (!args.containsKey(AUTO_DOWNLOAD_SETTING)) {
+                            args.put(AUTO_DOWNLOAD_SETTING, enableAutoDownload);
+                        }
+                        if (!args.containsKey(DISABLE_CHECKSUMS_SETTING)) {
+                            args.put(DISABLE_CHECKSUMS_SETTING, disableChecksums);
+                        }
+                        if (!args.containsKey(GrapeEngine.CALLEE_DEPTH)) {
+                            args.put(GrapeEngine.CALLEE_DEPTH, GrapeEngine.DEFAULT_CALLEE_DEPTH + 2);
+                        }
+                        instance.grab(args, dependencies);
+                    }
+                    return null;
                 }
-                instance.grab(args, dependencies);
-            }
+            });
         }
     }
 
@@ -185,7 +196,7 @@ public class Grape {
     public static URI[] resolve(Map<String, Object> args, Map... dependencies) {
         return resolve(args, null, dependencies);
     }
-    
+
     public static URI[] resolve(Map<String, Object> args, List depsInfo, Map... dependencies) {
         URI[] uris = null;
         if (enableGrapes) {
@@ -222,7 +233,7 @@ public class Grape {
         }
 
     }
-    
+
     public static void addResolver(Map<String, Object> args) {
         if (enableGrapes) {
             GrapeEngine instance = getInstance();
diff --git a/src/main/groovy/groovy/grape/GrapeEngine.java b/src/main/groovy/groovy/grape/GrapeEngine.java
index d98882f..4465e5a 100644
--- a/src/main/groovy/groovy/grape/GrapeEngine.java
+++ b/src/main/groovy/groovy/grape/GrapeEngine.java
@@ -27,6 +27,10 @@ import java.util.Map;
  */
 public interface GrapeEngine {
 
+    String CALLEE_DEPTH = "calleeDepth";
+
+    int DEFAULT_CALLEE_DEPTH = 3 ;
+
     Object grab(String endorsedModule);
 
     Object grab(Map args);
diff --git a/src/main/groovy/groovy/grape/GrapeIvy.groovy b/src/main/groovy/groovy/grape/GrapeIvy.groovy
index efb8bf7..014bbdd 100644
--- a/src/main/groovy/groovy/grape/GrapeIvy.groovy
+++ b/src/main/groovy/groovy/grape/GrapeIvy.groovy
@@ -64,8 +64,6 @@ import java.util.zip.ZipFile
  */
 class GrapeIvy implements GrapeEngine {
 
-    static final int DEFAULT_DEPTH = 3
-
     private static final String METAINF_PREFIX = 'META-INF/services/'
     private static final String RUNNER_PROVIDER_CONFIG = GroovyRunner.class.getName()
 
@@ -252,7 +250,7 @@ class GrapeIvy implements GrapeEngine {
     @Override
     @CompileStatic
     grab(Map args) {
-        args.calleeDepth = args.calleeDepth?:DEFAULT_DEPTH + 1
+        args.calleeDepth = args.calleeDepth?:DEFAULT_CALLEE_DEPTH + 1
         return grab(args, args)
     }
 
@@ -267,7 +265,7 @@ class GrapeIvy implements GrapeEngine {
             loader = chooseClassLoader(
                 classLoader:args.remove('classLoader'),
                 refObject:args.remove('refObject'),
-                calleeDepth:args.calleeDepth?:DEFAULT_DEPTH,
+                calleeDepth:args.calleeDepth?:DEFAULT_CALLEE_DEPTH,
             )
 
             // check for non-fail null.
@@ -610,7 +608,7 @@ class GrapeIvy implements GrapeEngine {
         ClassLoader loader = chooseClassLoader(
                 classLoader: args.remove('classLoader'),
                 refObject: args.remove('refObject'),
-                calleeDepth: args.calleeDepth ?: DEFAULT_DEPTH,
+                calleeDepth: args.calleeDepth ?: DEFAULT_CALLEE_DEPTH,
         )
 
         // check for non-fail null.