# HG changeset patch # User Sylvain Thénault # Date 1475249762 -7200 # Node ID 96ced95e40025085d4a22e90a037cac84a931ae2 # Parent c7b2b809bf5051a1f8b7f0e96cf6b39969045e0d [ldap] Stop using entities table in ldap source authentication and parser We may used cwuri for the same purpose, and do one more step towards deletion of entities.extid column. Related to #15538288 diff -r c7b2b809bf50 -r 96ced95e4002 cubicweb/server/sources/ldapfeed.py --- a/cubicweb/server/sources/ldapfeed.py Wed Oct 26 11:24:57 2016 +0200 +++ b/cubicweb/server/sources/ldapfeed.py Fri Sep 30 17:36:02 2016 +0200 @@ -1,4 +1,4 @@ -# copyright 2003-2015 LOGILAB S.A. (Paris, FRANCE), all rights reserved. +# copyright 2003-2016 LOGILAB S.A. (Paris, FRANCE), all rights reserved. # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr # # This file is part of CubicWeb. @@ -262,11 +262,12 @@ except Exception: self.error('while trying to authenticate %s', user, exc_info=True) raise AuthenticationError() - eid = self.repo.system_source.extid2eid(cnx, user['dn'].encode('ascii')) - if eid is None or eid < 0: + rset = cnx.execute('Any X,SN WHERE X cwuri %(extid)s, X is CWUser, ' + 'X cw_source S, S name SN', {'extid': user['dn']}) + if not rset or rset[0][1] != self.uri: # user is not known or has been moved away from this source raise AuthenticationError() - return eid + return rset[0][0] def _connect(self, user=None, userpwd=None): protocol, host, port = self.connection_info() diff -r c7b2b809bf50 -r 96ced95e4002 cubicweb/server/test/unittest_ldapsource.py --- a/cubicweb/server/test/unittest_ldapsource.py Wed Oct 26 11:24:57 2016 +0200 +++ b/cubicweb/server/test/unittest_ldapsource.py Fri Sep 30 17:36:02 2016 +0200 @@ -292,7 +292,7 @@ self.assertEqual(e.cw_source[0].name, 'system') self.assertTrue(e.creation_date) self.assertTrue(e.modification_date) - source.pull_data(cnx) + source.pull_data(cnx, raise_on_error=True) rset = cnx.execute('CWUser X WHERE X login %(login)s', {'login': 'syt'}) self.assertEqual(len(rset), 1) self.assertTrue(self.repo.system_source.authenticate(cnx, 'syt', password='syt')) diff -r c7b2b809bf50 -r 96ced95e4002 cubicweb/sobjects/ldapparser.py --- a/cubicweb/sobjects/ldapparser.py Wed Oct 26 11:24:57 2016 +0200 +++ b/cubicweb/sobjects/ldapparser.py Fri Sep 30 17:36:02 2016 +0200 @@ -1,4 +1,4 @@ -# copyright 2011-2015 LOGILAB S.A. (Paris, FRANCE), all rights reserved. +# copyright 2011-2016 LOGILAB S.A. (Paris, FRANCE), all rights reserved. # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr # # This file is part of CubicWeb. @@ -120,8 +120,12 @@ def build_importer(self, raise_on_error): """Instantiate and configure an importer""" etypes = ('CWUser', 'EmailAddress', 'CWGroup') - extid2eid = dict((self.source.decode_extid(x), y) for x, y in - self._cw.system_sql('select extid, eid from entities where asource = %(s)s', {'s': self.source.uri})) + extid2eid = {} + for etype in etypes: + rset = self._cw.execute('Any XURI, X WHERE X cwuri XURI, X is {0},' + ' X cw_source S, S name %(source)s'.format(etype), + {'source': self.source.uri}) + extid2eid.update(dict((extid.encode('ascii'), eid) for extid, eid in rset)) existing_relations = {} for rtype in ('in_group', 'use_email', 'owned_by'): rql = 'Any S,O WHERE S {} O, S cw_source SO, SO eid %(s)s'.format(rtype)