server/sources/ldapuser.py
branchstable
changeset 5994 97c55baefa0c
parent 5972 220856aff85e
child 6142 8bc6eac1fac1
child 6728 f68bd4c876d1
equal deleted inserted replaced
5976:00b1b6b906cf 5994:97c55baefa0c
   230                 res = self._search(session, extid, BASE)
   230                 res = self._search(session, extid, BASE)
   231                 self.debug('ldap search %s', res)
   231                 self.debug('ldap search %s', res)
   232                 if res:
   232                 if res:
   233                     ldapemailaddr = res[0].get(ldap_emailattr)
   233                     ldapemailaddr = res[0].get(ldap_emailattr)
   234                     if ldapemailaddr:
   234                     if ldapemailaddr:
       
   235                         if isinstance(ldapemailaddr, list):
       
   236                             ldapemailaddr = ldapemailaddr[0] # XXX consider only the first email in the list
   235                         rset = execute('Any X,A WHERE '
   237                         rset = execute('Any X,A WHERE '
   236                                        'X address A, U use_email X, U eid %(u)s',
   238                                        'X address A, U use_email X, U eid %(u)s',
   237                                        {'u': eid})
   239                                        {'u': eid})
   238                         ldapemailaddr = unicode(ldapemailaddr)
   240                         ldapemailaddr = unicode(ldapemailaddr)
   239                         for emaileid, emailaddr, in rset:
   241                         for emaileid, emailaddr, in rset:
   520             if eid:
   522             if eid:
   521                 self.warning('deleting ldap user with eid %s and dn %s',
   523                 self.warning('deleting ldap user with eid %s and dn %s',
   522                              eid, base)
   524                              eid, base)
   523                 entity = session.entity_from_eid(eid, 'CWUser')
   525                 entity = session.entity_from_eid(eid, 'CWUser')
   524                 self.repo.delete_info(session, entity, self.uri, base)
   526                 self.repo.delete_info(session, entity, self.uri, base)
   525                 self.reset_cache()
   527                 self.reset_caches()
   526             return []
   528             return []
   527         # except ldap.REFERRAL, e:
   529         # except ldap.REFERRAL, e:
   528         #     cnx = self.handle_referral(e)
   530         #     cnx = self.handle_referral(e)
   529         #     try:
   531         #     try:
   530         #         res = cnx.search_s(base, scope, searchstr, attrs)
   532         #         res = cnx.search_s(base, scope, searchstr, attrs)
   587         # search for existant email first
   589         # search for existant email first
   588         try:
   590         try:
   589             emailaddr = self._cache[dn][self.user_rev_attrs['email']]
   591             emailaddr = self._cache[dn][self.user_rev_attrs['email']]
   590         except KeyError:
   592         except KeyError:
   591             return
   593             return
       
   594         if isinstance(emailaddr, list):
       
   595             emailaddr = emailaddr[0] # XXX consider only the first email in the list
   592         rset = session.execute('EmailAddress X WHERE X address %(addr)s',
   596         rset = session.execute('EmailAddress X WHERE X address %(addr)s',
   593                                {'addr': emailaddr})
   597                                {'addr': emailaddr})
   594         if rset:
   598         if rset:
   595             session.execute('SET U primary_email X WHERE U eid %(u)s, X eid %(x)s',
   599             session.execute('SET U primary_email X WHERE U eid %(u)s, X eid %(x)s',
   596                             {'x': rset[0][0], 'u': entity.eid})
   600                             {'x': rset[0][0], 'u': entity.eid})