commit 1087ebf6dadad2cc3ee81ad5ba8dc35e327cb665 Author: Damian Johnson atagar@torproject.org Date: Thu Sep 10 18:20:04 2020 -0700
Allow control connection to IPv6 addresses
Controller.from_port() improperly rejects IPv6 addresses as invalid...
https://github.com/torproject/stem/issues/74
This expands a few other methods to allow IPv6 addresses as well. --- docs/change_log.rst | 1 + stem/connection.py | 4 ++-- stem/control.py | 8 ++++---- 3 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/docs/change_log.rst b/docs/change_log.rst index bbd13ef5..5a9a8928 100644 --- a/docs/change_log.rst +++ b/docs/change_log.rst @@ -61,6 +61,7 @@ The following are only available within Stem's `git repository * Socket based control connections often raised BrokenPipeError when closed * Added :func:`~stem.control.Controller.add_hidden_service_auth`, :func:`~stem.control.Controller.remove_hidden_service_auth`, and :func:`~stem.control.Controller.list_hidden_service_auth` to the :class:`~stem.control.Controller` * Incorrect filesystem encoding broke latin-1 cookie path (:ticket:`57`) + * Allow control connection to IPv6 addresses (:ticket:`74`)
* **Descriptors**
diff --git a/stem/connection.py b/stem/connection.py index f5f92464..68cfda45 100644 --- a/stem/connection.py +++ b/stem/connection.py @@ -357,8 +357,8 @@ async def connect_async(control_port: Tuple[str, Union[str, int]] = ('127.0.0.1' elif control_port: if len(control_port) != 2: raise ValueError('The control_port argument for connect() should be an (address, port) tuple.') - elif not stem.util.connection.is_valid_ipv4_address(control_port[0]): - raise ValueError("'%s' isn't a vaid IPv4 address" % control_port[0]) + elif not stem.util.connection.is_valid_ipv4_address(control_port[0]) and not stem.util.connection.is_valid_ipv6_address(control_port[0]): + raise ValueError("'%s' isn't a vaid address" % control_port[0]) elif control_port[1] != 'default' and not stem.util.connection.is_valid_port(control_port[1]): raise ValueError("'%s' isn't a valid port" % control_port[1])
diff --git a/stem/control.py b/stem/control.py index a232f4db..9a387f55 100644 --- a/stem/control.py +++ b/stem/control.py @@ -1072,7 +1072,7 @@ class Controller(BaseController):
import stem.connection
- if not stem.util.connection.is_valid_ipv4_address(address): + if not stem.util.connection.is_valid_ipv4_address(address) and not stem.util.connection.is_valid_ipv6_address(address): raise ValueError('Invalid IP address: %s' % address) elif port != 'default' and not stem.util.connection.is_valid_port(port): raise ValueError('Invalid port: %s' % port) @@ -2611,7 +2611,7 @@ class Controller(BaseController):
if not stem.util.connection.is_valid_port(port): raise stem.ProtocolError('GETCONF provided an invalid HiddenServicePort port (%s): %s' % (port, content)) - elif not stem.util.connection.is_valid_ipv4_address(target_address): + elif not stem.util.connection.is_valid_ipv4_address(target_address) and not stem.util.connection.is_valid_ipv6_address(target_address): raise stem.ProtocolError('GETCONF provided an invalid HiddenServicePort target address (%s): %s' % (target_address, content)) elif not stem.util.connection.is_valid_port(target_port): raise stem.ProtocolError('GETCONF provided an invalid HiddenServicePort target port (%s): %s' % (target_port, content)) @@ -2722,8 +2722,8 @@ class Controller(BaseController):
if not stem.util.connection.is_valid_port(port): raise ValueError("%s isn't a valid port number" % port) - elif target_address and not stem.util.connection.is_valid_ipv4_address(target_address): - raise ValueError("%s isn't a valid IPv4 address" % target_address) + elif target_address and not stem.util.connection.is_valid_ipv4_address(target_address) and not stem.util.connection.is_valid_ipv6_address(target_address): + raise ValueError("%s isn't a valid IP address" % target_address) elif target_port is not None and not stem.util.connection.is_valid_port(target_port): raise ValueError("%s isn't a valid port number" % target_port) elif auth_type not in (None, 'basic', 'stealth'):
tor-commits@lists.torproject.org