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 16:22:43 UTC

svn commit: r1336222 - in /karaf/cellar/trunk/obr/src/main: java/org/apache/karaf/cellar/obr/ java/org/apache/karaf/cellar/obr/shell/ resources/OSGI-INF/blueprint/

Author: jbonofre
Date: Wed May  9 14:22:42 2012
New Revision: 1336222

URL: http://svn.apache.org/viewvc?rev=1336222&view=rev
Log:
[KARAF-1429] Check if URL/bundle ID are allowed outbound in cluster:obr* commands

Modified:
    karaf/cellar/trunk/obr/src/main/java/org/apache/karaf/cellar/obr/ObrUrlSynchronizer.java
    karaf/cellar/trunk/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrAddUrlCommand.java
    karaf/cellar/trunk/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrCommandSupport.java
    karaf/cellar/trunk/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrDeployCommand.java
    karaf/cellar/trunk/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrRemoveUrlCommand.java
    karaf/cellar/trunk/obr/src/main/resources/OSGI-INF/blueprint/shell-commands.xml

Modified: karaf/cellar/trunk/obr/src/main/java/org/apache/karaf/cellar/obr/ObrUrlSynchronizer.java
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/obr/src/main/java/org/apache/karaf/cellar/obr/ObrUrlSynchronizer.java?rev=1336222&r1=1336221&r2=1336222&view=diff
==============================================================================
--- karaf/cellar/trunk/obr/src/main/java/org/apache/karaf/cellar/obr/ObrUrlSynchronizer.java (original)
+++ karaf/cellar/trunk/obr/src/main/java/org/apache/karaf/cellar/obr/ObrUrlSynchronizer.java Wed May  9 14:22:42 2012
@@ -19,6 +19,7 @@ import org.apache.karaf.cellar.core.Conf
 import org.apache.karaf.cellar.core.Group;
 import org.apache.karaf.cellar.core.Synchronizer;
 import org.apache.karaf.cellar.core.event.EventProducer;
+import org.apache.karaf.cellar.core.event.EventType;
 import org.osgi.service.cm.Configuration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -97,15 +98,19 @@ public class ObrUrlSynchronizer extends 
                 Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
                 Repository[] repositories = obrService.listRepositories();
                 for (Repository repository : repositories) {
-                    urls.add(repository.getURI().toString());
-                    // push the bundles in the OBR distributed set
-                    Set<ObrBundleInfo> bundles = clusterManager.getSet(Constants.BUNDLES_DISTRIBUTED_SET_NAME + Configurations.SEPARATOR + groupName);
-                    Resource[] resources = repository.getResources();
-                    for (Resource resource : resources) {
-                        ObrBundleInfo info = new ObrBundleInfo(resource.getPresentationName(),resource.getSymbolicName(), resource.getVersion().toString());
-                        bundles.add(info);
+                    if (isAllowed(group, Constants.URLS_CONFIG_CATEGORY, repository.getURI().toString(), EventType.OUTBOUND)) {
+                        urls.add(repository.getURI().toString());
+                        // push the bundles in the OBR distributed set
+                        Set<ObrBundleInfo> bundles = clusterManager.getSet(Constants.BUNDLES_DISTRIBUTED_SET_NAME + Configurations.SEPARATOR + groupName);
+                        Resource[] resources = repository.getResources();
+                        for (Resource resource : resources) {
+                            ObrBundleInfo info = new ObrBundleInfo(resource.getPresentationName(), resource.getSymbolicName(), resource.getVersion().toString());
+                            bundles.add(info);
+                            // TODO fire event to the other nodes ?
+                        }
+                    } else {
+                        LOGGER.warn("CELLAR OBR: URL " + repository.getURI().toString() + " is blocked outbound");
                     }
-                    // TODO fire event to the other nodes ?
                 }
             } finally {
                 Thread.currentThread().setContextClassLoader(originalClassLoader);

Modified: karaf/cellar/trunk/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrAddUrlCommand.java
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrAddUrlCommand.java?rev=1336222&r1=1336221&r2=1336222&view=diff
==============================================================================
--- karaf/cellar/trunk/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrAddUrlCommand.java (original)
+++ karaf/cellar/trunk/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrAddUrlCommand.java Wed May  9 14:22:42 2012
@@ -19,6 +19,7 @@ import org.apache.karaf.cellar.core.Conf
 import org.apache.karaf.cellar.core.Group;
 import org.apache.karaf.cellar.core.control.SwitchStatus;
 import org.apache.karaf.cellar.core.event.EventProducer;
+import org.apache.karaf.cellar.core.event.EventType;
 import org.apache.karaf.cellar.obr.Constants;
 import org.apache.karaf.cellar.obr.ObrBundleInfo;
 import org.apache.karaf.cellar.obr.ObrUrlEvent;
@@ -52,7 +53,13 @@ public class ObrAddUrlCommand extends Ob
             return null;
         }
 
-        // push the OBR URLs in the distributed set
+        // check if the URL is allowed
+        if (!isAllowed(group, Constants.URLS_CONFIG_CATEGORY, url, EventType.OUTBOUND)) {
+            System.err.println("OBR URL " + url + " is blocked outbound");
+            return null;
+        }
+
+        // push the OBR URL in the distributed set
         Set<String> urls = clusterManager.getSet(Constants.URLS_DISTRIBUTED_SET_NAME + Configurations.SEPARATOR + groupName);
         urls.add(url);
         // push the bundles in the OBR distributed set

Modified: karaf/cellar/trunk/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrCommandSupport.java
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrCommandSupport.java?rev=1336222&r1=1336221&r2=1336222&view=diff
==============================================================================
--- karaf/cellar/trunk/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrCommandSupport.java (original)
+++ karaf/cellar/trunk/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrCommandSupport.java Wed May  9 14:22:42 2012
@@ -14,6 +14,9 @@
 package org.apache.karaf.cellar.obr.shell;
 
 import org.apache.felix.bundlerepository.RepositoryAdmin;
+import org.apache.karaf.cellar.core.CellarSupport;
+import org.apache.karaf.cellar.core.Group;
+import org.apache.karaf.cellar.core.event.EventType;
 import org.apache.karaf.cellar.core.shell.CellarCommandSupport;
 
 public abstract class ObrCommandSupport extends CellarCommandSupport {
@@ -28,6 +31,14 @@ public abstract class ObrCommandSupport 
         this.obrService = obrService;
     }
 
+    public boolean isAllowed(Group group, String category, String id, EventType type) {
+        CellarSupport support = new CellarSupport();
+        support.setClusterManager(this.clusterManager);
+        support.setGroupManager(this.groupManager);
+        support.setConfigurationAdmin(this.configurationAdmin);
+        return support.isAllowed(group, category, id, type);
+    }
+
     public abstract Object doExecute() throws Exception;
 
 

Modified: karaf/cellar/trunk/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrDeployCommand.java
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrDeployCommand.java?rev=1336222&r1=1336221&r2=1336222&view=diff
==============================================================================
--- karaf/cellar/trunk/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrDeployCommand.java (original)
+++ karaf/cellar/trunk/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrDeployCommand.java Wed May  9 14:22:42 2012
@@ -16,6 +16,7 @@ package org.apache.karaf.cellar.obr.shel
 import org.apache.karaf.cellar.core.Group;
 import org.apache.karaf.cellar.core.control.SwitchStatus;
 import org.apache.karaf.cellar.core.event.EventProducer;
+import org.apache.karaf.cellar.core.event.EventType;
 import org.apache.karaf.cellar.core.shell.CellarCommandSupport;
 import org.apache.karaf.cellar.obr.Constants;
 import org.apache.karaf.cellar.obr.ObrBundleEvent;
@@ -23,8 +24,8 @@ import org.apache.karaf.shell.commands.A
 import org.apache.karaf.shell.commands.Command;
 import org.apache.karaf.shell.commands.Option;
 
-@Command(scope = "cluster", name = "obr-deploy", description = "Deploy a bundle from the OBR on a cluster group.")
-public class ObrDeployCommand extends CellarCommandSupport {
+@Command(scope = "cluster", name = "obr-deploy", description = "Deploy a bundle from the OBR assigned to a cluster group")
+public class ObrDeployCommand extends ObrCommandSupport {
 
     @Argument(index = 0, name = "group", description = "The cluster group name.", required = true, multiValued = false)
     String groupName;
@@ -38,7 +39,7 @@ public class ObrDeployCommand extends Ce
     private EventProducer eventProducer;
 
     @Override
-    protected Object doExecute() throws Exception {
+    public Object doExecute() throws Exception {
         // check if the group exists
         Group group = groupManager.findGroupByName(groupName);
         if (group == null) {
@@ -52,6 +53,12 @@ public class ObrDeployCommand extends Ce
             return null;
         }
 
+        // check if the bundle is allowed
+        if (!isAllowed(group, Constants.BUNDLES_CONFIG_CATEGORY, bundleId, EventType.OUTBOUND)) {
+            System.err.println("OBR bundle " + bundleId + " is blocked outbound");
+            return null;
+        }
+
         // broadcast the cluster event
         int type = 0;
         if (start) type = Constants.BUNDLE_START_EVENT_TYPE;

Modified: karaf/cellar/trunk/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrRemoveUrlCommand.java
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrRemoveUrlCommand.java?rev=1336222&r1=1336221&r2=1336222&view=diff
==============================================================================
--- karaf/cellar/trunk/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrRemoveUrlCommand.java (original)
+++ karaf/cellar/trunk/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrRemoveUrlCommand.java Wed May  9 14:22:42 2012
@@ -19,6 +19,7 @@ import org.apache.karaf.cellar.core.Conf
 import org.apache.karaf.cellar.core.Group;
 import org.apache.karaf.cellar.core.control.SwitchStatus;
 import org.apache.karaf.cellar.core.event.EventProducer;
+import org.apache.karaf.cellar.core.event.EventType;
 import org.apache.karaf.cellar.obr.Constants;
 import org.apache.karaf.cellar.obr.ObrBundleInfo;
 import org.apache.karaf.cellar.obr.ObrUrlEvent;
@@ -52,7 +53,13 @@ public class ObrRemoveUrlCommand extends
             return null;
         }
 
-        // remove URLS_DISTRIBUTED_SET_NAME from the distributed map
+        // check if the URL is allowed
+        if (!isAllowed(group, Constants.URLS_CONFIG_CATEGORY, url, EventType.OUTBOUND)) {
+            System.err.println("OBR URL " + url + " is blocked outbound");
+            return null;
+        }
+
+        // remove URL from the distributed map
         Set<String> urls = clusterManager.getSet(Constants.URLS_DISTRIBUTED_SET_NAME + Configurations.SEPARATOR + groupName);
         urls.remove(url);
         // remove bundles from the distributed map

Modified: karaf/cellar/trunk/obr/src/main/resources/OSGI-INF/blueprint/shell-commands.xml
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/obr/src/main/resources/OSGI-INF/blueprint/shell-commands.xml?rev=1336222&r1=1336221&r2=1336222&view=diff
==============================================================================
--- karaf/cellar/trunk/obr/src/main/resources/OSGI-INF/blueprint/shell-commands.xml (original)
+++ karaf/cellar/trunk/obr/src/main/resources/OSGI-INF/blueprint/shell-commands.xml Wed May  9 14:22:42 2012
@@ -31,6 +31,7 @@
                 <property name="clusterManager" ref="clusterManager"/>
                 <property name="groupManager" ref="groupManager"/>
                 <property name="eventProducer" ref="eventProducer"/>
+                <property name="configurationAdmin" ref="configurationAdmin"/>
             </action>
             <completers>
                 <ref component-id="allGroupCompleter"/>
@@ -53,6 +54,7 @@
                 <property name="groupManager" ref="groupManager"/>
                 <property name="eventProducer" ref="eventProducer"/>
                 <property name="obrService" ref="repositoryAdmin"/>
+                <property name="configurationAdmin" ref="configurationAdmin"/>
             </action>
             <completers>
                 <ref component-id="allGroupCompleter"/>
@@ -65,6 +67,7 @@
                 <property name="groupManager" ref="groupManager"/>
                 <property name="eventProducer" ref="eventProducer"/>
                 <property name="obrService" ref="repositoryAdmin"/>
+                <property name="configurationAdmin" ref="configurationAdmin"/>
             </action>
             <completers>
                 <ref component-id="allGroupCompleter"/>