[tor-dev] Whonix's help_check_tor_bootstrap.py

Damian Johnson atagar at torproject.org
Thu May 1 15:57:25 UTC 2014


Hi adrelanos, I just noticed that Whonix uses Stem. That's great! Just
a few quick thoughts...

https://github.com/Whonix/Whonix/blob/master/whonix_shared/usr/lib/whonixcheck/help_check_tor_bootstrap.py

> with Controller.from_port(port = p) as controller:
>
>   if os.path.exists("/usr/share/whonix/whonix_gateway"):
>     controller.authenticate("password")

You always need to authenticate the controller. Tor will balk if you
omit the authenticate() call, even if it isn't using authentication...

  >>> from stem.control import Controller
  >>> c = Controller.from_port()
  >>> c.get_info('version')
  Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "stem/control.py", line 960, in get_info
      raise exc
  stem.ProtocolError: GETINFO response didn't have an OK status:
  Authentication required.

You should probably change this to...

  with Controller.from_port(port = p) as controller:
    controller.authenticate()

There also isn't a reason to pass in 'password' unless you're actually
using that as your controller password. ;)

> b = bootstrap_status.split( )
> progress = b[2]
> progress_percent = ( progress.split( "=" ) )[1]
> exit_code=int(progress_percent)

Operating by the positional argument is fine, but a little risky since
Tor is perfectly allowed to rearrange those. I'd suggest the following
instead...

  match = re.match('.* PROGRESS=([0-9]+).*', line)

  if match:
    exit_code = int(match.group(1))

Cheers! -Damian


More information about the tor-dev mailing list