You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ni...@apache.org on 2025/09/24 09:46:04 UTC
(ignite) 02/02: IGNITE-26478 Fix test
This is an automated email from the ASF dual-hosted git repository.
nizhikov pushed a commit to branch IGNITE-25090
in repository https://gitbox.apache.org/repos/asf/ignite.git
commit 8683ec8afa1943c16762eaaa28516a712e836929
Author: Nikolay Izhikov <ni...@apache.org>
AuthorDate: Wed Sep 24 12:45:28 2025 +0300
IGNITE-26478 Fix test
---
.../processors/security/IgniteSecurityAdapter.java | 32 ++++++++++++++++++----
.../sandbox/IgniteOperationsInsideSandboxTest.java | 5 ++++
2 files changed, 32 insertions(+), 5 deletions(-)
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/security/IgniteSecurityAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/security/IgniteSecurityAdapter.java
index 9cf0a67bb40..c9d7aa28acc 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/security/IgniteSecurityAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/security/IgniteSecurityAdapter.java
@@ -19,19 +19,34 @@ package org.apache.ignite.internal.processors.security;
import java.security.CodeSource;
import java.security.ProtectionDomain;
-import java.util.Objects;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
+import org.apache.ignite.binary.BinaryType;
import org.apache.ignite.internal.GridKernalContext;
import org.apache.ignite.internal.processors.GridProcessorAdapter;
+import org.apache.ignite.internal.util.typedef.internal.U;
import static org.apache.ignite.internal.processors.security.SecurityUtils.doPrivileged;
import static org.apache.ignite.internal.processors.security.SecurityUtils.isInIgnitePackage;
/** */
public abstract class IgniteSecurityAdapter extends GridProcessorAdapter implements IgniteSecurity {
- /** Code source for ignite-core module. */
- private static final CodeSource CORE_CODE_SOURCE = SecurityUtils.class.getProtectionDomain().getCodeSource();
+ /** Code sources for ignite modules. */
+ private static final Set<CodeSource> MODULES = new HashSet<>(Arrays.asList(
+ SecurityUtils.class.getProtectionDomain().getCodeSource(), //ignite-core
+ BinaryType.class.getProtectionDomain().getCodeSource() //ignite-binary-api
+ ));
+
+ static {
+ // ignite-binary-impl. Theoretically, can be absent in runtime due to other implementation of binary-api.
+ Class<?> jdkMarshCls = U.classForName("org.apache.ignite.marshaller.jdk.JdkMarshallerImpl", null);
+
+ if (jdkMarshCls != null)
+ MODULES.add(jdkMarshCls.getProtectionDomain().getCodeSource());
+ }
/** System types cache. */
private static final ConcurrentMap<Class<?>, Boolean> SYSTEM_TYPES = new ConcurrentHashMap<>();
@@ -48,8 +63,15 @@ public abstract class IgniteSecurityAdapter extends GridProcessorAdapter impleme
c -> {
ProtectionDomain pd = doPrivileged(c::getProtectionDomain);
- return pd != null
- && Objects.equals(CORE_CODE_SOURCE, pd.getCodeSource())
+ if (pd == null)
+ return false;
+
+ CodeSource cs = pd.getCodeSource();
+
+ if (cs == null)
+ return false;
+
+ return MODULES.contains(cs)
// It allows users create an Uber-JAR that includes both Ignite source code and custom classes
// and to pass mentioned classes to Ignite via public API (e.g. tasks execution).
// Otherwise, Ignite will treat custom classes as internal and block their execution through the
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/security/sandbox/IgniteOperationsInsideSandboxTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/security/sandbox/IgniteOperationsInsideSandboxTest.java
index 9300660d557..f066b51ca7b 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/security/sandbox/IgniteOperationsInsideSandboxTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/security/sandbox/IgniteOperationsInsideSandboxTest.java
@@ -53,6 +53,8 @@ import org.apache.ignite.internal.util.typedef.T2;
import org.apache.ignite.lang.IgniteCallable;
import org.apache.ignite.lang.IgniteClosure;
import org.apache.ignite.lang.IgniteRunnable;
+import org.apache.ignite.marshaller.Marshallers;
+import org.apache.ignite.marshaller.jdk.JdkMarshaller;
import org.apache.ignite.resources.IgniteInstanceResource;
import org.apache.ignite.transactions.Transaction;
import org.jetbrains.annotations.Nullable;
@@ -304,6 +306,9 @@ public class IgniteOperationsInsideSandboxTest extends AbstractSandboxTest {
ignite.cache(TEST_CACHE).put(0, new Object());
BinaryObject obj = (BinaryObject)ignite.cache(TEST_CACHE).withKeepBinary().get(0);
obj.toString();
+
+ JdkMarshaller jdk = Marshallers.jdk();
+ jdk.toString();
}
});
}