diff options
author | Yuriy Taraday <yorik.sar@gmail.com> | 2013-02-23 02:25:02 +0400 |
---|---|---|
committer | Yuriy Taraday <yorik.sar@gmail.com> | 2013-03-05 13:12:18 +0400 |
commit | a14b67e16eec343aa67e34704d8f846e70ced1eb (patch) | |
tree | 75e69af61b7f2f656182a5458caef996748dd454 /keystone/common | |
parent | eaab3c2ae2c591b700d9b3d78bb3854243c5ce85 (diff) | |
download | keystone-a14b67e16eec343aa67e34704d8f846e70ced1eb.tar.gz keystone-a14b67e16eec343aa67e34704d8f846e70ced1eb.tar.xz keystone-a14b67e16eec343aa67e34704d8f846e70ced1eb.zip |
Straighten out NotFound raising in LDAP backend.
Change-Id: If5914f34da318d960f5a2ae8e8b0592d1cbab946
Diffstat (limited to 'keystone/common')
-rw-r--r-- | keystone/common/ldap/core.py | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/keystone/common/ldap/core.py b/keystone/common/ldap/core.py index 0462c52f..0e36848f 100644 --- a/keystone/common/ldap/core.py +++ b/keystone/common/ldap/core.py @@ -77,6 +77,8 @@ class BaseLdap(object): DEFAULT_OBJECTCLASS = None DEFAULT_FILTER = None DUMB_MEMBER_DN = 'cn=dumb,dc=nonexistent' + NotFound = None + notfound_arg = None options_name = None model = None attribute_mapping = {} @@ -117,6 +119,9 @@ class BaseLdap(object): self.allow_delete = getattr(conf.ldap, allow_delete) self.structural_classes = self.DEFAULT_STRUCTURAL_CLASSES + + if self.notfound_arg is None: + self.notfound_arg = self.options_name + '_id' self.use_dumb_member = getattr(conf.ldap, 'use_dumb_member') self.dumb_member = (getattr(conf.ldap, 'dumb_member') or self.DUMB_MEMBER_DN) @@ -124,6 +129,12 @@ class BaseLdap(object): self.subtree_delete_enabled = getattr(conf.ldap, 'allow_subtree_delete') + def _not_found(self, object_id): + if self.NotFound is None: + return exception.NotFound(target=object_id) + else: + return self.NotFound(**{self.notfound_arg: object_id}) + def get_connection(self, user=None, password=None): if self.LDAP_URL.startswith('fake://'): conn = fakeldap.FakeLdap(self.LDAP_URL) @@ -262,7 +273,7 @@ class BaseLdap(object): def get(self, id, filter=None): res = self._ldap_get(id, filter) if res is None: - raise exception.NotFound(target=id) + raise self._not_found(id) else: return self._ldap_res_to_model(res) @@ -296,7 +307,10 @@ class BaseLdap(object): if modlist: conn = self.get_connection() - conn.modify_s(self._id_to_dn(id), modlist) + try: + conn.modify_s(self._id_to_dn(id), modlist) + except ldap.NO_SUCH_OBJECT: + raise self._not_found(id) def delete(self, id): if not self.allow_delete: @@ -304,15 +318,21 @@ class BaseLdap(object): raise exception.ForbiddenAction(action=action) conn = self.get_connection() - conn.delete_s(self._id_to_dn(id)) + try: + conn.delete_s(self._id_to_dn(id)) + except ldap.NO_SUCH_OBJECT: + raise self._not_found(id) def deleteTree(self, id): conn = self.get_connection() tree_delete_control = ldap.controls.LDAPControl(CONTROL_TREEDELETE, 0, None) - conn.delete_ext_s(self._id_to_dn(id), - serverctrls=[tree_delete_control]) + try: + conn.delete_ext_s(self._id_to_dn(id), + serverctrls=[tree_delete_control]) + except ldap.NO_SUCH_OBJECT: + raise self._not_found(id) class LdapWrapper(object): |