From 1c3f81852cb8337e2305f968be5bd8165997d27e Mon Sep 17 00:00:00 2001 From: Rob Crittenden Date: Tue, 14 Oct 2008 17:46:36 -0400 Subject: Move some functionality from user-add to the backend ldap create function --- ipa_server/plugins/b_ldap.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'ipa_server/plugins/b_ldap.py') diff --git a/ipa_server/plugins/b_ldap.py b/ipa_server/plugins/b_ldap.py index 69c2aeb5..600f1c86 100644 --- a/ipa_server/plugins/b_ldap.py +++ b/ipa_server/plugins/b_ldap.py @@ -25,7 +25,11 @@ This wraps the python-ldap bindings. import ldap as _ldap from ipalib import api +from ipalib import errors from ipalib.crud import CrudBackend +from ipa_server import servercore +from ipa_server import ipaldap +import ldap class ldap(CrudBackend): @@ -46,6 +50,18 @@ class ldap(CrudBackend): ) def create(self, **kw): - return kw + if servercore.entry_exists(kw['dn']): + raise errors.DuplicateEntry("entry already exists") + + entry = ipaldap.Entry(kw['dn']) + + # dn isn't allowed to be in the entry itself + del kw['dn'] + + # Fill in our new entry + for k in kw: + entry.setValues(k, kw[k]) + + return servercore.add_entry(entry) api.register(ldap) -- cgit From cfc8450efd92dc0fb6648e97b27416c67625adfb Mon Sep 17 00:00:00 2001 From: Rob Crittenden Date: Tue, 14 Oct 2008 22:22:01 -0400 Subject: Port user-show to new CrudBackend framework --- ipa_server/plugins/b_ldap.py | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) (limited to 'ipa_server/plugins/b_ldap.py') diff --git a/ipa_server/plugins/b_ldap.py b/ipa_server/plugins/b_ldap.py index 600f1c86..84f25245 100644 --- a/ipa_server/plugins/b_ldap.py +++ b/ipa_server/plugins/b_ldap.py @@ -29,7 +29,6 @@ from ipalib import errors from ipalib.crud import CrudBackend from ipa_server import servercore from ipa_server import ipaldap -import ldap class ldap(CrudBackend): @@ -39,7 +38,7 @@ class ldap(CrudBackend): dn = _ldap.dn - def get_user_dn(self, uid): + def make_user_dn(self, uid): """ Construct user dn from uid. """ @@ -49,6 +48,35 @@ class ldap(CrudBackend): self.api.env.basedn, ) + def find_entry_dn(self, key_attribute, primary_key, attributes=None, + object_type=None): + """ + Find an existing entry's dn from an attribute + """ + key_attribute = key_attribute.lower() + if not object_type: + if key_attribute == "uid": # User + filter = "posixAccount" + elif key_attribute == "cn": # Group + object_type = "posixGroup" + elif key_attribute == "krbprincipal": # Service + object_type = "krbPrincipal" + + if not object_type: + return None + + filter = "(&(%s=%s)(objectclass=%s))" % ( + key_attribute, + self.dn.escape_dn_chars(primary_key), + object_type + ) + + search_base = "%s, %s" % (self.api.env.container_accounts, self.api.env.basedn) + + entry = servercore.get_sub_entry(search_base, filter, attributes) + + return entry['dn'] + def create(self, **kw): if servercore.entry_exists(kw['dn']): raise errors.DuplicateEntry("entry already exists") @@ -64,4 +92,10 @@ class ldap(CrudBackend): return servercore.add_entry(entry) + def retrieve(self, dn, attributes=None): + return servercore.get_entry_by_dn(dn, attributes) + + def delete(self, dn): + return servercore.delete_entry(dn) + api.register(ldap) -- cgit From 789a248daa71d5d1377e0dc9f0cd3afe107d4f2a Mon Sep 17 00:00:00 2001 From: Rob Crittenden Date: Wed, 15 Oct 2008 09:58:29 -0400 Subject: Port user-mod to use ldap update() method --- ipa_server/plugins/b_ldap.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'ipa_server/plugins/b_ldap.py') diff --git a/ipa_server/plugins/b_ldap.py b/ipa_server/plugins/b_ldap.py index 84f25245..26a3495c 100644 --- a/ipa_server/plugins/b_ldap.py +++ b/ipa_server/plugins/b_ldap.py @@ -48,8 +48,7 @@ class ldap(CrudBackend): self.api.env.basedn, ) - def find_entry_dn(self, key_attribute, primary_key, attributes=None, - object_type=None): + def find_entry_dn(self, key_attribute, primary_key, object_type=None): """ Find an existing entry's dn from an attribute """ @@ -73,7 +72,7 @@ class ldap(CrudBackend): search_base = "%s, %s" % (self.api.env.container_accounts, self.api.env.basedn) - entry = servercore.get_sub_entry(search_base, filter, attributes) + entry = servercore.get_sub_entry(search_base, filter, ['dn', 'objectclass']) return entry['dn'] @@ -95,6 +94,16 @@ class ldap(CrudBackend): def retrieve(self, dn, attributes=None): return servercore.get_entry_by_dn(dn, attributes) + def update(self, dn, **kw): + result = self.retrieve(dn, ["*"]) + + entry = ipaldap.Entry((dn, servercore.convert_scalar_values(result))) + + for k in kw: + entry.setValues(k, kw[k]) + + return servercore.update_entry(entry.toDict()) + def delete(self, dn): return servercore.delete_entry(dn) -- cgit