[tor-commits] [vidalia/master] Takes ownership of the tor process it controls
chiiph at torproject.org
chiiph at torproject.org
Mon Jan 23 16:45:21 UTC 2012
commit 05e1bc589237ef9bf3a36cba08c1928b4da8889a
Author: Tomás Touceda <chiiph at torproject.org>
Date: Fri Jan 20 12:03:53 2012 -0300
Takes ownership of the tor process it controls
If Vidalia fails, tor won't be running in the background with a random
hashed password.
---
src/torcontrol/TorControl.cpp | 7 +++++++
src/torcontrol/TorControl.h | 3 +++
src/vidalia/MainWindow.cpp | 7 +++++++
3 files changed, 17 insertions(+), 0 deletions(-)
diff --git a/src/torcontrol/TorControl.cpp b/src/torcontrol/TorControl.cpp
index af925a7..730e821 100644
--- a/src/torcontrol/TorControl.cpp
+++ b/src/torcontrol/TorControl.cpp
@@ -1127,3 +1127,10 @@ TorControl::ipToCountry(const QHostAddress &ip, QString *errmsg)
return QString();
}
+/** Takes ownership of the tor process it's communicating to */
+bool
+TorControl::takeOwnership(QString *errmsg)
+{
+ ControlCommand cmd("TAKEOWNERSHIP");
+ return send(cmd, errmsg);
+}
diff --git a/src/torcontrol/TorControl.h b/src/torcontrol/TorControl.h
index f3504f5..c16758c 100644
--- a/src/torcontrol/TorControl.h
+++ b/src/torcontrol/TorControl.h
@@ -209,6 +209,9 @@ public:
* it's not NULL. */
QString ipToCountry(const QHostAddress &ip, QString *errmsg = 0);
+ /** Takes ownership of the tor process it's communicating to */
+ bool takeOwnership(QString *errmsg);
+
public slots:
/** Closes the circuit specified by <b>circId</b>. If <b>ifUnused</b> is
* true, then the circuit will not be closed unless it is unused. */
diff --git a/src/vidalia/MainWindow.cpp b/src/vidalia/MainWindow.cpp
index a60509f..3148078 100644
--- a/src/vidalia/MainWindow.cpp
+++ b/src/vidalia/MainWindow.cpp
@@ -1082,6 +1082,8 @@ MainWindow::start()
QString path = settings.getSocketPath();
args << "ControlSocket" << path;
}
+
+ args << "__OwningControllerProcess" << QString::number(QCoreApplication::applicationPid());
/* Add the control port authentication arguments */
switch (settings.getAuthenticationMethod()) {
@@ -1346,6 +1348,11 @@ void
MainWindow::connected()
{
authenticate();
+ if(!_torControl->isVidaliaRunningTor()) {
+ QString err;
+ if(!_torControl->takeOwnership(&err))
+ vWarn(err);
+ }
}
/** Called when Vidalia wants to disconnect from a Tor it did not start. */
More information about the tor-commits
mailing list