summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMicah Lee <micah@micahflee.com>2018-11-25 16:50:20 -0800
committerMicah Lee <micah@micahflee.com>2018-11-25 16:50:20 -0800
commit2cbe8979abe549150513cd7489cf3e2e7b348471 (patch)
tree45f9c49b230ec6c73bae353c36c89a82fcd3b385
parent845d7f85647b8f2cb5757e86b3269657bf371b53 (diff)
downloadonionshare-2cbe8979abe549150513cd7489cf3e2e7b348471.tar.gz
onionshare-2cbe8979abe549150513cd7489cf3e2e7b348471.zip
Make macOS use Tor control ports instead of unix sockets to connect to the Tor controller
-rw-r--r--install/pyinstaller.spec1
-rw-r--r--onionshare/onion.py41
-rw-r--r--share/torrc_template1
-rw-r--r--share/torrc_template-windows9
4 files changed, 21 insertions, 31 deletions
diff --git a/install/pyinstaller.spec b/install/pyinstaller.spec
index 6811997b..24664bf9 100644
--- a/install/pyinstaller.spec
+++ b/install/pyinstaller.spec
@@ -15,7 +15,6 @@ a = Analysis(
('../share/torrc_template', 'share'),
('../share/torrc_template-obfs4', 'share'),
('../share/torrc_template-meek_lite_azure', 'share'),
- ('../share/torrc_template-windows', 'share'),
('../share/images/*', 'share/images'),
('../share/locale/*', 'share/locale'),
('../share/static/*', 'share/static'),
diff --git a/onionshare/onion.py b/onionshare/onion.py
index ec81a894..4a94f2ce 100644
--- a/onionshare/onion.py
+++ b/onionshare/onion.py
@@ -170,36 +170,36 @@ class Onion(object):
group_container_dir = os.path.expanduser('~/Library/Group Containers/com.micahflee.onionshare')
os.makedirs(group_container_dir, exist_ok=True)
self.tor_data_directory = tempfile.TemporaryDirectory(dir=group_container_dir)
- self.common.log('Onion', 'connect', 'tor_data_directory={}'.format(self.tor_data_directory))
+ self.common.log('Onion', 'connect', 'tor_data_directory={}'.format(self.tor_data_directory.name))
else:
self.tor_data_directory = tempfile.TemporaryDirectory()
- if self.common.platform == 'Windows':
- # Windows needs to use network ports, doesn't support unix sockets
- torrc_template = open(self.common.get_resource_path('torrc_template-windows')).read()
+ # Create the torrc
+ with open(self.common.get_resource_path('torrc_template')) as f:
+ torrc_template = f.read()
+ self.tor_cookie_auth_file = os.path.join(self.tor_data_directory.name, 'cookie')
+ try:
+ self.tor_socks_port = self.common.get_available_port(1000, 65535)
+ except:
+ raise OSError(strings._('no_available_port'))
+ self.tor_torrc = os.path.join(self.tor_data_directory.name, 'torrc')
+
+ if self.common.platform == 'Windows' or self.common.platform == "Darwin":
+ # Windows doesn't support unix sockets, so it must use a network port.
+ # macOS can't use unix sockets either because socket filenames are limited to
+ # 100 chars, and the macOS sandbox forces us to put the socket file in a place
+ # with a really long path.
+ torrc_template += 'ControlPort {{control_port}}\n'
try:
self.tor_control_port = self.common.get_available_port(1000, 65535)
except:
raise OSError(strings._('no_available_port'))
self.tor_control_socket = None
- self.tor_cookie_auth_file = os.path.join(self.tor_data_directory.name, 'cookie')
- try:
- self.tor_socks_port = self.common.get_available_port(1000, 65535)
- except:
- raise OSError(strings._('no_available_port'))
- self.tor_torrc = os.path.join(self.tor_data_directory.name, 'torrc')
else:
- # Linux, Mac and BSD can use unix sockets
- with open(self.common.get_resource_path('torrc_template')) as f:
- torrc_template = f.read()
+ # Linux and BSD can use unix sockets
+ torrc_template += 'ControlSocket {{control_socket}}\n'
self.tor_control_port = None
self.tor_control_socket = os.path.join(self.tor_data_directory.name, 'control_socket')
- self.tor_cookie_auth_file = os.path.join(self.tor_data_directory.name, 'cookie')
- try:
- self.tor_socks_port = self.common.get_available_port(1000, 65535)
- except:
- raise OSError(strings._('no_available_port'))
- self.tor_torrc = os.path.join(self.tor_data_directory.name, 'torrc')
torrc_template = torrc_template.replace('{{data_directory}}', self.tor_data_directory.name)
torrc_template = torrc_template.replace('{{control_port}}', str(self.tor_control_port))
@@ -208,6 +208,7 @@ class Onion(object):
torrc_template = torrc_template.replace('{{geo_ip_file}}', self.tor_geo_ip_file_path)
torrc_template = torrc_template.replace('{{geo_ipv6_file}}', self.tor_geo_ipv6_file_path)
torrc_template = torrc_template.replace('{{socks_port}}', str(self.tor_socks_port))
+
with open(self.tor_torrc, 'w') as f:
f.write(torrc_template)
@@ -246,7 +247,7 @@ class Onion(object):
# Connect to the controller
try:
- if self.common.platform == 'Windows':
+ if self.common.platform == 'Windows' or self.common.platform == "Darwin":
self.c = Controller.from_port(port=self.tor_control_port)
self.c.authenticate()
else:
diff --git a/share/torrc_template b/share/torrc_template
index 464adf32..8ac9e1ef 100644
--- a/share/torrc_template
+++ b/share/torrc_template
@@ -1,6 +1,5 @@
DataDirectory {{data_directory}}
SocksPort {{socks_port}}
-ControlSocket {{control_socket}}
CookieAuthentication 1
CookieAuthFile {{cookie_auth_file}}
AvoidDiskWrites 1
diff --git a/share/torrc_template-windows b/share/torrc_template-windows
deleted file mode 100644
index 38a5bf1e..00000000
--- a/share/torrc_template-windows
+++ /dev/null
@@ -1,9 +0,0 @@
-DataDirectory {{data_directory}}
-SocksPort {{socks_port}}
-ControlPort {{control_port}}
-CookieAuthentication 1
-CookieAuthFile {{cookie_auth_file}}
-AvoidDiskWrites 1
-Log notice stdout
-GeoIPFile {{geo_ip_file}}
-GeoIPv6File {{geo_ipv6_file}}