summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
Diffstat (limited to 'nova')
-rw-r--r--nova/auth/fakeldapdriver.py32
-rw-r--r--nova/auth/ldapdriver.py12
-rw-r--r--nova/auth/manager.py22
-rw-r--r--nova/tests/fake_flags.py2
-rw-r--r--nova/tests/network_unittest.py2
5 files changed, 28 insertions, 42 deletions
diff --git a/nova/auth/fakeldapdriver.py b/nova/auth/fakeldapdriver.py
deleted file mode 100644
index 833548c79..000000000
--- a/nova/auth/fakeldapdriver.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# vim: tabstop=4 shiftwidth=4 softtabstop=4
-
-# Copyright 2010 United States Government as represented by the
-# Administrator of the National Aeronautics and Space Administration.
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-"""
-Fake Auth driver for ldap
-
-"""
-
-from nova.auth import ldapdriver
-
-class AuthDriver(ldapdriver.AuthDriver):
- """Ldap Auth driver
-
- Defines enter and exit and therefore supports the with/as syntax.
- """
- def __init__(self):
- self.ldap = __import__('nova.auth.fakeldap', fromlist=True)
diff --git a/nova/auth/ldapdriver.py b/nova/auth/ldapdriver.py
index 0535977af..1591c88e9 100644
--- a/nova/auth/ldapdriver.py
+++ b/nova/auth/ldapdriver.py
@@ -17,7 +17,7 @@
# under the License.
"""
-Auth driver for ldap
+Auth driver for ldap. Includes FakeLdapDriver.
It should be easy to create a replacement for this driver supporting
other backends by creating another class that exposes the same
@@ -25,6 +25,7 @@ public methods.
"""
import logging
+import sys
from nova import exception
from nova import flags
@@ -61,7 +62,7 @@ flags.DEFINE_string('ldap_developer',
# to define a set interface for AuthDrivers. I'm delaying
# creating this now because I'm expecting an auth refactor
# in which we may want to change the interface a bit more.
-class AuthDriver(object):
+class LdapDriver(object):
"""Ldap Auth driver
Defines enter and exit and therefore supports the with/as syntax.
@@ -471,3 +472,10 @@ class AuthDriver(object):
"""Convert uid to dn"""
return 'uid=%s,%s' % (dn, FLAGS.ldap_user_subtree)
+
+class FakeLdapDriver(LdapDriver):
+ """Fake Ldap Auth driver"""
+ def __init__(self):
+ __import__('nova.auth.fakeldap')
+ self.ldap = sys.modules['nova.auth.fakeldap']
+
diff --git a/nova/auth/manager.py b/nova/auth/manager.py
index 130bed7c2..32c2f9e02 100644
--- a/nova/auth/manager.py
+++ b/nova/auth/manager.py
@@ -24,6 +24,7 @@ import logging
import os
import shutil
import string
+import sys
import tempfile
import uuid
import zipfile
@@ -75,7 +76,7 @@ flags.DEFINE_string('credential_cert_subject',
flags.DEFINE_string('vpn_ip', '127.0.0.1',
'Public IP for the cloudpipe VPN servers')
-flags.DEFINE_string('auth_driver', 'fakeldapdriver',
+flags.DEFINE_string('auth_driver', 'nova.auth.ldapdriver.AuthDriver',
'Driver that auth manager uses')
class AuthBase(object):
@@ -320,16 +321,25 @@ class AuthManager(object):
"""
_instance=None
def __new__(cls, *args, **kwargs):
+ """Returns the AuthManager singleton with driver set
+
+ __init__ is run every time AuthManager() is called, so we need to do
+ any constructor related stuff here. The driver that is specified
+ in the flagfile is loaded here.
+ """
if not cls._instance:
cls._instance = super(AuthManager, cls).__new__(
cls, *args, **kwargs)
+ mod_str, sep, driver_str = FLAGS.auth_driver.rpartition('.')
+ try:
+ mod = __import__(mod_str)
+ cls._instance.driver = getattr(sys.modules[mod_str],
+ driver_str)
+ except (ImportError, AttributeError):
+ raise exception.Error('Auth driver %s cannot be found'
+ % FLAGS.auth_driver)
return cls._instance
- def __init__(self, *args, **kwargs):
- """Imports the driver module and saves the Driver class"""
- mod = __import__(FLAGS.auth_driver, fromlist=True)
- self.driver = mod.AuthDriver
-
def authenticate(self, access, signature, params, verb='GET',
server_string='127.0.0.1:8773', path='/',
verify_signature=True):
diff --git a/nova/tests/fake_flags.py b/nova/tests/fake_flags.py
index 57575b44b..304f24841 100644
--- a/nova/tests/fake_flags.py
+++ b/nova/tests/fake_flags.py
@@ -24,5 +24,5 @@ FLAGS.fake_libvirt = True
FLAGS.fake_storage = True
FLAGS.fake_rabbit = True
FLAGS.fake_network = True
-FLAGS.auth_driver = 'nova.auth.fakeldapdriver'
+FLAGS.auth_driver = 'nova.auth.ldapdriver.FakeLdapDriver'
FLAGS.verbose = True
diff --git a/nova/tests/network_unittest.py b/nova/tests/network_unittest.py
index 12840e736..9e17bf155 100644
--- a/nova/tests/network_unittest.py
+++ b/nova/tests/network_unittest.py
@@ -37,7 +37,7 @@ class NetworkTestCase(test.TrialTestCase):
self.flags(fake_libvirt=True,
fake_storage=True,
fake_network=True,
- auth_driver='nova.auth.fakeldapdriver',
+ auth_driver='nova.auth.ldapdriver.FakeLdapDriver',
network_size=32)
logging.getLogger().setLevel(logging.DEBUG)
self.manager = manager.AuthManager()