Standarize ip validation along the code

Details:
 - Use the nova/utils.py validations along the code
 - refactor ipv4 validator to looks like ipv6 validator
 - interprets ip validations exceptions as Invalid IP values

Change-Id: Ia506c00510a066e167d3dcd9dd371a371129a9dd
This commit is contained in:
Mauro S. M. Rodrigues 2013-02-15 08:19:00 -05:00
parent 71047567ee
commit 481c314d6a
7 changed files with 14 additions and 37 deletions

View File

@ -442,7 +442,7 @@ class Validator(wsgi.Middleware):
'image_id': validator.validate_ec2_id, 'image_id': validator.validate_ec2_id,
'attribute': validator.validate_str(), 'attribute': validator.validate_str(),
'image_location': validator.validate_image_path, 'image_location': validator.validate_image_path,
'public_ip': validator.validate_ipv4, 'public_ip': utils.is_valid_ipv4,
'region_name': validator.validate_str(), 'region_name': validator.validate_str(),
'group_name': validator.validate_str(max_length=255), 'group_name': validator.validate_str(max_length=255),
'group_description': validator.validate_str(max_length=255), 'group_description': validator.validate_str(max_length=255),

View File

@ -14,7 +14,6 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License # under the License
import socket
import urllib import urllib
import webob import webob
@ -25,6 +24,7 @@ from nova.api.openstack import xmlutil
from nova import exception from nova import exception
from nova import network from nova import network
from nova.openstack.common import log as logging from nova.openstack.common import log as logging
from nova import utils
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
@ -210,15 +210,8 @@ class FloatingIPDNSEntryController(object):
floating_ip = None floating_ip = None
# Check whether id is a valid ipv4/ipv6 address. # Check whether id is a valid ipv4/ipv6 address.
try: if utils.is_valid_ipv4(id) or utils.is_valid_ipv6(id):
socket.inet_pton(socket.AF_INET, id)
floating_ip = id floating_ip = id
except socket.error:
try:
socket.inet_pton(socket.AF_INET6, id)
floating_ip = id
except socket.error:
pass
if floating_ip: if floating_ip:
entries = self.network_api.get_dns_entries_by_address(context, entries = self.network_api.get_dns_entries_by_address(context,

View File

@ -17,7 +17,6 @@
import base64 import base64
import os import os
import re import re
import socket
from oslo.config import cfg from oslo.config import cfg
import webob import webob
@ -704,16 +703,12 @@ class Controller(wsgi.Controller):
raise exc.HTTPBadRequest(explanation=expl) raise exc.HTTPBadRequest(explanation=expl)
def _validate_access_ipv4(self, address): def _validate_access_ipv4(self, address):
try: if not utils.is_valid_ipv4(address):
socket.inet_aton(address)
except socket.error:
expl = _('accessIPv4 is not proper IPv4 format') expl = _('accessIPv4 is not proper IPv4 format')
raise exc.HTTPBadRequest(explanation=expl) raise exc.HTTPBadRequest(explanation=expl)
def _validate_access_ipv6(self, address): def _validate_access_ipv6(self, address):
try: if not utils.is_valid_ipv6(address):
socket.inet_pton(socket.AF_INET6, address)
except socket.error:
expl = _('accessIPv6 is not proper IPv6 format') expl = _('accessIPv6 is not proper IPv6 format')
raise exc.HTTPBadRequest(explanation=expl) raise exc.HTTPBadRequest(explanation=expl)

View File

@ -18,7 +18,6 @@
import base64 import base64
import re import re
import socket
from nova.openstack.common import log as logging from nova.openstack.common import log as logging
@ -94,14 +93,6 @@ def validate_image_path(val):
return True return True
def validate_ipv4(addr):
try:
socket.inet_aton(addr)
except (socket.error, TypeError):
return False
return True
def validate_user_data(user_data): def validate_user_data(user_data):
"""Check if the user_data is encoded properly.""" """Check if the user_data is encoded properly."""
try: try:

View File

@ -73,14 +73,6 @@ class ValidatorTestCase(test.TestCase):
self.assertFalse(validator.validate_ec2_id(1234)) self.assertFalse(validator.validate_ec2_id(1234))
self.assertTrue(validator.validate_ec2_id('i-284f3a41')) self.assertTrue(validator.validate_ec2_id('i-284f3a41'))
def test_validate_ipv4(self):
self.assertTrue(validator.validate_ipv4('4.2.2.4'))
self.assertFalse(validator.validate_ipv4('foobar'))
self.assertFalse(
validator.validate_ipv4('2001:5a8:4:68e0:e6ce:8fff:fe27:d116'))
self.assertFalse(validator.validate_ipv4(123))
self.assertFalse(validator.validate_ipv4(''))
def test_validate_url_path(self): def test_validate_url_path(self):
self.assertTrue(validator.validate_url_path('/path/to/file')) self.assertTrue(validator.validate_url_path('/path/to/file'))
self.assertFalse(validator.validate_url_path('path/to/file')) self.assertFalse(validator.validate_url_path('path/to/file'))

View File

@ -515,6 +515,8 @@ class GenericUtilsTestCase(test.TestCase):
self.assertTrue(utils.is_valid_ipv4('127.0.0.1')) self.assertTrue(utils.is_valid_ipv4('127.0.0.1'))
self.assertFalse(utils.is_valid_ipv4('::1')) self.assertFalse(utils.is_valid_ipv4('::1'))
self.assertFalse(utils.is_valid_ipv4('bacon')) self.assertFalse(utils.is_valid_ipv4('bacon'))
self.assertFalse(utils.is_valid_ipv4(""))
self.assertFalse(utils.is_valid_ipv4(10))
def test_is_valid_ipv6(self): def test_is_valid_ipv6(self):
self.assertTrue(utils.is_valid_ipv6("::1")) self.assertTrue(utils.is_valid_ipv6("::1"))
@ -524,6 +526,8 @@ class GenericUtilsTestCase(test.TestCase):
"0000:0000:0000:0000:0000:0000:0000:0001")) "0000:0000:0000:0000:0000:0000:0000:0001"))
self.assertFalse(utils.is_valid_ipv6("foo")) self.assertFalse(utils.is_valid_ipv6("foo"))
self.assertFalse(utils.is_valid_ipv6("127.0.0.1")) self.assertFalse(utils.is_valid_ipv6("127.0.0.1"))
self.assertFalse(utils.is_valid_ipv6(""))
self.assertFalse(utils.is_valid_ipv6(10))
def test_is_valid_ipv6_cidr(self): def test_is_valid_ipv6_cidr(self):
self.assertTrue(utils.is_valid_ipv6_cidr("2600::/64")) self.assertTrue(utils.is_valid_ipv6_cidr("2600::/64"))

View File

@ -945,14 +945,16 @@ def is_valid_boolstr(val):
def is_valid_ipv4(address): def is_valid_ipv4(address):
"""Verify that address represents a valid IPv4 address.""" """Verify that address represents a valid IPv4 address."""
try: try:
addr = netaddr.IPAddress(address) return netaddr.valid_ipv4(address)
return addr.version == 4
except Exception: except Exception:
return False return False
def is_valid_ipv6(address): def is_valid_ipv6(address):
try:
return netaddr.valid_ipv6(address) return netaddr.valid_ipv6(address)
except Exception:
return False
def is_valid_ipv6_cidr(address): def is_valid_ipv6_cidr(address):