Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2021-03-08 17:49:35 +0000
committerEike Stepper2021-03-08 17:49:35 +0000
commitaceb772316af947c580f547d8f136fca5b3cfeec (patch)
tree3eea8b671d6b4a7955013e580eb96d3d48ed94e2 /plugins/org.eclipse.emf.cdo
parent9cd74670d7a52045472c97e4ca46cfab2b64286a (diff)
downloadcdo-aceb772316af947c580f547d8f136fca5b3cfeec.tar.gz
cdo-aceb772316af947c580f547d8f136fca5b3cfeec.tar.xz
cdo-aceb772316af947c580f547d8f136fca5b3cfeec.zip
[571768] Make SecurityManager multitenant
https://bugs.eclipse.org/bugs/show_bug.cgi?id=571768
Diffstat (limited to 'plugins/org.eclipse.emf.cdo')
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSession.java14
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/ObjectProperties.java10
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java13
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/DelegatingSessionProtocol.java10
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/CDOSessionProtocol.java25
5 files changed, 70 insertions, 2 deletions
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSession.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSession.java
index 5b5c530cee..a388f64d4e 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSession.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSession.java
@@ -190,11 +190,25 @@ public interface CDOSession extends CDOCommonSession, CDOUpdatable, CDOTransacti
* @throws UnsupportedOperationException if the session implementation does not permit changing credentials
*
* @since 4.3
+ * @deprecated As of 4.13 use {@link #changeServerPassword()}.
+ *
* @see #getCredentialsProvider()
*/
+ @Deprecated
public void changeCredentials();
/**
+ * Initiates (possibly interactive) changing of credentials for the user logged in in this session.
+ * This is an optional operation of the session.
+ *
+ * @throws UnsupportedOperationException if the session implementation does not permit changing credentials
+ *
+ * @since 4.13
+ * @see #getCredentialsProvider()
+ */
+ public char[] changeServerPassword();
+
+ /**
* @since 4.13
*/
public CDOClob newClob(Reader contents) throws IOException;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/ObjectProperties.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/ObjectProperties.java
index a63efade9d..deebef10ae 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/ObjectProperties.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/ObjectProperties.java
@@ -19,6 +19,7 @@ import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.lock.CDOLockState;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.common.security.CDOPermission;
+import org.eclipse.emf.cdo.common.security.NoPermissionException;
import org.eclipse.emf.cdo.common.util.CDOCommonUtil;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.util.CDOUtil;
@@ -285,7 +286,14 @@ public class ObjectProperties extends Properties<EObject>
@Override
protected Object eval(EObject object)
{
- return !object.eContents().isEmpty();
+ try
+ {
+ return !object.eContents().isEmpty();
+ }
+ catch (NoPermissionException ex)
+ {
+ return false;
+ }
}
});
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java
index 0c7eae4668..d4011ff514 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java
@@ -196,6 +196,8 @@ public abstract class CDOSessionImpl extends CDOTransactionContainerImpl impleme
private String userID;
+ private long openingTime;
+
private long lastUpdateTime;
@ExcludeFromDump
@@ -861,6 +863,17 @@ public abstract class CDOSessionImpl extends CDOTransactionContainerImpl impleme
}
@Override
+ public long getOpeningTime()
+ {
+ return openingTime;
+ }
+
+ public void setOpeningTime(long openingTime)
+ {
+ this.openingTime = openingTime;
+ }
+
+ @Override
public long getLastUpdateTime()
{
synchronized (lastUpdateTimeLock)
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/DelegatingSessionProtocol.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/DelegatingSessionProtocol.java
index 4bf5391876..73747ae75c 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/DelegatingSessionProtocol.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/DelegatingSessionProtocol.java
@@ -75,6 +75,7 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
/**
@@ -1126,14 +1127,21 @@ public class DelegatingSessionProtocol extends Lifecycle implements CDOSessionPr
}
@Override
+ @Deprecated
public void requestChangeCredentials()
{
+ requestChangeServerPassword(null);
+ }
+
+ @Override
+ public void requestChangeServerPassword(AtomicReference<char[]> receiver)
+ {
int attempt = 0;
for (;;)
{
try
{
- delegate.requestChangeCredentials();
+ delegate.requestChangeServerPassword(receiver);
return;
}
catch (Exception ex)
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/CDOSessionProtocol.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/CDOSessionProtocol.java
index 7c79346c43..215891290f 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/CDOSessionProtocol.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/CDOSessionProtocol.java
@@ -76,6 +76,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
/**
* If the meaning of this type isn't clear, there really should be more of a description here...
@@ -330,13 +331,26 @@ public interface CDOSessionProtocol extends CDOProtocol, PackageLoader, BranchLo
* This is an optional session protocol operation.
*
* @since 4.3
+ * @deprecated As of 4.13 use {@link #requestChangeServerPassword(AtomicReference)}.
*
* @throws UnsupportedOperationException if the session protocol implementation does
* not support requesting change of credentials
*/
+ @Deprecated
public void requestChangeCredentials();
/**
+ * Requests that the server initiate the change-credentials protocol.
+ * This is an optional session protocol operation.
+ *
+ * @since 4.13
+ *
+ * @throws UnsupportedOperationException if the session protocol implementation does
+ * not support requesting change of credentials
+ */
+ public void requestChangeServerPassword(AtomicReference<char[]> receiver);
+
+ /**
* Requests that the server initiate the reset-credentials protocol.
* This is an optional session protocol operation.
*
@@ -383,6 +397,8 @@ public interface CDOSessionProtocol extends CDOProtocol, PackageLoader, BranchLo
private long lastUpdateTime;
+ private long openingTime;
+
private int tagModCount;
private RepositoryTimeResult repositoryTimeResult;
@@ -430,6 +446,7 @@ public interface CDOSessionProtocol extends CDOProtocol, PackageLoader, BranchLo
repositoryCreationTime = in.readXLong();
lastUpdateTime = in.readXLong();
+ openingTime = in.readXLong();
tagModCount = in.readXInt();
rootResourceID = in.readCDOID();
authenticating = in.readBoolean();
@@ -638,6 +655,14 @@ public interface CDOSessionProtocol extends CDOProtocol, PackageLoader, BranchLo
}
/**
+ * @since 4.13
+ */
+ public long getOpeningTime()
+ {
+ return openingTime;
+ }
+
+ /**
* @since 3.0
*/
public long getLastUpdateTime()

Back to the top