diff options
author | Christian W. Damus | 2013-10-29 16:06:50 +0000 |
---|---|---|
committer | Christian W. Damus | 2013-11-01 13:03:01 +0000 |
commit | 4ee6acc05f3eeac34032bb81148e6dabac076d58 (patch) | |
tree | b9a565bd6a9000affec178871a18c5fbbba99cde | |
parent | 40aaa6c8a48290694cba9d52a9e8c712eb52fcb0 (diff) | |
download | cdo-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.
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; } |