Skip to content

Commit 7b113cc

Browse files
authored
Handle special cases for File.createTempFile (#133530) (#133647)
We were missing a couple of cases where File.createTempFile (from java.io) are defaulting to the default temp directory. This PR addresses that. Fixes #130086
1 parent bcc3278 commit 7b113cc

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

libs/entitlement/bridge/src/main/java/org/elasticsearch/entitlement/bridge/EntitlementChecker.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -709,6 +709,8 @@ public interface EntitlementChecker {
709709

710710
void check$java_io_File$createNewFile(Class<?> callerClass, File file);
711711

712+
void check$java_io_File$$createTempFile(Class<?> callerClass, String prefix, String suffix);
713+
712714
void check$java_io_File$$createTempFile(Class<?> callerClass, String prefix, String suffix, File directory);
713715

714716
void check$java_io_File$delete(Class<?> callerClass, File file);

libs/entitlement/qa/entitlement-test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/FileCheckActions.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,17 @@ static void fileCreateTempFile() throws IOException {
9797
File.createTempFile("prefix", "suffix", readWriteDir().toFile());
9898
}
9999

100+
@EntitlementTest(expectedAccess = ALWAYS_ALLOWED)
101+
static void fileCreateTempFileSystemTempDirectory() throws IOException {
102+
File.createTempFile("prefix", "suffix");
103+
}
104+
105+
@EntitlementTest(expectedAccess = ALWAYS_ALLOWED)
106+
static void fileCreateTempFileNullDirectory() throws IOException {
107+
// null directory = system temp directory
108+
File.createTempFile("prefix", "suffix", null);
109+
}
110+
100111
@EntitlementTest(expectedAccess = PLUGINS)
101112
static void fileDelete() throws IOException {
102113
var toDelete = EntitledActions.createTempFileForWrite();

libs/entitlement/src/main/java/org/elasticsearch/entitlement/runtime/policy/ElasticsearchEntitlementChecker.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1402,9 +1402,20 @@ public void checkSelectorProviderOpenSocketChannel(Class<?> callerClass, Selecto
14021402
policyChecker.checkFileWrite(callerClass, file);
14031403
}
14041404

1405+
@Override
1406+
public void check$java_io_File$$createTempFile(Class<?> callerClass, String prefix, String suffix) {
1407+
policyChecker.checkCreateTempFile(callerClass);
1408+
}
1409+
14051410
@Override
14061411
public void check$java_io_File$$createTempFile(Class<?> callerClass, String prefix, String suffix, File directory) {
1407-
policyChecker.checkFileWrite(callerClass, directory);
1412+
// A null value for the directory parameter means using the temp directory (java.io.tmpdir,
1413+
// aka org.elasticsearch.env.Environment#tmpDir, aka PathLookup#TEMP).
1414+
if (directory == null) {
1415+
policyChecker.checkCreateTempFile(callerClass);
1416+
} else {
1417+
policyChecker.checkFileWrite(callerClass, directory);
1418+
}
14081419
}
14091420

14101421
@Override

0 commit comments

Comments
 (0)