Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate tor log from disk to memory #9346

Merged
merged 3 commits into from Jul 7, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Next Next commit
Stop logging tor log to disk
  • Loading branch information
darkdh committed Jul 6, 2021
commit cab486cc852d9cca9eb4de35d1b461b0a497dc81
7 changes: 0 additions & 7 deletions components/services/tor/tor_launcher_impl.cc
Expand Up @@ -58,19 +58,12 @@ void TorLauncherImpl::Launch(mojom::TorConfigPtr config,
args.AppendArg("/nonexistent");
args.AppendArg("--SocksPort");
args.AppendArg("auto");
args.AppendArg("--TruncateLogFile");
args.AppendArg("1");
base::FilePath tor_data_path = config->tor_data_path;
if (!tor_data_path.empty()) {
if (!base::DirectoryExists(tor_data_path))
base::CreateDirectory(tor_data_path);
args.AppendArg("--DataDirectory");
args.AppendArgPath(tor_data_path);
args.AppendArg("--Log");
base::CommandLine::StringType log_file;
log_file += FILE_PATH_LITERAL("notice file ");
args.AppendArgNative(log_file +
tor_data_path.AppendASCII("tor.log").value());
}
args.AppendArg("--__OwningControllerProcess");
args.AppendArg(base::NumberToString(base::Process::Current().Pid()));
Expand Down
47 changes: 12 additions & 35 deletions components/tor/tor_launcher_factory.cc
Expand Up @@ -9,10 +9,6 @@

#include "base/bind.h"
#include "base/bind_post_task.h"
#include "base/files/file_util.h"
#include "base/sequenced_task_runner.h"
#include "base/task/post_task.h"
#include "base/task/thread_pool.h"
#include "base/threading/sequenced_task_runner_handle.h"
#include "brave/components/tor/service_sandbox_type.h"
#include "brave/components/tor/tor_file_watcher.h"
Expand All @@ -22,27 +18,13 @@
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/service_process_host.h"

using content::BrowserThread;

namespace {
constexpr char kTorProxyScheme[] = "socks5://";
// tor::TorControlEvent::STATUS_CLIENT response
constexpr char kStatusClientBootstrap[] = "BOOTSTRAP";
constexpr char kStatusClientBootstrapProgress[] = "PROGRESS=";
constexpr char kStatusClientCircuitEstablished[] = "CIRCUIT_ESTABLISHED";
constexpr char kStatusClientCircuitNotEstablished[] = "CIRCUIT_NOT_ESTABLISHED";

std::pair<bool, std::string> LoadTorLogOnFileTaskRunner(
const base::FilePath& path) {
std::string data;
bool success = base::ReadFileToString(path, &data);
std::pair<bool, std::string> result;
result.first = success;
if (success) {
result.second = data;
}
return result;
}
} // namespace

// static
Expand Down Expand Up @@ -111,13 +93,6 @@ void TorLauncherFactory::LaunchTorProcess(const tor::mojom::TorConfig& config) {
LaunchTorInternal();
}

void TorLauncherFactory::OnTorLogLoaded(
GetLogCallback callback,
const std::pair<bool, std::string>& result) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
std::move(callback).Run(result.first, result.second);
}

void TorLauncherFactory::LaunchTorInternal() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);

Expand All @@ -138,7 +113,9 @@ void TorLauncherFactory::KillTorProcess() {
control_->Stop();
tor_launcher_.reset();
tor_pid_ = -1;
is_starting_ = false;
is_connected_ = false;
tor_log_.clear();
}

int64_t TorLauncherFactory::GetTorPid() const {
Expand All @@ -163,16 +140,7 @@ std::string TorLauncherFactory::GetTorVersion() const {

void TorLauncherFactory::GetTorLog(GetLogCallback callback) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
base::FilePath tor_log_path = config_.tor_data_path.AppendASCII("tor.log");
scoped_refptr<base::SequencedTaskRunner> file_task_runner(
base::ThreadPool::CreateSequencedTaskRunner(
{base::MayBlock(), base::TaskPriority::BEST_EFFORT,
base::TaskShutdownBehavior::BLOCK_SHUTDOWN}));
base::PostTaskAndReplyWithResult(
file_task_runner.get(), FROM_HERE,
base::BindOnce(&LoadTorLogOnFileTaskRunner, tor_log_path),
base::BindOnce(&TorLauncherFactory::OnTorLogLoaded,
weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
std::move(callback).Run(true, std::string(tor_log_));
}

void TorLauncherFactory::AddObserver(TorLauncherObserver* observer) {
Expand Down Expand Up @@ -250,6 +218,11 @@ void TorLauncherFactory::OnTorControlReady() {
base::DoNothing::Once<bool>());
control_->Subscribe(tor::TorControlEvent::STREAM,
base::DoNothing::Once<bool>());
control_->Subscribe(tor::TorControlEvent::NOTICE,
base::DoNothing::Once<bool>());
control_->Subscribe(tor::TorControlEvent::WARN,
base::DoNothing::Once<bool>());
control_->Subscribe(tor::TorControlEvent::ERR, base::DoNothing::Once<bool>());
}

void TorLauncherFactory::GotVersion(bool error, const std::string& version) {
Expand Down Expand Up @@ -378,6 +351,10 @@ void TorLauncherFactory::OnTorEvent(
for (auto& observer : observers_)
observer.OnTorCircuitEstablished(false);
}
} else if (event == tor::TorControlEvent::NOTICE ||
event == tor::TorControlEvent::WARN ||
event == tor::TorControlEvent::ERR) {
tor_log_ += raw_event + '\n';
}
}

Expand Down
4 changes: 2 additions & 2 deletions components/tor/tor_launcher_factory.h
Expand Up @@ -65,8 +65,6 @@ class TorLauncherFactory : public tor::TorControl::Delegate {
TorLauncherFactory();
~TorLauncherFactory() override;

void OnTorLogLoaded(GetLogCallback, const std::pair<bool, std::string>&);

void OnTorControlPrerequisitesReady(int64_t pid,
bool ready,
std::vector<uint8_t> cookie,
Expand All @@ -92,6 +90,8 @@ class TorLauncherFactory : public tor::TorControl::Delegate {
std::string tor_proxy_uri_;
std::string tor_version_;

std::string tor_log_;

int64_t tor_pid_;

tor::mojom::TorConfig config_;
Expand Down