# HG changeset patch # User Sylvain Thénault # Date 1270562677 -7200 # Node ID 834269261ae406f175eff30ff89196d34918877a # Parent 3684ccae5cdc300957399e5a0ded04bcd429ce43# Parent 35e6878e2fd07cf6eca2ca3acfd2dcfdd3462aae merge diff -r 35e6878e2fd0 -r 834269261ae4 server/sources/ldapuser.py --- a/server/sources/ldapuser.py Tue Apr 06 15:25:56 2010 +0200 +++ b/server/sources/ldapuser.py Tue Apr 06 16:04:37 2010 +0200 @@ -200,6 +200,7 @@ except KeyError: return # no email in ldap, we're done session = self.repo.internal_session() + execute = session.execute try: cursor = session.system_sql("SELECT eid, extid FROM entities WHERE " "source='%s'" % self.uri) @@ -210,20 +211,29 @@ if res: ldapemailaddr = res[0].get(ldap_emailattr) if ldapemailaddr: - rset = session.execute('EmailAddress A WHERE ' - 'U use_email X, U eid %(u)s', - {'u': eid}) + rset = execute('Any X,A WHERE ' + 'X address A, U use_email X, U eid %(u)s', + {'u': eid}) ldapemailaddr = unicode(ldapemailaddr) - for emailaddr, in rset: + for emaileid, emailaddr, in rset: if emailaddr == ldapemailaddr: break else: self.info('updating email address of user %s to %s', extid, ldapemailaddr) - if rset: - session.execute('SET X address %(addr)s WHERE ' - 'U primary_email X, U eid %(u)s', - {'addr': ldapemailaddr, 'u': eid}) + emailrset = execute('EmailAddress A WHERE A address %(addr)s', + {'addr': ldapemailaddr}) + if emailrset: + execute('SET U use_email X WHERE ' + 'X eid %(x)s, U eid %(u)s', + {'x': emailrset[0][0], 'u': eid}) + elif rset: + if not execute('SET X address %(addr)s WHERE ' + 'U primary_email X, U eid %(u)s', + {'addr': ldapemailaddr, 'u': eid}, 'u'): + execute('SET X address %(addr)s WHERE ' + 'X eid %(x)s', + {'addr': ldapemailaddr, 'x': rset[0][0]}, 'x') else: # no email found, create it _insert_email(session, ldapemailaddr, eid)