Rename NotAuthorized exception to Forbidden

The NotAuthorized NovaException has an internal code of 403 which is
actually Forbidden, so rename it appropriately.

This patch doesn't change the external behavior, the status code in
responses will still be 403 but the exception is just named properly.

This is also necessary to create an actual Unauthorized NovaException
with code 401 for use in some Neutron API bug fixes for more granular
error handling from python-neutronclient.

Related-Bug: #1298075

Change-Id: I691fac2e2c797f47c04da7965d7b1c8685c74edb
This commit is contained in:
Matt Riedemann 2014-03-30 14:40:38 -07:00
parent 296f2fa183
commit c75a15a489
31 changed files with 92 additions and 92 deletions

View File

@ -562,7 +562,7 @@ class Executor(wsgi.Application):
exception.MissingParameter, exception.MissingParameter,
exception.NoFloatingIpInterface, exception.NoFloatingIpInterface,
exception.NoMoreFixedIps, exception.NoMoreFixedIps,
exception.NotAuthorized, exception.Forbidden,
exception.QuotaError, exception.QuotaError,
exception.SecurityGroupExists, exception.SecurityGroupExists,
exception.SecurityGroupLimitExceeded, exception.SecurityGroupLimitExceeded,

View File

@ -1657,7 +1657,7 @@ class CloudController(object):
return self.image_service.update(context, internal_id, image) return self.image_service.update(context, internal_id, image)
except exception.ImageNotAuthorized: except exception.ImageNotAuthorized:
msg = _('Not allowed to modify attributes for image %s') % image_id msg = _('Not allowed to modify attributes for image %s') % image_id
raise exception.NotAuthorized(message=msg) raise exception.Forbidden(message=msg)
def update_image(self, context, image_id, **kwargs): def update_image(self, context, image_id, **kwargs):
internal_id = ec2utils.ec2_id_to_id(image_id) internal_id = ec2utils.ec2_id_to_id(image_id)

View File

@ -91,7 +91,7 @@ def get_instance_by_floating_ip_addr(self, context, address):
def disassociate_floating_ip(self, context, instance, address): def disassociate_floating_ip(self, context, instance, address):
try: try:
self.network_api.disassociate_floating_ip(context, instance, address) self.network_api.disassociate_floating_ip(context, instance, address)
except exception.NotAuthorized: except exception.Forbidden:
raise webob.exc.HTTPForbidden() raise webob.exc.HTTPForbidden()
except exception.CannotDisassociateAutoAssignedFloatingIP: except exception.CannotDisassociateAutoAssignedFloatingIP:
msg = _('Cannot disassociate auto assigned floating ip') msg = _('Cannot disassociate auto assigned floating ip')
@ -258,7 +258,7 @@ class FloatingIPActionController(wsgi.Controller):
msg = _('l3driver call to add floating ip failed') msg = _('l3driver call to add floating ip failed')
raise webob.exc.HTTPBadRequest(explanation=msg) raise webob.exc.HTTPBadRequest(explanation=msg)
except (exception.FloatingIpNotFoundForAddress, except (exception.FloatingIpNotFoundForAddress,
exception.NotAuthorized): exception.Forbidden):
msg = _('floating ip not found') msg = _('floating ip not found')
raise webob.exc.HTTPNotFound(explanation=msg) raise webob.exc.HTTPNotFound(explanation=msg)
except Exception: except Exception:

View File

@ -103,7 +103,7 @@ class QuotaSetsController(wsgi.Controller):
nova.context.authorize_project_context(context, id) nova.context.authorize_project_context(context, id)
return self._format_quota_set(id, return self._format_quota_set(id,
self._get_quotas(context, id, user_id=user_id)) self._get_quotas(context, id, user_id=user_id))
except exception.NotAuthorized: except exception.Forbidden:
raise webob.exc.HTTPForbidden() raise webob.exc.HTTPForbidden()
@wsgi.serializers(xml=QuotaTemplate) @wsgi.serializers(xml=QuotaTemplate)
@ -133,7 +133,7 @@ class QuotaSetsController(wsgi.Controller):
try: try:
settable_quotas = QUOTAS.get_settable_quotas(context, project_id, settable_quotas = QUOTAS.get_settable_quotas(context, project_id,
user_id=user_id) user_id=user_id)
except exception.NotAuthorized: except exception.Forbidden:
raise webob.exc.HTTPForbidden() raise webob.exc.HTTPForbidden()
if not self.is_valid_body(body, 'quota_set'): if not self.is_valid_body(body, 'quota_set'):
@ -165,7 +165,7 @@ class QuotaSetsController(wsgi.Controller):
try: try:
quotas = self._get_quotas(context, id, user_id=user_id, quotas = self._get_quotas(context, id, user_id=user_id,
usages=True) usages=True)
except exception.NotAuthorized: except exception.Forbidden:
raise webob.exc.HTTPForbidden() raise webob.exc.HTTPForbidden()
for key, value in quota_set.items(): for key, value in quota_set.items():
@ -227,7 +227,7 @@ class QuotaSetsController(wsgi.Controller):
else: else:
QUOTAS.destroy_all_by_project(context, id) QUOTAS.destroy_all_by_project(context, id)
return webob.Response(status_int=202) return webob.Response(status_int=202)
except exception.NotAuthorized: except exception.Forbidden:
raise webob.exc.HTTPForbidden() raise webob.exc.HTTPForbidden()
raise webob.exc.HTTPNotFound() raise webob.exc.HTTPNotFound()

View File

@ -87,7 +87,7 @@ class QuotaSetsController(wsgi.Controller):
nova.context.authorize_project_context(context, id) nova.context.authorize_project_context(context, id)
return self._format_quota_set(id, return self._format_quota_set(id,
self._get_quotas(context, id, user_id=user_id)) self._get_quotas(context, id, user_id=user_id))
except exception.NotAuthorized: except exception.Forbidden:
raise webob.exc.HTTPForbidden() raise webob.exc.HTTPForbidden()
@extensions.expected_errors(403) @extensions.expected_errors(403)
@ -100,7 +100,7 @@ class QuotaSetsController(wsgi.Controller):
return self._format_quota_set(id, self._get_quotas(context, id, return self._format_quota_set(id, self._get_quotas(context, id,
user_id=user_id, user_id=user_id,
usages=True)) usages=True))
except exception.NotAuthorized: except exception.Forbidden:
raise webob.exc.HTTPForbidden() raise webob.exc.HTTPForbidden()
@extensions.expected_errors((400, 403)) @extensions.expected_errors((400, 403))
@ -142,13 +142,13 @@ class QuotaSetsController(wsgi.Controller):
try: try:
settable_quotas = QUOTAS.get_settable_quotas(context, project_id, settable_quotas = QUOTAS.get_settable_quotas(context, project_id,
user_id=user_id) user_id=user_id)
except exception.NotAuthorized: except exception.Forbidden:
raise webob.exc.HTTPForbidden() raise webob.exc.HTTPForbidden()
try: try:
quotas = self._get_quotas(context, id, user_id=user_id, quotas = self._get_quotas(context, id, user_id=user_id,
usages=True) usages=True)
except exception.NotAuthorized: except exception.Forbidden:
raise webob.exc.HTTPForbidden() raise webob.exc.HTTPForbidden()
LOG.debug(_("Force update quotas: %s"), force_update) LOG.debug(_("Force update quotas: %s"), force_update)
@ -214,7 +214,7 @@ class QuotaSetsController(wsgi.Controller):
id, user_id) id, user_id)
else: else:
QUOTAS.destroy_all_by_project(context, id) QUOTAS.destroy_all_by_project(context, id)
except exception.NotAuthorized: except exception.Forbidden:
raise webob.exc.HTTPForbidden() raise webob.exc.HTTPForbidden()

View File

@ -401,7 +401,7 @@ def soft_extension_authorizer(api_name, extension_name):
try: try:
hard_authorize(context, action=action) hard_authorize(context, action=action)
return True return True
except exception.NotAuthorized: except exception.Forbidden:
return False return False
return authorize return authorize

View File

@ -677,7 +677,7 @@ class ResourceExceptionHandler(object):
if not ex_value: if not ex_value:
return True return True
if isinstance(ex_value, exception.NotAuthorized): if isinstance(ex_value, exception.Forbidden):
raise Fault(webob.exc.HTTPForbidden( raise Fault(webob.exc.HTTPForbidden(
explanation=ex_value.format_message())) explanation=ex_value.format_message()))
elif isinstance(ex_value, exception.Invalid): elif isinstance(ex_value, exception.Invalid):

View File

@ -196,35 +196,35 @@ def require_admin_context(ctxt):
def require_context(ctxt): def require_context(ctxt):
"""Raise exception.NotAuthorized() if context is not a user or an """Raise exception.Forbidden() if context is not a user or an
admin context. admin context.
""" """
if not ctxt.is_admin and not is_user_context(ctxt): if not ctxt.is_admin and not is_user_context(ctxt):
raise exception.NotAuthorized() raise exception.Forbidden()
def authorize_project_context(context, project_id): def authorize_project_context(context, project_id):
"""Ensures a request has permission to access the given project.""" """Ensures a request has permission to access the given project."""
if is_user_context(context): if is_user_context(context):
if not context.project_id: if not context.project_id:
raise exception.NotAuthorized() raise exception.Forbidden()
elif context.project_id != project_id: elif context.project_id != project_id:
raise exception.NotAuthorized() raise exception.Forbidden()
def authorize_user_context(context, user_id): def authorize_user_context(context, user_id):
"""Ensures a request has permission to access the given user.""" """Ensures a request has permission to access the given user."""
if is_user_context(context): if is_user_context(context):
if not context.user_id: if not context.user_id:
raise exception.NotAuthorized() raise exception.Forbidden()
elif context.user_id != user_id: elif context.user_id != user_id:
raise exception.NotAuthorized() raise exception.Forbidden()
def authorize_quota_class_context(context, class_name): def authorize_quota_class_context(context, class_name):
"""Ensures a request has permission to access the given quota class.""" """Ensures a request has permission to access the given quota class."""
if is_user_context(context): if is_user_context(context):
if not context.quota_class: if not context.quota_class:
raise exception.NotAuthorized() raise exception.Forbidden()
elif context.quota_class != class_name: elif context.quota_class != class_name:
raise exception.NotAuthorized() raise exception.Forbidden()

View File

@ -161,17 +161,17 @@ class GlanceConnectionFailed(NovaException):
"%(reason)s") "%(reason)s")
class NotAuthorized(NovaException): class Forbidden(NovaException):
ec2_code = 'AuthFailure' ec2_code = 'AuthFailure'
msg_fmt = _("Not authorized.") msg_fmt = _("Not authorized.")
code = 403 code = 403
class AdminRequired(NotAuthorized): class AdminRequired(Forbidden):
msg_fmt = _("User does not have admin privileges") msg_fmt = _("User does not have admin privileges")
class PolicyNotAuthorized(NotAuthorized): class PolicyNotAuthorized(Forbidden):
msg_fmt = _("Policy doesn't allow %(action)s to be performed.") msg_fmt = _("Policy doesn't allow %(action)s to be performed.")
@ -625,7 +625,7 @@ class NetworkRequiresSubnet(Invalid):
" instances on.") " instances on.")
class ExternalNetworkAttachForbidden(NotAuthorized): class ExternalNetworkAttachForbidden(Forbidden):
msg_fmt = _("It is not allowed to create an interface on " msg_fmt = _("It is not allowed to create an interface on "
"external network %(network_uuid)s") "external network %(network_uuid)s")

View File

@ -571,7 +571,7 @@ def _translate_image_exception(image_id, exc_value):
def _translate_plain_exception(exc_value): def _translate_plain_exception(exc_value):
if isinstance(exc_value, (glanceclient.exc.Forbidden, if isinstance(exc_value, (glanceclient.exc.Forbidden,
glanceclient.exc.Unauthorized)): glanceclient.exc.Unauthorized)):
return exception.NotAuthorized(unicode(exc_value)) return exception.Forbidden(unicode(exc_value))
if isinstance(exc_value, glanceclient.exc.NotFound): if isinstance(exc_value, glanceclient.exc.NotFound):
return exception.NotFound(unicode(exc_value)) return exception.NotFound(unicode(exc_value))
if isinstance(exc_value, glanceclient.exc.BadRequest): if isinstance(exc_value, glanceclient.exc.BadRequest):

View File

@ -72,10 +72,10 @@ class MockKeyManager(key_mgr.KeyManager):
"""Creates a key. """Creates a key.
This implementation returns a UUID for the created key. A This implementation returns a UUID for the created key. A
NotAuthorized exception is raised if the specified context is None. Forbidden exception is raised if the specified context is None.
""" """
if ctxt is None: if ctxt is None:
raise exception.NotAuthorized() raise exception.Forbidden()
key = self._generate_key(**kwargs) key = self._generate_key(**kwargs)
return self.store_key(ctxt, key) return self.store_key(ctxt, key)
@ -90,7 +90,7 @@ class MockKeyManager(key_mgr.KeyManager):
def store_key(self, ctxt, key, **kwargs): def store_key(self, ctxt, key, **kwargs):
"""Stores (i.e., registers) a key with the key manager.""" """Stores (i.e., registers) a key with the key manager."""
if ctxt is None: if ctxt is None:
raise exception.NotAuthorized() raise exception.Forbidden()
key_id = self._generate_key_id() key_id = self._generate_key_id()
self.keys[key_id] = key self.keys[key_id] = key
@ -99,7 +99,7 @@ class MockKeyManager(key_mgr.KeyManager):
def copy_key(self, ctxt, key_id, **kwargs): def copy_key(self, ctxt, key_id, **kwargs):
if ctxt is None: if ctxt is None:
raise exception.NotAuthorized() raise exception.Forbidden()
copied_key_id = self._generate_key_id() copied_key_id = self._generate_key_id()
self.keys[copied_key_id] = self.keys[key_id] self.keys[copied_key_id] = self.keys[key_id]
@ -110,21 +110,21 @@ class MockKeyManager(key_mgr.KeyManager):
"""Retrieves the key identified by the specified id. """Retrieves the key identified by the specified id.
This implementation returns the key that is associated with the This implementation returns the key that is associated with the
specified UUID. A NotAuthorized exception is raised if the specified specified UUID. A Forbidden exception is raised if the specified
context is None; a KeyError is raised if the UUID is invalid. context is None; a KeyError is raised if the UUID is invalid.
""" """
if ctxt is None: if ctxt is None:
raise exception.NotAuthorized() raise exception.Forbidden()
return self.keys[key_id] return self.keys[key_id]
def delete_key(self, ctxt, key_id, **kwargs): def delete_key(self, ctxt, key_id, **kwargs):
"""Deletes the key identified by the specified id. """Deletes the key identified by the specified id.
A NotAuthorized exception is raised if the context is None and a A Forbidden exception is raised if the context is None and a
KeyError is raised if the UUID is invalid. KeyError is raised if the UUID is invalid.
""" """
if ctxt is None: if ctxt is None:
raise exception.NotAuthorized() raise exception.Forbidden()
del self.keys[key_id] del self.keys[key_id]

View File

@ -63,7 +63,7 @@ class SingleKeyManager(mock_key_mgr.MockKeyManager):
def delete_key(self, ctxt, key_id, **kwargs): def delete_key(self, ctxt, key_id, **kwargs):
if ctxt is None: if ctxt is None:
raise exception.NotAuthorized() raise exception.Forbidden()
if key_id != self.key_id: if key_id != self.key_id:
raise exception.KeyManagerError( raise exception.KeyManagerError(

View File

@ -199,13 +199,13 @@ class FloatingIP(object):
if floating_ip.project_id is None: if floating_ip.project_id is None:
LOG.warn(_('Address |%(address)s| is not allocated'), LOG.warn(_('Address |%(address)s| is not allocated'),
{'address': floating_ip.address}) {'address': floating_ip.address})
raise exception.NotAuthorized() raise exception.Forbidden()
else: else:
LOG.warn(_('Address |%(address)s| is not allocated to your ' LOG.warn(_('Address |%(address)s| is not allocated to your '
'project |%(project)s|'), 'project |%(project)s|'),
{'address': floating_ip.address, {'address': floating_ip.address,
'project': context.project_id}) 'project': context.project_id})
raise exception.NotAuthorized() raise exception.Forbidden()
def allocate_floating_ip(self, context, project_id, auto_assigned=False, def allocate_floating_ip(self, context, project_id, auto_assigned=False,
pool=None): pool=None):
@ -532,7 +532,7 @@ class FloatingIP(object):
def _is_stale_floating_ip_address(self, context, floating_ip): def _is_stale_floating_ip_address(self, context, floating_ip):
try: try:
self._floating_ip_owned_by_project(context, floating_ip) self._floating_ip_owned_by_project(context, floating_ip)
except exception.NotAuthorized: except exception.Forbidden:
return True return True
return False if floating_ip.get('fixed_ip_id') else True return False if floating_ip.get('fixed_ip_id') else True

View File

@ -111,7 +111,7 @@ class FlavorsExtraSpecsTest(test.TestCase):
req = fakes.HTTPRequest.blank('/v2/fake/flavors/1/os-extra_specs' + req = fakes.HTTPRequest.blank('/v2/fake/flavors/1/os-extra_specs' +
'/key5') '/key5')
self.assertRaises(exception.NotAuthorized, self.controller.delete, self.assertRaises(exception.Forbidden, self.controller.delete,
req, 1, 'key 5') req, 1, 'key 5')
def test_delete_spec_not_found(self): def test_delete_spec_not_found(self):
@ -139,7 +139,7 @@ class FlavorsExtraSpecsTest(test.TestCase):
body = {"extra_specs": {"key1": "value1"}} body = {"extra_specs": {"key1": "value1"}}
req = fakes.HTTPRequest.blank('/v2/fake/flavors/1/os-extra_specs') req = fakes.HTTPRequest.blank('/v2/fake/flavors/1/os-extra_specs')
self.assertRaises(exception.NotAuthorized, self.controller.create, self.assertRaises(exception.Forbidden, self.controller.create,
req, 1, body) req, 1, body)
def _test_create_bad_request(self, body): def _test_create_bad_request(self, body):
@ -216,7 +216,7 @@ class FlavorsExtraSpecsTest(test.TestCase):
req = fakes.HTTPRequest.blank('/v2/fake/flavors/1/os-extra_specs' + req = fakes.HTTPRequest.blank('/v2/fake/flavors/1/os-extra_specs' +
'/key1') '/key1')
self.assertRaises(exception.NotAuthorized, self.controller.update, self.assertRaises(exception.Forbidden, self.controller.update,
req, 1, 'key1', body) req, 1, 'key1', body)
def _test_update_item_bad_request(self, body): def _test_update_item_bad_request(self, body):

View File

@ -406,7 +406,7 @@ class FloatingIpTest(test.TestCase):
def fake_associate_floating_ip(self, context, instance, def fake_associate_floating_ip(self, context, instance,
floating_address, fixed_address, floating_address, fixed_address,
affect_auto_assigned=False): affect_auto_assigned=False):
raise exception.NotAuthorized() raise exception.Forbidden()
self.stubs.Set(network.api.API, "associate_floating_ip", self.stubs.Set(network.api.API, "associate_floating_ip",
fake_associate_floating_ip) fake_associate_floating_ip)
floating_ip = '10.10.10.11' floating_ip = '10.10.10.11'
@ -544,7 +544,7 @@ class FloatingIpTest(test.TestCase):
return 'test_inst' return 'test_inst'
def network_api_disassociate(self, context, instance, address): def network_api_disassociate(self, context, instance, address):
raise exception.NotAuthorized() raise exception.Forbidden()
self.stubs.Set(network.api.API, "get_floating_ip_by_address", self.stubs.Set(network.api.API, "get_floating_ip_by_address",
fake_get_floating_ip_addr_auto_assigned) fake_get_floating_ip_addr_auto_assigned)

View File

@ -58,7 +58,7 @@ class FpingTest(test.TestCase):
def test_fping_index_policy(self): def test_fping_index_policy(self):
req = fakes.HTTPRequest.blank("/v2/1234/os-fping?all_tenants=1") req = fakes.HTTPRequest.blank("/v2/1234/os-fping?all_tenants=1")
self.assertRaises(exception.NotAuthorized, self.controller.index, req) self.assertRaises(exception.Forbidden, self.controller.index, req)
req = fakes.HTTPRequest.blank("/v2/1234/os-fping?all_tenants=1") req = fakes.HTTPRequest.blank("/v2/1234/os-fping?all_tenants=1")
req.environ["nova.context"].is_admin = True req.environ["nova.context"].is_admin = True
res_dict = self.controller.index(req) res_dict = self.controller.index(req)

View File

@ -85,7 +85,7 @@ class InstanceActionsPolicyTest(test.NoDBTestCase):
self.stubs.Set(db, 'instance_get_by_uuid', fake_instance_get_by_uuid) self.stubs.Set(db, 'instance_get_by_uuid', fake_instance_get_by_uuid)
req = fakes.HTTPRequest.blank('/v2/123/servers/12/os-instance-actions') req = fakes.HTTPRequest.blank('/v2/123/servers/12/os-instance-actions')
self.assertRaises(exception.NotAuthorized, self.controller.index, req, self.assertRaises(exception.Forbidden, self.controller.index, req,
str(uuid.uuid4())) str(uuid.uuid4()))
def test_get_action_restricted_by_project(self): def test_get_action_restricted_by_project(self):
@ -104,7 +104,7 @@ class InstanceActionsPolicyTest(test.NoDBTestCase):
self.stubs.Set(db, 'instance_get_by_uuid', fake_instance_get_by_uuid) self.stubs.Set(db, 'instance_get_by_uuid', fake_instance_get_by_uuid)
req = fakes.HTTPRequest.blank( req = fakes.HTTPRequest.blank(
'/v2/123/servers/12/os-instance-actions/1') '/v2/123/servers/12/os-instance-actions/1')
self.assertRaises(exception.NotAuthorized, self.controller.show, req, self.assertRaises(exception.Forbidden, self.controller.show, req,
str(uuid.uuid4()), '1') str(uuid.uuid4()), '1')

View File

@ -384,7 +384,7 @@ class KeypairPolicyTest(test.TestCase):
policy.parse_rule('role:admin')}) policy.parse_rule('role:admin')})
policy.set_rules(rules) policy.set_rules(rules)
req = fakes.HTTPRequest.blank('/v2/fake/os-keypairs') req = fakes.HTTPRequest.blank('/v2/fake/os-keypairs')
self.assertRaises(exception.NotAuthorized, self.assertRaises(exception.Forbidden,
self.KeyPairController.index, self.KeyPairController.index,
req) req)
@ -401,7 +401,7 @@ class KeypairPolicyTest(test.TestCase):
policy.parse_rule('role:admin')}) policy.parse_rule('role:admin')})
policy.set_rules(rules) policy.set_rules(rules)
req = fakes.HTTPRequest.blank('/v2/fake/os-keypairs/FAKE') req = fakes.HTTPRequest.blank('/v2/fake/os-keypairs/FAKE')
self.assertRaises(exception.NotAuthorized, self.assertRaises(exception.Forbidden,
self.KeyPairController.show, self.KeyPairController.show,
req, 'FAKE') req, 'FAKE')
@ -419,7 +419,7 @@ class KeypairPolicyTest(test.TestCase):
policy.set_rules(rules) policy.set_rules(rules)
req = fakes.HTTPRequest.blank('/v2/fake/os-keypairs') req = fakes.HTTPRequest.blank('/v2/fake/os-keypairs')
req.method = 'POST' req.method = 'POST'
self.assertRaises(exception.NotAuthorized, self.assertRaises(exception.Forbidden,
self.KeyPairController.create, self.KeyPairController.create,
req, {}) req, {})
@ -439,7 +439,7 @@ class KeypairPolicyTest(test.TestCase):
policy.set_rules(rules) policy.set_rules(rules)
req = fakes.HTTPRequest.blank('/v2/fake/os-keypairs/FAKE') req = fakes.HTTPRequest.blank('/v2/fake/os-keypairs/FAKE')
req.method = 'DELETE' req.method = 'DELETE'
self.assertRaises(exception.NotAuthorized, self.assertRaises(exception.Forbidden,
self.KeyPairController.delete, self.KeyPairController.delete,
req, 'FAKE') req, 'FAKE')

View File

@ -46,7 +46,7 @@ class ShelvePolicyTest(test.NoDBTestCase):
policy.set_rules(rules) policy.set_rules(rules)
req = fakes.HTTPRequest.blank('/v2/123/servers/12/os-shelve') req = fakes.HTTPRequest.blank('/v2/123/servers/12/os-shelve')
self.assertRaises(exception.NotAuthorized, self.controller._shelve, self.assertRaises(exception.Forbidden, self.controller._shelve,
req, str(uuid.uuid4()), {}) req, str(uuid.uuid4()), {})
def test_shelve_allowed(self): def test_shelve_allowed(self):
@ -57,7 +57,7 @@ class ShelvePolicyTest(test.NoDBTestCase):
self.stubs.Set(db, 'instance_get_by_uuid', fake_instance_get_by_uuid) self.stubs.Set(db, 'instance_get_by_uuid', fake_instance_get_by_uuid)
req = fakes.HTTPRequest.blank('/v2/123/servers/12/os-shelve') req = fakes.HTTPRequest.blank('/v2/123/servers/12/os-shelve')
self.assertRaises(exception.NotAuthorized, self.controller._shelve, self.assertRaises(exception.Forbidden, self.controller._shelve,
req, str(uuid.uuid4()), {}) req, str(uuid.uuid4()), {})
def test_shelve_locked_server(self): def test_shelve_locked_server(self):
@ -75,7 +75,7 @@ class ShelvePolicyTest(test.NoDBTestCase):
policy.set_rules(rules) policy.set_rules(rules)
req = fakes.HTTPRequest.blank('/v2/123/servers/12/os-shelve') req = fakes.HTTPRequest.blank('/v2/123/servers/12/os-shelve')
self.assertRaises(exception.NotAuthorized, self.controller._unshelve, self.assertRaises(exception.Forbidden, self.controller._unshelve,
req, str(uuid.uuid4()), {}) req, str(uuid.uuid4()), {})
def test_unshelve_allowed(self): def test_unshelve_allowed(self):
@ -86,7 +86,7 @@ class ShelvePolicyTest(test.NoDBTestCase):
self.stubs.Set(db, 'instance_get_by_uuid', fake_instance_get_by_uuid) self.stubs.Set(db, 'instance_get_by_uuid', fake_instance_get_by_uuid)
req = fakes.HTTPRequest.blank('/v2/123/servers/12/os-shelve') req = fakes.HTTPRequest.blank('/v2/123/servers/12/os-shelve')
self.assertRaises(exception.NotAuthorized, self.controller._unshelve, self.assertRaises(exception.Forbidden, self.controller._unshelve,
req, str(uuid.uuid4()), {}) req, str(uuid.uuid4()), {})
def test_unshelve_locked_server(self): def test_unshelve_locked_server(self):
@ -104,7 +104,7 @@ class ShelvePolicyTest(test.NoDBTestCase):
policy.set_rules(rules) policy.set_rules(rules)
req = fakes.HTTPRequest.blank('/v2/123/servers/12/os-shelve') req = fakes.HTTPRequest.blank('/v2/123/servers/12/os-shelve')
self.assertRaises(exception.NotAuthorized, self.assertRaises(exception.Forbidden,
self.controller._shelve_offload, req, str(uuid.uuid4()), {}) self.controller._shelve_offload, req, str(uuid.uuid4()), {})
def test_shelve_offload_allowed(self): def test_shelve_offload_allowed(self):
@ -115,7 +115,7 @@ class ShelvePolicyTest(test.NoDBTestCase):
self.stubs.Set(db, 'instance_get_by_uuid', fake_instance_get_by_uuid) self.stubs.Set(db, 'instance_get_by_uuid', fake_instance_get_by_uuid)
req = fakes.HTTPRequest.blank('/v2/123/servers/12/os-shelve') req = fakes.HTTPRequest.blank('/v2/123/servers/12/os-shelve')
self.assertRaises(exception.NotAuthorized, self.assertRaises(exception.Forbidden,
self.controller._shelve_offload, req, str(uuid.uuid4()), {}) self.controller._shelve_offload, req, str(uuid.uuid4()), {})
def test_shelve_offload_locked_server(self): def test_shelve_offload_locked_server(self):

View File

@ -41,7 +41,7 @@ def fake_policy_enforce(context, action, target, do_raise=True):
def fake_policy_enforce_selective(context, action, target, do_raise=True): def fake_policy_enforce_selective(context, action, target, do_raise=True):
if action == 'compute_extension:v3:ext1-alias:discoverable': if action == 'compute_extension:v3:ext1-alias:discoverable':
raise exception.NotAuthorized raise exception.Forbidden
else: else:
return True return True

View File

@ -109,7 +109,7 @@ class FlavorsExtraSpecsTest(test.TestCase):
delete_flavor_extra_specs) delete_flavor_extra_specs)
req = fakes.HTTPRequestV3.blank('/flavors/1/extra-specs/key5') req = fakes.HTTPRequestV3.blank('/flavors/1/extra-specs/key5')
self.assertRaises(exception.NotAuthorized, self.controller.delete, self.assertRaises(exception.Forbidden, self.controller.delete,
req, 1, 'key 5') req, 1, 'key 5')
def test_delete_spec_not_found(self): def test_delete_spec_not_found(self):
@ -138,7 +138,7 @@ class FlavorsExtraSpecsTest(test.TestCase):
body = {"extra_specs": {"key1": "value1"}} body = {"extra_specs": {"key1": "value1"}}
req = fakes.HTTPRequestV3.blank('/flavors/1/extra-specs') req = fakes.HTTPRequestV3.blank('/flavors/1/extra-specs')
self.assertRaises(exception.NotAuthorized, self.controller.create, self.assertRaises(exception.Forbidden, self.controller.create,
req, 1, body) req, 1, body)
def test_create_empty_body(self): def test_create_empty_body(self):
@ -223,7 +223,7 @@ class FlavorsExtraSpecsTest(test.TestCase):
body = {"key1": "value1"} body = {"key1": "value1"}
req = fakes.HTTPRequestV3.blank('/flavors/1/extra-specs/key1') req = fakes.HTTPRequestV3.blank('/flavors/1/extra-specs/key1')
self.assertRaises(exception.NotAuthorized, self.controller.update, self.assertRaises(exception.Forbidden, self.controller.update,
req, 1, 'key1', body) req, 1, 'key1', body)
def test_update_item_empty_body(self): def test_update_item_empty_body(self):

View File

@ -89,7 +89,7 @@ class ServerActionsPolicyTest(test.NoDBTestCase):
self.stubs.Set(db, 'instance_get_by_uuid', fake_instance_get_by_uuid) self.stubs.Set(db, 'instance_get_by_uuid', fake_instance_get_by_uuid)
req = fakes.HTTPRequestV3.blank('/servers/12/os-server-actions') req = fakes.HTTPRequestV3.blank('/servers/12/os-server-actions')
self.assertRaises(exception.NotAuthorized, self.controller.index, req, self.assertRaises(exception.Forbidden, self.controller.index, req,
str(uuid.uuid4())) str(uuid.uuid4()))
def test_get_action_restricted_by_project(self): def test_get_action_restricted_by_project(self):
@ -107,7 +107,7 @@ class ServerActionsPolicyTest(test.NoDBTestCase):
self.stubs.Set(db, 'instance_get_by_uuid', fake_instance_get_by_uuid) self.stubs.Set(db, 'instance_get_by_uuid', fake_instance_get_by_uuid)
req = fakes.HTTPRequestV3.blank( req = fakes.HTTPRequestV3.blank(
'/servers/12/os-server-actions/1') '/servers/12/os-server-actions/1')
self.assertRaises(exception.NotAuthorized, self.controller.show, req, self.assertRaises(exception.Forbidden, self.controller.show, req,
str(uuid.uuid4()), '1') str(uuid.uuid4()), '1')

View File

@ -403,7 +403,7 @@ class KeypairPolicyTest(test.TestCase):
policy.parse_rule('role:admin')}) policy.parse_rule('role:admin')})
policy.set_rules(rules) policy.set_rules(rules)
req = fakes.HTTPRequestV3.blank('/keypairs') req = fakes.HTTPRequestV3.blank('/keypairs')
self.assertRaises(exception.NotAuthorized, self.assertRaises(exception.Forbidden,
self.KeyPairController.index, self.KeyPairController.index,
req) req)
@ -420,7 +420,7 @@ class KeypairPolicyTest(test.TestCase):
policy.parse_rule('role:admin')}) policy.parse_rule('role:admin')})
policy.set_rules(rules) policy.set_rules(rules)
req = fakes.HTTPRequestV3.blank('/keypairs/FAKE') req = fakes.HTTPRequestV3.blank('/keypairs/FAKE')
self.assertRaises(exception.NotAuthorized, self.assertRaises(exception.Forbidden,
self.KeyPairController.show, self.KeyPairController.show,
req, 'FAKE') req, 'FAKE')
@ -438,7 +438,7 @@ class KeypairPolicyTest(test.TestCase):
policy.set_rules(rules) policy.set_rules(rules)
req = fakes.HTTPRequestV3.blank('/keypairs') req = fakes.HTTPRequestV3.blank('/keypairs')
req.method = 'POST' req.method = 'POST'
self.assertRaises(exception.NotAuthorized, self.assertRaises(exception.Forbidden,
self.KeyPairController.create, self.KeyPairController.create,
req, body={'keypair': {'name': 'create_test'}}) req, body={'keypair': {'name': 'create_test'}})
@ -458,7 +458,7 @@ class KeypairPolicyTest(test.TestCase):
policy.set_rules(rules) policy.set_rules(rules)
req = fakes.HTTPRequestV3.blank('/keypairs/FAKE') req = fakes.HTTPRequestV3.blank('/keypairs/FAKE')
req.method = 'DELETE' req.method = 'DELETE'
self.assertRaises(exception.NotAuthorized, self.assertRaises(exception.Forbidden,
self.KeyPairController.delete, self.KeyPairController.delete,
req, 'FAKE') req, 'FAKE')

View File

@ -46,7 +46,7 @@ class ShelvePolicyTest(test.NoDBTestCase):
policy.set_rules(rules) policy.set_rules(rules)
req = fakes.HTTPRequestV3.blank('/servers/12/os-shelve') req = fakes.HTTPRequestV3.blank('/servers/12/os-shelve')
self.assertRaises(exception.NotAuthorized, self.controller._shelve, self.assertRaises(exception.Forbidden, self.controller._shelve,
req, str(uuid.uuid4()), {}) req, str(uuid.uuid4()), {})
def test_shelve_allowed(self): def test_shelve_allowed(self):
@ -57,7 +57,7 @@ class ShelvePolicyTest(test.NoDBTestCase):
self.stubs.Set(db, 'instance_get_by_uuid', fake_instance_get_by_uuid) self.stubs.Set(db, 'instance_get_by_uuid', fake_instance_get_by_uuid)
req = fakes.HTTPRequestV3.blank('/servers/12/os-shelve') req = fakes.HTTPRequestV3.blank('/servers/12/os-shelve')
self.assertRaises(exception.NotAuthorized, self.controller._shelve, self.assertRaises(exception.Forbidden, self.controller._shelve,
req, str(uuid.uuid4()), {}) req, str(uuid.uuid4()), {})
def test_shelve_locked_server(self): def test_shelve_locked_server(self):
@ -75,7 +75,7 @@ class ShelvePolicyTest(test.NoDBTestCase):
policy.set_rules(rules) policy.set_rules(rules)
req = fakes.HTTPRequestV3.blank('/servers/12/os-shelve') req = fakes.HTTPRequestV3.blank('/servers/12/os-shelve')
self.assertRaises(exception.NotAuthorized, self.controller._unshelve, self.assertRaises(exception.Forbidden, self.controller._unshelve,
req, str(uuid.uuid4()), {}) req, str(uuid.uuid4()), {})
def test_unshelve_allowed(self): def test_unshelve_allowed(self):
@ -86,7 +86,7 @@ class ShelvePolicyTest(test.NoDBTestCase):
self.stubs.Set(db, 'instance_get_by_uuid', fake_instance_get_by_uuid) self.stubs.Set(db, 'instance_get_by_uuid', fake_instance_get_by_uuid)
req = fakes.HTTPRequestV3.blank('/servers/12/os-shelve') req = fakes.HTTPRequestV3.blank('/servers/12/os-shelve')
self.assertRaises(exception.NotAuthorized, self.controller._unshelve, self.assertRaises(exception.Forbidden, self.controller._unshelve,
req, str(uuid.uuid4()), {}) req, str(uuid.uuid4()), {})
def test_unshelve_locked_server(self): def test_unshelve_locked_server(self):
@ -104,7 +104,7 @@ class ShelvePolicyTest(test.NoDBTestCase):
policy.set_rules(rules) policy.set_rules(rules)
req = fakes.HTTPRequestV3.blank('/servers/12/os-shelve') req = fakes.HTTPRequestV3.blank('/servers/12/os-shelve')
self.assertRaises(exception.NotAuthorized, self.assertRaises(exception.Forbidden,
self.controller._shelve_offload, req, str(uuid.uuid4()), {}) self.controller._shelve_offload, req, str(uuid.uuid4()), {})
def test_shelve_offload_allowed(self): def test_shelve_offload_allowed(self):
@ -115,7 +115,7 @@ class ShelvePolicyTest(test.NoDBTestCase):
self.stubs.Set(db, 'instance_get_by_uuid', fake_instance_get_by_uuid) self.stubs.Set(db, 'instance_get_by_uuid', fake_instance_get_by_uuid)
req = fakes.HTTPRequestV3.blank('/servers/12/os-shelve') req = fakes.HTTPRequestV3.blank('/servers/12/os-shelve')
self.assertRaises(exception.NotAuthorized, self.assertRaises(exception.Forbidden,
self.controller._shelve_offload, req, str(uuid.uuid4()), {}) self.controller._shelve_offload, req, str(uuid.uuid4()), {})
def test_shelve_offload_locked_server(self): def test_shelve_offload_locked_server(self):

View File

@ -441,7 +441,7 @@ class ResourceTest(test.NoDBTestCase):
def test_resource_not_authorized(self): def test_resource_not_authorized(self):
class Controller(object): class Controller(object):
def index(self, req): def index(self, req):
raise exception.NotAuthorized() raise exception.Forbidden()
req = webob.Request.blank('/tests') req = webob.Request.blank('/tests')
app = fakes.TestRouter(Controller()) app = fakes.TestRouter(Controller())

View File

@ -2702,7 +2702,7 @@ class ComputeTestCase(BaseTestCase):
"""Ensure expected exception is raised if set_admin_password not """Ensure expected exception is raised if set_admin_password not
authorized. authorized.
""" """
exc = exception.NotAuthorized(_('Internal error')) exc = exception.Forbidden(_('Internal error'))
expected_exception = exception.InstancePasswordSetFailed expected_exception = exception.InstancePasswordSetFailed
self._do_test_set_admin_password_driver_error(exc, self._do_test_set_admin_password_driver_error(exc,
vm_states.ERROR, vm_states.ERROR,

View File

@ -3545,7 +3545,7 @@ class FixedIPTestCase(BaseInstanceTypeTestCase):
fixed_ip_id = db.fixed_ip_create(self.ctxt, param) fixed_ip_id = db.fixed_ip_create(self.ctxt, param)
self.ctxt.is_admin = False self.ctxt.is_admin = False
self.assertRaises(exception.NotAuthorized, db.fixed_ip_get, self.assertRaises(exception.Forbidden, db.fixed_ip_get,
self.ctxt, fixed_ip_id) self.ctxt, fixed_ip_id)
def test_fixed_ip_get_success(self): def test_fixed_ip_get_success(self):
@ -3765,7 +3765,7 @@ class FloatingIpTestCase(test.TestCase, ModelsObjectComparatorMixin):
def test_floating_ip_allocate_not_authorized(self): def test_floating_ip_allocate_not_authorized(self):
ctxt = context.RequestContext(user_id='a', project_id='abc', ctxt = context.RequestContext(user_id='a', project_id='abc',
is_admin=False) is_admin=False)
self.assertRaises(exception.NotAuthorized, self.assertRaises(exception.Forbidden,
db.floating_ip_allocate_address, db.floating_ip_allocate_address,
ctxt, 'other_project_id', 'any_pool') ctxt, 'other_project_id', 'any_pool')
@ -4011,7 +4011,7 @@ class FloatingIpTestCase(test.TestCase, ModelsObjectComparatorMixin):
def test_floating_ip_get_all_by_project_not_authorized(self): def test_floating_ip_get_all_by_project_not_authorized(self):
ctxt = context.RequestContext(user_id='a', project_id='abc', ctxt = context.RequestContext(user_id='a', project_id='abc',
is_admin=False) is_admin=False)
self.assertRaises(exception.NotAuthorized, self.assertRaises(exception.Forbidden,
db.floating_ip_get_all_by_project, db.floating_ip_get_all_by_project,
ctxt, 'other_project') ctxt, 'other_project')

View File

@ -777,14 +777,14 @@ class TestDetail(test.NoDBTestCase):
ext_query_mock, reraise_mock): ext_query_mock, reraise_mock):
params = {} params = {}
ext_query_mock.return_value = params ext_query_mock.return_value = params
raised = exception.NotAuthorized() raised = exception.Forbidden()
client = mock.MagicMock() client = mock.MagicMock()
client.call.side_effect = glanceclient.exc.Forbidden client.call.side_effect = glanceclient.exc.Forbidden
ctx = mock.sentinel.ctx ctx = mock.sentinel.ctx
reraise_mock.side_effect = raised reraise_mock.side_effect = raised
service = glance.GlanceImageService(client) service = glance.GlanceImageService(client)
with testtools.ExpectedException(exception.NotAuthorized): with testtools.ExpectedException(exception.Forbidden):
service.detail(ctx, **params) service.detail(ctx, **params)
client.call.assert_called_once_with(ctx, 1, 'list') client.call.assert_called_once_with(ctx, 1, 'list')

View File

@ -49,7 +49,7 @@ class MockKeyManagerTestCase(test_key_mgr.KeyManagerTestCase):
self.assertEqual(length / 8, len(key.get_encoded())) self.assertEqual(length / 8, len(key.get_encoded()))
def test_create_null_context(self): def test_create_null_context(self):
self.assertRaises(exception.NotAuthorized, self.assertRaises(exception.Forbidden,
self.key_mgr.create_key, None) self.key_mgr.create_key, None)
def test_store_key(self): def test_store_key(self):
@ -61,7 +61,7 @@ class MockKeyManagerTestCase(test_key_mgr.KeyManagerTestCase):
self.assertEqual(_key, actual_key) self.assertEqual(_key, actual_key)
def test_store_null_context(self): def test_store_null_context(self):
self.assertRaises(exception.NotAuthorized, self.assertRaises(exception.Forbidden,
self.key_mgr.store_key, None, None) self.key_mgr.store_key, None, None)
def test_copy_key(self): def test_copy_key(self):
@ -75,14 +75,14 @@ class MockKeyManagerTestCase(test_key_mgr.KeyManagerTestCase):
self.assertEqual(key, copied_key) self.assertEqual(key, copied_key)
def test_copy_null_context(self): def test_copy_null_context(self):
self.assertRaises(exception.NotAuthorized, self.assertRaises(exception.Forbidden,
self.key_mgr.copy_key, None, None) self.key_mgr.copy_key, None, None)
def test_get_key(self): def test_get_key(self):
pass pass
def test_get_null_context(self): def test_get_null_context(self):
self.assertRaises(exception.NotAuthorized, self.assertRaises(exception.Forbidden,
self.key_mgr.get_key, None, None) self.key_mgr.get_key, None, None)
def test_get_unknown_key(self): def test_get_unknown_key(self):
@ -95,7 +95,7 @@ class MockKeyManagerTestCase(test_key_mgr.KeyManagerTestCase):
self.assertRaises(KeyError, self.key_mgr.get_key, self.ctxt, key_id) self.assertRaises(KeyError, self.key_mgr.get_key, self.ctxt, key_id)
def test_delete_null_context(self): def test_delete_null_context(self):
self.assertRaises(exception.NotAuthorized, self.assertRaises(exception.Forbidden,
self.key_mgr.delete_key, None, None) self.key_mgr.delete_key, None, None)
def test_delete_unknown_key(self): def test_delete_unknown_key(self):

View File

@ -51,7 +51,7 @@ class SingleKeyManagerTestCase(test_mock_key_mgr.MockKeyManagerTestCase):
pass pass
def test_store_null_context(self): def test_store_null_context(self):
self.assertRaises(exception.NotAuthorized, self.assertRaises(exception.Forbidden,
self.key_mgr.store_key, None, self.key) self.key_mgr.store_key, None, self.key)
def test_copy_key(self): def test_copy_key(self):

View File

@ -909,7 +909,7 @@ class VlanNetworkTestCase(test.TestCase):
# raises because floating_ip project_id is None # raises because floating_ip project_id is None
floating_ip = floating_ip_obj.FloatingIP(address='10.0.0.1', floating_ip = floating_ip_obj.FloatingIP(address='10.0.0.1',
project_id=None) project_id=None)
self.assertRaises(exception.NotAuthorized, self.assertRaises(exception.Forbidden,
self.network._floating_ip_owned_by_project, self.network._floating_ip_owned_by_project,
ctxt, ctxt,
floating_ip) floating_ip)
@ -917,7 +917,7 @@ class VlanNetworkTestCase(test.TestCase):
# raises because floating_ip project_id is not equal to ctxt project_id # raises because floating_ip project_id is not equal to ctxt project_id
floating_ip = floating_ip_obj.FloatingIP( floating_ip = floating_ip_obj.FloatingIP(
address='10.0.0.1', project_id=ctxt.project_id + '1') address='10.0.0.1', project_id=ctxt.project_id + '1')
self.assertRaises(exception.NotAuthorized, self.assertRaises(exception.Forbidden,
self.network._floating_ip_owned_by_project, self.network._floating_ip_owned_by_project,
ctxt, ctxt,
floating_ip) floating_ip)
@ -1360,14 +1360,14 @@ class VlanNetworkTestCase(test.TestCase):
**networks[1])) **networks[1]))
# Associate the IP with non-admin user context # Associate the IP with non-admin user context
self.assertRaises(exception.NotAuthorized, self.assertRaises(exception.Forbidden,
self.network.associate_floating_ip, self.network.associate_floating_ip,
context2, context2,
float_addr, float_addr,
fix_addr) fix_addr)
# Deallocate address from other project # Deallocate address from other project
self.assertRaises(exception.NotAuthorized, self.assertRaises(exception.Forbidden,
self.network.deallocate_floating_ip, self.network.deallocate_floating_ip,
context2, context2,
float_addr) float_addr)
@ -1376,7 +1376,7 @@ class VlanNetworkTestCase(test.TestCase):
self.network.associate_floating_ip(context1, float_addr, fix_addr) self.network.associate_floating_ip(context1, float_addr, fix_addr)
# Now try dis-associating from other project # Now try dis-associating from other project
self.assertRaises(exception.NotAuthorized, self.assertRaises(exception.Forbidden,
self.network.disassociate_floating_ip, self.network.disassociate_floating_ip,
context2, context2,
float_addr) float_addr)