You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by gn...@apache.org on 2012/07/25 09:32:48 UTC

svn commit: r1365480 - in /aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container: BlueprintContainerImpl.java BlueprintDomainCombiner.java BlueprintProtectionDomain.java

Author: gnodet
Date: Wed Jul 25 07:32:47 2012
New Revision: 1365480

URL: http://svn.apache.org/viewvc?rev=1365480&view=rev
Log:
[ARIES-838] ClassCircularityError in BlueprintContainerImpl when using a security manager

Added:
    aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintDomainCombiner.java
    aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintProtectionDomain.java
Modified:
    aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java

Modified: aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java?rev=1365480&r1=1365479&r2=1365480&view=diff
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java (original)
+++ aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintContainerImpl.java Wed Jul 25 07:32:47 2012
@@ -23,12 +23,9 @@ import java.net.URI;
 import java.net.URL;
 import java.security.AccessControlContext;
 import java.security.AccessController;
-import java.security.DomainCombiner;
-import java.security.Permission;
 import java.security.PrivilegedAction;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
-import java.security.ProtectionDomain;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -110,6 +107,11 @@ public class BlueprintContainerImpl 
 
     private static final Logger LOGGER = LoggerFactory.getLogger(BlueprintContainerImpl.class);
 
+    private static final Class[] SECURITY_BUGFIX = {
+            BlueprintDomainCombiner.class,
+            BlueprintProtectionDomain.class,
+    };
+    
     private enum State {
         Unknown,
         WaitForNamespaceHandlers,
@@ -164,7 +166,7 @@ public class BlueprintContainerImpl 
         this.executors = executors;
         this.processors = new ArrayList<Processor>();
         if (System.getSecurityManager() != null) {
-            this.accessControlContext = createAccessControlContext();
+            this.accessControlContext = BlueprintDomainCombiner.createAccessControlContext(bundleContext);
         }
         this.proxyManager = proxyManager;
     }
@@ -432,21 +434,6 @@ public class BlueprintContainerImpl 
         }
     }
     
-    private AccessControlContext createAccessControlContext() {
-        return new AccessControlContext(AccessController.getContext(),
-                new DomainCombiner() {               
-                    public ProtectionDomain[] combine(ProtectionDomain[] arg0,
-                                                      ProtectionDomain[] arg1) {                    
-                        return new ProtectionDomain[] { new ProtectionDomain(null, null) {                        
-                            public boolean implies(Permission permission) {                                                           
-                                return bundleContext.getBundle().hasPermission(permission);
-                            }
-                        } 
-                    };
-                }
-        });
-    }
-    
     public AccessControlContext getAccessControlContext() {
         return accessControlContext;
     }

Added: aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintDomainCombiner.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintDomainCombiner.java?rev=1365480&view=auto
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintDomainCombiner.java (added)
+++ aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintDomainCombiner.java Wed Jul 25 07:32:47 2012
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.aries.blueprint.container;
+
+import java.security.AccessControlContext;
+import java.security.AccessController;
+import java.security.DomainCombiner;
+import java.security.ProtectionDomain;
+
+import org.osgi.framework.BundleContext;
+
+public class BlueprintDomainCombiner implements DomainCombiner {
+    private final BundleContext bundleContext;
+
+    public static AccessControlContext createAccessControlContext(BundleContext bundleContext) {
+        return new AccessControlContext(AccessController.getContext(), new BlueprintDomainCombiner(bundleContext));
+    }
+
+    BlueprintDomainCombiner(BundleContext bundleContext) {
+        this.bundleContext = bundleContext;
+    }
+
+    public ProtectionDomain[] combine(ProtectionDomain[] arg0,
+                                      ProtectionDomain[] arg1) {
+        return new ProtectionDomain[] { new BlueprintProtectionDomain(bundleContext) };
+    }
+
+}

Added: aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintProtectionDomain.java
URL: http://svn.apache.org/viewvc/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintProtectionDomain.java?rev=1365480&view=auto
==============================================================================
--- aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintProtectionDomain.java (added)
+++ aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintProtectionDomain.java Wed Jul 25 07:32:47 2012
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.aries.blueprint.container;
+
+import java.security.Permission;
+import java.security.ProtectionDomain;
+
+import org.osgi.framework.BundleContext;
+
+public class BlueprintProtectionDomain extends ProtectionDomain {
+
+    private final BundleContext bundleContext;
+
+    public BlueprintProtectionDomain(BundleContext bundleContext) {
+        super(null, null);
+        this.bundleContext = bundleContext;
+    }
+
+    public boolean implies(Permission permission) {
+        try {
+            return bundleContext.getBundle().hasPermission(permission);
+        } catch (IllegalStateException e) {
+            return false;
+        }
+    }
+}