Skip to content

Commit 6b289de

Browse files
authored
set permissions for temporary files (#4883)
1 parent d7735b9 commit 6b289de

File tree

4 files changed

+42
-9
lines changed

4 files changed

+42
-9
lines changed

opengrok-indexer/src/main/java/org/opengrok/indexer/history/ClearCaseRepository.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import org.opengrok.indexer.configuration.RuntimeEnvironment;
3939
import org.opengrok.indexer.logger.LoggerFactory;
4040
import org.opengrok.indexer.util.Executor;
41+
import org.opengrok.indexer.util.IOUtils;
4142

4243
/**
4344
* Access to a ClearCase repository.
@@ -96,7 +97,7 @@ boolean getHistoryGet(OutputStream out, String parent, String basename, String r
9697
try {
9798
String filename = (new File(parent, basename)).getCanonicalPath()
9899
.substring(getDirectoryName().length() + 1);
99-
final File tmp = File.createTempFile("opengrok", "tmp");
100+
final File tmp = IOUtils.createTemporaryFileOrDirectory(false, "opengrok", "tmp");
100101
String tmpName = tmp.getCanonicalPath();
101102

102103
// cleartool can't get to a previously existing file

opengrok-indexer/src/main/java/org/opengrok/indexer/history/SSCMRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ boolean getHistoryGet(OutputStream out, String parent, String basename, String r
179179

180180
File directory = new File(parent);
181181
try {
182-
final File tmp = IOUtils.createTemporaryDirectory("opengrokSSCMtmp");
182+
final File tmp = IOUtils.createTemporaryFileOrDirectory(true, "opengrokSSCMtmp", null);
183183
String tmpName = tmp.getCanonicalPath();
184184

185185
List<String> argv = new ArrayList<>();

opengrok-indexer/src/main/java/org/opengrok/indexer/util/IOUtils.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -311,18 +311,28 @@ public static String getFileContent(File file) {
311311

312312
/**
313313
* Create temporary directory with permissions restricted to the owner.
314+
* @param isDirectory whether this is a file or directory
314315
* @param prefix prefix for the temporary directory name
316+
* @param suffix optional suffix, can be {@code null} for directories
315317
* @return File object
316318
* @throws IOException on I/O error or failure to set the permissions
317319
*/
318-
public static File createTemporaryDirectory(String prefix) throws IOException {
320+
public static File createTemporaryFileOrDirectory(boolean isDirectory, String prefix, String suffix) throws IOException {
319321
File tmp;
320322
if (SystemUtils.IS_OS_UNIX) {
321323
FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.
322324
asFileAttribute(PosixFilePermissions.fromString("rwx------"));
323-
tmp = Files.createTempDirectory(prefix, attr).toFile();
325+
if (isDirectory) {
326+
tmp = Files.createTempDirectory(prefix, attr).toFile();
327+
} else {
328+
tmp = Files.createTempFile(prefix, suffix, attr).toFile();
329+
}
324330
} else {
325-
tmp = Files.createTempDirectory(prefix).toFile();
331+
if (isDirectory) {
332+
tmp = Files.createTempDirectory(prefix).toFile();
333+
} else {
334+
tmp = Files.createTempFile(prefix, suffix).toFile();
335+
}
326336
if (!tmp.setReadable(true, true)) {
327337
throw new IOException("unable to set read permissions for '" + tmp.getAbsolutePath() + "'");
328338
}

suggester/src/main/java/org/opengrok/suggest/popular/impl/chronicle/ChronicleMapAdapter.java

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,22 @@
2323
package org.opengrok.suggest.popular.impl.chronicle;
2424

2525
import net.openhft.chronicle.map.ChronicleMap;
26+
import org.apache.commons.lang3.SystemUtils;
2627
import org.apache.lucene.util.BytesRef;
2728
import org.opengrok.suggest.popular.PopularityMap;
2829

2930
import java.io.File;
3031
import java.io.IOException;
3132
import java.nio.file.Files;
3233
import java.nio.file.Path;
34+
import java.nio.file.attribute.FileAttribute;
35+
import java.nio.file.attribute.PosixFilePermission;
36+
import java.nio.file.attribute.PosixFilePermissions;
3337
import java.util.ArrayList;
3438
import java.util.Collections;
3539
import java.util.List;
3640
import java.util.Map.Entry;
41+
import java.util.Set;
3742
import java.util.function.Predicate;
3843

3944
/**
@@ -119,10 +124,27 @@ public void resize(final int newMapSize, final double newMapAvgKey) throws IOExc
119124
throw new IllegalArgumentException("Cannot resize chronicle map to map with negative key size");
120125
}
121126

122-
Path tempFile = Files.createTempFile("opengrok", "chronicle");
127+
Path tempFilePath;
128+
if (SystemUtils.IS_OS_UNIX) {
129+
FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.
130+
asFileAttribute(PosixFilePermissions.fromString("rwx------"));
131+
tempFilePath = Files.createTempFile("opengrok", "chronicle", attr);
132+
} else {
133+
tempFilePath = Files.createTempFile("opengrok", "chronicle");
134+
File tempFile = tempFilePath.toFile();
135+
if (!tempFile.setReadable(true, true)) {
136+
throw new IOException("unable to set read permissions for '" + tempFile.getAbsolutePath() + "'");
137+
}
138+
if (!tempFile.setWritable(true, true)) {
139+
throw new IOException("unable to set write permissions for '" + tempFile.getAbsolutePath() + "'");
140+
}
141+
if (!tempFile.setExecutable(true, true)) {
142+
throw new IOException("unable to set executable permissions for '" + tempFile.getAbsolutePath() + "'");
143+
}
144+
}
123145

124146
try {
125-
map.getAll(tempFile.toFile());
147+
map.getAll(tempFilePath.toFile());
126148

127149
String field = map.name();
128150

@@ -136,10 +158,10 @@ public void resize(final int newMapSize, final double newMapAvgKey) throws IOExc
136158
.entries(newMapSize)
137159
.keyReaderAndDataAccess(BytesRefSizedReader.INSTANCE, new BytesRefDataAccess())
138160
.createPersistedTo(chronicleMapFile);
139-
m.putAll(tempFile.toFile());
161+
m.putAll(tempFilePath.toFile());
140162
map = m;
141163
} finally {
142-
Files.delete(tempFile);
164+
Files.delete(tempFilePath);
143165
}
144166
}
145167

0 commit comments

Comments
 (0)