Added additional tests for user search results.
This fixes https://github.com/nginxinc/nginx-ldap-auth/issues/55. It was possible to perform successful bind with unknown user with recent versions of python-ldap, in case when LDAP server returned continuation object and allowed anonymous bind.
This commit is contained in:
		
							parent
							
								
									57fb98b528
								
							
						
					
					
						commit
						86687e2887
					
				|  | @ -228,13 +228,27 @@ class LDAPAuthHandler(AuthHandler): | ||||||
|                                           searchfilter, ['objectclass'], 1) |                                           searchfilter, ['objectclass'], 1) | ||||||
| 
 | 
 | ||||||
|             ctx['action'] = 'verifying search query results' |             ctx['action'] = 'verifying search query results' | ||||||
|             if len(results) < 1: | 
 | ||||||
|  |             nres = len(results) | ||||||
|  | 
 | ||||||
|  |             if nres < 1: | ||||||
|                 self.auth_failed(ctx, 'no objects found') |                 self.auth_failed(ctx, 'no objects found') | ||||||
|                 return |                 return | ||||||
| 
 | 
 | ||||||
|             ctx['action'] = 'binding as an existing user' |             if nres > 1: | ||||||
|             ldap_dn = results[0][0] |                 self.log_message("note: filter match multiple objects: %d, using first" % nres) | ||||||
|             ctx['action'] += ' "%s"' % ldap_dn | 
 | ||||||
|  |             user_entry = results[0] | ||||||
|  |             ldap_dn = user_entry[0] | ||||||
|  | 
 | ||||||
|  |             if ldap_dn == None: | ||||||
|  |                 self.auth_failed(ctx, 'matched object has no dn') | ||||||
|  |                 return | ||||||
|  | 
 | ||||||
|  |             self.log_message('attempting to bind using dn "%s"' % (ldap_dn)) | ||||||
|  | 
 | ||||||
|  |             ctx['action'] = 'binding as an existing user "%s"' % ldap_dn | ||||||
|  | 
 | ||||||
|             ldap_obj.bind_s(ldap_dn, ctx['pass'], ldap.AUTH_SIMPLE) |             ldap_obj.bind_s(ldap_dn, ctx['pass'], ldap.AUTH_SIMPLE) | ||||||
| 
 | 
 | ||||||
|             self.log_message('Auth OK for user "%s"' % (ctx['user'])) |             self.log_message('Auth OK for user "%s"' % (ctx['user'])) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue