Use the user name from ldap to search for existing tryton user

ldap attributes can be case sensitive or insensitive, by using the login name
from ldap to search for the tryton user, then the mapping of users between ldap
and tryton should be one to one.

issue4385
review12781002
This commit is contained in:
David Harper committed 2014-12-08 17:54:24 +01:00
1 parent d0e7b3e0da
commit 11761b24a7
2 files changed
+16 -7

No files matched your search

+3 -1
View File
@@ -160,13 +160,15 @@ class User:
if users and len(users) == 1:
[(dn, attrs)] = users
if password and con.simple_bind_s(dn, password):
# Use ldap uid so we always get the right case
login = attrs.get(uid, [login])[0]
user_id, _ = cls._get_login(login)
if user_id:
LoginAttempt.remove(login)
return user_id
elif config.getboolean(section, 'create_user'):
user, = cls.create([{
'name': attrs.get(uid, [login])[0],
'name': login,
'login': login,
}])
return user.id
+13 -6
View File
@@ -42,26 +42,33 @@ class LDAPAuthenticationTestCase(unittest.TestCase):
con = initialize.return_value
con.simple_bind_s.return_value = True
if find:
ldap_search_user.return_value = [('dn', {})]
ldap_search_user.return_value = [('dn', {'uid': [find]})]
else:
ldap_search_user.return_value = None
return User.get_login(login, password)
# Test existing user
self.assertEqual(get_login('admin', 'admin', False), USER)
self.assertEqual(get_login('admin', 'admin', True), USER)
self.assertEqual(get_login('admin', 'admin', None), USER)
self.assertEqual(get_login('admin', 'admin', 'admin'), USER)
self.assertEqual(get_login('AdMiN', 'admin', 'admin'), USER)
# Test new user
self.assertFalse(get_login('foo', 'bar', False))
self.assertFalse(get_login('foo', 'bar', True))
self.assertFalse(get_login('foo', 'bar', None))
self.assertFalse(get_login('foo', 'bar', 'foo'))
# Test create new user
config.set(section, 'create_user', 'True')
user_id = get_login('foo', 'bar', True)
user_id = get_login('foo', 'bar', 'foo')
foo, = User.search([('login', '=', 'foo')])
self.assertEqual(user_id, foo.id)
self.assertEqual(foo.name, 'foo')
# Test create new user with different case
user_id = get_login('BaR', 'foo', 'bar')
bar, = User.search([('login', '=', 'bar')])
self.assertEqual(user_id, bar.id)
self.assertEqual(bar.name, 'bar')
def test_parse_ldap_url(self):
'Test parse_ldap_url'
self.assertEqual(