[tor-commits] [sbws/master] stem: refactor, move setting runtime torrc options

juga at torproject.org juga at torproject.org
Mon Feb 25 16:29:53 UTC 2019


commit 1d836ec5b67fdac0f43de383267dc6ac28265cf8
Author: juga0 <juga at riseup.net>
Date:   Fri Dec 7 10:18:37 2018 +0000

    stem: refactor, move setting runtime torrc options
    
    to a function.
    Replace comment by docstring.
    Add an integration test to check the option is set.
---
 sbws/globals.py                     |  5 +++++
 sbws/util/stem.py                   | 32 ++++++++++++++++++++------------
 tests/integration/util/test_stem.py |  6 ++++++
 3 files changed, 31 insertions(+), 12 deletions(-)

diff --git a/sbws/globals.py b/sbws/globals.py
index 60e56f5..c6adc44 100644
--- a/sbws/globals.py
+++ b/sbws/globals.py
@@ -33,6 +33,11 @@ TORRC_STARTING_POINT = {
     'ProtocolWarnings': '1',
 }
 
+TORRC_RUNTIME_OPTIONS = {
+    '__DisablePredictedCircuits': '1',
+    '__LeaveStreamsUnattached': '1',
+}
+
 PKG_DIR = os.path.abspath(os.path.dirname(__file__))
 DEFAULT_CONFIG_PATH = os.path.join(PKG_DIR, 'config.default.ini')
 DEFAULT_LOG_CONFIG_PATH = os.path.join(PKG_DIR, 'config.log.default.ini')
diff --git a/sbws/util/stem.py b/sbws/util/stem.py
index 9b3dc0d..ead812b 100644
--- a/sbws/util/stem.py
+++ b/sbws/util/stem.py
@@ -12,7 +12,7 @@ import copy
 import logging
 import os
 from sbws.globals import fail_hard
-from sbws.globals import TORRC_STARTING_POINT
+from sbws.globals import TORRC_STARTING_POINT, TORRC_RUNTIME_OPTIONS
 
 log = logging.getLogger(__name__)
 stream_building_lock = RLock()
@@ -74,8 +74,12 @@ def init_controller(port=None, path=None, set_custom_stream_settings=True):
             return None, 'Unable to reach tor on control socket'
     assert c is not None
     if set_custom_stream_settings:
-        c.set_conf('__DisablePredictedCircuits', '1')
-        c.set_conf('__LeaveStreamsUnattached', '1')
+        # These options are also set in launch_tor.
+        # In a future refactor they could be set in the case they are not
+        # already in the running instance. This way the controller_port
+        # could also be used.
+        set_torrc_options_can_fail(c)
+        set_torrc_runtime_options(c)
     return c, ''
 
 
@@ -165,6 +169,16 @@ def parse_user_torrc_config(torrc, torrc_text):
     return torrc_dict
 
 
+def set_torrc_runtime_options(controller):
+    """Set torrc options at runtime."""
+    try:
+        controller.set_options(TORRC_RUNTIME_OPTIONS)
+    except (ControllerError, InvalidArguments, InvalidRequest) as e:
+        log.exception("Error trying to launch tor: %s. "
+                      "Maybe the tor directory is being used by other "
+                      "sbws instance?", e)
+        exit(1)
+
 def launch_tor(conf):
     assert isinstance(conf, ConfigParser)
     os.makedirs(conf.getpath('tor', 'datadir'), mode=0o700, exist_ok=True)
@@ -197,15 +211,9 @@ def launch_tor(conf):
         fail_hard('Error trying to launch tor: %s', e)
     # And return a controller to it
     cont = _init_controller_socket(conf.getpath('tor', 'control_socket'))
-    # Because we build things by hand and can't set these before Tor bootstraps
-    try:
-        cont.set_conf('__DisablePredictedCircuits', '1')
-        cont.set_conf('__LeaveStreamsUnattached', '1')
-    except (ControllerError, InvalidArguments, InvalidRequest) as e:
-        log.exception("Error trying to launch tor: %s. "
-                      "Maybe the tor directory is being used by other "
-                      "sbws instance?", e)
-        exit(1)
+
+    set_torrc_runtime_options(cont)
+
     log.info('Started and connected to Tor %s via %s', cont.get_version(),
              conf.getpath('tor', 'control_socket'))
     return cont
diff --git a/tests/integration/util/test_stem.py b/tests/integration/util/test_stem.py
index 291f485..33fee81 100644
--- a/tests/integration/util/test_stem.py
+++ b/tests/integration/util/test_stem.py
@@ -4,3 +4,9 @@ import sbws.util.stem as stem_utils
 def test_launch_and_okay(persistent_launch_tor):
     cont = persistent_launch_tor
     assert stem_utils.is_bootstrapped(cont)
+
+
+def test_set_torrc_runtime_option_succesful(persistent_launch_tor):
+    controller = persistent_launch_tor
+    runtime_options = controller.get_conf_map(['__LeaveStreamsUnattached'])
+    assert runtime_options == {'__LeaveStreamsUnattached': ['1']}





More information about the tor-commits mailing list