Mise à jour du Script Syncro LDAP

Bonjour à tous,

J’essaie de mettre à jour le script de syncro LDAP sync_users_ldap2dolibarr.php qui se trouve dans le dossier /scripts/user

J’ai remarqué que l’update d’un utilisateur existant ne fonctionnait pas :
UserCreate # John Doe: login=john.doe, fullname=John Doe --> ERROR -6 ErrorLoginAlreadyExists

Dans le foreach, le code commande par $fuser = new User($db);

Suivi par :

if ($conf->global->LDAP_KEY_USERS == $conf->global->LDAP_FIELD_SID) {
	$fuser->fetch('', '', $ldapuser[$conf->global->LDAP_KEY_USERS]); // Chargement du user concerné par le SID
} elseif ($conf->global->LDAP_KEY_USERS == $conf->global->LDAP_FIELD_LOGIN) {
	$fuser->fetch('', $ldapuser[$conf->global->LDAP_KEY_USERS]); // Chargement du user concerné par le login
}

Et après il inscrit toutes les informations LDAP dans l’objet $fuser :
$fuser->lastname = $ldapuser[$conf->global->LDAP_FIELD_NAME];

Ensuite vient une condition if ($fuser->id > 0) pour soit mettre à jour l’utilisateur avec $fuser->update($user) si il a été trouvé dans le fetch ou le créer avec $fuser->create($user) si non trouvé.

Seulement, même si l’utilisateur est déjà présent, le $fuser->id est toujours à 0, donc il essaie de le créer et non de le mettre à jour.

J’en conclus donc que le fetch ne fonctionne pas.
Je ne trouve aucune documentation sur les objets $user et $fuser.

Si quelqu’un peut m’aider :wink:

Je pense avoir trouvé.
La fonction fetch recherche l’entrée $conf->global->LDAP_KEY_USERS en login… Si elle est égale à $conf->global->LDAP_FIELD_LOGIN

LDAP_KEY_USERS est la clé dans LDAP configuré dans le Module LDAP de dolibarr.
Or, sur un AD, si nous ne mettons pas cette clé sur l’attribue CN, il ne trouve aucun utilisateur avec le « TEST DE RECHERCHE LDAP ».
Aussi, sur la fiche utilisateur, et la fiche LDAP n’est pas trouvé.

Donc nous avons la LDAP_KEY_USERS en CN.
Ce qui ne correspond ni à LDAP_FIELD_SID, ni à LDAP_FIELD_LOGIN dans la condition du fetch

Il y a donc bien un problème avec cette condition.

Bon trouvé.
Dans le module LDAP, j’ai mis la clé LDAP sur le sAMAccountName (champ Identifiant (samba, activedirectory))
Et j’ai modifié la commande ldap->getRecord du script de syncro comme suit :
if ($conf->global->LDAP_SERVER_TYPE == ‹ activedirectory ›) {
$ldaprecords = $ldap->getRecords(’’, $conf->global->LDAP_USER_DN, ‹ cn ›, $required_fields, ‹ user ›); // Fiter on ‹ user › filter param
} else {
$ldaprecords = $ldap->getRecords(’
’, $conf->global->LDAP_USER_DN, $conf->global->LDAP_KEY_USERS, $required_fields, ‹ user ›); // Fiter on ‹ user › filter param
}

Là, le script de syncro des utilisateurs LDAP mais aussi celui des groupes LDAP fonctionnent parfaitement. (création, mise à jour, rattachement des utilisateurs ou groupes)