Sophie

Sophie

distrib > Fedora > 16 > i386 > by-pkgid > 5c655bb31b7eacedb96e8b5da992c6ce > files > 8

openstack-nova-2011.3.1-11.fc16.src.rpm

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):
     """