From fa63b4ac39c351464b68eced3ead61a8f1e8ce64 Mon Sep 17 00:00:00 2001
From: Julian Rother <julianr@fsmpi.rwth-aachen.de>
Date: Tue, 23 Feb 2021 01:51:20 +0100
Subject: [PATCH] Fixed relationship set and objectClass attribute handling for
 session.add

---
 ldap_mapper/core.py         | 2 ++
 ldap_mapper/relationship.py | 2 +-
 uffd/user/views_user.py     | 2 +-
 3 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/ldap_mapper/core.py b/ldap_mapper/core.py
index c5fcff11..57c8663e 100644
--- a/ldap_mapper/core.py
+++ b/ldap_mapper/core.py
@@ -60,12 +60,14 @@ class AddOperation:
 	def apply_object(self, obj_state):
 		obj_state.dn = self.dn
 		obj_state.attributes = {name: values.copy() for name, values in self.attributes.items()}
+		obj_state.attributes['objectClass'] = obj_state.attributes.get('objectClass', []) + list(self.object_classes)
 
 	def apply_session(self, session_state):
 		assert self.dn not in session_state.objects
 		session_state.objects[self.dn] = self.obj
 		for name, values in self.attributes.items():
 			session_state.ref(self.obj, name, values)
+		session_state.ref(self.obj, 'objectClass', self.object_classes)
 
 	def apply_ldap(self, conn):
 		success = conn.add(self.dn, self.object_classes, self.attributes)
diff --git a/ldap_mapper/relationship.py b/ldap_mapper/relationship.py
index d8e256aa..cf5e42bb 100644
--- a/ldap_mapper/relationship.py
+++ b/ldap_mapper/relationship.py
@@ -28,7 +28,7 @@ class RelationshipSet(MutableSet):
 
 	def __iter__(self):
 		def get(dn):
-			return make_modelobj(self.__ldap_object.session.get(dn, self.__model.ldap_filter_params), self.__destmodel)
+			return make_modelobj(self.__ldap_object.session.get(dn, self.__destmodel.ldap_filter_params), self.__destmodel)
 		dns = set(self.__ldap_object.getattr(self.__name))
 		return iter(filter(lambda obj: obj is not None, map(get, dns)))
 
diff --git a/uffd/user/views_user.py b/uffd/user/views_user.py
index 63f17cf4..18b380b0 100644
--- a/uffd/user/views_user.py
+++ b/uffd/user/views_user.py
@@ -105,11 +105,11 @@ def csvimport():
 			if not newuser.set_mail(row[1]):
 				flash("invalid mail address, skipped : {}".format(row))
 				continue
+			ldap.session.add(newuser)
 			for role in roles:
 				if (str(role.id) in row[2].split(';')) or role.name in current_app.config["ROLES_BASEROLES"]:
 					role.members.add(newuser)
 			newuser.update_groups()
-			ldap.session.add(newuser)
 			try:
 				ldap.session.commit()
 				db.session.commit()
-- 
GitLab