From 1ebec5726c7a9db0a6f29fad0ef747b0c087f702 Mon Sep 17 00:00:00 2001 From: Dan Prince <dprince@redhat.com> Date: Thu, 29 Mar 2012 10:46:59 -0400 Subject: [PATCH] Add validation for OSAPI server name length. Diablo Fix for LP Bug #962515. Change-Id: Ifa1ca56a33ca517679fa80bfd10b962eeebe3a76 --- nova/api/openstack/create_instance_helper.py | 4 ++++ nova/tests/api/openstack/test_servers.py | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 0 deletions(-) diff --git a/nova/api/openstack/create_instance_helper.py b/nova/api/openstack/create_instance_helper.py index e27ddf7..117dc89 100644 --- a/nova/api/openstack/create_instance_helper.py +++ b/nova/api/openstack/create_instance_helper.py @@ -248,6 +248,10 @@ class CreateInstanceHelper(object): msg = _("Server name is an empty string") raise exc.HTTPBadRequest(explanation=msg) + if not len(value) < 256: + msg = _("Server name must be less than 256 characters.") + raise exc.HTTPBadRequest(explanation=msg) + def _get_kernel_ramdisk_from_image(self, req, image_service, image_id): """Fetch an image from the ImageService, then if present, return the associated kernel and ramdisk image IDs. diff --git a/nova/tests/api/openstack/test_servers.py b/nova/tests/api/openstack/test_servers.py index 6412654..c90a3c9 100644 --- a/nova/tests/api/openstack/test_servers.py +++ b/nova/tests/api/openstack/test_servers.py @@ -2294,6 +2294,16 @@ class ServersTest(test.TestCase): self.assertEqual(res_dict['server']['id'], 1) self.assertEqual(res_dict['server']['name'], 'server_test') + def test_update_server_name_too_long_v1_1(self): + self.stubs.Set(nova.db.api, 'instance_get', + return_server_with_attributes(name='server_test')) + req = webob.Request.blank('/v1.1/fake/servers/1') + req.method = 'PUT' + req.content_type = 'application/json' + req.body = json.dumps({'server': {'name': 'x' * 256}}) + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(res.status_int, 400) + def test_update_server_access_ipv4_v1_1(self): self.stubs.Set(nova.db.api, 'instance_get', return_server_with_attributes(access_ipv4='0.0.0.0')) @@ -3634,6 +3644,15 @@ class TestServerInstanceCreation(test.TestCase): self.assertEquals(server.nodeName, 'server') self.assertEqual(16, len(server.getAttribute('adminPass'))) + def test_create_instance_with_name_too_long(self): + personality = None + body_dict = self._create_personality_request_dict(personality) + body_dict['server']['name'] = 'X' * 256 + request = self._get_create_request_json(body_dict) + compute_api, response = \ + self._run_create_instance_with_mock_compute_api(request) + self.assertEquals(response.status_int, 400) + class TestGetKernelRamdiskFromImage(test.TestCase): """