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"/>