summaryrefslogtreecommitdiffstats
path: root/ipalib/plugins
diff options
context:
space:
mode:
authorRob Crittenden <rcritten@redhat.com>2011-04-22 09:43:31 -0400
committerAdam Young <ayoung@redhat.com>2011-04-22 14:49:20 -0400
commitf746121824c58c1d21d94ae4f2afd8893be9e1dd (patch)
treea85cf065bc53532ef4aa8878844176b71a5f9271 /ipalib/plugins
parentcc0e6680b9d7d5fee85d683df2f46eff6f7ff2e3 (diff)
downloadfreeipa-f746121824c58c1d21d94ae4f2afd8893be9e1dd.tar.gz
freeipa-f746121824c58c1d21d94ae4f2afd8893be9e1dd.tar.xz
freeipa-f746121824c58c1d21d94ae4f2afd8893be9e1dd.zip
Convert manager from userid to dn for storage and back for displaying.
ticket 1151
Diffstat (limited to 'ipalib/plugins')
-rw-r--r--ipalib/plugins/user.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/ipalib/plugins/user.py b/ipalib/plugins/user.py
index 901514466..efd9e278a 100644
--- a/ipalib/plugins/user.py
+++ b/ipalib/plugins/user.py
@@ -243,6 +243,40 @@ class user(LDAPObject):
return email
+ def _normalize_manager(self, manager):
+ """
+ Given a userid verify the user's existence and return the dn.
+ """
+ if not manager:
+ return None
+
+ if isinstance(manager, basestring):
+ manager = [manager]
+ try:
+ for m in xrange(len(manager)):
+ if manager[m].endswith('%s,%s' % (self.container_dn, api.env.basedn)):
+ continue
+ (dn, entry_attrs) = self.backend.find_entry_by_attr(
+ self.primary_key.name, manager[m], self.object_class, [''],
+ self.container_dn
+ )
+ manager[m] = dn
+ except errors.NotFound:
+ raise errors.NotFound(reason=_('manager %(manager)s not found') % dict(manager=manager[m]))
+
+ return manager
+
+ def _convert_manager(self, entry_attrs, **options):
+ """
+ Convert a manager dn into a userid
+ """
+ if options.get('raw', False):
+ return
+
+ if 'manager' in entry_attrs:
+ for m in xrange(len(entry_attrs['manager'])):
+ entry_attrs['manager'][m] = self.get_primary_key_from_dn(entry_attrs['manager'][m])
+
api.register(user)
@@ -309,6 +343,9 @@ class user_add(LDAPCreate):
if 'mail' in entry_attrs:
entry_attrs['mail'] = self.obj._normalize_email(entry_attrs['mail'], config)
+ if 'manager' in entry_attrs:
+ entry_attrs['manager'] = self.obj._normalize_manager(entry_attrs['manager'])
+
return dn
def post_callback(self, ldap, dn, entry_attrs, *keys, **options):
@@ -317,6 +354,7 @@ class user_add(LDAPCreate):
def_primary_group = config.get('ipadefaultprimarygroup')
group_dn = self.api.Object['group'].get_dn(def_primary_group)
ldap.add_entry_to_group(dn, group_dn)
+ self.obj._convert_manager(entry_attrs, **options)
return dn
api.register(user_add)
@@ -345,12 +383,15 @@ class user_mod(LDAPUpdate):
def pre_callback(self, ldap, dn, entry_attrs, attrs_list, *keys, **options):
if 'mail' in entry_attrs:
entry_attrs['mail'] = self.obj._normalize_email(entry_attrs['mail'])
+ if 'manager' in entry_attrs:
+ entry_attrs['manager'] = self.obj._normalize_manager(entry_attrs['manager'])
validate_nsaccountlock(entry_attrs)
return dn
def post_callback(self, ldap, dn, entry_attrs, *keys, **options):
if not 'nsaccountlock' in entry_attrs:
entry_attrs['nsaccountlock'] = [u'False']
+ self.obj._convert_manager(entry_attrs, **options)
return dn
api.register(user_mod)
@@ -379,6 +420,7 @@ class user_find(LDAPSearch):
def post_callback(self, ldap, entries, truncated, *args, **options):
for entry in entries:
(dn, attrs) = entry
+ self.obj._convert_manager(attrs, **options)
if not 'nsaccountlock' in attrs:
attrs['nsaccountlock'] = [u'False']
@@ -396,6 +438,7 @@ class user_show(LDAPRetrieve):
def post_callback(self, ldap, dn, entry_attrs, *keys, **options):
if not 'nsaccountlock' in entry_attrs:
entry_attrs['nsaccountlock'] = [u'False']
+ self.obj._convert_manager(entry_attrs, **options)
return dn
api.register(user_show)