summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorAnthony Young <sleepsonthefloor@gmail.com>2012-01-24 17:05:20 -0800
committerVishvananda Ishaya <vishvananda@gmail.com>2012-01-25 20:48:41 -0800
commitca22fc9d3114ebb9d8b1e07f951941ac2028a1c1 (patch)
tree8e71aee96b1e08734773f2623669b34b10d26813 /nova/api
parent13dafc977d5ac79e3cbf2e324bb0250ed343d7a2 (diff)
Fix authorization checks for simple_usage.show
* Normal users shouls be allowed to query their own usage info * Fixes bug 921327 * Address bcwaldon's comment about using a default {} in authorize * Remove is_admin references * Rebase and change expected auth failure response from 401 to 403 * Remove policy-related tests * Add back test_verify_show_cant_view_other_tenant, implemented with test policy Change-Id: Ib0ce46419b7aedad34de957bfe2e60b10c5af11c
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/compute/contrib/simple_tenant_usage.py16
-rw-r--r--nova/api/openstack/extensions.py6
2 files changed, 10 insertions, 12 deletions
diff --git a/nova/api/openstack/compute/contrib/simple_tenant_usage.py b/nova/api/openstack/compute/contrib/simple_tenant_usage.py
index 576f37fd8..eb32e9f08 100644
--- a/nova/api/openstack/compute/contrib/simple_tenant_usage.py
+++ b/nova/api/openstack/compute/contrib/simple_tenant_usage.py
@@ -29,7 +29,10 @@ from nova import flags
FLAGS = flags.FLAGS
-authorize = extensions.extension_authorizer('compute', 'simple_tenant_usage')
+authorize_show = extensions.extension_authorizer('compute',
+ 'simple_tenant_usage:show')
+authorize_list = extensions.extension_authorizer('compute',
+ 'simple_tenant_usage:list')
def make_usage(elem):
@@ -110,8 +113,6 @@ class SimpleTenantUsageController(object):
period_start,
period_stop,
tenant_id)
- from nova import log as logging
- logging.info(instances)
rval = {}
flavors = {}
@@ -212,10 +213,8 @@ class SimpleTenantUsageController(object):
def index(self, req):
"""Retrive tenant_usage for all tenants"""
context = req.environ['nova.context']
- authorize(context)
- if not context.is_admin:
- return webob.Response(status_int=403)
+ authorize_list(context)
(period_start, period_stop, detailed) = self._get_datetime_range(req)
usages = self._tenant_usages_for_period(context,
@@ -229,11 +228,8 @@ class SimpleTenantUsageController(object):
"""Retrive tenant_usage for a specified tenant"""
tenant_id = id
context = req.environ['nova.context']
- authorize(context)
- if not context.is_admin:
- if tenant_id != context.project_id:
- return webob.Response(status_int=403)
+ authorize_show(context, {'project_id': tenant_id})
(period_start, period_stop, ignore) = self._get_datetime_range(req)
usage = self._tenant_usages_for_period(context,
diff --git a/nova/api/openstack/extensions.py b/nova/api/openstack/extensions.py
index bf415765c..b40920f40 100644
--- a/nova/api/openstack/extensions.py
+++ b/nova/api/openstack/extensions.py
@@ -379,9 +379,11 @@ def load_standard_extensions(ext_mgr, logger, path, package):
def extension_authorizer(api_name, extension_name):
- def authorize(context):
+ def authorize(context, target=None):
+ if target == None:
+ target = {}
action = '%s_extension:%s' % (api_name, extension_name)
- nova.policy.enforce(context, action, {})
+ nova.policy.enforce(context, action, target)
return authorize