You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2012/05/09 19:55:33 UTC

svn commit: r1336317 - in /karaf/cellar/trunk: bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/ management/ management/src/main/java/org/apache/karaf/cellar/management/internal/ management/src/main/resources/OSGI-INF/blueprint/

Author: jbonofre
Date: Wed May  9 17:55:32 2012
New Revision: 1336317

URL: http://svn.apache.org/viewvc?rev=1336317&view=rev
Log:
[KARAF-1429] Check is the bundle location is allowed outbound in the CellarBundleMBean

Modified:
    karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/InstallBundleCommand.java
    karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StartBundleCommand.java
    karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StopBundleCommand.java
    karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/UninstallBundleCommand.java
    karaf/cellar/trunk/management/pom.xml
    karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarBundleMBeanImpl.java
    karaf/cellar/trunk/management/src/main/resources/OSGI-INF/blueprint/blueprint.xml

Modified: karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/InstallBundleCommand.java
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/InstallBundleCommand.java?rev=1336317&r1=1336316&r2=1336317&view=diff
==============================================================================
--- karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/InstallBundleCommand.java (original)
+++ karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/InstallBundleCommand.java Wed May  9 17:55:32 2012
@@ -101,7 +101,7 @@ public class InstallBundleCommand extend
                 event.setSourceGroup(group);
                 eventProducer.produce(event);
             } else {
-                System.err.println("Bundle from " + url + " is blocked outbound");
+                System.err.println("Bundle location " + url + " is blocked outbound");
             }
         }
 

Modified: karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StartBundleCommand.java
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StartBundleCommand.java?rev=1336317&r1=1336316&r2=1336317&view=diff
==============================================================================
--- karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StartBundleCommand.java (original)
+++ karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StartBundleCommand.java Wed May  9 17:55:32 2012
@@ -77,7 +77,7 @@ public class StartBundleCommand extends 
             support.setGroupManager(this.groupManager);
             support.setConfigurationAdmin(this.configurationAdmin);
             if (!support.isAllowed(group, Constants.CATEGORY, location, EventType.OUTBOUND)) {
-                System.err.println("Bundle on " + location + " is blocked outbound");
+                System.err.println("Bundle location " + location + " is blocked outbound");
                 return null;
             }
 

Modified: karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StopBundleCommand.java
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StopBundleCommand.java?rev=1336317&r1=1336316&r2=1336317&view=diff
==============================================================================
--- karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StopBundleCommand.java (original)
+++ karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/StopBundleCommand.java Wed May  9 17:55:32 2012
@@ -78,7 +78,7 @@ public class StopBundleCommand extends C
             support.setGroupManager(this.groupManager);
             support.setConfigurationAdmin(this.configurationAdmin);
             if (!support.isAllowed(group, Constants.CATEGORY, location, EventType.OUTBOUND)) {
-                System.err.println("Bundle on " + location + " is blocked outbound");
+                System.err.println("Bundle location " + location + " is blocked outbound");
                 return null;
             }
 

Modified: karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/UninstallBundleCommand.java
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/UninstallBundleCommand.java?rev=1336317&r1=1336316&r2=1336317&view=diff
==============================================================================
--- karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/UninstallBundleCommand.java (original)
+++ karaf/cellar/trunk/bundle/src/main/java/org/apache/karaf/cellar/bundle/shell/UninstallBundleCommand.java Wed May  9 17:55:32 2012
@@ -77,7 +77,7 @@ public class UninstallBundleCommand exte
             support.setGroupManager(this.groupManager);
             support.setConfigurationAdmin(this.configurationAdmin);
             if (!support.isAllowed(group, Constants.CATEGORY, location, EventType.OUTBOUND)) {
-                System.err.println("Bundle on " + location + " is blocked outbound");
+                System.err.println("Bundle location " + location + " is blocked outbound");
                 return null;
             }
 

Modified: karaf/cellar/trunk/management/pom.xml
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/management/pom.xml?rev=1336317&r1=1336316&r2=1336317&view=diff
==============================================================================
--- karaf/cellar/trunk/management/pom.xml (original)
+++ karaf/cellar/trunk/management/pom.xml Wed May  9 17:55:32 2012
@@ -43,7 +43,8 @@
             javax.management.openmbean,
             org.apache.karaf.features*;version="[3,4)",
             org.apache.karaf.cellar*;version="${project.version}",
-            org.osgi*
+            org.osgi.service.cm,
+            org.osgi.service.blueprint
         </osgi.import>
         <osgi.private>
             org.apache.karaf.cellar.management.internal

Modified: karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarBundleMBeanImpl.java
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarBundleMBeanImpl.java?rev=1336317&r1=1336316&r2=1336317&view=diff
==============================================================================
--- karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarBundleMBeanImpl.java (original)
+++ karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarBundleMBeanImpl.java Wed May  9 17:55:32 2012
@@ -16,15 +16,14 @@ package org.apache.karaf.cellar.manageme
 import org.apache.karaf.cellar.bundle.BundleState;
 import org.apache.karaf.cellar.bundle.Constants;
 import org.apache.karaf.cellar.bundle.RemoteBundleEvent;
-import org.apache.karaf.cellar.core.ClusterManager;
-import org.apache.karaf.cellar.core.Configurations;
-import org.apache.karaf.cellar.core.Group;
-import org.apache.karaf.cellar.core.GroupManager;
+import org.apache.karaf.cellar.core.*;
 import org.apache.karaf.cellar.core.control.SwitchStatus;
 import org.apache.karaf.cellar.core.event.EventProducer;
 import org.apache.karaf.cellar.core.event.EventTransportFactory;
+import org.apache.karaf.cellar.core.event.EventType;
 import org.apache.karaf.cellar.management.CellarBundleMBean;
 import org.osgi.framework.BundleEvent;
+import org.osgi.service.cm.ConfigurationAdmin;
 
 import javax.management.NotCompliantMBeanException;
 import javax.management.StandardMBean;
@@ -41,6 +40,7 @@ public class CellarBundleMBeanImpl exten
 
     private ClusterManager clusterManager;
     private GroupManager groupManager;
+    private ConfigurationAdmin configurationAdmin;
     private EventProducer eventProducer;
 
     public CellarBundleMBeanImpl() throws NotCompliantMBeanException {
@@ -63,6 +63,14 @@ public class CellarBundleMBeanImpl exten
         this.groupManager = groupManager;
     }
 
+    public ConfigurationAdmin getConfigurationAdmin() {
+        return configurationAdmin;
+    }
+
+    public void setConfigurationAdmin(ConfigurationAdmin configurationAdmin) {
+        this.configurationAdmin = configurationAdmin;
+    }
+
     public EventProducer getEventProducer() {
         return eventProducer;
     }
@@ -83,6 +91,15 @@ public class CellarBundleMBeanImpl exten
             throw new IllegalStateException("Cluster event producer is OFF for this node");
         }
 
+        // check if the bundle location is allowed
+        CellarSupport support = new CellarSupport();
+        support.setClusterManager(this.clusterManager);
+        support.setGroupManager(this.groupManager);
+        support.setConfigurationAdmin(this.configurationAdmin);
+        if (!support.isAllowed(group, Constants.CATEGORY, location, EventType.OUTBOUND)) {
+            throw new IllegalArgumentException("Bundle location " + location + " is blocked outbound");
+        }
+
         // get the name and version in the location MANIFEST
         JarInputStream jarInputStream = new JarInputStream(new URL(location).openStream());
         Manifest manifest = jarInputStream.getManifest();
@@ -126,6 +143,21 @@ public class CellarBundleMBeanImpl exten
         Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
         try {
             Map<String, BundleState> bundles = clusterManager.getMap(Constants.BUNDLE_MAP + Configurations.SEPARATOR + groupName);
+            BundleState state = bundles.get(symbolicName + "/" + version);
+            if (state == null) {
+                throw new IllegalArgumentException("Bundle " + symbolicName + "/" + version + " is not found in cluster group " + groupName);
+            }
+            String location = state.getLocation();
+
+            // check if the bundle location is allowed outbound
+            CellarSupport support = new CellarSupport();
+            support.setClusterManager(this.clusterManager);
+            support.setGroupManager(this.groupManager);
+            support.setConfigurationAdmin(this.configurationAdmin);
+            if (!support.isAllowed(group, Constants.CATEGORY, location, EventType.OUTBOUND)) {
+                throw new IllegalArgumentException("Bundle location " + location + " is blocked outbound");
+            }
+
             bundles.remove(symbolicName + "/" + version);
         } finally {
             Thread.currentThread().setContextClassLoader(originalClassLoader);
@@ -158,6 +190,17 @@ public class CellarBundleMBeanImpl exten
             if (state == null) {
                 throw new IllegalStateException("Bundle " + symbolicName + "/" + version + " not found in cluster group " + groupName);
             }
+            String location = state.getLocation();
+
+            // check if the bundle location is allowed
+            CellarSupport support = new CellarSupport();
+            support.setClusterManager(this.clusterManager);
+            support.setGroupManager(this.groupManager);
+            support.setConfigurationAdmin(this.configurationAdmin);
+            if (!support.isAllowed(group, Constants.CATEGORY, location, EventType.OUTBOUND)) {
+                throw new IllegalArgumentException("Bundle location " + location + " is blocked outbound");
+            }
+
             state.setStatus(BundleEvent.STARTED);
             bundles.put(symbolicName + "/" + version, state);
         } finally {
@@ -191,6 +234,17 @@ public class CellarBundleMBeanImpl exten
             if (state == null) {
                 throw new IllegalStateException("Bundle " + symbolicName + "/" + version + " not found in cluster group " + groupName);
             }
+            String location = state.getLocation();
+
+            // check if the bundle location is allowed
+            CellarSupport support = new CellarSupport();
+            support.setClusterManager(this.clusterManager);
+            support.setGroupManager(this.groupManager);
+            support.setConfigurationAdmin(this.configurationAdmin);
+            if (!support.isAllowed(group, Constants.CATEGORY, location, EventType.OUTBOUND)) {
+                throw new IllegalArgumentException("Bundle location " + location + " is blocked outbound");
+            }
+
             state.setStatus(BundleEvent.STOPPED);
             bundles.put(symbolicName + "/" + version, state);
         } finally {

Modified: karaf/cellar/trunk/management/src/main/resources/OSGI-INF/blueprint/blueprint.xml
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/management/src/main/resources/OSGI-INF/blueprint/blueprint.xml?rev=1336317&r1=1336316&r2=1336317&view=diff
==============================================================================
--- karaf/cellar/trunk/management/src/main/resources/OSGI-INF/blueprint/blueprint.xml (original)
+++ karaf/cellar/trunk/management/src/main/resources/OSGI-INF/blueprint/blueprint.xml Wed May  9 17:55:32 2012
@@ -19,6 +19,11 @@
     <reference id="groupManager" interface="org.apache.karaf.cellar.core.GroupManager"/>
     <reference id="executionContext" interface="org.apache.karaf.cellar.core.command.ExecutionContext"/>
     <reference id="eventProducer" interface="org.apache.karaf.cellar.core.event.EventProducer"/>
+    <reference id="configurationAdmin" interface="org.osgi.service.cm.ConfigurationAdmin"/>
+
+    <reference id="mbeanServer" interface="javax.management.MBeanServer">
+        <reference-listener ref="mbeanRegister" bind-method="registerMBeanServer" unbind-method="unregisterMBeanServer"/>
+    </reference>
 
     <bean id="cellarMBean" class="org.apache.karaf.cellar.management.internal.CellarMBeanImpl">
         <property name="clusterManager" ref="clusterManager"/>
@@ -52,6 +57,7 @@
         <property name="clusterManager" ref="clusterManager"/>
         <property name="groupManager" ref="groupManager"/>
         <property name="eventProducer" ref="eventProducer"/>
+        <property name="configurationAdmin" ref="configurationAdmin"/>
     </bean>
 
     <service ref="cellarMBean" auto-export="interfaces">