Merge pull request #463 from asadoughi/ncp1667
Validate ip_address input on update_port and get_ports
This commit is contained in:
		| @@ -334,7 +334,12 @@ def update_port(context, id, port): | ||||
|                     msg="subnet_id required for ip_address allocation") | ||||
|  | ||||
|             if subnet_id and ip_address: | ||||
|                 ip_netaddr = netaddr.IPAddress(ip_address).ipv6() | ||||
|                 ip_netaddr = None | ||||
|                 try: | ||||
|                     ip_netaddr = netaddr.IPAddress(ip_address).ipv6() | ||||
|                 except netaddr.AddrFormatError: | ||||
|                     raise exceptions.InvalidInput( | ||||
|                         error_message="Invalid format provided for ip_address") | ||||
|                 ip_addresses[ip_netaddr] = subnet_id | ||||
|             else: | ||||
|                 subnet_ids.append(subnet_id) | ||||
| @@ -453,7 +458,12 @@ def get_ports(context, limit=None, sorts=None, marker=None, page_reverse=False, | ||||
|     if "ip_address" in filters: | ||||
|         if not context.is_admin: | ||||
|             raise exceptions.NotAuthorized() | ||||
|         ips = [netaddr.IPAddress(ip) for ip in filters.pop("ip_address")] | ||||
|         ips = [] | ||||
|         try: | ||||
|             ips = [netaddr.IPAddress(ip) for ip in filters.pop("ip_address")] | ||||
|         except netaddr.AddrFormatError: | ||||
|             raise exceptions.InvalidInput( | ||||
|                 error_message="Invalid format provided for ip_address") | ||||
|         query = db_api.port_find_by_ip_address(context, ip_address=ips, | ||||
|                                                scope=db_api.ALL, **filters) | ||||
|         ports = [] | ||||
|   | ||||
| @@ -192,6 +192,13 @@ class TestQuarkGetPortsByIPAddress(test_quark_plugin.TestQuarkPlugin): | ||||
|                 self.plugin.get_ports(self.context, filters=filters, | ||||
|                                       fields=None) | ||||
|  | ||||
|     def test_port_list_malformed_address_bad_request(self): | ||||
|         with self._stubs(ports=[]): | ||||
|             filters = {"ip_address": ["malformed-address-here"]} | ||||
|             admin_ctx = self.context.elevated() | ||||
|             with self.assertRaises(exceptions.BadRequest): | ||||
|                 self.plugin.get_ports(admin_ctx, filters=filters, fields=None) | ||||
|  | ||||
|  | ||||
| class TestQuarkCreatePortFailure(test_quark_plugin.TestQuarkPlugin): | ||||
|     @contextlib.contextmanager | ||||
| @@ -689,6 +696,16 @@ class TestQuarkUpdatePort(test_quark_plugin.TestQuarkPlugin): | ||||
|             with self.assertRaises(exceptions.BadRequest): | ||||
|                 self.plugin.update_port(self.context, 1, new_port) | ||||
|  | ||||
|     def test_update_port_fixed_ip_bad_request_malformed_address(self): | ||||
|         with self._stubs( | ||||
|             port=dict(id=1, name="myport", mac_address="0:0:0:0:0:1") | ||||
|         ) as (port_find, port_update, alloc_ip, dealloc_ip): | ||||
|             new_port = dict(port=dict( | ||||
|                 fixed_ips=[dict(subnet_id=1, | ||||
|                                 ip_address="malformed-address-here")])) | ||||
|             with self.assertRaises(exceptions.BadRequest): | ||||
|                 self.plugin.update_port(self.context, 1, new_port) | ||||
|  | ||||
|     def test_update_port_fixed_ip(self): | ||||
|         with self._stubs( | ||||
|             port=dict(id=1, name="myport", mac_address="0:0:0:0:0:1") | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Justin Hammond
					Justin Hammond