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:09:42 UTC
svn commit: r1336214 - in /karaf/cellar/branches/cellar-2.2.x/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:09:41 2012
New Revision: 1336214
URL: http://svn.apache.org/viewvc?rev=1336214&view=rev
Log:
[KARAF-1429] Check if URL/bundle ID are allowed outbound in cluster:obr* commands
Modified:
karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrUrlSynchronizer.java
karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrAddUrlCommand.java
karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrCommandSupport.java
karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrDeployCommand.java
karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrRemoveUrlCommand.java
karaf/cellar/branches/cellar-2.2.x/obr/src/main/resources/OSGI-INF/blueprint/shell-commands.xml
Modified: karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrUrlSynchronizer.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrUrlSynchronizer.java?rev=1336214&r1=1336213&r2=1336214&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrUrlSynchronizer.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/ObrUrlSynchronizer.java Wed May 9 14:09:41 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;
@@ -95,15 +96,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/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrAddUrlCommand.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrAddUrlCommand.java?rev=1336214&r1=1336213&r2=1336214&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrAddUrlCommand.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrAddUrlCommand.java Wed May 9 14:09:41 2012
@@ -21,6 +21,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,6 +53,12 @@ public class ObrAddUrlCommand extends Ob
return null;
}
+ // 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);
Modified: karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrCommandSupport.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrCommandSupport.java?rev=1336214&r1=1336213&r2=1336214&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrCommandSupport.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrCommandSupport.java Wed May 9 14:09:41 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/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrDeployCommand.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrDeployCommand.java?rev=1336214&r1=1336213&r2=1336214&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrDeployCommand.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrDeployCommand.java Wed May 9 14:09:41 2012
@@ -28,7 +28,7 @@ import org.apache.karaf.cellar.obr.ObrBu
import java.util.Set;
@Command(scope = "cluster", name = "obr-deploy", description = "Deploy a bundle from the OBR assigned to a cluster group.")
-public class ObrDeployCommand extends CellarCommandSupport {
+public class ObrDeployCommand extends ObrCommandSupport {
@Argument(index = 0, name = "group", description = "The cluster group name.", required = true, multiValued = false)
String groupName;
@@ -42,7 +42,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) {
@@ -56,6 +56,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;
+ }
+
// create an event and produce it
int type = 0;
if (start) type = Constants.BUNDLE_START_EVENT_TYPE;
Modified: karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrRemoveUrlCommand.java
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrRemoveUrlCommand.java?rev=1336214&r1=1336213&r2=1336214&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrRemoveUrlCommand.java (original)
+++ karaf/cellar/branches/cellar-2.2.x/obr/src/main/java/org/apache/karaf/cellar/obr/shell/ObrRemoveUrlCommand.java Wed May 9 14:09:41 2012
@@ -21,6 +21,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,6 +53,12 @@ public class ObrRemoveUrlCommand extends
return null;
}
+ // 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);
@@ -71,6 +78,7 @@ public class ObrRemoveUrlCommand extends
ObrUrlEvent event = new ObrUrlEvent(url, Constants.URL_REMOVE_EVENT_TYPE);
event.setSourceGroup(group);
eventProducer.produce(event);
+
return null;
}
Modified: karaf/cellar/branches/cellar-2.2.x/obr/src/main/resources/OSGI-INF/blueprint/shell-commands.xml
URL: http://svn.apache.org/viewvc/karaf/cellar/branches/cellar-2.2.x/obr/src/main/resources/OSGI-INF/blueprint/shell-commands.xml?rev=1336214&r1=1336213&r2=1336214&view=diff
==============================================================================
--- karaf/cellar/branches/cellar-2.2.x/obr/src/main/resources/OSGI-INF/blueprint/shell-commands.xml (original)
+++ karaf/cellar/branches/cellar-2.2.x/obr/src/main/resources/OSGI-INF/blueprint/shell-commands.xml Wed May 9 14:09:41 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"/>