From 1fed8f2e4fcd3b2a08d2cf851ff7bb5f0707a8a0 Mon Sep 17 00:00:00 2001
From: Dominik George <dominik.george@teckids.org>
Date: Fri, 13 Nov 2020 17:49:41 +0100
Subject: [PATCH] Ignore missing LDAP fields on match

---
 aleksis/apps/ldap/util/ldap_sync.py | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/aleksis/apps/ldap/util/ldap_sync.py b/aleksis/apps/ldap/util/ldap_sync.py
index 381794e..19933d9 100644
--- a/aleksis/apps/ldap/util/ldap_sync.py
+++ b/aleksis/apps/ldap/util/ldap_sync.py
@@ -238,7 +238,12 @@ def ldap_sync_from_user(user, dn, attrs):
         # Match on all fields selected in preferences
         fields_map = {f.name: f for f in Person.syncable_fields()}
         for field_name in get_site_preferences()["ldap__matching_fields"]:
-            value = get_ldap_value_for_field(Person, fields_map[field_name], attrs, dn)
+            try:
+                value = get_ldap_value_for_field(Person, fields_map[field_name], attrs, dn)
+            except KeyError:
+                # Field is not set in LDAP, match on remaining fields
+                continue
+
             matches[field_name] = value
         # Pre-fill all mandatory non-matching fields from User object
         for missing_key in ("first_name", "last_name", "email"):
-- 
GitLab