Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian W. Damus2013-10-29 16:06:50 +0000
committerChristian W. Damus2013-11-01 13:03:01 +0000
commit4ee6acc05f3eeac34032bb81148e6dabac076d58 (patch)
treeb9a565bd6a9000affec178871a18c5fbbba99cde
parent40aaa6c8a48290694cba9d52a9e8c712eb52fcb0 (diff)
downloadcdo-4ee6acc05f3eeac34032bb81148e6dabac076d58.tar.gz
cdo-4ee6acc05f3eeac34032bb81148e6dabac076d58.tar.xz
cdo-4ee6acc05f3eeac34032bb81148e6dabac076d58.zip
[420644] [Security] Multiple repositories in a server share a SecurityManager
https://bugs.eclipse.org/bugs/show_bug.cgi?id=420644 Update SecurityExtension to qualify SecurityManager description in the shared container with the repository name to ensure a unique SecurityManager per repository. This further allows the SecurityManagerFactory to self-initialize the association of the SecurityManager with the repository so that this needs not be set up by the app extension.
-rw-r--r--plugins/org.eclipse.emf.cdo.server.security/src/org/eclipse/emf/cdo/server/internal/security/SecurityExtension.java7
-rw-r--r--plugins/org.eclipse.emf.cdo.server.security/src/org/eclipse/emf/cdo/server/spi/security/SecurityManagerFactory.java14
2 files changed, 15 insertions, 6 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.security/src/org/eclipse/emf/cdo/server/internal/security/SecurityExtension.java b/plugins/org.eclipse.emf.cdo.server.security/src/org/eclipse/emf/cdo/server/internal/security/SecurityExtension.java
index 29c3ba18d0..b33fc7403c 100644
--- a/plugins/org.eclipse.emf.cdo.server.security/src/org/eclipse/emf/cdo/server/internal/security/SecurityExtension.java
+++ b/plugins/org.eclipse.emf.cdo.server.security/src/org/eclipse/emf/cdo/server/internal/security/SecurityExtension.java
@@ -7,11 +7,11 @@
*
* Contributors:
* Eike Stepper - initial API and implementation
+ * Christian W. Damus (CEA LIST) - bug 420644
*/
package org.eclipse.emf.cdo.server.internal.security;
import org.eclipse.emf.cdo.server.internal.security.bundle.OM;
-import org.eclipse.emf.cdo.server.spi.security.InternalSecurityManager;
import org.eclipse.emf.cdo.server.spi.security.SecurityManagerFactory;
import org.eclipse.emf.cdo.spi.server.IAppExtension;
import org.eclipse.emf.cdo.spi.server.InternalRepository;
@@ -109,9 +109,8 @@ public class SecurityExtension implements IAppExtension
description = DEFAULT_REALM_PATH;
}
- InternalSecurityManager securityManager = (InternalSecurityManager)container.getElement(
- SecurityManagerFactory.PRODUCT_GROUP, type, description);
- securityManager.setRepository(repository);
+ String qualifiedDescription = String.format("%s:%s", name, description); //$NON-NLS-1$
+ container.getElement(SecurityManagerFactory.PRODUCT_GROUP, type, qualifiedDescription);
}
}
diff --git a/plugins/org.eclipse.emf.cdo.server.security/src/org/eclipse/emf/cdo/server/spi/security/SecurityManagerFactory.java b/plugins/org.eclipse.emf.cdo.server.security/src/org/eclipse/emf/cdo/server/spi/security/SecurityManagerFactory.java
index 09e9ed3926..3d2bf157ba 100644
--- a/plugins/org.eclipse.emf.cdo.server.security/src/org/eclipse/emf/cdo/server/spi/security/SecurityManagerFactory.java
+++ b/plugins/org.eclipse.emf.cdo.server.security/src/org/eclipse/emf/cdo/server/spi/security/SecurityManagerFactory.java
@@ -7,6 +7,7 @@
*
* Contributors:
* Eike Stepper - initial API and implementation
+ * Christian W. Damus (CEA LIST) - bug 420644
*/
package org.eclipse.emf.cdo.server.spi.security;
@@ -14,6 +15,8 @@ import org.eclipse.emf.cdo.server.internal.security.bundle.OM;
import org.eclipse.emf.cdo.server.security.ISecurityManager;
import org.eclipse.emf.cdo.server.security.SecurityManagerUtil;
import org.eclipse.emf.cdo.server.spi.security.InternalSecurityManager.CommitHandler;
+import org.eclipse.emf.cdo.spi.server.InternalRepository;
+import org.eclipse.emf.cdo.spi.server.RepositoryFactory;
import org.eclipse.net4j.util.StringUtil;
import org.eclipse.net4j.util.container.IManagedContainer;
@@ -67,17 +70,24 @@ public abstract class SecurityManagerFactory extends Factory
public ISecurityManager create(String description) throws ProductCreationException
{
List<String> tokens = StringUtil.split(description, ":", "()");
- String realmPath = tokens.get(0);
+ String repositoryName = tokens.get(0);
+ String realmPath = tokens.get(1);
ISecurityManager securityManager = SecurityManagerUtil.createSecurityManager(realmPath);
- for (int i = 1; i < tokens.size(); i++)
+ for (int i = 2; i < tokens.size(); i++)
{
String token = tokens.get(i);
CommitHandler handler = getHandler(container, token);
((InternalSecurityManager)securityManager).addCommitHandler(handler);
}
+ if (securityManager instanceof InternalSecurityManager)
+ {
+ ((InternalSecurityManager)securityManager).setRepository((InternalRepository)RepositoryFactory.get(container,
+ repositoryName));
+ }
+
return securityManager;
}

Back to the top