@@ -124,6 +124,17 @@ def upsert_entry(l,entity):
124124 # lentree n existe pas
125125 #creation de la liste
126126 entry = u .make_entry_array_without_empty (entity )
127+ # employeeNumber est en général SINGLE-VALUE dans le schéma LDAP.
128+ # En cas de payload amont qui fournirait plusieurs valeurs,
129+ # on force ici une seule valeur pour éviter une violation de contrainte.
130+ if isinstance (entry .get ('employeeNumber' ), list ):
131+ for item in entry ['employeeNumber' ]:
132+ s = str (item ).strip ()
133+ if s != "" :
134+ entry ['employeeNumber' ] = s
135+ break
136+ else :
137+ entry ['employeeNumber' ] = ""
127138 ## Ajout objectclass
128139 entry ['objectclass' ]= u .make_objectclass (entity ,r )
129140 dn = compose_dn (entity )
@@ -139,7 +150,26 @@ def upsert_entry(l,entity):
139150 print (u .returncode (1 ,"many identities found" ))
140151 exit (1 )
141152 entry = u .make_entry_array_without_empty (entity );
153+ # Idem: forcer employeeNumber/employeenumber à une seule valeur avant conversion LDIF.
154+ # NB: `complete_entry()` lower-case ensuite les clés, d'où la gestion des deux cas.
155+ if isinstance (entry .get ('employeeNumber' ), list ):
156+ for item in entry ['employeeNumber' ]:
157+ s = str (item ).strip ()
158+ if s != "" :
159+ entry ['employeeNumber' ] = s
160+ break
161+ else :
162+ entry ['employeeNumber' ] = ""
163+
142164 entry = complete_entry (entry ,r );
165+ if isinstance (entry .get ('employeenumber' ), list ):
166+ for item in entry ['employeenumber' ]:
167+ s = str (item ).strip ()
168+ if s != "" :
169+ entry ['employeenumber' ] = s
170+ break
171+ else :
172+ entry ['employeenumber' ] = ""
143173 dn = compose_dn (entity )
144174 entry ['objectclass' ] = u .make_objectclass (entity ,r )
145175 entry = convert_to_utf8 (entry )
0 commit comments