[tor-commits] [stem/master] Placing integ control socket in tor owned dir

atagar at torproject.org atagar at torproject.org
Fri Jan 13 17:46:30 UTC 2012


commit b01a790b902bfc8a0bb368d6b5bc72c52ff528af
Author: Damian Johnson <atagar at torproject.org>
Date:   Fri Jan 13 07:43:15 2012 -0800

    Placing integ control socket in tor owned dir
    
    Tor's new version (0.2.3.10) checks that the control socket is in a directory
    that's only accessable by the tor user, and refuses to start up otherwise.
    Accounting for this in stem's integ test startup.
---
 test/runner.py |   26 +++++++++++++++++++++++++-
 1 files changed, 25 insertions(+), 1 deletions(-)

diff --git a/test/runner.py b/test/runner.py
index ea2a60c..d5f4a91 100644
--- a/test/runner.py
+++ b/test/runner.py
@@ -10,6 +10,7 @@ Runner - Runtime context for our integration tests.
   |- start - prepares and starts a tor instance for our tests to run against
   |- stop - stops our tor instance and cleans up any temporary files
   |- is_running - checks if our tor test instance is running
+  |- is_debugging_prevented - checks if DisableDebuggerAttachment is set
   |- get_test_dir - testing directory path
   |- get_torrc_path - path to our tor instance's torrc
   |- get_torrc_contents - contents of our tor instance's torrc
@@ -22,6 +23,7 @@ Runner - Runtime context for our integration tests.
 import os
 import sys
 import time
+import stat
 import socket
 import shutil
 import logging
@@ -68,7 +70,7 @@ INTEG_RUNNER = None
 # control authentication options and attributes
 CONTROL_PASSWORD = "pw"
 CONTROL_PORT = 1111
-CONTROL_SOCKET_PATH = "/tmp/stem_integ_socket"
+CONTROL_SOCKET_PATH = "/tmp/stem_integ/socket"
 
 OPT_PORT = "ControlPort %i" % CONTROL_PORT
 OPT_COOKIE = "CookieAuthentication 1"
@@ -459,6 +461,28 @@ class Runner:
       _print_status("failed (%s)\n" % exc, ERROR_ATTR, quiet)
       raise exc
     
+    # Makes a directory for the control socket if needed. As of, at least, Tor
+    # 0.2.3.10 it checks during startup that the directory a control socket
+    # resides in is only accessable by the tor user (and refuses to finish
+    # starting if it isn't).
+    
+    if OPT_SOCKET in CONNECTION_OPTS[self._connection_type]:
+      try:
+        socket_dir = os.path.dirname(CONTROL_SOCKET_PATH)
+        _print_status("  making control socket directory (%s)... " % socket_dir, STATUS_ATTR, quiet)
+        
+        if os.path.exists(socket_dir) and stat.S_IMODE(os.stat(socket_dir).st_mode) == 0700:
+          _print_status("skipped\n", STATUS_ATTR, quiet)
+        else:
+          if not os.path.exists(socket_dir):
+            os.makedirs(socket_dir)
+          
+          os.chmod(socket_dir, 0700)
+          _print_status("done\n", STATUS_ATTR, quiet)
+      except OSError, exc:
+        _print_status("failed (%s)\n" % exc, ERROR_ATTR, quiet)
+        raise exc
+    
     # configures logging
     logging_path = self._config["test.integ.log"]
     





More information about the tor-commits mailing list