From de1bba3695b58bc6d0be0be1d21f654e609ca89d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20P=C3=A9pin?= Date: Sun, 28 Jun 2020 23:48:20 +0200 Subject: [PATCH] Don't crash on LDAP errors --- shared/views/autocomplete.py | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/shared/views/autocomplete.py b/shared/views/autocomplete.py index 168abc4b..50d0d2c2 100644 --- a/shared/views/autocomplete.py +++ b/shared/views/autocomplete.py @@ -1,3 +1,4 @@ +import logging from collections import namedtuple from dal import autocomplete @@ -12,6 +13,9 @@ else: ldap = None +django_logger = logging.getLogger("django.request") + + class SearchUnit: """Base class for all the search utilities. @@ -128,17 +132,21 @@ class LDAPSearch(SearchUnit): if ldap is None or query == "(&)": return [] - ldap_obj = ldap.initialize(self.ldap_server_url) - res = ldap_obj.search_s( - self.domain_component, ldap.SCOPE_SUBTREE, query, self.search_fields - ) - return [ - Clipper( - clipper=attrs["uid"][0].decode("utf-8"), - fullname=attrs["cn"][0].decode("utf-8"), + try: + ldap_obj = ldap.initialize(self.ldap_server_url) + res = ldap_obj.search_s( + self.domain_component, ldap.SCOPE_SUBTREE, query, self.search_fields ) - for (_, attrs) in res - ] + return [ + Clipper( + clipper=attrs["uid"][0].decode("utf-8"), + fullname=attrs["cn"][0].decode("utf-8"), + ) + for (_, attrs) in res + ] + except ldap.LDAPError as err: + django_logger.error("An LDAP error occurred", exc_info=err) + return [] # ---