From 5f6189fc3dddf80f79976f415a8130dc65d9e820 Mon Sep 17 00:00:00 2001 From: Esa Jokinen Date: Mon, 25 Dec 2023 17:24:18 +0200 Subject: [PATCH] [FIX] users_ldap_groups: safe LDAP decode The group mapping in query mode fails if LDAP returns binary data in any of the fields. This adds a function that handles such situation by base64 encoding it. --- users_ldap_groups/models/res_company_ldap_operator.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/users_ldap_groups/models/res_company_ldap_operator.py b/users_ldap_groups/models/res_company_ldap_operator.py index 2436754a0c..65c00d24cf 100644 --- a/users_ldap_groups/models/res_company_ldap_operator.py +++ b/users_ldap_groups/models/res_company_ldap_operator.py @@ -32,10 +32,17 @@ def equals(self, ldap_entry, mapping): def query(self, ldap_entry, mapping): query_string = Template(mapping.value).safe_substitute( - {attr: ldap_entry[1][attr][0].decode() for attr in ldap_entry[1]} + {attr: self.safe_ldap_decode(ldap_entry[1][attr][0]) for attr in ldap_entry[1]} ) results = mapping.ldap_id._query(mapping.ldap_id.read()[0], query_string) _logger.debug('Performed LDAP query "%s" results: %s', query_string, results) return bool(results) + + def safe_ldap_decode(self, attr): + import base64 + try: + return attr.decode() + except: + return base64.b64encode(attr)