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:
1 parent
d0e7b3e0da
commit
11761b24a7
2 files changed
+16
-7
No files matched your search
@@ -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
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in new issue
Block a user