commit b67df141e2d7cff6a7a318407cd779801a82c7c8 Author: Arturo Filastò art@fuffa.org Date: Tue Aug 19 13:48:06 2014 +0200
Also add obfsproxy version to the bridge reachability test report.
Raise exception if obfsproxy is older than 0.2 --- ooni/nettests/blocking/bridge_reachability.py | 9 ++++++- ooni/oonicli.py | 2 ++ ooni/utils/onion.py | 31 +++++++++++++++++++++---- 3 files changed, 36 insertions(+), 6 deletions(-)
diff --git a/ooni/nettests/blocking/bridge_reachability.py b/ooni/nettests/blocking/bridge_reachability.py index 7f10f0c..f4d5bf1 100644 --- a/ooni/nettests/blocking/bridge_reachability.py +++ b/ooni/nettests/blocking/bridge_reachability.py @@ -64,12 +64,13 @@ class BridgeReachability(nettest.NetTestCase): self.report['tor_progress_tag'] = None self.report['tor_progress_summary'] = None self.report['tor_log'] = None + self.report['obfsproxy_version'] = str(onion.obfsproxy_details['version']) self.report['bridge_address'] = None
self.bridge = self.input if self.input.startswith('Bridge'): self.bridge = self.input.replace('Bridge ', '') - self.pyobfsproxy_bin = find_executable('obfsproxy') + self.pyobfsproxy_bin = onion.obfsproxy_details['binary'] self.fteproxy_bin = find_executable('fteproxy')
def postProcessor(self, measurements): @@ -143,6 +144,12 @@ class BridgeReachability(nettest.NetTestCase): elif transport_name and self.pyobfsproxy_bin: config.ClientTransportPlugin = "%s exec %s managed" % ( transport_name, self.pyobfsproxy_bin) + if onion.OBFSProxyVersion('0.2') > onion.obfsproxy_details['version']: + log.err( + "The obfsproxy version you are using appears to be outdated." + ) + self.report['error'] = 'old-obfsproxy' + return log.debug("Using pyobfsproxy from %s" % self.pyobfsproxy_bin) self.report['transport_name'] = transport_name self.report['bridge_address'] = self.bridge.split(' ')[1] diff --git a/ooni/oonicli.py b/ooni/oonicli.py index f8cf849..6505584 100644 --- a/ooni/oonicli.py +++ b/ooni/oonicli.py @@ -201,6 +201,8 @@ def runWithDirector(logging=True, start_tor=True, check_incoherences=True): print e.net_test_loader.usageOptions().getUsage() sys.exit(4) except Exception as e: + if config.advanced.debug: + log.exception(e) log.err(e) sys.exit(5)
diff --git a/ooni/utils/onion.py b/ooni/utils/onion.py index cb490b3..09e104c 100644 --- a/ooni/utils/onion.py +++ b/ooni/utils/onion.py @@ -1,5 +1,6 @@ import string import subprocess +from distutils.spawn import find_executable from distutils.version import LooseVersion
from txtorcon.util import find_tor_binary as tx_find_tor_binary @@ -11,28 +12,43 @@ class TorVersion(LooseVersion): pass
+class OBFSProxyVersion(LooseVersion): + pass + + def find_tor_binary(): if config.advanced.tor_binary: return config.advanced.tor_binary return tx_find_tor_binary()
-def tor_version(): - tor_binary = find_tor_binary() - if not tor_binary: +def executable_version(binary, strip=lambda x: x): + if not binary: return None try: - proc = subprocess.Popen((tor_binary, '--version'), + proc = subprocess.Popen((binary, '--version'), stdout=subprocess.PIPE, stderr=subprocess.PIPE) except OSError: pass else: stdout, _ = proc.communicate() if proc.poll() == 0 and stdout != '': - return TorVersion(stdout.strip().split(' ')[2]) + version = stdout.strip() + return LooseVersion(strip(version)) return None
+def tor_version(): + version = executable_version(find_tor_binary(), + lambda x: x.split(' ')[2]) + return TorVersion(str(version)) + + +def obfsproxy_version(): + version = executable_version(find_executable('obfsproxy')) + return OBFSProxyVersion(str(version)) + + def transport_name(address): """ If the address of the bridge starts with a valid c identifier then @@ -53,3 +69,8 @@ tor_details = { 'binary': find_tor_binary(), 'version': tor_version() } + +obfsproxy_details = { + 'binary': find_executable('obfsproxy'), + 'version': obfsproxy_version() +}
tor-commits@lists.torproject.org