Commit 1ff02d03 authored by Robin Obůrka's avatar Robin Obůrka
Browse files

network: Improve IP/address check

parent 7b8def9a
import re
import socket
import zmq
......@@ -8,7 +9,7 @@ from .exceptions import *
class Resource:
NAME = re.compile("[a-z0-9_-]+")
ADDRESS = re.compile("[a-z0-9_-]+") #TODO Use something better
SIMPLE_ADDRESS = re.compile("[a-z0-9_-]+")
......@@ -35,7 +36,7 @@ class Resource:
if sock_type not in Resource.SOCK_TYPES:
raise SockConfigError("Inadmissible or empty socket type")
if not Resource.ADDRESS.match(address) and address != "*":
if not self.check_address(address):
raise SockConfigError("Inadmissible characters in resource address")
......@@ -57,6 +58,28 @@ class Resource:
self.port = port_number
def check_address(self, address):
if address == "*":
return True
if Resource.SIMPLE_ADDRESS.match(address):
return True
if socket.inet_pton(socket.AF_INET, address):
return True
except OSError:
if socket.inet_pton(socket.AF_INET6, address.strip("[]")):
return True
except OSError:
return False
def get_connection_string(self):
return "tcp://{}:{}".format(self.address, self.port)
......@@ -51,6 +51,7 @@ def bad_resources_mock(request):
"--resource res,connect,PUSH,,8800",
"--resource res,connect,PUSH,,8800",
"--resource res,connect,PUSH,[::1],8800",
def connect_resources_mock(request):
with patch("sys.argv", args_from_string(request.param)) as m:
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment