Skip to content

Commit 2aa3961

Browse files
Merge branch 'main' into security-entity-store-permissions
2 parents 6c1d542 + adba420 commit 2aa3961

File tree

151 files changed

+2665
-490
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

151 files changed

+2665
-490
lines changed

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchBuildCompletePlugin.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,13 @@ public void execute(BuildFinishedFlowAction.Parameters parameters) throws FileNo
163163
// So, if you change this such that the artifact will have a slash/directory in it, you'll need to update the logic
164164
// below as well
165165
pb.directory(uploadFileDir);
166-
pb.start().waitFor();
166+
try {
167+
// we are very generious here, as the upload can take
168+
// a long time depending on its size
169+
pb.start().waitFor(30, java.util.concurrent.TimeUnit.MINUTES);
170+
} catch (InterruptedException e) {
171+
System.out.println("Failed to upload buildkite artifact " + e.getMessage());
172+
}
167173

168174
System.out.println("Generating buildscan link for artifact...");
169175

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchTestBasePlugin.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,8 +185,8 @@ public void execute(Task t) {
185185
});
186186

187187
if (OS.current().equals(OS.WINDOWS) && System.getProperty("tests.timeoutSuite") == null) {
188-
// override the suite timeout to 30 mins for windows, because it has the most inefficient filesystem known to man
189-
test.systemProperty("tests.timeoutSuite", "2400000!");
188+
// override the suite timeout to 60 mins for windows, because it has the most inefficient filesystem known to man
189+
test.systemProperty("tests.timeoutSuite", "3600000!");
190190
}
191191

192192
/*

distribution/tools/entitlement-agent/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
### Entitlement Agent
22

3-
This is a java agent that instruments sensitive class library methods with calls into the `entitlement-runtime` module to check for permissions granted under the _entitlements_ system.
3+
This is a java agent that instruments sensitive class library methods with calls into the `entitlement-bridge` module to check for permissions granted under the _entitlements_ system.
44

55
The entitlements system provides an alternative to the legacy `SecurityManager` system, which is deprecated for removal.
66
With this agent, the Elasticsearch server can retain some control over which class library methods can be invoked by which callers.

distribution/tools/entitlement-agent/build.gradle

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,44 @@
77
* License v3.0 only", or the "Server Side Public License, v 1".
88
*/
99

10+
import static java.util.stream.Collectors.joining
11+
1012
apply plugin: 'elasticsearch.build'
13+
apply plugin: 'elasticsearch.embedded-providers'
14+
15+
embeddedProviders {
16+
impl 'entitlement-agent', project(':distribution:tools:entitlement-agent:impl')
17+
}
1118

1219
configurations {
13-
entitlementRuntime
20+
entitlementBridge
1421
}
1522

1623
dependencies {
17-
entitlementRuntime project(":libs:elasticsearch-entitlement-runtime")
18-
implementation project(":libs:elasticsearch-entitlement-runtime")
24+
entitlementBridge project(":distribution:tools:entitlement-bridge")
25+
compileOnly project(":libs:elasticsearch-core")
26+
compileOnly project(":distribution:tools:entitlement-runtime")
1927
testImplementation project(":test:framework")
28+
testImplementation project(":distribution:tools:entitlement-bridge")
29+
testImplementation project(":distribution:tools:entitlement-agent:impl")
2030
}
2131

2232
tasks.named('test').configure {
33+
systemProperty "tests.security.manager", "false"
2334
dependsOn('jar')
24-
jvmArgs "-javaagent:${ tasks.named('jar').flatMap{ it.archiveFile }.get()}"
35+
36+
// Register an argument provider to avoid eager resolution of configurations
37+
jvmArgumentProviders.add(new CommandLineArgumentProvider() {
38+
@Override
39+
Iterable<String> asArguments() {
40+
return ["-javaagent:${tasks.jar.archiveFile.get()}", "-Des.entitlements.bridgeJar=${configurations.entitlementBridge.singleFile}"]
41+
}
42+
})
43+
44+
45+
// The Elasticsearch build plugin automatically adds all compileOnly deps as testImplementation.
46+
// We must not add the bridge this way because it is also on the boot classpath, and that would lead to jar hell.
47+
classpath -= files(configurations.entitlementBridge)
2548
}
2649

2750
tasks.named('jar').configure {
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the "Elastic License
4+
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
apply plugin: 'elasticsearch.build'
11+
12+
dependencies {
13+
compileOnly project(':distribution:tools:entitlement-agent')
14+
implementation 'org.ow2.asm:asm:9.7'
15+
}
16+
17+
tasks.named('forbiddenApisMain').configure {
18+
replaceSignatureFiles 'jdk-signatures'
19+
}
20+
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
Copyright (c) 2012 France Télécom
2+
All rights reserved.
3+
4+
Redistribution and use in source and binary forms, with or without
5+
modification, are permitted provided that the following conditions
6+
are met:
7+
1. Redistributions of source code must retain the above copyright
8+
notice, this list of conditions and the following disclaimer.
9+
2. Redistributions in binary form must reproduce the above copyright
10+
notice, this list of conditions and the following disclaimer in the
11+
documentation and/or other materials provided with the distribution.
12+
3. Neither the name of the copyright holders nor the names of its
13+
contributors may be used to endorse or promote products derived from
14+
this software without specific prior written permission.
15+
16+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19+
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20+
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21+
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22+
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23+
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24+
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25+
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
26+
THE POSSIBILITY OF SUCH DAMAGE.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the "Elastic License
4+
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
import org.elasticsearch.entitlement.instrumentation.InstrumentationService;
11+
import org.elasticsearch.entitlement.instrumentation.impl.InstrumentationServiceImpl;
12+
13+
module org.elasticsearch.entitlement.agent.impl {
14+
requires org.objectweb.asm;
15+
requires org.elasticsearch.entitlement.agent;
16+
17+
provides InstrumentationService with InstrumentationServiceImpl;
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the "Elastic License
4+
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
package org.elasticsearch.entitlement.instrumentation.impl;
11+
12+
import org.elasticsearch.entitlement.instrumentation.InstrumentationService;
13+
import org.elasticsearch.entitlement.instrumentation.Instrumenter;
14+
import org.elasticsearch.entitlement.instrumentation.MethodKey;
15+
import org.objectweb.asm.Type;
16+
17+
import java.lang.reflect.Method;
18+
import java.lang.reflect.Modifier;
19+
import java.util.Map;
20+
import java.util.stream.Stream;
21+
22+
public class InstrumentationServiceImpl implements InstrumentationService {
23+
@Override
24+
public Instrumenter newInstrumenter(String classNameSuffix, Map<MethodKey, Method> instrumentationMethods) {
25+
return new InstrumenterImpl(classNameSuffix, instrumentationMethods);
26+
}
27+
28+
/**
29+
* @return a {@link MethodKey} suitable for looking up the given {@code targetMethod} in the entitlements trampoline
30+
*/
31+
public MethodKey methodKeyForTarget(Method targetMethod) {
32+
Type actualType = Type.getMethodType(Type.getMethodDescriptor(targetMethod));
33+
return new MethodKey(
34+
Type.getInternalName(targetMethod.getDeclaringClass()),
35+
targetMethod.getName(),
36+
Stream.of(actualType.getArgumentTypes()).map(Type::getInternalName).toList(),
37+
Modifier.isStatic(targetMethod.getModifiers())
38+
);
39+
}
40+
41+
}

0 commit comments

Comments
 (0)