summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKali Kaneko <kali@leap.se>2015-06-02 17:27:42 -0400
committerKali Kaneko <kali@leap.se>2015-06-03 14:39:48 -0400
commit76436726663971ebd58bf2c758b52abb10f7c242 (patch)
treeaafb52dd69213740c9ae73699b770c2da90c3bf9
parent847e41cb2fc829bf727a56d6f4f5e97e1f582369 (diff)
[bug] allow ipc socket types
previous regex wasn't capturing addresses of type ipc://<path> Closes: #7089
-rw-r--r--changes/bug-7089-allow_ipc_proto1
-rw-r--r--src/leap/common/events/tests/__init__.py0
-rw-r--r--src/leap/common/events/tests/test_zmq_components.py51
-rw-r--r--src/leap/common/events/zmq_components.py24
4 files changed, 66 insertions, 10 deletions
diff --git a/changes/bug-7089-allow_ipc_proto b/changes/bug-7089-allow_ipc_proto
new file mode 100644
index 0000000..7dce314
--- /dev/null
+++ b/changes/bug-7089-allow_ipc_proto
@@ -0,0 +1 @@
+o [bug] fix regexp to allow ipc protocol in zmq sockets. Closes: #7089
diff --git a/src/leap/common/events/tests/__init__.py b/src/leap/common/events/tests/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/leap/common/events/tests/__init__.py
diff --git a/src/leap/common/events/tests/test_zmq_components.py b/src/leap/common/events/tests/test_zmq_components.py
new file mode 100644
index 0000000..c51e37e
--- /dev/null
+++ b/src/leap/common/events/tests/test_zmq_components.py
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+# test_zmq_components.py
+# Copyright (C) 2014 LEAP
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+"""
+Tests for the zmq_components module.
+"""
+try:
+ import unittest2 as unittest
+except ImportError:
+ import unittest
+
+from leap.common.events import zmq_components
+
+
+class AddrParseTestCase(unittest.TestCase):
+
+ def setUp(self):
+ pass
+
+ def tearDown(self):
+ pass
+
+ def test_addr_parsing(self):
+ addr_re = zmq_components.ADDRESS_RE
+
+ self.assertEqual(
+ addr_re.search("ipc:///tmp/foo/bar/baaz-2/foo.0").groups(),
+ ("ipc", "/tmp/foo/bar/baaz-2/foo.0", None))
+ self.assertEqual(
+ addr_re.search("tcp://localhost:9000").groups(),
+ ("tcp", "localhost", "9000"))
+ self.assertEqual(
+ addr_re.search("tcp://127.0.0.1:9000").groups(),
+ ("tcp", "127.0.0.1", "9000"))
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/src/leap/common/events/zmq_components.py b/src/leap/common/events/zmq_components.py
index 4fb95d3..3b88862 100644
--- a/src/leap/common/events/zmq_components.py
+++ b/src/leap/common/events/zmq_components.py
@@ -45,7 +45,7 @@ from leap.common.zmq_utils import PUBLIC_KEYS_PREFIX
logger = logging.getLogger(__name__)
-ADDRESS_RE = re.compile("(.+)://(.+):([0-9]+)")
+ADDRESS_RE = re.compile("^([a-z]+)://([^:]+):?(\d+)?$")
class TxZmqComponent(object):
@@ -63,7 +63,7 @@ class TxZmqComponent(object):
"""
self._factory = txzmq.ZmqFactory()
self._factory.registerForShutdown()
- if path_prefix == None:
+ if path_prefix is None:
path_prefix = get_path_prefix()
self._config_prefix = os.path.join(path_prefix, "leap", "events")
self._connections = []
@@ -125,15 +125,19 @@ class TxZmqComponent(object):
socket.curve_publickey = public
socket.curve_secretkey = secret
self._start_thread_auth(connection.socket)
- # check if port was given
- protocol, addr, port = ADDRESS_RE.match(address).groups()
- if port == "0":
- port = socket.bind_to_random_port("%s://%s" % (protocol, addr))
+
+ proto, addr, port = ADDRESS_RE.search(address).groups()
+
+ if port is None:
+ params = proto, addr
+ port = socket.bind("%s://%s" % params)
+ # XXX this log doesn't appear
+ logger.debug("Binded %s to %s://%s." % ((connClass,) + params))
else:
- socket.bind(address)
- port = int(port)
- logger.debug("Binded %s to %s://%s:%d."
- % (connClass, protocol, addr, port))
+ params = proto, addr, int(port)
+ socket.bind("%s://%s:%d" % params)
+ # XXX this log doesn't appear
+ logger.debug("Binded %s to %s://%s:%d." % ((connClass,) + params))
self._connections.append(connection)
return connection, port