[tor-commits] [torbutton/master] Bug #3928: implement reading password from CookieAuthFile
mikeperry at torproject.org
mikeperry at torproject.org
Thu Sep 29 04:45:55 UTC 2011
commit de8c53cece3a8a99a60921fd42364c0faee0d8e7
Author: Jérémy Bobbio <lunar at debian.org>
Date: Wed Sep 14 12:07:47 2011 +0200
Bug #3928: implement reading password from CookieAuthFile
Using environment variable TOR_CONTROL_COOKIE_AUTH_FILE, one can now specify
the path to the Tor CookieAuthFile. The password will be read from here
if the environment lacks TOR_CONTROL_PASSWD.
---
src/chrome/content/torbutton.js | 30 ++++++++++++++++++++++++++++++
1 files changed, 30 insertions(+), 0 deletions(-)
diff --git a/src/chrome/content/torbutton.js b/src/chrome/content/torbutton.js
index 1ebd6bb..5ee1a53 100644
--- a/src/chrome/content/torbutton.js
+++ b/src/chrome/content/torbutton.js
@@ -525,6 +525,15 @@ function torbutton_init() {
// FIXME: We might want a check to use to set this in the future,
// but this works fine for now.
m_tb_tbb = true;
+ } else {
+ var cookie_path = environ.get("TOR_CONTROL_COOKIE_AUTH_FILE");
+ try {
+ if ("" != cookie_path) {
+ m_tb_control_pass = torbutton_read_authentication_cookie(cookie_path);
+ }
+ } catch(e) {
+ torbutton_log(4, 'unable to read authentication cookie');
+ }
}
if (environ.exists("TOR_CONTROL_PORT")) {
@@ -1304,6 +1313,27 @@ function torbutton_socket_readline(input) {
return str;
}
+function torbutton_read_authentication_cookie(path) {
+ var file = Components.classes['@mozilla.org/file/local;1']
+ .createInstance(Components.interfaces.nsILocalFile);
+ file.initWithPath(path);
+ var fileStream = Components.classes['@mozilla.org/network/file-input-stream;1']
+ .createInstance(Components.interfaces.nsIFileInputStream);
+ fileStream.init(file, 1, 0, false);
+ var binaryStream = Components.classes['@mozilla.org/binaryinputstream;1']
+ .createInstance(Components.interfaces.nsIBinaryInputStream);
+ binaryStream.setInputStream(fileStream);
+ var array = binaryStream.readByteArray(fileStream.available());
+ binaryStream.close();
+ fileStream.close();
+ return torbutton_array_to_hexdigits(array);
+}
+
+function torbutton_array_to_hexdigits(array) {
+ return array.map(function(c) {
+ return String("0" + c.toString(16)).slice(-2)
+ }).join('');
+};
// Executes a command on the control port.
// Return 0 in error, 1 for success.
function torbutton_send_ctrl_cmd(command) {
More information about the tor-commits
mailing list