diff options
| author | Wu Wenxiang <wu.wenxiang@99cloud.net> | 2013-06-16 04:18:05 +0800 |
|---|---|---|
| committer | Wu Wenxiang <wu.wenxiang@99cloud.net> | 2013-06-16 05:23:50 +0800 |
| commit | 76e3183ead6ac52fc744f51313bc0fd3b5f4d610 (patch) | |
| tree | 84f838d62cab03f99cf1b405002f341682292b94 /keystone/identity | |
| parent | 3c687d17016cb8efcfdce2de0d2f923121917fcb (diff) | |
| download | keystone-76e3183ead6ac52fc744f51313bc0fd3b5f4d610.tar.gz keystone-76e3183ead6ac52fc744f51313bc0fd3b5f4d610.tar.xz keystone-76e3183ead6ac52fc744f51313bc0fd3b5f4d610.zip | |
Http 400 when project enabled is not a boolean
Having enabled="true" in json data when updating tenant will produce 500
When updating a project, no type check was performed on the enabled
attribute. Therefore, if enabled value in JSON/XML is not a boolean but
a string, keystone responds with an incorrect Http 500 error code and
the stacktrace.
The change introduces a type validation of the enabled attribute at
identity manager. If the type is not a boolean, keystone now returns an
appropriate Http 400 error code with a message pointing a bad format for
the attribute.
Test cases have been added to file test_backend and test_content_types
for testing the case when enabled attribute is a string or int when
updating project.
Fixes bug #1191384
Change-Id: I86dd7e71d4bac1e3fd6fcabaa1a2136a47722e5f
Diffstat (limited to 'keystone/identity')
| -rw-r--r-- | keystone/identity/core.py | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/keystone/identity/core.py b/keystone/identity/core.py index 205c8849..1c2a5508 100644 --- a/keystone/identity/core.py +++ b/keystone/identity/core.py @@ -93,6 +93,12 @@ class Manager(manager.Manager): tenant['description'] = '' return self.driver.create_project(tenant_id, tenant) + def update_project(self, context, tenant_id, tenant_ref): + tenant = tenant_ref.copy() + if 'enabled' in tenant: + tenant['enabled'] = clean.project_enabled(tenant['enabled']) + return self.driver.update_project(tenant_id, tenant) + class Driver(object): """Interface description for an Identity driver.""" |
