Skip to content

Commit

Permalink
Added policy checking for all all_tenent=True contexts
Browse files Browse the repository at this point in the history
Change-Id: I6cc23ce083a7758efa9d34719ac89dfb135a4a42
  • Loading branch information
grahamhayes committed Aug 12, 2014
1 parent c668fd5 commit 47e92c4
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 12 deletions.
3 changes: 2 additions & 1 deletion designate.sublime-project
Expand Up @@ -38,7 +38,8 @@
".venv",
".testrepository",
"doc/build",
"doc/source/api"
"doc/source/api",
"build"
],
"path": "."
}
Expand Down
4 changes: 0 additions & 4 deletions designate/api/middleware.py
Expand Up @@ -22,7 +22,6 @@
from designate import notifications
from designate import wsgi
from designate import context
from designate import policy
from designate.openstack.common import jsonutils as json
from designate.openstack.common import log as logging
from designate.openstack.common import strutils
Expand Down Expand Up @@ -71,15 +70,12 @@ def make_context(self, request, *args, **kwargs):
params = request.params

if headers.get('X-Auth-All-Projects'):
policy.check('all_tenants', ctxt)
ctxt.all_tenants = \
strutils.bool_from_string(headers.get('X-Auth-All-Projects'))
elif 'all_projects' in params:
policy.check('all_tenants', ctxt)
ctxt.all_tenants = \
strutils.bool_from_string(params['all_projects'])
elif 'all_tenants' in params:
policy.check('all_tenants', ctxt)
ctxt.all_tenants = \
strutils.bool_from_string(params['all_tenants'])
else:
Expand Down
3 changes: 0 additions & 3 deletions designate/api/service.py
Expand Up @@ -21,7 +21,6 @@
from designate.openstack.deprecated import wsgi
from designate import exceptions
from designate import utils
from designate import policy


LOG = logging.getLogger(__name__)
Expand All @@ -39,8 +38,6 @@ def __init__(self, backlog=128, threads=1000):

LOG.info(_LI('Using api-paste-config found at: %s') % config_paths[0])

policy.init()

application = deploy.loadapp("config:%s" % config_paths[0],
name='osapi_dns')

Expand Down
6 changes: 2 additions & 4 deletions designate/central/service.py
Expand Up @@ -80,8 +80,6 @@ def __init__(self, *args, **kwargs):
backend_driver = cfg.CONF['service:central'].backend_driver
self.backend = backend.get_backend(backend_driver, self)

policy.init()

# Get a storage connection
storage_driver = cfg.CONF['service:central'].storage_driver
self.storage = storage.get_storage(storage_driver)
Expand Down Expand Up @@ -1416,8 +1414,8 @@ def _set_floatingip_reverse(self, context, region, floatingip_id, values):
except exceptions.DomainNotFound:
msg = _LI('Creating zone for %(fip_id)s:%(region)s - '
'%(fip_addr)s zone %(zonename)s') % \
{'fip_id': floatingip_id, 'region': region,
'fip_addr': fip['address'], 'zonename': zone_name}
{'fip_id': floatingip_id, 'region': region,
'fip_addr': fip['address'], 'zonename': zone_name}
LOG.info(msg)

email = cfg.CONF['service:central'].managed_resource_email
Expand Down
15 changes: 15 additions & 0 deletions designate/context.py
Expand Up @@ -19,12 +19,16 @@
from designate.openstack.common import context
from designate.openstack.common import local
from designate.openstack.common import log as logging
from designate import policy


LOG = logging.getLogger(__name__)


class DesignateContext(context.RequestContext):

_all_tenants = False

def __init__(self, auth_token=None, user=None, tenant=None, domain=None,
user_domain=None, project_domain=None, is_admin=False,
read_only=False, show_deleted=False, request_id=None,
Expand All @@ -49,6 +53,7 @@ def __init__(self, auth_token=None, user=None, tenant=None, domain=None,

self.roles = roles
self.service_catalog = service_catalog

self.all_tenants = all_tenants

if not hasattr(local.store, 'context'):
Expand Down Expand Up @@ -112,3 +117,13 @@ def get_context_from_function_and_args(cls, function, args, kwargs):
return arg

return None

@property
def all_tenants(self):
return self._all_tenants

@all_tenants.setter
def all_tenants(self, value):
if value:
policy.check('all_tenants', self)
self._all_tenants = value
3 changes: 3 additions & 0 deletions designate/service.py
Expand Up @@ -24,6 +24,7 @@
from designate.openstack.common import log as logging
from designate.i18n import _
from designate import rpc
from designate import policy
from designate import version


Expand All @@ -50,6 +51,8 @@ def __init__(self, host, binary, topic, service_name=None, endpoints=None):
self.topic = topic
self.service_name = service_name

policy.init()

# TODO(ekarlso): change this to be loadable via mod import or
# stevedore?
self.endpoints = endpoints or [self]
Expand Down
17 changes: 17 additions & 0 deletions designate/tests/test_context.py
Expand Up @@ -13,8 +13,11 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import testtools

from designate.tests import TestCase
from designate import context
from designate import exceptions
from designate.openstack.common import log as logging

LOG = logging.getLogger(__name__)
Expand All @@ -34,3 +37,17 @@ def test_elevated(self):
self.assertFalse(ctxt.is_admin)
self.assertTrue(admin_ctxt.is_admin)
self.assertEqual(0, len(ctxt.roles))

def test_all_tenants(self):
ctxt = context.DesignateContext(user='12345', tenant='54321')
admin_ctxt = ctxt.elevated()

admin_ctxt.all_tenants = True
self.assertFalse(ctxt.is_admin)
self.assertTrue(admin_ctxt.is_admin)
self.assertTrue(admin_ctxt.all_tenants)

def test_all_tenants_policy_failure(self):
ctxt = context.DesignateContext(user='12345', tenant='54321')
with testtools.ExpectedException(exceptions.Forbidden):
ctxt.all_tenants = True

0 comments on commit 47e92c4

Please sign in to comment.