Commit fdd71c2d authored by Patrick Schleizer's avatar Patrick Schleizer Committed by intrigeri

fix Tor control auth cookie authentication even if HashedControlPassword is set

fix custom auth cookie authentication path

Previously the following line in Tor config...

```
HashedControlPassword
16:88A1B9F6EBD74C6960E1E60CC725B6C94A990C65223358EFF0DF41E8BA
```

Was leading the the following error:

```
Sep 13 22:02:08 host onion-grater[10460]: Exception happened during
processing of request from ('10.137.0.45', 48828)
Sep 13 22:02:08 host onion-grater[10460]: Traceback (most recent call last):
Sep 13 22:02:08 host onion-grater[10460]:   File
"/usr/lib/python3.5/socketserver.py", line 625, in process_request_thread
Sep 13 22:02:08 host onion-grater[10460]:
self.finish_request(request, client_address)
Sep 13 22:02:08 host onion-grater[10460]:   File
"/usr/lib/python3.5/socketserver.py", line 354, in finish_request
Sep 13 22:02:08 host onion-grater[10460]:
self.RequestHandlerClass(request, client_address, self)
Sep 13 22:02:08 host onion-grater[10460]:   File
"/usr/lib/python3.5/socketserver.py", line 681, in __init__
Sep 13 22:02:08 host onion-grater[10460]:     self.handle()
Sep 13 22:02:08 host onion-grater[10460]:   File
"/usr/lib/onion-grater", line 651, in handle
Sep 13 22:02:08 host onion-grater[10460]:     self.controller =
self.connect_to_real_control_port()
Sep 13 22:02:08 host onion-grater[10460]:   File
"/usr/lib/onion-grater", line 592, in connect_to_real_control_port
Sep 13 22:02:08 host onion-grater[10460]:
controller.authenticate(cookie)
Sep 13 22:02:08 host onion-grater[10460]:   File
"/usr/lib/python3/dist-packages/stem/control.py", line 1071, in authenticate
Sep 13 22:02:08 host onion-grater[10460]:
stem.connection.authenticate(self, *args, **kwargs)
Sep 13 22:02:08 host onion-grater[10460]:   File
"/usr/lib/python3/dist-packages/stem/connection.py", line 575, in
authenticate
Sep 13 22:02:08 host onion-grater[10460]:
authenticate_password(controller, password, False)
Sep 13 22:02:08 host onion-grater[10460]:   File
"/usr/lib/python3/dist-packages/stem/connection.py", line 711, in
authenticate_password
Sep 13 22:02:08 host onion-grater[10460]:     password =
password.replace('"', '\\"')
Sep 13 22:02:08 host onion-grater[10460]: TypeError: a bytes-like object
is required, not 'str'
```

```
ls -la /var/run/tor/
```
```
total 148
drwxr-sr-x  2 debian-tor debian-tor    140 Sep 13 22:15 .
drwxr-xr-x 28 root       root          760 Sep 13 22:00 ..
srw-rw----  1 debian-tor debian-tor      0 Sep 13 22:15 control
-rw-r-----  1 debian-tor debian-tor     32 Sep 13 22:15 control.authcookie
-rw-r-----  1 debian-tor debian-tor 143123 Sep 13 22:15 log
srw-rw-rw-  1 debian-tor debian-tor      0 Sep 13 22:15 socks
-rw-r--r--  1 debian-tor debian-tor      6 Sep 13 22:15 tor.pid
```
```
DataDirectory /var/lib/tor
PidFile /var/run/tor/tor.pid
RunAsDaemon 1
User debian-tor

ControlSocket /var/run/tor/control GroupWritable RelaxDirModeCheck
ControlSocketsGroupWritable 1
SocksPort unix:/var/run/tor/socks WorldWritable
SocksPort 9050

CookieAuthentication 1
CookieAuthFileGroupReadable 1
CookieAuthFile /var/run/tor/control.authcookie

Log notice file /var/log/tor/log
```

The HashedControlPassword confused python-stem even
though cookie authentication was functional without that HashedControlPassword.

There is no need to manually read Tor authentication cookie file.

        with open(global_args.control_cookie_path, "rb") as f:
            cookie = f.read()

python-stem can do that for us.

Line

```
controller.authenticate(cookie)
```

was wrong. `controller.authenticate` does not take

Syntax from manual:

https://stem.torproject.org/api/connection.html#stem.connection.authenticate

```
stem.connection.authenticate(controller, password=None, chroot_path=None, protocolinfo_response=None)
```
parent f9c107a5
......@@ -134,6 +134,7 @@ import socket
import socketserver
import stem
import stem.control
import stem.connection
import struct
import sys
import textwrap
......@@ -565,12 +566,8 @@ class FilteredControlPortProxyHandler(socketserver.StreamRequestHandler):
))
def connect_to_real_control_port(self):
with open(global_args.control_cookie_path, "rb") as f:
cookie = f.read()
controller = stem.control.Controller.from_socket_file(
global_args.control_socket_path
)
controller.authenticate(cookie)
controller = stem.connection.connect(control_socket=global_args.control_socket_path)
stem.connection.authenticate_cookie(controller, cookie_path=global_args.control_cookie_path)
return controller
def handle(self):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment