mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-18 05:39:53 +01:00
Check that createLogHandler() isn't called more than once.
This would result in multiple log files encrypted with the same key.
This commit is contained in:
@@ -24,6 +24,8 @@ public interface PersistentLogManager {
|
|||||||
/**
|
/**
|
||||||
* Creates and returns a persistent log handler that stores its logs in
|
* Creates and returns a persistent log handler that stores its logs in
|
||||||
* the given directory.
|
* the given directory.
|
||||||
|
* <p>
|
||||||
|
* This method should only be called once.
|
||||||
*/
|
*/
|
||||||
Handler createLogHandler(File dir) throws IOException;
|
Handler createLogHandler(File dir) throws IOException;
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import java.util.List;
|
|||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.logging.Formatter;
|
import java.util.logging.Formatter;
|
||||||
import java.util.logging.Handler;
|
import java.util.logging.Handler;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
@@ -63,6 +64,7 @@ class PersistentLogManagerImpl implements PersistentLogManager,
|
|||||||
private final StreamWriterFactory streamWriterFactory;
|
private final StreamWriterFactory streamWriterFactory;
|
||||||
private final Formatter formatter;
|
private final Formatter formatter;
|
||||||
private final SecretKey logKey;
|
private final SecretKey logKey;
|
||||||
|
private final AtomicBoolean handlerCreated = new AtomicBoolean(false);
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private volatile SecretKey oldLogKey = null;
|
private volatile SecretKey oldLogKey = null;
|
||||||
@@ -103,6 +105,7 @@ class PersistentLogManagerImpl implements PersistentLogManager,
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Handler createLogHandler(File dir) throws IOException {
|
public Handler createLogHandler(File dir) throws IOException {
|
||||||
|
if (handlerCreated.getAndSet(true)) throw new IllegalStateException();
|
||||||
File logFile = new File(dir, LOG_FILE);
|
File logFile = new File(dir, LOG_FILE);
|
||||||
File oldLogFile = new File(dir, OLD_LOG_FILE);
|
File oldLogFile = new File(dir, OLD_LOG_FILE);
|
||||||
if (oldLogFile.exists() && !oldLogFile.delete())
|
if (oldLogFile.exists() && !oldLogFile.delete())
|
||||||
|
|||||||
Reference in New Issue
Block a user